--- /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