--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CVPbkSimContact.cpp Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,297 @@
+/*
+* 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: The sim contact
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <featmgr.h>
+#include "CVPbkSimContact.h"
+
+#include "CVPbkSimCntField.h"
+#include "MVPbkSimCntStore.h"
+#include "CVPbkETelCntConverter.h"
+#include "VPbkSimStoreTemplateFunctions.h"
+#include "VPbkSimStoreImplError.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::CVPbkSimContact
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CVPbkSimContact::CVPbkSimContact( MVPbkSimCntStore& aSimStore )
+: CVPbkSimContactBase( aSimStore ),
+ iSimIndex( KVPbkSimStoreFirstFreeIndex )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CVPbkSimContact::ConstructL( const TDesC8* aETelContact )
+ {
+ if ( aETelContact )
+ {
+ SetL( *aETelContact );
+ if( FeatureManager::FeatureSupported( KFeatureIdFfTdClmcontactreplicationfromphonebooktousimcard ) )
+ {
+ IndentifyAdditionalFields();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CVPbkSimContact* CVPbkSimContact::NewL( const TDesC8& aETelContact,
+ MVPbkSimCntStore& aSimStore )
+ {
+ CVPbkSimContact* self = NewLC( aETelContact, aSimStore );
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CVPbkSimContact* CVPbkSimContact::NewL( MVPbkSimCntStore& aSimStore )
+ {
+ CVPbkSimContact* self = NewLC( aSimStore );
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CVPbkSimContact* CVPbkSimContact::NewLC( const TDesC8& aETelContact,
+ MVPbkSimCntStore& aSimStore )
+ {
+ CVPbkSimContact* self = new( ELeave ) CVPbkSimContact( aSimStore );
+ CleanupStack::PushL( self );
+ self->ConstructL( &aETelContact );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CVPbkSimContact* CVPbkSimContact::NewLC( MVPbkSimCntStore& aSimStore )
+ {
+ CVPbkSimContact* self = new( ELeave ) CVPbkSimContact( aSimStore );
+ CleanupStack::PushL( self );
+ self->ConstructL( NULL );
+ return self;
+ }
+
+// Destructor
+CVPbkSimContact::~CVPbkSimContact()
+ {
+ iFieldArray.ResetAndDestroy();
+ iFieldArray.Close();
+ delete iData;
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::CreateFieldLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CVPbkSimCntField* CVPbkSimContact::CreateFieldLC(
+ TVPbkSimCntFieldType aType ) const
+ {
+ return CVPbkSimCntField::NewLC( aType, *this );
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::DeleteField
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CVPbkSimContact::DeleteField( TInt aIndex )
+ {
+ delete iFieldArray[aIndex];
+ iFieldArray.Remove( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::AddFieldL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CVPbkSimContact::AddFieldL( CVPbkSimCntField* aField )
+ {
+ if ( aField )
+ {
+ iFieldArray.AppendL( aField );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::DeleteAllFields
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CVPbkSimContact::DeleteAllFields()
+ {
+ for ( TInt i = iFieldArray.Count() - 1; i >= 0; --i )
+ {
+ // Destroys instances but doesn't free the array memory
+ DeleteField( i );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::SaveL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MVPbkSimStoreOperation* CVPbkSimContact::SaveL(
+ MVPbkSimContactObserver& aObserver )
+ {
+ __ASSERT_DEBUG( iFieldArray.Count() > 0,
+ VPbkSimStoreImpl::Panic( VPbkSimStoreImpl::EZeroFieldCount ) );
+ // Convert to ETel contact
+ CreateETelContactL();
+ return iStore.SaveL( *iData, iSimIndex, aObserver );
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::SetSimIndex
+// -----------------------------------------------------------------------------
+//
+void CVPbkSimContact::SetSimIndex( TInt aSimIndex )
+ {
+ iSimIndex = aSimIndex;
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::ConstFieldAt
+// -----------------------------------------------------------------------------
+//
+const CVPbkSimCntField& CVPbkSimContact::ConstFieldAt( TInt aIndex ) const
+ {
+ return *iFieldArray[aIndex];
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::FieldCount
+// -----------------------------------------------------------------------------
+//
+TInt CVPbkSimContact::FieldCount() const
+ {
+ return iFieldArray.Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::SimIndex
+// -----------------------------------------------------------------------------
+//
+TInt CVPbkSimContact::SimIndex() const
+ {
+ return iSimIndex;
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::ETelContactL
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CVPbkSimContact::ETelContactL() const
+ {
+ CreateETelContactL();
+ return *iData;
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::SetL
+// -----------------------------------------------------------------------------
+//
+void CVPbkSimContact::SetL( const TDesC8& aETelContact )
+ {
+ iFieldArray.ResetAndDestroy();
+
+ HBufC8* buf = aETelContact.AllocLC();
+ TPtr8 ptr( buf->Des() );
+ iStore.ContactConverter().ConvertFromETelToVPbkSimContactL(
+ ptr, *this );
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::IndentifyAdditionalFields()
+// -----------------------------------------------------------------------------
+//
+void CVPbkSimContact::IndentifyAdditionalFields()
+ {
+ TInt anrNumberFieldCount = 0;
+ for( int i = 0; i < iFieldArray.Count(); i ++ )
+ {
+ if( iFieldArray[i]->Type() == EVPbkSimAdditionalNumber )
+ {
+ anrNumberFieldCount ++;
+ switch( anrNumberFieldCount )
+ {
+ case 1:
+ iFieldArray[i]->SetType( EVPbkSimAdditionalNumber1 );
+ break;
+ case 2:
+ iFieldArray[i]->SetType( EVPbkSimAdditionalNumber2 );
+ break;
+ case 3:
+ iFieldArray[i]->SetType( EVPbkSimAdditionalNumber3 );
+ break;
+ default:
+ iFieldArray[i]->SetType( EVPbkSimAdditionalNumberLast );
+ break;
+ }
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVPbkSimContact::CreateETelContactL
+// -----------------------------------------------------------------------------
+//
+void CVPbkSimContact::CreateETelContactL() const
+ {
+ // Convert to ETel contact
+ HBufC8* buf =
+ iStore.ContactConverter().ConvertFromVPbkSimFieldsToETelCntLC(
+ iFieldArray.Array(), iSimIndex );
+
+ if (!iData)
+ {
+ iData = buf;
+ CleanupStack::Pop(buf);
+ }
+ else
+ {
+ TPtr8 ptr( iData->Des() );
+ VPbkSimStoreImpl::CheckAndUpdateBufferSizeL( iData, ptr, buf->Length() );
+ ptr.Copy( *buf );
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+
+// End of File