phonebookengines/VirtualPhonebook/inc/CVPbkETelCntConverter.h
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/inc/CVPbkETelCntConverter.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* 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:  A class that can convert sim contacts to etel contacts and vice
+*                versa
+*
+*/
+
+
+
+#ifndef CVPBKETELCNTCONVERTER_H
+#define CVPBKETELCNTCONVERTER_H
+
+//  INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CPhoneBookBuffer;
+class CVPbkSimContactBuf;
+class CVPbkSimContact;
+class CVPbkSimCntField;
+class MVPbkSimCntStore;
+
+// CLASS DECLARATION
+
+/**
+*  A class that can convert sim contacts to etel contacts and vice versa.
+*
+*  @lib VPbkSimStoreImpl.lib
+*/
+class CVPbkETelCntConverter : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @return a new instance of this class
+        */
+        IMPORT_C static CVPbkETelCntConverter* NewL();
+
+        /**
+        * Two-phased constructor.
+        * @return a new instance of this class
+        */
+        IMPORT_C static CVPbkETelCntConverter* NewLC();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CVPbkETelCntConverter();
+
+    public: // New functions
+        
+        /**
+        * Converts ETel contacts to VPbk SIM contacts.
+        * @param aResultArray an array for the converted contacts.
+        *        After the call the array contains a contact or contacts
+        * @param aETelContactData an ETel data buffer that can contain one
+        *        contact or contacts
+        * @param aSimStore the sim store in which the contacts belongs
+        */
+        void ConvertFromETelToVPbkSimContactsL( 
+            RPointerArray<CVPbkSimContactBuf>& aResultArray,
+            TDes8& aETelContactData,
+            MVPbkSimCntStore& aSimStore ) const;
+
+        /**
+        * Converts one ETel contact to one VPbk SIM contact.
+        * @param aETelContact one ETel contact. Sim index is not necessary.
+        * @param aEmptyContact an empty contact that is filled
+        * @exception KErrBadDescriptor if contact header is not found
+        */
+        void ConvertFromETelToVPbkSimContactL( TDes8& aETelContact,
+            CVPbkSimContact& aEmptyContact ) const;
+
+        /**
+        * Converts VPbk SIM fields to one ETel contact.
+        * @param aFieldArray an array of VPbk SIM fields
+        * @param aSimIndex the sim index of the contact that owns fields
+        * @return a buffer containing an ETel contact
+        */
+        HBufC8* ConvertFromVPbkSimFieldsToETelCntLC( 
+            const TArray<CVPbkSimCntField*>& aFieldArray, 
+            TInt aSimIndex ) const;
+
+        /**
+        * Finds the sim index from the ETel contact
+        * @param aETelContact a buffer containing one ETel contact
+        * @return sim index of the contact, KVPbkSimStoreFirstFreeIndex
+        *   if not found, KErrBadDescriptor if descriptor is invalid
+        */
+        TInt SimIndex( TDes8& aETelContact ) const;
+        
+        /**
+        * Gets the amount of supported fields in the ETel contact
+        * @param aETelContact a buffer containing one ETel contact
+        * @return the amount of supported fields (TVPbkSimCntFieldType)
+        *         or KErrBadDescriptor if aETelContact is not valid.
+        */
+        TInt FieldCount( TDes8& aETelContact ) const;
+
+        /**
+        * Sets the field data to the given field
+        * @param aETelContact a buffer containing one ETel contact
+        * @param aIndex the index of the field in the contact
+        * @param aField the field that will be set by the function
+        */
+        void FieldAt( TDes8& aETelContact, TInt aIndex, 
+            CVPbkSimCntField& aField ) const;
+
+    private: // Construction
+
+        /**
+        * C++ default constructor.
+        */
+        CVPbkETelCntConverter();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private: // New functions
+        TBool MoveToNextContact() const;
+        TInt StartRead() const;
+        TBool GetNextField( CVPbkSimCntField& aField ) const;
+        TInt NumberOfFields() const;
+        TPtrC8 GetNextContactData( TDes8& aBuffer ) const;
+        TInt DoFieldCount( TDes8& aETelContact, TInt& aError ) const;
+        
+    private:    // Data
+        /// Own: the ETel buffer for reading/writing an ETel contact
+        CPhoneBookBuffer* iETelBuffer;
+        /// The length of the new entry tag
+        TInt iNewEntryTagLength;
+        /// The length of the contact that has a sim index but no fields
+        TInt iMinContactLength;
+    };
+
+// CleanupStack helpers for item owning RPointerArrays
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL(T& aRef)
+        { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); }
+private:
+    inline static void ResetAndDestroy(TAny *aPtr)
+        { static_cast<T*>(aPtr)->ResetAndDestroy(); }
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+    { CleanupResetAndDestroy<T>::PushL(aRef); }
+
+#endif      // CVPBKETELCNTCONVERTER_H
+            
+// End of File