ccservices/cmsservices/cmsengine/tsrc/contactcreator2/Server/src/creatorserver2.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ccservices/cmsservices/cmsengine/tsrc/contactcreator2/Server/src/creatorserver2.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,678 @@
+/*
+* Copyright (c) 2008 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 <e32std.h>
+#include <flogger.h>
+#include <barsread.h>
+#include <VPbkEng.rsg>
+#include <MVPbkFieldType.h>
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactStore.h>
+#include <CVPbkContactManager.h> 
+#include <MVPbkContactViewBase.h>
+#include <TVPbkFieldTypeMapping.h>
+#include <CVPbkDefaultAttribute.h>
+#include <MVPbkContactOperationBase.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactFieldBinaryData.h>
+
+// service table
+#include <spsettings.h>
+#include <spentry.h>
+#include <spproperty.h>
+#include <spdefinitions.h>
+
+#include "contactdata2.h"
+#include "creatorserver2.h"
+#include "creatordefines2.h"
+#include "cmstestercontactcreator2.h"
+
+
+#include <MVPbkContactFieldUriData.h>
+
+// ----------------------------------------------------------
+// CCreatorServer2::CCreatorServer2
+// 
+// ----------------------------------------------------------
+//
+CCreatorServer2::CCreatorServer2()
+    {
+    }
+
+// ----------------------------------------------------------
+// CCreatorServer2::New
+// 
+// ----------------------------------------------------------
+//
+CCreatorServer2* CCreatorServer2::NewLC()
+    {
+    CCreatorServer2* self = new CCreatorServer2();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ----------------------------------------------------------
+// CCreatorServer2::New
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::ConstructL()
+    {
+    User::LeaveIfError( iFileSession.Connect() );
+    iContactCreator = CCmsTesterContactCreator2::NewL( iFileSession );
+    
+    iSettings = CSPSettings::NewL();    
+    }
+
+// ----------------------------------------------------------
+// CCreatorServer2::CCreatorServer2
+// 
+// ----------------------------------------------------------
+//
+CCreatorServer2::~CCreatorServer2()
+    {
+    delete iSettings;
+        
+    if( iContactView ) 
+        iContactView->RemoveObserver( *this );
+    delete iContact;
+    delete iContactView;
+    delete iContactCreator;
+    iFileSession.Close();
+    }
+
+// ----------------------------------------------------
+// CCreatorServer2::FileSession
+// 
+// ----------------------------------------------------
+//
+RFs& CCreatorServer2::FileSession()
+    {
+    return iFileSession;
+    }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::CreateContactsL
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::CreateContactsL()
+    {
+    iContactCreator->InitStoresL( *this );
+    }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::ContactViewReady
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::ContactViewReady( MVPbkContactViewBase& aView )
+    {
+    #ifdef _DEBUG
+	    WriteToLog( _L8( "CCreatorServer2::ContactViewReady() - Contact count: %d" ), aView.ContactCountL() );
+	#endif
+	
+	// remove old services
+    // Fetch service IDs
+    RArray<TServiceId> ids;
+    CleanupClosePushL( ids );
+    TInt err = iSettings->FindServiceIdsL( ids );
+    
+    TInt srvCount = ids.Count();
+    for ( TInt i=0; i<srvCount; i++ )
+    	{
+        TRAP_IGNORE( iSettings->DeleteEntryL(ids[i]) ); 	
+    	}
+    CleanupStack::PopAndDestroy(); // ids
+
+    TInt attribute = 0;
+    TInt pluginid = 1;
+    TUint launchId = 1;   
+    TInt spLaunchId = (TInt)launchId;    
+	
+	TRAP_IGNORE( AddServiceEntryL( _L("gtalk"), _L("Google"), pluginid, attribute, spLaunchId ));
+	attribute = 1;
+	TRAP_IGNORE( AddServiceEntryL( _L("voip"), _L("1"), pluginid, attribute, spLaunchId ));
+	TRAP_IGNORE( AddServiceEntryL( _L("msn"), _L("10"), pluginid, attribute, spLaunchId )) ;		
+	
+    iContactView = &aView;
+    if( iContactView->ContactCountL() <= 0  )
+    	{
+#ifdef _MASS_TEST    	    
+        DoCreateContact50L(); 
+#else        
+        DoCreateContactL();
+#endif
+    	}
+    else CActiveScheduler::Stop();
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+void CCreatorServer2::AddServiceEntryL(const TDesC& aServiceName, const TDesC& aBrandingId,  TInt& aPluginUid,  
+	TInt& aServiceAttribute, TInt& aLaunchId )
+    {
+    #ifdef _DEBUG
+	    WriteToLog( _L8( "CCreatorServer2::AddEntryL" ));
+	#endif
+
+    CSPEntry* entry = CSPEntry::NewLC();
+    TInt err = entry->SetServiceName( aServiceName );
+    
+    CSPProperty* brandId = CSPProperty::NewLC();  // << brandId
+    err = brandId->SetName( EPropertyBrandId );
+    brandId->SetValue( aBrandingId );
+    err = entry->AddPropertyL( *brandId );
+    CleanupStack::PopAndDestroy( brandId ); 
+
+    CSPProperty* pluginId = CSPProperty::NewLC();  // << pluginId
+    err = pluginId->SetName( EPropertyPCSPluginId );
+    pluginId->SetValue( aPluginUid );
+    err = entry->AddPropertyL( *pluginId );
+    CleanupStack::PopAndDestroy( pluginId ); 
+
+
+    if(aServiceAttribute!=0)
+    {
+        CSPProperty* serviceatt = CSPProperty::NewLC();  // << brandId
+        err = serviceatt->SetName( EPropertyServiceAttributeMask );
+        serviceatt->SetValue( aServiceAttribute );
+        err = entry->AddPropertyL( *serviceatt );        
+        CleanupStack::PopAndDestroy( serviceatt ); 
+    }
+    
+    CSPProperty* launchId = CSPProperty::NewLC();  // << launchId
+    err = launchId->SetName( ESubPropertyIMLaunchUid );
+    launchId->SetValue( aLaunchId);
+    err = entry->AddPropertyL( *launchId );
+    CleanupStack::PopAndDestroy( launchId );     
+    
+        
+    err = iSettings->AddEntryL( *entry );
+         
+    // iServiceId = entry->GetServiceId();
+
+
+    CleanupStack::PopAndDestroy( entry ); // >>> entry   
+    }    
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::DoCreateContactL
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::DoCreateContactL()
+    {
+    #ifdef _DEBUG
+	    WriteToLog( _L8( "CCreatorServer2::DoCreateContactL()" ) );
+	#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[iContactCount] ) );
+    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[iContactCount] ) );
+    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[iContactCount] ) );
+    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[iMobileNbrIndex] ) );
+        switch( j )
+            {
+            case 0:
+                SetDefaultAttributeL( mobilePhoneField, EVPbkDefaultTypeSms );
+                break;
+            case 1:
+                SetDefaultAttributeL( mobilePhoneField, EVPbkDefaultTypeMms );
+                break;
+            case 2:
+                SetDefaultAttributeL( mobilePhoneField, EVPbkDefaultTypeEmailOverSms );
+                break;
+            }
+        iContact->AddFieldL( mobilePhoneField );
+        CleanupStack::Pop();  //mobilePhoneField
+        iMobileNbrIndex++;
+        }
+        */
+    
+    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[iContactCount] ) );
+    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[iContactCount] ) );
+    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[iContactCount] ) );
+    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[iContactCount] ) );
+    iContact->AddFieldL( emailWorkField );
+    CleanupStack::Pop();  //emailWorkField
+  */  
+    const MVPbkFieldType* voipGenType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_VOIPGEN );
+    MVPbkStoreContactField* voipGenField = iContact->CreateFieldLC( *voipGenType );
+    MVPbkContactFieldTextData::Cast( voipGenField->FieldData() ).SetTextL( TPtrC( KVoIPAddressArray[iContactCount] ) );
+    iContact->AddFieldL( voipGenField );
+    CleanupStack::Pop();  //voipGenField
+
+/*
+    const MVPbkFieldType* voipHomeType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_VOIPHOME );
+    MVPbkStoreContactField* voipHomeField = iContact->CreateFieldLC( *voipHomeType );
+    MVPbkContactFieldTextData::Cast( voipHomeField->FieldData() ).SetTextL( TPtrC( KVoIPAddressArray[iContactCount] ) );
+    SetDefaultAttributeL( voipHomeField, EVPbkDefaultTypeVoIP );
+    iContact->AddFieldL( voipHomeField );
+    CleanupStack::Pop();  //voipHomeField
+
+    const MVPbkFieldType* voipWorkType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_VOIPWORK );
+    MVPbkStoreContactField* voipWorkField = iContact->CreateFieldLC( *voipWorkType );
+    MVPbkContactFieldTextData::Cast( voipWorkField->FieldData() ).SetTextL( TPtrC( KVoIPAddressArray[iContactCount] ) );
+    iContact->AddFieldL( voipWorkField );
+    CleanupStack::Pop();  //voipWorkField
+*/      
+    
+    const MVPbkFieldType* sipType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_SIP );
+    MVPbkStoreContactField* sipField = iContact->CreateFieldLC( *sipType );
+    MVPbkContactFieldTextData::Cast( sipField->FieldData() ).SetTextL( TPtrC( KSipAddressArray[iContactCount] )  );
+    iContact->AddFieldL( sipField );
+    CleanupStack::Pop();  //sipField
+    
+    /*
+    TPtrC bitMap = TPtrC( KThumbnailImageArray[iContactCount]);
+    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[iContactCount] ) )->Des() );
+        iContact->AddFieldL( thumbnailField );
+        CleanupStack::PopAndDestroy();  //BinaryDataLC()
+        CleanupStack::Pop();  //thumbnailField
+    }
+    */
+        
+
+	// Wanna test with non existig field as well, the first test person.
+	const MVPbkFieldType* imppType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_IMPP );
+	// msn
+	MVPbkStoreContactField* imppField = iContact->CreateFieldLC( *imppType );        
+	MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast( imppField->FieldData() );        
+	uri.SetUriL( TPtrC( KImppAddressArray[iContactCount] ));
+	iContact->AddFieldL( imppField );
+	CleanupStack::Pop();  // imppField
+	// gtalk  
+	MVPbkStoreContactField* imppField2 = iContact->CreateFieldLC( *imppType ); 
+	MVPbkContactFieldUriData& uri2 = MVPbkContactFieldUriData::Cast( imppField2->FieldData() );   
+	uri2.SetUriL( TPtrC( KGtalkAddressArray[iContactCount] ));
+	iContact->AddFieldL( imppField2 );
+	CleanupStack::Pop();  // imppField2        
+
+    
+    iContact->CommitL( *this );
+    }
+    
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::DoCreateContact50L
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::DoCreateContact50L()
+    {
+    #ifdef _DEBUG
+	    WriteToLog( _L8( "CCreatorServer2::DoCreateContact50L()" ) );
+	#endif
+	
+	_LIT(KMyFirstName, "First" );
+	_LIT(KMyGiven, "Given" );
+	_LIT(KMyLandPhone, "+3583123456");
+	_LIT(KMyMobile, "+35850321654");
+	_LIT(KMyVoipBegin,"sip:tester");
+	_LIT(KMyVoipEnd,"@ece.com");
+	_LIT(KMyMsnBegin, "msn:tester");
+	_LIT(KMyMsnEnd,"@msn.com");	
+	_LIT(KMyGoogleBegin, "gtalk:tester");
+	_LIT(KMyGoogleEnd,"@ece.com");		
+	
+	TBuf<100> workBuffer;
+    TBuf<3>numBuf;
+    numBuf.Num( iContactCount );	
+			
+    MVPbkContactStore& store = iContactCreator->ContactStore();
+    CVPbkContactManager& manager = iContactCreator->ContactManager();
+    iContact = store.CreateNewContactLC();
+    CleanupStack::Pop();  //iContact
+
+    workBuffer = KMyFirstName;    
+    workBuffer.Append(numBuf);     
+    const MVPbkFieldType* fieldType1 = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME );
+    MVPbkStoreContactField* field1 = iContact->CreateFieldLC( *fieldType1 );
+    MVPbkContactFieldTextData::Cast( field1->FieldData() ).SetTextL( workBuffer );
+    iContact->AddFieldL( field1 );
+    CleanupStack::Pop();  //field1
+            
+    workBuffer = KMyGiven;    
+    workBuffer.Append(numBuf);                
+    const MVPbkFieldType* fieldType2 = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME  );
+    MVPbkStoreContactField* field2 = iContact->CreateFieldLC( *fieldType2 );
+    MVPbkContactFieldTextData::Cast( field2->FieldData() ).SetTextL( workBuffer );
+    iContact->AddFieldL( field2 );
+    CleanupStack::Pop();  //field2
+    
+    workBuffer = KMyLandPhone;    
+    workBuffer.Append(numBuf);      
+    const MVPbkFieldType* landPhoneType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_LANDPHONEGEN );
+    MVPbkStoreContactField* landPhoneField = iContact->CreateFieldLC( *landPhoneType );
+    SetDefaultAttributeL( landPhoneField, EVPbkDefaultTypePhoneNumber );
+    MVPbkContactFieldTextData::Cast( landPhoneField->FieldData() ).SetTextL( workBuffer );
+    iContact->AddFieldL( landPhoneField );
+    CleanupStack::Pop();  //landPhoneField
+       
+    workBuffer = KMyMobile;    
+    workBuffer.Append(numBuf);        
+    const MVPbkFieldType* mobilePhoneType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN );
+    MVPbkStoreContactField* mobilePhoneField = iContact->CreateFieldLC( *mobilePhoneType );
+    MVPbkContactFieldTextData::Cast( mobilePhoneField->FieldData() ).SetTextL( workBuffer );
+    iContact->AddFieldL( mobilePhoneField );
+    CleanupStack::Pop();  //mobilePhoneField
+
+    
+    workBuffer = KMyFirstName; 
+    workBuffer.Append(numBuf);     
+    workBuffer.Append(_L("."));
+    workBuffer.Append(KMyGiven);
+    workBuffer.Append(numBuf);        
+    workBuffer.Append(KMyVoipEnd);   
+    const MVPbkFieldType* emailGenType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_EMAILGEN );
+    MVPbkStoreContactField* emailGenField = iContact->CreateFieldLC( *emailGenType );
+    SetDefaultAttributeL( emailGenField, EVPbkDefaultTypeEmail );
+    MVPbkContactFieldTextData::Cast( emailGenField->FieldData() ).SetTextL( workBuffer );
+    iContact->AddFieldL( emailGenField );
+    CleanupStack::Pop();  //emailGenField
+
+    workBuffer = KMyVoipBegin;    
+    workBuffer.Append(numBuf);
+    workBuffer.Append(KMyVoipEnd);        
+    const MVPbkFieldType* voipGenType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_VOIPGEN );
+    MVPbkStoreContactField* voipGenField = iContact->CreateFieldLC( *voipGenType );
+    MVPbkContactFieldTextData::Cast( voipGenField->FieldData() ).SetTextL( workBuffer );
+    iContact->AddFieldL( voipGenField );
+    CleanupStack::Pop();  //voipGenField
+        
+    
+    workBuffer = KMyMsnBegin;    
+    workBuffer.Append(numBuf); 
+    workBuffer.Append(KMyMsnEnd);             
+    // Wanna test with non existig field as well, the first test person.
+    const MVPbkFieldType* imppType = manager.FieldTypes().Find( R_VPBK_FIELD_TYPE_IMPP );
+    // msn
+    MVPbkStoreContactField* imppField = iContact->CreateFieldLC( *imppType );        
+    MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast( imppField->FieldData() );        
+    uri.SetUriL( workBuffer);
+    iContact->AddFieldL( imppField );
+    CleanupStack::Pop();  // imppField
+    // gtalk 
+    workBuffer = KMyGoogleBegin;    
+    workBuffer.Append(numBuf); 
+    workBuffer.Append(KMyGoogleEnd);      
+    MVPbkStoreContactField* imppField2 = iContact->CreateFieldLC( *imppType ); 
+    MVPbkContactFieldUriData& uri2 = MVPbkContactFieldUriData::Cast( imppField2->FieldData() );   
+    uri2.SetUriL( workBuffer);
+    iContact->AddFieldL( imppField2 );
+    CleanupStack::Pop();  // imppField2        
+    
+    iContact->CommitL( *this );
+    }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::BinaryDataL
+// 
+// ----------------------------------------------------------
+//
+HBufC8* CCreatorServer2::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;
+    }
+
+// ----------------------------------------------------------
+// CCreatorServer2::SetDefaultAttributesL
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::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 CCreatorServer2::ContactOperationCompleted( TContactOpResult /*aResult*/ )
+    {
+    #ifdef _DEBUG
+	    WriteToLog( _L8( "CCreatorServer2::ContactOperationCompleted()" ) );
+	#endif
+    iContactCount++;
+    if( iContactCount < KNumberOfContacts )
+    	{
+        delete iContact;
+    	iContact = NULL;
+#ifdef _MASS_TEST    	    
+        DoCreateContact50L(); 
+#else        
+        DoCreateContactL();
+#endif
+    	}
+    else
+    	{
+        CActiveScheduler::Stop();
+        #ifdef _DEBUG
+	        WriteToLog( _L8( " Scheduler stopped" ) );
+	    #endif
+    	}
+    }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::AttributeOperationComplete
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::AttributeOperationComplete( MVPbkContactOperationBase& aOperation )
+    {
+    delete &aOperation;
+    CActiveScheduler::Stop();
+    }
+
+// ----------------------------------------------------------
+// CCreatorServer2::AttributeOperationFailed
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::AttributeOperationFailed( MVPbkContactOperationBase& aOperation, TInt /*aError*/ )
+    {
+    delete &aOperation;
+    CActiveScheduler::Stop();
+    }
+
+// ----------------------------------------------------------
+// CCreatorServer2::ContactOperationFailed
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::ContactOperationFailed( TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/ )
+    {
+    #ifdef _DEBUG
+	    WriteToLog( _L8( "CCreatorServer2::ContactOperationFailed() - Error: %d" ), aErrorCode );
+	#endif
+    CActiveScheduler::Stop();
+    #ifdef _DEBUG
+	    WriteToLog( _L8( " Scheduler stopped" ) );
+	#endif
+    }
+
+// ----------------------------------------------------
+// CCreatorServer2::WriteToLog
+// 
+// ----------------------------------------------------
+//
+void CCreatorServer2::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 CCreatorServer2::ContactViewUnavailable( MVPbkContactViewBase& /*aView*/ )
+    {
+    }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::~CCmsTesterContactCreator
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::ContactAddedToView( MVPbkContactViewBase& /*aView*/, TInt /*aIndex*/, 
+                                         const MVPbkContactLink& /*aContactLink*/ )
+    {
+    }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::~CCmsTesterContactCreator
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::ContactRemovedFromView( MVPbkContactViewBase& /*aView*/, TInt /*aIndex*/, 
+                                             const MVPbkContactLink& /*aContactLink*/ )
+    {
+    }
+
+// ----------------------------------------------------------
+// CCmsTesterContactCreator::ContactViewError
+// 
+// ----------------------------------------------------------
+//
+void CCreatorServer2::ContactViewError( MVPbkContactViewBase& /*aView*/, TInt /*aError*/, TBool /*aErrorNotified*/ )
+    {
+    }
+
+// ----------------------------------------------------
+// CCreatorServer2::StartThread
+// 
+// ----------------------------------------------------
+//
+TInt CCreatorServer2::StartThread()
+    {
+	User::LeaveIfError( User::RenameThread( KCreatorServerName ) );
+	CActiveScheduler* scheduler = new ( ELeave ) CActiveScheduler;
+	CleanupStack::PushL( scheduler );
+    if( !CActiveScheduler::Current() )
+        {
+        CActiveScheduler::Install( scheduler );
+        }
+    CCreatorServer2* server = CCreatorServer2::NewLC();
+    server->CreateContactsL();
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy( 2 );  //server, scheduler
+    RProcess::Rendezvous( KErrNone );
+	return KErrNone;
+    }
+
+
+    
+