richcallsettingsengine/rcse2/inc/rcsedbimporter.h
branchRCL_3
changeset 22 d38647835c2e
parent 0 a4daefaec16c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/richcallsettingsengine/rcse2/inc/rcsedbimporter.h	Wed Sep 01 12:29:57 2010 +0100
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  RCSE Settings Import from DBMS
+*
+*/
+
+
+
+#ifndef C_RCSEDBIMPORTER_H
+#define C_RCSEDBIMPORTER_H
+
+
+#include <e32base.h>
+#include <d32dbms.h>
+
+#include "crcseprofileentry.h"
+#include "crcseaudiocodecentry.h"
+
+
+/**  Struct for mapping old and new ids of entries */
+class TRCSEIdPair
+    {
+public:
+    TUint32 iOldId;
+    TUint32 iNewId;
+    };
+
+/**
+ *  Utility class that imports rcse settings from database and
+ *  stores them to central repository.
+ *
+ *  Enables the restoring of voip settings from previous SW versions.
+ *
+ *  @code
+ *   if ( CRCSEDbImporter::ImportExists() && 
+          !CRCSEDbImporter::IsImportRunning() )
+        {
+        CRCSEDbImporter* importer = CRCSEDbImporter::NewLC();
+        importer->ImportAndStoreL();
+        CleanupStack::PopAndDestroy( importer );
+        }
+
+ *  @endcode
+ *
+ *  @lib rcse.lib
+ *  @since S60 v3.2
+ */
+class CRCSEDbImporter : public CBase
+    {
+
+public:
+
+    static CRCSEDbImporter* NewL();
+
+    static CRCSEDbImporter* NewLC();
+
+    /**
+    * Destructor.
+    */
+    virtual ~CRCSEDbImporter();
+
+    /**
+     * Check if there is imported (restored) rcse database file.
+     *
+     * @since S60 v3.2
+     * @return ETrue if imported db file found
+     */
+    static TBool ImportExists();
+
+    /**
+     * Check if there is import operation already started.
+     *
+     * @since S60 v3.2
+     * @return ETrue if import is already ongoing
+     */
+    static TBool IsImportRunning();
+
+    /**
+     * Imports rcse entries from database and stores them to repository.
+     *
+     * @since S60 v3.2
+     */
+    void ImportAndStoreL();
+
+private:
+
+    CRCSEDbImporter();
+
+    void ConstructL();
+
+    /**
+     * Sets lock that prevents other instances to start import operation.
+     *
+     * @since S60 v3.2
+     */
+    void SetImportLock();
+    
+    /**
+     * Release import lock.
+     *
+     * @since S60 v3.2
+     */
+    void ReleaseImportLock();
+
+    /**
+     * Imports RCSE profile entries from database to the iProfiles array.
+     *
+     * @since S60 v3.2
+     */
+    void ImportVoIPProfilesL();
+
+    /**
+     * Imports RCSE audio codec entries from database to the iCodecs array.
+     *
+     * @since S60 v3.2
+     */
+    void ImportAudioCodecsL();
+
+    /**
+     * Deletes all imported db files
+     *
+     * @since S60 v3.2
+     */
+    void DeleteImports();
+
+    /**
+     * Maps data from database query to profile entry.
+     *
+     * @since S60 v3.2
+     * @param aColumnIndex Column that is mappped.
+     * @param aView Query results.
+     * @param aEntry Data from requested column is mapped and
+     *               stored to this entry.
+     */
+    void MapColumnToEntryL( TInt aColumnIndex, 
+                            const RDbView& aView, 
+                            CRCSEProfileEntry& aEntry );
+
+    /**
+     * Maps data from database query to audio codec entry.
+     *
+     * @since S60 v3.2
+     * @param aColumnIndex Column that is mappped.
+     * @param aView Query results.
+     * @param aEntry Data from requested column is mapped and
+     *               stored to this entry.
+     */
+    void MapColumnToEntryL( TInt aColumnIndex, 
+                            const RDbView& aView, 
+                            CRCSEAudioCodecEntry& aEntry );
+
+
+    /**
+     * Reads TSettingIds structs from given descriptor to array.
+     *
+     * @since S60 v3.2
+     * @param aNumbers Descriptor containing TSettingIds structs.
+     * @param aArray Container for TSettingIds structs.
+     */
+    void GetProfileIdsFromDescriptorL( const TDesC& aNumbers,
+                                       RArray<TSettingIds>& aArray );
+
+
+
+    /**
+     * Reads IDs from given descriptor to array.
+     *
+     * @since S60 v3.2
+     * @param aNumbers Descriptor containing list of IDs.
+     * @param aArray Container for IDs.
+     */
+    template<class T>
+    void GetNumbersFromDescriptorL( const TDesC& aNumbers,
+                                    RArray<T>& aArray );
+
+
+    /**
+     * Updates new preferred audio codec IDs to imported VoIP 
+     * profile entries.
+     *
+     * @since S60 v3.2
+     */
+    void UpdatePreferredCodecs();
+
+    /**
+     * Stores imported voip profiles.
+     *
+     * @since S60 v3.2
+     */
+    void StoreVoIPProfilesL();
+
+    /**
+     * Stores imported audio codecs.
+     *
+     * @since S60 v3.2
+     */
+    void StoreAudioCodecsL();
+
+
+
+private: // data
+
+    /**
+     * Database object.
+     * Own.
+     */
+    RDbNamedDatabase iDb;
+
+    /**
+     * Database session.
+     * Own.
+     */
+    RDbs iDbSession;
+
+    /**
+     * Container for imported VoIP profiles.
+     * Own.
+     */
+    RPointerArray<CRCSEProfileEntry> iProfiles;
+
+    /**
+     * Container for imported Audio Codecs.
+     * Own.
+     */
+    RPointerArray<CRCSEAudioCodecEntry> iCodecs;
+
+    /**
+     * An array for pairs of old and new codec IDs
+     * Own.
+     */
+    RArray<TRCSEIdPair> iCodecIds;
+
+private:
+    // For testing
+    #ifdef TEST_EUNIT
+        friend class UT_CRCSEDbImporter;
+    #endif                                  
+
+
+
+    };
+
+
+
+#endif // C_RCSEDBIMPORTER_H