--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ccservices/cmsservices/cmsengine/tsrc/contactcreator/Server/src/creatorserver.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,664 @@
+/*
+* Copyright (c) 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:
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <cntdb.h>
+#include <e32std.h>
+#include <spentry.h>
+#include <flogger.h>
+#include <barsread.h>
+#include <VPbkEng.rsg>
+#include <spsettings.h>
+#include <spproperty.h>
+#include <spdefinitions.h>
+#include <MVPbkFieldType.h>
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactStore.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkContactViewBase.h>
+#include <VPbkContactStoreUris.h>
+#include <TVPbkFieldTypeMapping.h>
+#include <CVPbkDefaultAttribute.h>
+#include <MVPbkContactOperationBase.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactFieldDateTimeData.h>
+#include <MVPbkContactFieldBinaryData.h>
+#include "contactdata.h"
+#include "creatorserver.h"
+#include "creatordefines.h"
+#include "cmstestercontactcreator.h"
+#include <MVPbkContactFieldUriData.h>
+
+// ----------------------------------------------------------
+// CCreatorServer::CCreatorServer
+//
+// ----------------------------------------------------------
+//
+CCreatorServer::CCreatorServer()
+ {
+ iContactCountXsp = 0;
+ iContactCountDefault = 0;
+ }
+
+// ----------------------------------------------------------
+// CCreatorServer::New
+//
+// ----------------------------------------------------------
+//
+CCreatorServer* CCreatorServer::NewL( const TDesC& aStoreUri )
+ {
+ CCreatorServer* self = new CCreatorServer();
+ CleanupStack::PushL( self );
+ self->ConstructL( aStoreUri );
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ----------------------------------------------------------
+// CCreatorServer::New
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::ConstructL( const TDesC& aStoreUri )
+ {
+ User::LeaveIfError( iFileSession.Connect() );
+ iContactCreator = CCmsTesterContactCreator::NewL( iFileSession, aStoreUri );
+ using namespace VPbkContactStoreUris;
+ iDefaultStore = aStoreUri.Compare( DefaultCntDbUri() ) == 0 ? ETrue : EFalse;
+ }
+
+// ----------------------------------------------------------
+// CCreatorServer::CCreatorServer
+//
+// ----------------------------------------------------------
+//
+CCreatorServer::~CCreatorServer()
+ {
+ if( iContactView )
+ iContactView->RemoveObserver( *this );
+ delete iContact;
+ delete iContactView;
+ delete iContactCreator;
+ iFileSession.Close();
+ }
+
+// ----------------------------------------------------
+// CCreatorServer::FileSession
+//
+// ----------------------------------------------------
+//
+RFs& CCreatorServer::FileSession()
+ {
+ return iFileSession;
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::CreateContactsL
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::CreateContactsL()
+ {
+ iContactCreator->InitStoresL( *this );
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::ContactViewReady
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::ContactViewReady( MVPbkContactViewBase& aView )
+ {
+ #ifdef _DEBUG
+ WriteToLog( _L8( "CCreatorServer::ContactViewReady() - Contact count: %d" ), aView.ContactCountL() );
+ #endif
+
+ iContactView = &aView;
+ if( iContactView->ContactCountL() <= 0 )
+ {
+ iDefaultStore ? CreateDefaultContactL() : CreateXSPContactL();
+ }
+ else CActiveScheduler::Stop();
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::CreateXSPContactL
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::CreateXSPContactL()
+ {
+#ifdef _DEBUG
+ WriteToLog( _L8( "CCreatorServer::CreateXSPContactL()" ) );
+#endif
+
+ MVPbkContactStore& store = iContactCreator->ContactStore();
+ CVPbkContactManager& manager = iContactCreator->ContactManager();
+ iContact = store.CreateNewContactLC();
+ CleanupStack::Pop(); //iContact
+
+ const MVPbkFieldType* fieldType1 = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME );
+ MVPbkStoreContactField* field1 = iContact->CreateFieldLC( *fieldType1 );
+ MVPbkContactFieldTextData::Cast( field1->FieldData() ).SetTextL( TPtrC( KFirstNameArrayXSP[iContactCountXsp] ) );
+ iContact->AddFieldL( field1 );
+ CleanupStack::Pop(); //field1
+
+ const MVPbkFieldType* fieldType2 = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME );
+ MVPbkStoreContactField* field2 = iContact->CreateFieldLC( *fieldType2 );
+ MVPbkContactFieldTextData::Cast( field2->FieldData() ).SetTextL( TPtrC( KLastNameArrayXSP[iContactCountXsp] ) );
+ iContact->AddFieldL( field2 );
+ CleanupStack::Pop(); //field2
+
+
+ const MVPbkFieldType* landPhoneType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_LANDPHONEGEN );
+ MVPbkStoreContactField* landPhoneField = iContact->CreateFieldLC( *landPhoneType );
+ MVPbkContactFieldTextData::Cast( landPhoneField->FieldData() ).SetTextL( TPtrC( KLandNumberArrayXSP[iContactCountXsp] ) );
+ iContact->AddFieldL( landPhoneField );
+ CleanupStack::Pop(); //landPhoneField
+
+ for( TInt j = 0; j < KMobilePhoneCountXSP; j++ )
+ {
+ const MVPbkFieldType* mobilePhoneType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN );
+ MVPbkStoreContactField* mobilePhoneField = iContact->CreateFieldLC( *mobilePhoneType );
+ MVPbkContactFieldTextData::Cast( mobilePhoneField->FieldData() ).SetTextL( TPtrC( KMobileNumberArrayXSP[iContactCountXsp*KMobilePhoneCountXSP + j] ) );
+ iContact->AddFieldL( mobilePhoneField );
+ CleanupStack::Pop(); //mobilePhoneField
+ }
+
+ const MVPbkFieldType* emailGenType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_EMAILGEN );
+ MVPbkStoreContactField* emailGenField = iContact->CreateFieldLC( *emailGenType );
+ SetDefaultAttributeL( emailGenField, EVPbkDefaultTypeEmail );
+ MVPbkContactFieldTextData::Cast( emailGenField->FieldData() ).SetTextL( TPtrC( KEmailAddressArrayXSP[iContactCountXsp] ) );
+ iContact->AddFieldL( emailGenField );
+ CleanupStack::Pop(); //emailGenField
+
+ const MVPbkFieldType* imppType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_IMPP );
+ MVPbkStoreContactField* imppField = iContact->CreateFieldLC( *imppType );
+ MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast( imppField->FieldData() );
+ uri.SetUriL( TPtrC( KImppAddressArrayXSP[iContactCountXsp] ));
+ iContact->AddFieldL( imppField );
+ CleanupStack::Pop(); // imppField
+
+ iContact->CommitL( *this );
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::CreateDefaultContactL
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::CreateDefaultContactL()
+ {
+#ifdef _DEBUG
+ WriteToLog( _L8( "CCreatorServer::CreateDefaultContactL()" ) );
+#endif
+
+ MVPbkContactStore& store = iContactCreator->ContactStore();
+ CVPbkContactManager& manager = iContactCreator->ContactManager();
+ iContact = store.CreateNewContactLC();
+ CleanupStack::Pop(); //iContact
+
+ const MVPbkFieldType* fieldType1 = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME );
+ MVPbkStoreContactField* field1 = iContact->CreateFieldLC( *fieldType1 );
+ MVPbkContactFieldTextData::Cast( field1->FieldData() ).SetTextL( TPtrC( KFirstNameArray[iContactCountDefault] ) );
+ iContact->AddFieldL( field1 );
+ CleanupStack::Pop(); //field1
+
+ const MVPbkFieldType* fieldType2 = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME );
+ MVPbkStoreContactField* field2 = iContact->CreateFieldLC( *fieldType2 );
+ MVPbkContactFieldTextData::Cast( field2->FieldData() ).SetTextL( TPtrC( KLastNameArray[iContactCountDefault] ) );
+ iContact->AddFieldL( field2 );
+ CleanupStack::Pop(); //field2
+
+ /*
+ EVPbkDefaultTypeUndefined,
+ EVPbkDefaultTypePhoneNumber,
+ EVPbkDefaultTypeVideoNumber,
+ EVPbkDefaultTypeSms,
+ EVPbkDefaultTypeMms,
+ EVPbkDefaultTypeEmail,
+ EVPbkDefaultTypeEmailOverSms,
+ EVPbkDefaultTypeVoIP,
+ EVPbkDefaultTypePOC,
+ */
+
+ const MVPbkFieldType* landPhoneType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_LANDPHONEGEN );
+ MVPbkStoreContactField* landPhoneField = iContact->CreateFieldLC( *landPhoneType );
+ SetDefaultAttributeL( landPhoneField, EVPbkDefaultTypePhoneNumber );
+ MVPbkContactFieldTextData::Cast( landPhoneField->FieldData() ).SetTextL( TPtrC( KLandNumberArray[iContactCountDefault] ) );
+ iContact->AddFieldL( landPhoneField );
+ CleanupStack::Pop(); //landPhoneField
+
+ for( TInt j = 0; j < KMobilePhoneCount; j++ )
+ {
+ const MVPbkFieldType* mobilePhoneType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN );
+ MVPbkStoreContactField* mobilePhoneField = iContact->CreateFieldLC( *mobilePhoneType );
+ MVPbkContactFieldTextData::Cast( mobilePhoneField->FieldData() ).SetTextL( TPtrC( KMobileNumberArray[iContactCountDefault*KMobilePhoneCount + j] ) );
+ switch( j )
+ {
+ case 0:
+ SetDefaultAttributeL( mobilePhoneField, EVPbkDefaultTypeSms );
+ break;
+ case 1:
+ SetDefaultAttributeL( mobilePhoneField, EVPbkDefaultTypeMms );
+ break;
+ case 2:
+ SetDefaultAttributeL( mobilePhoneField, EVPbkDefaultTypeEmailOverSms );
+ break;
+ case 3:
+ // Need to do the following ?
+ // SetDefaultAttributeL( mobilePhoneField, EVPbkDefaultType<xxx> );
+ break;
+ }
+ iContact->AddFieldL( mobilePhoneField );
+ CleanupStack::Pop(); //mobilePhoneField
+ }
+
+ const MVPbkFieldType* videoType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_VIDEONUMBERGEN );
+ MVPbkStoreContactField* videoField = iContact->CreateFieldLC( *videoType );
+ SetDefaultAttributeL( videoField, EVPbkDefaultTypeVideoNumber );
+ MVPbkContactFieldTextData::Cast( videoField->FieldData() ).SetTextL( TPtrC( KVideoNumberArray[iContactCountDefault] ) );
+ iContact->AddFieldL( videoField );
+ CleanupStack::Pop(); //videoField
+
+ const MVPbkFieldType* emailGenType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_EMAILGEN );
+ MVPbkStoreContactField* emailGenField = iContact->CreateFieldLC( *emailGenType );
+ SetDefaultAttributeL( emailGenField, EVPbkDefaultTypeEmail );
+ MVPbkContactFieldTextData::Cast( emailGenField->FieldData() ).SetTextL( TPtrC( KEmailAddressArray[iContactCountDefault] ) );
+ iContact->AddFieldL( emailGenField );
+ CleanupStack::Pop(); //emailGenField
+
+ const MVPbkFieldType* emailHomeType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_EMAILHOME );
+ MVPbkStoreContactField* emailHomeField = iContact->CreateFieldLC( *emailHomeType );
+ MVPbkContactFieldTextData::Cast( emailHomeField->FieldData() ).SetTextL( TPtrC( KEmailAddressArray[iContactCountDefault] ) );
+ iContact->AddFieldL( emailHomeField );
+ CleanupStack::Pop(); //emailHomeField
+
+ const MVPbkFieldType* emailWorkType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_EMAILWORK );
+ MVPbkStoreContactField* emailWorkField = iContact->CreateFieldLC( *emailWorkType );
+ MVPbkContactFieldTextData::Cast( emailWorkField->FieldData() ).SetTextL( TPtrC( KEmailAddressArray[iContactCountDefault] ) );
+ iContact->AddFieldL( emailWorkField );
+ CleanupStack::Pop(); //emailWorkField
+
+ const MVPbkFieldType* sipType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_SIP );
+ MVPbkStoreContactField* sipField = iContact->CreateFieldLC( *sipType );
+ MVPbkContactFieldTextData::Cast( sipField->FieldData() ).SetTextL( TPtrC( KSipAddressArray[iContactCountDefault] ) );
+ iContact->AddFieldL( sipField );
+ CleanupStack::Pop(); //sipField
+
+ TPtrC bitMap = TPtrC( KThumbnailImageArray[iContactCountDefault]);
+ if ( bitMap.Length() > 0 )
+ {
+ const MVPbkFieldType* thumbnailType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_THUMBNAILPIC );
+ MVPbkStoreContactField* thumbnailField = iContact->CreateFieldLC( *thumbnailType );
+ MVPbkContactFieldBinaryData::Cast( thumbnailField->FieldData() ).SetBinaryDataL( BinaryDataLC( TPtrC( KThumbnailImageArray[iContactCountDefault] ) )->Des() );
+ iContact->AddFieldL( thumbnailField );
+ CleanupStack::PopAndDestroy(); //BinaryDataLC()
+ CleanupStack::Pop(); //thumbnailField
+ }
+
+ // Anniversary
+ TTime time;
+ time.HomeTime();
+ const MVPbkFieldType* anniversaryType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_ANNIVERSARY );
+ MVPbkStoreContactField* anniversaryField = iContact->CreateFieldLC( *anniversaryType );
+ MVPbkContactFieldDateTimeData::Cast( anniversaryField->FieldData() ).SetDateTime( time );
+ iContact->AddFieldL( anniversaryField );
+ CleanupStack::Pop(); //anniversaryField
+
+ const MVPbkFieldType* imppType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_IMPP );
+ MVPbkStoreContactField* imppField = iContact->CreateFieldLC( *imppType );
+ MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast( imppField->FieldData() );
+ uri.SetUriL( TPtrC( KImppAddressArray[iContactCountDefault] ));
+ iContact->AddFieldL( imppField );
+ CleanupStack::Pop(); // imppField
+
+ iContact->CommitL( *this );
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::DoCreateImppContactL
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::DoCreateImppContactL()
+ {
+ #ifdef _DEBUG
+ WriteToLog( _L8( "CCreatorServer::DoCreateImppContactL()" ) );
+ #endif
+
+ MVPbkContactStore& store = iContactCreator->ContactStore();
+ CVPbkContactManager& manager = iContactCreator->ContactManager();
+ iContact = store.CreateNewContactLC();
+ CleanupStack::Pop(); //iContact
+
+ const MVPbkFieldType* fieldType1 = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME );
+ MVPbkStoreContactField* field1 = iContact->CreateFieldLC( *fieldType1 );
+ MVPbkContactFieldTextData::Cast( field1->FieldData() ).SetTextL( TPtrC( KFirstNameArray[iContactCountDefault] ) );
+ iContact->AddFieldL( field1 );
+ CleanupStack::Pop(); //field1
+
+ const MVPbkFieldType* fieldType2 = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME );
+ MVPbkStoreContactField* field2 = iContact->CreateFieldLC( *fieldType2 );
+ MVPbkContactFieldTextData::Cast( field2->FieldData() ).SetTextL( TPtrC( KLastNameArray[iContactCountDefault] ) );
+ iContact->AddFieldL( field2 );
+ CleanupStack::Pop(); //field2
+
+
+ const MVPbkFieldType* landPhoneType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_LANDPHONEGEN );
+ MVPbkStoreContactField* landPhoneField = iContact->CreateFieldLC( *landPhoneType );
+ SetDefaultAttributeL( landPhoneField, EVPbkDefaultTypePhoneNumber );
+ MVPbkContactFieldTextData::Cast( landPhoneField->FieldData() ).SetTextL( TPtrC( KLandNumberArray[iContactCountDefault] ) );
+ iContact->AddFieldL( landPhoneField );
+ CleanupStack::Pop(); //landPhoneField
+
+ /*
+ if ( TPtrC(KVoIPAddressArray[iContactCountDefault]).Length() )
+ {
+ const MVPbkFieldType* voipWorkType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_VOIPWORK );
+ MVPbkStoreContactField* voipWorkField = iContact->CreateFieldLC( *voipWorkType );
+ MVPbkContactFieldTextData::Cast( voipWorkField->FieldData() ).SetTextL( TPtrC( KVoIPAddressArray[iContactCountDefault] ) );
+ iContact->AddFieldL( voipWorkField );
+ CleanupStack::Pop(); //voipWorkField
+ }
+ */
+
+ if ( TPtrC(KImppAddressArray[iContactCountDefault]).Length() )
+ {
+ // Wanna test with non existig field as well, the first test person.
+ const MVPbkFieldType* imppType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_IMPP );
+ MVPbkStoreContactField* imppField = iContact->CreateFieldLC( *imppType );
+ MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast( imppField->FieldData() );
+ uri.SetUriL( TPtrC( KImppAddressArray[iContactCountDefault] ));
+ iContact->AddFieldL( imppField );
+ CleanupStack::Pop(); // imppField
+ }
+
+ if ( TPtrC(KGoogleAddressArray[iContactCountDefault]).Length() )
+ {
+ // Wanna test with non existig field as well, the first test person.
+ const MVPbkFieldType* imppType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_IMPP );
+ MVPbkStoreContactField* imppField = iContact->CreateFieldLC( *imppType );
+ MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast( imppField->FieldData() );
+ uri.SetUriL( TPtrC( KGoogleAddressArray[iContactCountDefault] ));
+ iContact->AddFieldL( imppField );
+ CleanupStack::Pop(); // imppField
+ }
+
+ if ( TPtrC(KOviAddressArray[iContactCountDefault]).Length() )
+ {
+ // Wanna test with non existig field as well, the first test person.
+ const MVPbkFieldType* imppType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_IMPP );
+ MVPbkStoreContactField* imppField = iContact->CreateFieldLC( *imppType );
+ MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast( imppField->FieldData() );
+ uri.SetUriL( TPtrC( KOviAddressArray[iContactCountDefault] ));
+ iContact->AddFieldL( imppField );
+ CleanupStack::Pop(); // imppField
+ }
+
+ iContact->CommitL( *this );
+ }
+
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::BinaryDataL
+//
+// ----------------------------------------------------------
+//
+HBufC8* CCreatorServer::BinaryDataLC( const TDesC& aFilePath )
+ {
+ RFile file;
+ TInt size = 0;
+ RFs fileSession;
+ HBufC8* dataBuffer = NULL;
+ User::LeaveIfError( fileSession.Connect() );
+ CleanupClosePushL( fileSession );
+ User::LeaveIfError( file.Open( fileSession, aFilePath, EFileRead ) );
+ CleanupClosePushL( file );
+ TInt error = file.Size( size );
+ if( error == KErrNone )
+ {
+ dataBuffer = HBufC8::NewLC( size );
+ TPtr8 dataDesc( dataBuffer->Des() );
+ User::LeaveIfError( file.Read( dataDesc ) );
+ CleanupStack::Pop(); //dataBuffer
+ }
+ CleanupStack::PopAndDestroy( 2 ); //file, fileSession
+ if( dataBuffer )
+ {
+ CleanupStack::PushL( dataBuffer );
+ }
+ return dataBuffer;
+ }
+
+// ----------------------------------------------------------
+// CCreatorServer::SetDefaultAttributesL
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::SetDefaultAttributeL( MVPbkStoreContactField* aField, TInt aDefaultType )
+ {
+ CVPbkContactManager& manager = iContactCreator->ContactManager();
+ CVPbkDefaultAttribute* attr = CVPbkDefaultAttribute::NewL( static_cast<TVPbkDefaultType>( aDefaultType ) );
+ CleanupStack::PushL( attr );
+ manager.ContactAttributeManagerL().SetFieldAttributeL( *aField, *attr, *this );
+ CleanupStack::PopAndDestroy(); //attr
+ CActiveScheduler::Start();
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::ContactOperationCompleted
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::ContactOperationCompleted( TContactOpResult aResult )
+ {
+ #ifdef _DEBUG
+ WriteToLog( _L8( "CCreatorServer::ContactOperationCompleted()" ) );
+ #endif
+ TInt code( aResult.iOpCode );
+ delete iContact;
+ iContact = NULL;
+ if( iDefaultStore )
+ {
+ iContactCountDefault++;
+ if( iContactCountDefault < KNumberOfDefaultContacts )
+ {
+ (iContactCountDefault < KNumberOfDefaultImppContacts)
+ ? CreateDefaultContactL()
+ : DoCreateImppContactL();
+ }
+ else
+ {
+ CActiveScheduler::Stop();
+ #ifdef _DEBUG
+ WriteToLog( _L8( "Scheduler stopped" ) );
+ #endif
+ }
+ }
+ else
+ {
+ iContactCountXsp++;
+ if ( iContactCountXsp < KNumberOfXSPContacts )
+ {
+ CreateXSPContactL();
+ }
+ else
+ {
+ CActiveScheduler::Stop();
+ #ifdef _DEBUG
+ WriteToLog( _L8( "Scheduler stopped" ) );
+ #endif
+ }
+ }
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::AttributeOperationComplete
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::AttributeOperationComplete( MVPbkContactOperationBase& aOperation )
+ {
+ delete &aOperation;
+ CActiveScheduler::Stop();
+ }
+
+// ----------------------------------------------------------
+// CCreatorServer::AttributeOperationFailed
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::AttributeOperationFailed( MVPbkContactOperationBase& aOperation, TInt /*aError*/ )
+ {
+ delete &aOperation;
+ CActiveScheduler::Stop();
+ }
+
+// ----------------------------------------------------------
+// CCreatorServer::ContactOperationFailed
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::ContactOperationFailed( TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/ )
+ {
+ #ifdef _DEBUG
+ WriteToLog( _L8( "CCreatorServer::ContactOperationFailed() - Error: %d" ), aErrorCode );
+ #endif
+ CActiveScheduler::Stop();
+ #ifdef _DEBUG
+ WriteToLog( _L8( " Scheduler stopped" ) );
+ #endif
+ }
+
+// ----------------------------------------------------
+// CCreatorServer::WriteToLog
+//
+// ----------------------------------------------------
+//
+void CCreatorServer::WriteToLog( TRefByValue<const TDesC8> aFmt,... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ TBuf8<KLogBufferMaxSize> buf;
+ buf.FormatList( aFmt, list );
+ RFileLogger::Write( KCmsCreatorLogDir, KCmsCreatorLogFile, EFileLoggingModeAppend, buf );
+ RDebug::RawPrint( buf );
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::ContactViewUnavailable
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::ContactViewUnavailable( MVPbkContactViewBase& /*aView*/ )
+ {
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::~CCmsTesterContactCreator
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::ContactAddedToView( MVPbkContactViewBase& /*aView*/, TInt /*aIndex*/,
+ const MVPbkContactLink& /*aContactLink*/ )
+ {
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::~CCmsTesterContactCreator
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::ContactRemovedFromView( MVPbkContactViewBase& /*aView*/, TInt /*aIndex*/,
+ const MVPbkContactLink& /*aContactLink*/ )
+ {
+ }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::ContactViewError
+//
+// ----------------------------------------------------------
+//
+void CCreatorServer::ContactViewError( MVPbkContactViewBase& /*aView*/, TInt /*aError*/, TBool /*aErrorNotified*/ )
+ {
+ }
+
+// ----------------------------------------------------
+// CCreatorServer::StartThread
+//
+// ----------------------------------------------------
+//
+TInt CCreatorServer::StartThread()
+ {
+ User::LeaveIfError( User::RenameThread( KCreatorServerName ) );
+ CActiveScheduler* scheduler = new ( ELeave ) CActiveScheduler;
+ CleanupStack::PushL( scheduler );
+ if( !CActiveScheduler::Current() )
+ {
+ CActiveScheduler::Install( scheduler );
+ }
+ CCreatorServer* server = CCreatorServer::NewL( KCmsCreatorDbUri );
+ CleanupStack::PushL( server );
+ server->CreateContactsL();
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(); //server
+ server = NULL;
+ TInt exists( CreateXSPStoreL() );
+ //CContactDatabase::DeleteDatabaseL( KCmsXSPStore );
+ if( KErrNone == exists )
+ {
+ TRAPD( error, server = CCreatorServer::NewL( KCmsContactStore ) );
+ CleanupStack::PushL( server );
+ TRAP( error, server->CreateContactsL() );
+ if( KErrNone == error )
+ {
+ CActiveScheduler::Start();
+ }
+ CleanupStack::PopAndDestroy(); //server
+ }
+ CleanupStack::PopAndDestroy(); //scheduler
+ RProcess::Rendezvous( KErrNone );
+ return KErrNone;
+ }
+
+// ----------------------------------------------------
+// CCreatorServer::CreateXSPStoreL
+//
+// ----------------------------------------------------
+//
+TInt CCreatorServer::CreateXSPStoreL()
+ {
+ TInt err = KErrNone;
+ CContactDatabase* database = NULL;
+ TBool exists( CContactDatabase::ContactDatabaseExistsL( KCmsXSPStore ) );
+ if( !exists )
+ {
+ TRAP( err, database = CContactDatabase::CreateL( KCmsXSPStore ) );
+ delete database;
+ database = NULL;
+ }
+ return exists ? KErrAlreadyExists : KErrNone;
+ }
+
+
+
+
+
+