phonebookui/Phonebook2/MigrationSupport/src/CPbk2MigrationSupport.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/MigrationSupport/src/CPbk2MigrationSupport.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2002-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:  Migration support for Phonebook 2.
+*
+*/
+
+
+// INCLUDES
+#include "CPbk2MigrationSupport.h"
+
+// Phonebook 2
+#include <CPbk2ViewState.h>
+
+// Virtual Phonebook
+#include <CVPbkContactIdConverter.h>
+#include <CVPbkContactManager.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <MVPbkContactStoreList.h>
+#include <CVPbkContactLinkArray.h>
+#include <VPbkContactStoreUris.h>
+
+// Phonebook 1
+#include <CPbkViewState.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+#ifdef _DEBUG
+
+enum TPanicCode
+    {
+    EPanicPreCond_ConstructL = 1,
+    EPanicPreCond_NewL
+    };
+
+void Panic(TPanicCode aPanicCode)
+    {
+    _LIT(KPanicText, "CPbk2MigrationSupport");
+    User::Panic(KPanicText, aPanicCode);
+    };
+
+#endif // _DEBUG
+
+} /// namespace
+
+
+// --------------------------------------------------------------------------
+// CPbk2MigrationSupport::CPbk2MigrationSupport
+// --------------------------------------------------------------------------
+//
+inline CPbk2MigrationSupport::CPbk2MigrationSupport
+        ( CVPbkContactManager* aContactManager ) :
+            iContactManager( *aContactManager )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MigrationSupport::~CPbk2MigrationSupport
+// --------------------------------------------------------------------------
+//
+CPbk2MigrationSupport::~CPbk2MigrationSupport()
+    {
+    delete iIdConverter;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MigrationSupport::NewL
+// --------------------------------------------------------------------------
+//
+CPbk2MigrationSupport* CPbk2MigrationSupport::NewL( TAny* aParam )
+    {
+    __ASSERT_DEBUG( aParam, Panic( EPanicPreCond_NewL ) );
+
+    CVPbkContactManager* contactManager =
+        static_cast<CVPbkContactManager*>( aParam );
+
+    CPbk2MigrationSupport* self =
+        new ( ELeave ) CPbk2MigrationSupport( contactManager );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MigrationSupport::ConstructL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2MigrationSupport::ConstructL()
+    {
+    // Find Contacts Model store URI from the contact manager
+    TVPbkContactStoreUriPtr uri( VPbkContactStoreUris::DefaultCntDbUri() );
+    MVPbkContactStore* defaultStore =
+            iContactManager.ContactStoresL().Find( uri );
+    User::LeaveIfNull( defaultStore );
+    iIdConverter = CVPbkContactIdConverter::NewL( *defaultStore );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2MigrationSupport::ConvertViewStateL
+// --------------------------------------------------------------------------
+//
+void CPbk2MigrationSupport::ConvertViewStateL
+        ( const TDesC8& aCustomMessage, CPbk2ViewState& aViewState )
+    {
+    CPbkViewState* viewState = CPbkViewState::NewLC( aCustomMessage );
+
+    // 1. Convert a contact id to a contact link for focus
+    // TContactItemId FocusedContactId()
+    //      -> void SetFocusedContact( MVPbkContactLink* aContact )
+    if ( viewState->FocusedContactId() != KNullContactId )
+        {
+        MVPbkContactLink* focusIdLink = iIdConverter->IdentifierToLinkLC(
+                viewState->FocusedContactId() );
+        aViewState.SetFocusedContact( focusIdLink );
+        CleanupStack::Pop(); // focusIdLink
+        }
+
+    // 2. Convert a contact id to contact link for top focus
+    // TContactItemId TopContactId()
+    //      -> void SetTopContact( MVPbkContactLink* aTopContact )
+    if ( viewState->TopContactId() != KNullContactId )
+        {
+        MVPbkContactLink* topIdLink = iIdConverter->IdentifierToLinkLC(
+                viewState->TopContactId() );
+        aViewState.SetFocusedContact( topIdLink );
+        CleanupStack::Pop(); // topIdLink
+        }
+
+    // 3. Convert a contact id to contact link for setting parent contact
+    // TContactItemId ParentContactId()
+    //      -> void SetParentContact( MVPbkContactLink* aParentContact )
+    if ( viewState->ParentContactId() != KNullContactId )
+        {
+        MVPbkContactLink* parentIdLink = iIdConverter->IdentifierToLinkLC(
+                viewState->ParentContactId() );
+        aViewState.SetFocusedContact( parentIdLink );
+        CleanupStack::Pop(); // parentIdLink
+        }
+
+    // 4. Convert a contact id array to contact link array
+    //    for marking contacts
+    // CContactIdArray* MarkedContactIds()
+    //      -> void SetMarkedContacts( MVPbkContactLinkArray* aArray )
+    if (viewState->MarkedContactIds())
+        {
+        CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewLC();
+        CContactIdArray* ids = viewState->MarkedContactIds();
+        for( TInt i = 0; i < ids->Count(); ++i )
+            {
+            TContactItemId cid = ( *ids )[i];
+            MVPbkContactLink* markedIdLink =
+                iIdConverter->IdentifierToLinkLC( cid );
+            linkArray->AppendL( markedIdLink );
+            CleanupStack::Pop(); // markedIdLink
+            }
+        aViewState.SetMarkedContacts( linkArray );
+        CleanupStack::Pop(); // linkArray
+        }
+
+    // 5. Convert a field index to a field index for focus
+    // TInt FocusedFieldIndex()
+    //      -> void SetFocusedFieldIndex( TInt aIndex )
+    aViewState.SetFocusedFieldIndex( viewState->FocusedFieldIndex() );
+
+    // 6. Convert a top index to a index for top focus
+    // TInt TopFieldIndex()
+    //      -> void SetTopFieldIndex( TInt aIndex )
+    aViewState.SetTopFieldIndex( viewState->TopFieldIndex() );
+
+    // 7. Convert flags to flags
+    // TUint Flags()
+    //      -> void SetFlags( TUint aFlags )
+    aViewState.SetFlags( viewState->Flags() );
+
+    CleanupStack::PopAndDestroy( viewState );
+    }
+
+// End of File