adaptationlayer/tsy/nokiatsy_dll/src/cmmphonebookstoreoperationlist.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmphonebookstoreoperationlist.cpp	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,418 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   ?Description
+*
+*/
+
+//  INCLUDE FILES
+#include <etelmm.h>
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+#include "tsylogger.h"
+
+#include "cmmphonebookstoreoperationlist.h"
+#include "cmmphonebookoperationinit.h"
+#include "cmmphonebookoperationinit3G_adn.h"
+#include "cmmphonebookoperationcache.h"
+#include "cmmphonebookoperationread.h"
+#include "cmmphonebookoperationwrite.h"
+#include "cmmphonebookoperationdelete.h"
+#include "cmmphonebookoperationcustom.h"
+
+//For CMmPhoneMessHandler::EServiceTableRequestTypePhonebookMBI
+#include "cmmphonemesshandler.h"
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmmphonebookstoreoperationlisttraces.h"
+#endif
+
+
+// EXTERNAL DATA STRUCTURES
+    // None
+
+// EXTERNAL FUNCTION PROTOTYPES
+    // None
+
+// CONSTANTS
+    // None
+
+// MACROS
+    // None
+
+// LOCAL CONSTANTS AND MACROS
+    // None
+
+// MODULE DATA STRUCTURES
+    // None
+
+// LOCAL FUNCTION PROTOTYPES
+    // None
+
+// ==================== LOCAL FUNCTIONS ======================================
+    // None
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::CMmPhoneBookStoreOperationList
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CMmPhoneBookStoreOperationList::CMmPhoneBookStoreOperationList()
+    {
+    TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::\
+        CMmPhoneBookStoreOperationList");
+    OstTrace0( TRACE_NORMAL, CMMPHONEBOOKSTOREOPERATIONLIST_CMMPHONEBOOKSTOREOPERATIONLIST, "CMmPhoneBookStoreOperationList::CMmPhoneBookStoreOperationList" );
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::~CMmPhoneBookStoreOperationList
+// C++ destructor.
+// ---------------------------------------------------------------------------
+//
+CMmPhoneBookStoreOperationList::~CMmPhoneBookStoreOperationList()
+    {
+    TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::\
+        ~CMmPhoneBookStoreOperationList");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKSTOREOPERATIONLIST_CMMPHONEBOOKSTOREOPERATIONLIST, "CMmPhoneBookStoreOperationList::~CMmPhoneBookStoreOperationList" );
+
+    iPtrOperationArray.Reset();
+    iPtrOperationArray.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::NewL
+// Two-phased constructor.
+// Creates a new CMmPhoneBookStoreOperationList object instance.
+// ---------------------------------------------------------------------------
+//
+CMmPhoneBookStoreOperationList* CMmPhoneBookStoreOperationList::NewL(
+    CMmPhoneBookStoreMessHandler* aMmPhoneBookStoreMessHandler,
+    CMmUiccMessHandler* aMmUiccMessHandler
+    )
+    {
+    TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::NewL");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKSTOREOPERATIONLIST_NEWL, "CMmPhoneBookStoreOperationList::NewL" );
+
+    CMmPhoneBookStoreOperationList* mmPhoneBookOperationList =
+        new( ELeave ) CMmPhoneBookStoreOperationList();
+
+    mmPhoneBookOperationList->iMmPhoneBookStoreMessHandler =
+        aMmPhoneBookStoreMessHandler;
+    
+    mmPhoneBookOperationList->iUiccMessHandler = aMmUiccMessHandler;
+
+    return mmPhoneBookOperationList;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::ConstructL
+// Initialises object attributes.
+// ---------------------------------------------------------------------------
+//
+void CMmPhoneBookStoreOperationList::ConstructL()
+    {
+    TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::ConstructL");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKSTOREOPERATIONLIST_CONSTRUCTL, "CMmPhoneBookStoreOperationList::ConstructL" );
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::Build
+// Separate request and create correct object
+// ---------------------------------------------------------------------------
+//
+CMmPhoneBookStoreOperationBase* CMmPhoneBookStoreOperationList::BuildL(
+    const CMmDataPackage* aDataPackage,
+    TInt aIpc
+    )
+    {
+    TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::Build");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKSTOREOPERATIONLIST_BUILDL, "CMmPhoneBookStoreOperationList::BuildL" );
+
+    CMmPhoneBookStoreOperationBase* pointer( NULL );
+
+    switch( aIpc )
+        {
+        case EMmTsyPhoneBookStoreInitIPC:
+            {
+            
+            // Get Card type from uiccmesshandler
+            // if SIM, phonebook is 2G and located under DFtelecom and ADN pb contains only name/number entries
+            // if USIM, phonebook can be 3G local or 3G private. ADN pb entry can contain additional entries
+            // 3G local is located under DFtelecom and 3G private under ADFusim, both have same structure however
+            // only the path is different? 7F10 vs. 7FFF
+            // Here in UICCCreateReq only 3G local has been handled
+            // So for both SIM and USIM Phonebook will be under DFtelecom (whose address is 7F10)
+            
+
+            // Chekc for Card type to Create Class for Phonebook Init
+            if(UICC_CARD_TYPE_UICC == iUiccMessHandler->GetCardType())
+                {
+                //call CmmPhonebookOperatorInit3G_ADN Phonebook
+                pointer = CMmPhoneBookOperationInit3G_adn::NewL(
+                        iMmPhoneBookStoreMessHandler,
+                        iUiccMessHandler,
+                        aDataPackage
+                        );
+                CleanupStack::PushL( pointer );
+                // Add pointer to array
+                iPtrOperationArray.AppendL( pointer );
+                CleanupStack::Pop( pointer );
+                
+                }
+            else if(UICC_CARD_TYPE_ICC ==  iUiccMessHandler->GetCardType())
+                {
+                //call CmmPhonebookOperatorInit
+                pointer = CMmPhoneBookOperationInit::NewL(
+                    iMmPhoneBookStoreMessHandler,
+                    iUiccMessHandler,
+                    aDataPackage
+                    );
+                CleanupStack::PushL( pointer );
+                // Add pointer to array
+                iPtrOperationArray.AppendL( pointer );
+                CleanupStack::Pop( pointer );
+                }
+            break;
+            }
+            /*
+        case EMmTsyPhoneBookStoreGetInfoIPC:
+        case EMmTsyPhoneBookStoreCacheIPC:
+            {
+            //call CmmPhonebookOperatorCache
+            pointer = CMmPhoneBookOperationCache::NewL(
+                iMmPhoneBookStoreMessHandler,
+                aIpc, aDataPackage );
+            CleanupStack::PushL( pointer );
+            // Add pointer to array
+            iPtrOperationArray.AppendL( pointer );
+            CleanupStack::Pop( pointer );
+            break;
+            }
+            */
+        case EMmTsyPhoneBookStoreReadIPC:
+#ifdef INTERNAL_RD_USIM_PHONEBOOK_GAS_AND_AAS
+        case ECustomReadAlphaStringIPC:
+#endif // INTERNAL_RD_USIM_PHONEBOOK_GAS_AND_AAS
+            {
+            //call CmmPhonebookOperatorRead
+            pointer = CMmPhoneBookOperationRead::NewL(
+                iMmPhoneBookStoreMessHandler,
+                aDataPackage );
+            CleanupStack::PushL( pointer );
+            // Add pointer to array
+            iPtrOperationArray.AppendL( pointer );
+            CleanupStack::Pop( pointer );
+            break;
+            }
+            /*
+        case EMmTsyPhoneBookStoreWriteIPC:
+
+#ifdef INTERNAL_RD_USIM_PHONEBOOK_GAS_AND_AAS
+        case ECustomWriteAlphaStringIPC:
+#endif // INTERNAL_RD_USIM_PHONEBOOK_GAS_AND_AAS
+            {
+            //call CmmPhonebookOperationWrite
+            pointer = CMmPhoneBookOperationWrite::NewL(
+                iMmPhoneBookStoreMessHandler,
+                aDataPackage );
+            CleanupStack::PushL( pointer );
+            // Add pointer to array
+            iPtrOperationArray.AppendL( pointer );
+            CleanupStack::Pop( pointer );
+            break;
+            }
+        case EMmTsyPhoneBookStoreDeleteIPC:
+        case EMmTsyPhoneBookStoreDeleteAllIPC:
+#ifdef INTERNAL_RD_USIM_PHONEBOOK_GAS_AND_AAS
+        case ECustomDeleteAlphaStringIPC:
+#endif // INTERNAL_RD_USIM_PHONEBOOK_GAS_AND_AAS
+            {
+            //call CmmPhonebookOperatorDelete
+            pointer = CMmPhoneBookOperationDelete::NewL(
+                iMmPhoneBookStoreMessHandler,
+                aDataPackage );
+            CleanupStack::PushL( pointer );
+            // Add pointer to array
+            iPtrOperationArray.AppendL( pointer );
+            CleanupStack::Pop( pointer );
+            break;
+            }
+        case EMobilePhoneGetMailboxNumbers:
+            {
+            pointer =  new ( ELeave )CMmPhonebookOperationCustom(
+                iMmPhoneBookStoreMessHandler );
+            CleanupStack::PushL( pointer );
+            // Add pointer to array
+            iPtrOperationArray.AppendL( pointer );
+            CleanupStack::Pop( pointer );
+            break;
+            }
+            */
+        default:
+            {
+            // Nothing to do here
+            TFLOGSTRING2("TSY: CMmPhoneBookStoreMessHandler::ExtFuncL - \
+                Unknown IPC: %d", aIpc);
+OstTrace1( TRACE_NORMAL, DUP2_CMMPHONEBOOKSTOREOPERATIONLIST_BUILDL, "CMmPhoneBookStoreOperationList::BuildL;Unknown aIpc=%d", aIpc );
+            break;
+            }
+        }
+
+    //return pointer to right operation
+    return pointer;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::Find
+// Search and returns object to correct operation
+// ---------------------------------------------------------------------------
+//
+CMmPhoneBookStoreOperationBase* CMmPhoneBookStoreOperationList::Find(
+    TUint8 aTrans,
+    const CMmPhoneBookStoreOperationBase* aSearchFrom/*=NULL*/ )
+    {
+    TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::Find");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKSTOREOPERATIONLIST_FIND, "CMmPhoneBookStoreOperationList::Find" );
+
+    CMmPhoneBookStoreOperationBase* basePointer( NULL );
+
+    // search correct pointer from array using aTrans
+    TUint ind( 0 );
+    if ( NULL != aSearchFrom )
+        {
+        // if object to search from specified, find its index at first
+        for ( ; ind < iPtrOperationArray.Count(); ind++ )
+            {
+            if ( aSearchFrom == iPtrOperationArray[ind] )
+                {
+                ind++;
+                break;
+                }
+            }
+        }
+    // looking for object with given transaction id
+    // starting index may be not 0 if aSearchFrom is specified
+    for ( ; ind < iPtrOperationArray.Count(); ind++)
+        {
+        if( ( iPtrOperationArray[ind] )->TransId() == aTrans )
+            {
+            basePointer = iPtrOperationArray[ind];
+            break;
+            }
+        }
+    // return pointer if found otherwise NULL
+    return basePointer;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::RemoveOperationFromList
+// Search and delete correct object from list
+// ---------------------------------------------------------------------------
+//
+void CMmPhoneBookStoreOperationList::RemoveOperationFromList(
+    TUint8 aTrans )  // transactionId
+    {
+    TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::\
+        RemoveOperationFromList");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKSTOREOPERATIONLIST_REMOVEOPERATIONFROMLIST, "CMmPhoneBookStoreOperationList::RemoveOperationFromList" );
+
+    TUint ind( 0 );
+    TUint operationCount( iPtrOperationArray.Count() );
+
+    // search correct pointer from array using aTrans
+    while ( ind < operationCount )
+        {
+        if( ( iPtrOperationArray[ind] )->TransId() == aTrans )
+            {
+            delete iPtrOperationArray[ind];
+            iPtrOperationArray.Remove( ind );
+            iPtrOperationArray.Compress();
+            TFLOGSTRING2("TSY: CMmPhoneBookStoreOperationList -Phonebook \
+                operation removed succesfully from index: %d" ,ind );
+            break;
+            }
+        ind++;
+        }
+    TF_ASSERT( ind < operationCount );
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::RemoveLastOperationFromList
+// Removes last operation from operation list.
+// ---------------------------------------------------------------------------
+//
+TInt CMmPhoneBookStoreOperationList::RemoveLastOperationFromList()
+    {
+TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::RemoveLastOperationFromList");
+OstTrace0( TRACE_NORMAL, CMMPHONEBOOKSTOREOPERATIONLIST_REMOVELASTOPERATIONFROMLIST, "CMmPhoneBookStoreOperationList::RemoveLastOperationFromList" );
+
+    TInt ret( KErrNone );
+    TInt count( iPtrOperationArray.Count() );
+
+    if ( 0 < count )
+        {
+        iPtrOperationArray.Remove( count - 1 );
+        }
+    else
+        {
+TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::RemoveLastOperationFromList - no operation to remove");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKSTOREOPERATIONLIST_REMOVELASTOPERATIONFROMLIST, "CMmPhoneBookStoreOperationList::RemoveLastOperationFromList - no operation to remove" );
+
+        ret = KErrNotFound;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPhoneBookStoreOperationList::CalculateTransactionId
+// Calculates transaction Id from IPC number and data package
+// ---------------------------------------------------------------------------
+//
+TInt CMmPhoneBookStoreOperationList::CalculateTransactionId(
+    TInt aIpc,
+    const CMmDataPackage* /*aDataPackage*/,
+    TUint8& /*aTransactionId*/
+    )
+    {
+    TInt ret( KErrNone );
+
+    TFLOGSTRING2("TSY: CMmPhoneBookStoreOperationList::CalculateTransactionId;aIpc=%d", aIpc);
+OstTrace1( TRACE_NORMAL, CMMPHONEBOOKSTOREOPERATIONLIST_CALCULATETRANSACTIONID, "CMmPhoneBookStoreOperationList::CalculateTransactionId;aIpc=%d", aIpc );
+
+    switch ( aIpc )
+        {
+        	/*
+        case EMmTsyPhoneBookStoreGetInfoIPC:
+        case EMmTsyPhoneBookStoreCacheIPC:
+            {
+            ret = CMmPhoneBookOperationCache::CalculateTransactionId(
+                      aIpc, aDataPackage, aTransactionId );
+            break;
+            }
+            */
+        default:
+            {
+            TFLOGSTRING("TSY: CMmPhoneBookStoreOperationList::CalculateTransactionId;unknown ipc");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKSTOREOPERATIONLIST_CALCULATETRANSACTIONID, "CMmPhoneBookStoreOperationList::CalculateTransactionId; unknown ipc" );
+            ret = KErrNotSupported;
+            }
+        }
+
+    return ret;
+    }
+
+// End of File