Revision: 201033
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 02 Sep 2010 20:16:30 +0300
changeset 53 875f413e6ce9
parent 49 392bf116d9ed
child 60 ef2733361cdb
Revision: 201033 Kit: 201035
contentctrl_plat/ds_contact_adapter_customization_api/ds_contact_adapter_customization_api.metaxml
contentctrl_plat/ds_contact_adapter_customization_api/group/bld.inf
contentctrl_plat/ds_contact_adapter_customization_api/inc/nsmlcontactsdataprovider.h
contentctrl_plat/ds_contact_adapter_customization_api/inc/nsmlcontactsdatastore.h
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/UT_nsmldummydataprovider.mmp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/bld.inf
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmladaptertestutilities.cpp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmladaptertestutilities.h
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydataprovider_test.cpp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydataprovider_test.h
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastore_test.cpp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastore_test.h
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastorewaiter.cpp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastorewaiter.h
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/def/bwinscwcontactsdataprovider_testu.def
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/def/eabicontactsdataprovider_testu.def
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/dllmain.cpp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/testdata/basic.vcf
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/testdata/standard.vcf
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/data/nsmldummydataprovider.loc
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/data/nsmldummydataprovider.rss
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/data/nsmldummydatastoreformat_1_1_2.rss
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/data/nsmldummydatastoreformat_1_2.rss
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/group/bld.inf
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/group/def/bwinscwdummydataprovideru.def
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/group/def/eabidummydataprovideru.def
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/group/nsmldummydataprovider.mmp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/inc/nsmldummydataprovider.h
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/inc/nsmldummydatastore.h
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/readme.txt
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/src/nsmldummydataprovider.cpp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/src/nsmldummydatastore.cpp
contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/src/nsmldummydllmain.cpp
contentctrl_plat/group/bld.inf
omads/omadsextensions/adapters/contacts/bld/def/bwinscwcontactsdataprovideru.def
omads/omadsextensions/adapters/contacts/bld/def/eabicontactsdataprovideru.def
omads/omadsextensions/adapters/contacts/inc/NSmlContactsDataProvider.h
omads/omadsextensions/adapters/contacts/inc/NSmlContactsDataStore.h
omads/omadsextensions/adapters/contacts/src/NSmlContactsDataProvider.cpp
omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStore.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/ds_contact_adapter_customization_api.metaxml	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,15 @@
+<?xml version="1.0" ?>
+<api id="fd79653552dfddc5384b67f5eab5f62a" dataversion="1.0">
+  <name>DS Contact Adapter Customization API</name>
+  <description>Exports Contact Adapter API to make possible to inherit Contact Adapter and create Extended Contacts Adapters</description>
+  <type>c++</type>
+  <subsystem>omads</subsystem>
+  <libs>
+    <lib name="nsmlcontactsdataprovider.lib" />
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/group/bld.inf	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 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:  File that exports the files belonging to 
+:               DS Contact Adapter Customization API
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/nsmlcontactsdataprovider.h APP_LAYER_PLATFORM_EXPORT_PATH(nsmlcontactsdataprovider.h)
+../inc/nsmlcontactsdatastore.h APP_LAYER_PLATFORM_EXPORT_PATH(nsmlcontactsdatastore.h)
+
+PRJ_TESTMMPFILES
+../tsrc/DummyAdapter/group/nsmldummydataprovider.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/inc/nsmlcontactsdataprovider.h	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2005 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:  DS contacts dataprovider.
+*
+*/
+
+#ifndef __NSMLCONTACTSDATAPROVIDER_H__
+#define __NSMLCONTACTSDATAPROVIDER_H__
+
+// INCLUDES
+#include <f32file.h>
+#include <smldataprovider.h>
+#include <nsmlcontactsdatastore.h>
+
+// CLASS DECLARATION
+
+// ------------------------------------------------------------------------------------------------
+//  CNSmlContactsDataProvider
+//
+//  @lib nsmlcontactsdataprovider.lib
+// ------------------------------------------------------------------------------------------------
+class CNSmlContactsDataProvider : public CSmlDataProvider 
+	{
+	public:
+		/**
+		* Two-phased constructor.
+		*/
+		IMPORT_C static CNSmlContactsDataProvider* NewL();
+
+		/**
+		* Destructor.
+		*/
+		IMPORT_C virtual ~CNSmlContactsDataProvider();
+
+	protected:
+		/**
+		* Two-phased constructor.
+		*/
+		IMPORT_C static CNSmlContactsDataProvider* NewLC();
+
+		/**
+		* This method handles framework events.
+		* @param					Frameworks event.
+		* @param	aParam1			First parameter.
+		* @param	aParam2			Second parameter.
+		*/
+		IMPORT_C void DoOnFrameworkEvent(TSmlFrameworkEvent, TInt aParam1, TInt aParam2);
+
+		/**
+		* Check if operation is supported by dataprovider.
+		* @param	aOpId			Operations type.
+		* @return	ETrue if the operation is supported.
+		*/
+		IMPORT_C TBool DoSupportsOperation(TUid aOpId) const;
+
+		/**
+		* Gets dataproviders own StoreFormat.
+		*/
+		IMPORT_C const CSmlDataStoreFormat& DoStoreFormatL();
+
+		/**
+		* Lists all contacts databases on client.
+		* @return List of contact databases.
+		*/
+		IMPORT_C CDesCArray* DoListStoresLC();
+
+		/**
+		* Gets default storename on client.
+		* @return Default storename.
+		*/
+		IMPORT_C const TDesC& DoDefaultStoreL();
+
+		/**
+		* Constructs new instance of datastore.
+		* @return Newly created instance.
+		*/
+		IMPORT_C CSmlDataStore* DoNewStoreInstanceLC();
+
+		/**
+		This method returns the set of filters that can be used to send to the SyncML server.
+		* @return New filters.
+		*/
+		IMPORT_C const RPointerArray<CSyncMLFilter>& DoSupportedServerFiltersL();
+		
+		/**
+		This method checks what filters are supported by server.
+		@param	aServerDataStoreFormat	The store format of server
+		@param	aFilters				The array that includes filters
+		@param	aChangeInfo				The change information about changes that data provider did
+		*/
+		IMPORT_C void DoCheckSupportedServerFiltersL(const CSmlDataStoreFormat& aServerDataStoreFormat, RPointerArray<CSyncMLFilter>& aFilters, TSyncMLFilterChangeInfo& aChangeInfo);
+		
+		/**
+		This method updates dynamic filters up-to-date.
+		@param	aFilters				The array that includes filters
+		@param	aChangeInfo				The change information about changes that data provider did
+		*/
+		IMPORT_C void DoCheckServerFiltersL(RPointerArray<CSyncMLFilter>& aFilters, TSyncMLFilterChangeInfo& aChangeInfo);
+		
+		/**
+		This method generates a record filter query to be sent to the SyncML server for the provided filters.
+		@param	aFilters			The filters to be used for the query generation
+		@param	aMatch				The filter match type to be used
+		@param	aFilterMimeType		The mime type of the returned filter query
+		@param	TSyncMLFilterType 	The filter type of the returned filter query
+		@param	aStoreName			The name of used store
+		@return						The record filter query to be sent to the SyncML server - empty if no record filter involved
+									for this specific filter
+		*/
+		IMPORT_C HBufC* DoGenerateRecordFilterQueryLC(const RPointerArray<CSyncMLFilter>& aFilters, TSyncMLFilterMatchType aMatch, TDes& aFilterMimeType, TSyncMLFilterType& aFilterType, TDesC& aStoreName);
+		
+		/**
+		This method generates a field filter query to be sent to the SyncML server for the provided filters.
+		@param	aFilters		The filters to be used for the query generation
+		@param	aFilterMimeType		The mime type of the returned filter query
+		@param	aProperties		The field filter query to be sent to the SyncML server - empty if no field filter involved
+								for this specific filter
+		@param  aStoreName		The name of used store
+		*/
+		IMPORT_C void DoGenerateFieldFilterQueryL(const RPointerArray<CSyncMLFilter>& aFilters, TDes& aFilterMimeType, RPointerArray<CSmlDataProperty>& aProperties, TDesC& aStoreName);
+
+		/**
+		* C++ constructor.
+		*/
+		IMPORT_C CNSmlContactsDataProvider();
+
+		/**
+		* 2nd phase constructor.
+		*/
+		IMPORT_C void ConstructL();
+
+	protected: // New 
+		
+		IMPORT_C virtual const TDesC& GetStoreFormatResourceFileL() const;
+    	
+		IMPORT_C virtual CNSmlContactsDataStore* CreateDataStoreLC() const;
+		
+	private: // data
+		CNSmlContactsDataStore* iContactsDataStore; 
+		RPointerArray<CSyncMLFilter> iFilterArray;
+		RFs iRfs;
+		RStringPool iStringPool;
+		CSmlDataStoreFormat* iStoreFormat;
+	};
+	
+#endif // __NSMLCONTACTSDATAPROVIDER_H__
+
+// End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/inc/nsmlcontactsdatastore.h	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,597 @@
+/*
+* Copyright (c) 2006 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:  DS contacts datastore.
+*
+*/
+
+#ifndef __NSMLCONTACTSDATASTORE_H__
+#define __NSMLCONTACTSDATASTORE_H__
+
+// INCLUDE FILES
+#include <smldataprovider.h>
+#include <smldataformat.h>
+#include <f32file.h>
+
+// MACROS
+#define KNSmlvCard21Version TVersion(2,1,0);
+#define KNSmlvCard30Version TVersion(3,0,0);
+
+// CONSTANTS
+_LIT(  KNSmlContactStoreNameForDefaultDB, "symbian" );
+_LIT(  KNSmlDriveC, "C" );
+_LIT8( KNSmlvCard30Name, "text/vcard" );
+_LIT8( KNSmlvCard30Ver, "3.0" );
+_LIT8( KNSmlvCard21Name, "text/x-vcard" );
+_LIT8( KNSmlvCard21Ver, "2.1" );
+_LIT8(KUidFormat, "%d");
+
+
+_LIT8( KVersitTokenHOME, "HOME"  );
+_LIT8( KVersitTokenWORK, "WORK"  );
+_LIT8( KVersitTokenCELL, "CELL"  );
+_LIT8( KVersitTokenPAGER,"PAGER" );
+_LIT8( KVersitTokenFAX,  "FAX"   );
+_LIT8( KVersitTokenVOICE,"VOICE" );
+_LIT8( KVersitTokenVIDEO,"VIDEO" );
+
+const TInt KNSmlContactsGranularity = 8;
+const TInt KNSmlCompactAfterChanges = 16;
+const TInt KNSmlDataStoreMaxSize = 102400;		// 100 k
+const TInt KNSmlDefaultStoreNameMaxSize = 256;
+const TInt KNSmlItemDataExpandSize = 1024;
+const TInt KNSmlNoError = 1;
+
+_LIT(KNSmlContactsStoreFormatRsc_1_1_2,"NSmlContactsDataStoreFormat_1_1_2.rsc");
+_LIT(KNSmlContactsStoreFormatRsc_1_2,"NSmlContactsDataStoreFormat_1_2.rsc");
+
+// FORWARD DECLARATIONS
+
+class CNsmlContactsDataStoreExtension;
+class MContactsModsFetcher;
+class CNSmlDataModBase;
+class CNSmlChangeFinder;
+class CNSmlDataItemUidSet;
+class TNSmlSnapshotItem;
+
+// CLASS DECLARATION
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlContactsDataStore
+//
+// @lib nsmlcontactsdataprovider.lib
+// ------------------------------------------------------------------------------------------------
+class CNSmlContactsDataStore : public CSmlDataStore
+	{
+	public:	
+		/**
+		* Two-phased constructor.
+		*/
+		IMPORT_C static CNSmlContactsDataStore* NewL();
+
+		/**
+		* Destructor.
+		*/
+		IMPORT_C virtual ~CNSmlContactsDataStore();
+
+		/**
+		* Default store name of client.
+		* @return Default store name.
+		*/
+		IMPORT_C const TDesC& DefaultStoreNameL() const;
+
+		/**
+		* Gets a list of all contacts databases on client.
+		* @return List of databases.
+		*/
+		IMPORT_C CDesCArray* DoListStoresLC();
+
+	protected:
+		/**
+		* 2nd phase constructor.
+		*/
+		IMPORT_C void ConstructL();
+
+        /**
+        * 2nd phase constructor.
+        * @param aStorename Name of the contact database instance.
+        */
+		IMPORT_C void ConstructL( const TDesC& aStoreName );
+		
+		/**
+		* DoOpenL() opens the data store specified by aStoreName asynchronously.
+		* @param		aStoreName			The name of the data store to open.
+		* @param		aContext			Identifies the specific synchronisation relationship to use for the synchronisation.
+		* @param		aStatus				On completion of the open, contains the result code.
+		*/
+		IMPORT_C void DoOpenL(const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus);
+
+		/**
+		* DoCancelRequest() cancels the current asynchronous request, including open. Only one asynchronous request may be outstanding at any one time.
+		*/
+		IMPORT_C void DoCancelRequest();
+
+		/**
+		* DoStoreName() returns the name of the open data store.
+		* @return The name of the currently opened data store.
+		*/
+		IMPORT_C const TDesC& DoStoreName() const;
+
+		/**
+		* DoBeginTransactionL() starts the transaction mode. During this mode calls to CreateItemL, ReplaceItemL,
+		* WriteItemL, CommitItemL, MoveItemL, DeleteItemL and SoftDeleteItemL will be part of this transaction.
+		* Their RequestStatus must be completed, even if the change is not yet really executed in the Data Store.
+		* If a RequestStatus is completed with an error code, the transaction has failed and a rollback must be
+		* done. In this case RevertTransaction will be called.
+		*/
+		IMPORT_C void DoBeginTransactionL();
+
+		/**
+		* DoCommitTransactionL() will be called at the end of a successful transaction. At this point in time the
+		* operations within the transaction are applied to the Data Store in an atomic way. If all operations
+		* succeed, the RequestStatus must be completed with KErrNone. If an operation fails, a rollback must be
+		* done and the RequestStatus must be completed with an appropriate error code.
+		*/
+		IMPORT_C void DoCommitTransactionL(TRequestStatus& aStatus);
+
+		/**
+		* DoRevertTransaction() will be called to abort an ongoing transaction. None of the operations already
+		* submitted may be applied to the Data Store. The RequestStatus must be completed with KErrNone as a revert
+		* cannot fail.
+		*/
+		IMPORT_C void DoRevertTransaction(TRequestStatus& aStatus);
+
+		/**
+		* DoBeginBatchL() starts the batch mode. During this mode calls to CreateItemL, ReplaceItemL,
+		* WriteItemL, CommitItemL, MoveItemL, DeleteItemL and SoftDeleteItemL will be part of this batch.
+		* Their RequestStatus must be completed with KErrNone, which only signals acceptance of the operation
+		* for batch processing.
+		*/
+		IMPORT_C void DoBeginBatchL();
+
+		/**
+		* DoCommitBatchL() will be called at the end of the batch mode. This tells the Data Store to
+		* process the batched operations (in the order they were submitted), and to append the error code
+		* for each operation to aResultArray.
+		* The error codes in aResultArray are only valid if the RequestStatus is completed with KErrNone.
+		* If the RequestStatus is completed with an error code none of the operations in the batch mode
+		* were applied to the Data Store.
+		*/
+		IMPORT_C void DoCommitBatchL(RArray<TInt>& aResultArray, TRequestStatus& aStatus);
+
+		/**
+		* DoCancelBatch() will be called to abort an ongoing batch mode. None of the operations already
+		* submitted may be applied to the Data Store.
+		*/
+		IMPORT_C void DoCancelBatch();
+
+		/**
+		* DoSetRemoteStoreFormatL() sets the SyncML server Data Format - this may optionally be used by the Data 
+		* Provider to filter out properties that the server does not support, and should be used to avoid deleting 
+		* these properties in case the server sends a changed item to the Data Provider
+		*/
+		IMPORT_C void DoSetRemoteStoreFormatL(const CSmlDataStoreFormat& aServerDataStoreFormat);
+
+		/**
+		* DoSetRemoteMaxObjectSize() sets the SyncML server maximum object size - this may optionally be used by the 
+		* Data Provider to not send items to the server exceeding its maximum size. 0 means there is no limit.
+		*/
+		IMPORT_C void DoSetRemoteMaxObjectSize(TInt aServerMaxObjectSize);
+
+		/**
+		* DoMaxObjectSize() gets the Data Store maximum object size which is reported to the SyncML server. 0 means 
+		* there is no limit.
+		* @return The maximum object size.
+		*/
+		IMPORT_C TInt DoMaxObjectSize() const;
+
+		/**
+		* DoOpenItemL() opens the data item specified by aUid asynchronously for reading.
+		* @param		aUid				Item UID which going to be read.
+		* @param		aFieldChange		Accept field changes.
+		* @param		aParent				Parent of the item.
+		* @param		aSize				Size of the item data.
+		* @param		aMimeType			MIME type of the item.
+		* @param		aMimeVer			MIME version used on item.
+		* @param		aStatus				On completion of the opening of item, contains the result code.
+		*/
+		IMPORT_C void DoOpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize, TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus);
+
+		/**
+		* DoCreateItemL() sets the item properties and reference to aUid which will be created.
+		* @param		aUid				Reference to item UID which going to be created.
+		* @param		aSize				Size of the item to be created.
+		* @param		aParent				Parent of the item.
+		* @param		aMimeType			MIME type of the item.
+		* @param		aMimeVer			MIME version used on item.
+		* @param		aStatus				On completion of the creating an item, contains the result code.
+		*/
+		IMPORT_C void DoCreateItemL(TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent, const TDesC8& aMimeType, const TDesC8& aMimeVer, TRequestStatus& aStatus);
+
+		/**
+		* DoReplaceItemL() opens the data item specified by aUid asynchronously to be updated.
+		* @param		aUid				Item UID which going to be updated.
+		* @param		aSize				Size of the item data.
+		* @param		aParent				Parent of the item.
+		* @param		aFieldChange		Accept field changes.
+		* @param		aStatus				On completion of the updating of item, contains the result code.
+		*/
+		IMPORT_C void DoReplaceItemL(TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent, TBool aFieldChange, TRequestStatus& aStatus);
+
+		/**
+		* DoReadItemL() reads data(or size of aBuffer) of an item opened in DoOpenItemL() to given aBuffer.
+		* @param		aBuffer				Buffer to item data.
+		*/
+		IMPORT_C void DoReadItemL(TDes8& aBuffer);
+
+		/**
+		* DoWriteItemL() writes aData of an item opened in DoCreateItemL() or DoReplaceItemL() to be saved on database.
+		* @param		aData				Item data (or part of data).
+		*/
+		IMPORT_C void DoWriteItemL(const TDesC8& aData);
+
+		/**
+		* DoCommitItemL() completes an item operation started in DoCreateItemL() or DoReplaceItemL().
+		* @param		aStatus				On completion of the operation, contains the result code.
+		*/
+		IMPORT_C void DoCommitItemL(TRequestStatus& aStatus);
+
+		/**
+		* DoCloseItem() completes an item operation started in DoOpenItemL().
+		*/
+		IMPORT_C void DoCloseItem();
+
+		/**
+		* DoMoveItemL() moves item specified by aUid asynchronously.
+		* @param		aUid				Item UID which going to be moved.
+		* @param		aNewParent			A new parent of the item.
+		* @param		aStatus				On completion of the moving an item, contains the result code.
+		*/
+		IMPORT_C void DoMoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent, TRequestStatus& aStatus);
+
+		/**
+		* DoDeleteItemL() deletes item specified by aUid asynchronously.
+		* @param		aUid				Item UID which going to be deleted.
+		* @param		aStatus				On completion of the deleting an item, contains the result code.
+		*/
+		IMPORT_C void DoDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
+
+		/**
+		* DoSoftDeleteItemL() soft deletes item specified by aUid asynchronously.
+		* @param		aUid				Item UID which going to be softdeleted.
+		* @param		aStatus				On completion of the softdeleting an item, contains the result code.
+		*/
+		IMPORT_C void DoSoftDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
+
+		/**
+		* DoDeleteAllItemsL() deletes all items from opened database asynchronously.
+		* @param		aStatus				On completion of delete, contains the result code.
+		*/
+		IMPORT_C void DoDeleteAllItemsL(TRequestStatus& aStatus);
+
+		/**
+		* DoHasSyncHistory() checks if previous sync with opened server and context.
+		* @return ETrue if there is synchonization history.
+		*/
+		IMPORT_C TBool DoHasSyncHistory() const;
+
+		/**
+		* DoAddedItems() gets all added items on client since previous synchronization.
+		* @return Added items.
+		*/
+		IMPORT_C const MSmlDataItemUidSet& DoAddedItems() const;
+
+		/**
+		* DoDeletedItems() gets all deleted items on client since previous synchronization.
+		* @return Deleted items.
+		*/
+		IMPORT_C const MSmlDataItemUidSet& DoDeletedItems() const;
+
+		/**
+		* DoSoftDeletedItems() gets all softdeleted items on client since previous synchronization.
+		* @return Soft deleted items.
+		*/
+		IMPORT_C const MSmlDataItemUidSet& DoSoftDeletedItems() const;
+
+		/**
+		* DoModifiedItems() gets all modified items on client since previous synchronization.
+		* @return Modified items.
+		*/
+		IMPORT_C const MSmlDataItemUidSet& DoModifiedItems() const;
+
+		/**
+		* DoMovedItems() gets all moved items on client since previous synchronization.
+		* @return Moved items.
+		*/
+		IMPORT_C const MSmlDataItemUidSet& DoMovedItems() const;
+
+		/**
+		* DoResetChangeInfoL() resets client synchronization data => next time will be slow sync.
+		* @param		aStatus				On completion of reset, contains the result code.
+		*/
+		IMPORT_C void DoResetChangeInfoL(TRequestStatus& aStatus);
+
+		/**
+		* DoCommitChangeInfoL() commits client synchronization changes for given aItems list.
+		* @param		aStatus				On completion of given items, contains the result code.
+		* @param		aItems				Item ids to be commited.
+		*/
+		IMPORT_C void DoCommitChangeInfoL(TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems);
+
+		/**
+		* DoCommitChangeInfoL() commits all client synchronization changes.
+		* @param		aStatus				On completion of all items, contains the result code.
+		*/
+		IMPORT_C void DoCommitChangeInfoL(TRequestStatus& aStatus);
+
+		/**
+		* Default constructor.
+		*/
+		IMPORT_C CNSmlContactsDataStore();
+
+		/**
+		* SetOwnStoreFormatL() Sets dataproviders own storeformat.
+		*/
+		IMPORT_C void SetOwnStoreFormatL();
+
+		/**
+		* LdoFetchItemL() Fetches item data from database.
+		* @param		aUid				Items uid for fetching.
+		* @param		aItem				Items data after fetch.
+		* @return KErrNone if successful.
+		*/
+		IMPORT_C TInt LdoFetchItemL( TSmlDbItemUid& aUid, CBufBase& aItem );
+
+		/**
+		* LdoAddItemL() Adds item data to database.
+		* @param		aUid				Item uid reference for add.
+		* @param		aItem				Item data to be added.
+		* @param		aSize				Item data size.
+		* @param		aLastModified		Item creation date.
+		* @return KErrNone if successful.
+		*/
+		IMPORT_C TInt LdoAddItemL( TSmlDbItemUid& aUid,
+		                  const TDesC8& aItem,
+		                  TInt aSize,
+		                  TTime& aLastModified );
+
+		/**
+		* LdoAddItemsL() Adds several items to database.
+		* @param		aUids				Array of items uid references for add.
+		* @param		aItem				Items data to be added.
+		* @param		aSize				Items data size.
+		* @param		aLastModified		Last items creation date.
+		* @return KErrNone if successful.
+		*/
+		IMPORT_C TInt LdoAddItemsL( RArray<TInt>& aUids,
+		                   CBufBase*& aItem,
+		                   TInt aSize,
+		                   TTime& aLastModified );
+
+		/**
+		* LdoUpdateItemL() Updates item data to database.
+		* @param		aUid				Item uid for update.
+		* @param		aItem				Item data to be updated.
+		* @param		aSize				Item data size.
+		* @param		aLastModified		Item modification date.
+		* @return KErrNone if successful.
+		*/
+		IMPORT_C TInt LdoUpdateItemL( TSmlDbItemUid aUid,
+		                     const TDesC8& aItem,
+		                     TInt aSize,
+		                     TTime& aLastModified );
+
+		/**
+		* LdoMergeLC() Merges item data from server in update with clients item data.
+		* @param		aUid				Item uid for update.
+		* @param		aItem				Item data to be merged.
+		* @return KErrNone if successful.
+		*/
+		IMPORT_C CBufBase* LdoMergeLC( TSmlDbItemUid& aUid, const TDesC8& aItem );
+
+		/**
+		* DriveBelowCriticalLevelL() Checks if there is enough space on client to store added item data.
+		* @param		aSize				Item size to be added.
+		* @return ETrue if there isn't enough drive space.
+		*/
+		IMPORT_C TBool DriveBelowCriticalLevelL( TInt aSize );
+
+		/**
+		* StripPropertyL() Removes aProperty from aItem data.
+		* @param		aItem				Item data to be stripped.
+		* @param		aProperty			Property to be removed from aItem.
+		*/
+		IMPORT_C void StripPropertyL( HBufC8*& aItem, const TDesC8& aProperty ) const;
+
+		/**
+		* StripPropertyL() Remove aPropertys from aItem data.
+		* @param		aItem				Item(s) data to be stripped.
+		* @param		aProperty			Property to be removed from aItem.
+		*/
+		IMPORT_C void StripPropertyL( CBufBase*& aItem, const TDesC8& aProperty ) const;
+
+		/**
+		* ExecuteBufferL()Executes all buffered items from buffer.
+		* @param		aResultArray		Array to return statuscodes for each command.
+		* @return KErrNone if successful.
+		*/
+		IMPORT_C TInt ExecuteBufferL(RArray<TInt>& aResultArray);
+	
+		/**
+		* AddBufferListL()Adds a new item to buffer.
+		* @param 		aUid 				New item's uid.
+		* @param 		aSize 				New item's size.
+		* @param 		aStatus 			New item's status.
+		* @return Pointer to the buffer.
+		*/
+		IMPORT_C CBufBase* AddBufferListL(TSmlDbItemUid& aUid, TInt aSize, TInt aStatus);
+		
+		/**
+        * Reads all modifications from clients contacts databse.
+        */      
+        TInt FetchModificationsL();
+
+    protected: // New 
+        
+    	IMPORT_C virtual const TDesC& GetStoreFormatResourceFileL() const;    
+        
+        /**
+         * Performs the actual computation for ExecuteBufferL() method.
+         * Allows re-implementation of the method in sub-classes.
+         *
+         * @param aResultArray Array to return statuscodes for each command.
+         * @return KErrNone if successful.
+         */
+        IMPORT_C virtual TInt DoExecuteBufferL(RArray<TInt>& aResultArray);
+        
+        /**
+         * Get datamod instance
+         * @return reference to datamod instance.
+         */
+        IMPORT_C virtual CNSmlDataModBase& GetDataMod();
+
+        /**
+         * Exports the contact in the vCard format from contacts database.
+         * @param aUid UID of the contact to be exported
+         * @param aContactBufBase Upon return includes the contents of
+         *  the exported vCard.
+         *  @return Error code.
+         */
+        IMPORT_C virtual TInt ExportContactsL( const TUid& aUid, 
+            CBufBase& aContactBufBase );
+
+        /**
+         * Imports the contact in the vCard to contacts database.
+         * @param aContactBufBase The contents of the vCards to be 
+         *  imported.
+         * @return An UID array of the contacts which were imported.
+         */
+        IMPORT_C virtual CArrayFixFlat<TUid>* ImportContactsL( 
+            const TDesC8& aContactBufBase );
+
+    protected: // data
+	
+		// MODULE DATA STRUCTURES
+		enum TNSmlDataStoreStatus  // DataStore status
+			{
+			ENSmlClosed = 1,
+			ENSmlOpenAndWaiting,
+			ENSmlItemOverflow,
+			ENSmlItemOpen,
+			ENSmlItemCreating,
+			ENSmlItemUpdating
+			};
+
+		enum TNSmlCntCommand		// Modification type
+			{
+			ENSmlCntItemAdd = 1,
+			ENSmlCntItemDelete,
+			ENSmlCntItemSoftDelete,
+			ENSmlCntItemRead,
+			ENSmlCntItemMove,
+			ENSmlCntItemReplace,
+			ENSmlCntItemFieldLevelReplace
+			};
+
+		// ------------------------------------------------------------------------------------------------
+		// Buffering Stuff for BatchMode operations
+		// ------------------------------------------------------------------------------------------------
+		class CNSmlContactsBufferItem : public CBase
+			{
+			public:	
+				/**
+				* Destructor.
+				*/
+				~CNSmlContactsBufferItem();
+				
+			public: // data
+				TSmlDbItemUid	*iPUid;			// New item ID 
+				TSmlDbItemUid	iUid;			// Item ID
+				CBufBase		*iItemData;		// Item data
+				HBufC8 			*iMimeType;		// Mimetype
+				HBufC8 			*iMimeVersion;	// Mime version
+				TNSmlCntCommand iModType;		// Commands type
+				TInt			iStatus;		// Command status
+				TInt 			iSize;			// Item size
+			};
+
+       
+    protected:
+        TRequestStatus* iCallerStatus;
+        TBool iBatchMode;
+        TNSmlCntCommand iModType;
+        TBool iOpened;
+        TBool iSyncHistory;
+        TInt64 iOpenedStoreId;
+        RPointerArray<CNSmlContactsBufferItem> iContactsBufferItemList;
+        TSmlDbItemUid *iPUid;
+        TSmlDbItemUid iUid;
+        CBufBase* iItemDataAddBatch;
+        RArray<TInt> iAddResultArray;
+        CBufBase* iItemData;
+
+        CNSmlChangeFinder* iChangeFinder;
+        TKeyArrayFix iKey;
+        TBool iSnapshotRegistered;
+		TBool iFieldLevelReplace;
+        CSmlDataStoreFormat* iStoreFormat;
+
+        TInt iServerMaxObjectSize;
+        TInt iItemPos;
+        TNSmlDataStoreStatus iState;
+
+
+        TBool iTransactionMode;
+        TInt iModificationCount;
+
+        TPtrC8 iMimeTypeItem;
+        TPtrC8 iMimeVersionItem;
+
+        TPtrC8 iUsedMimeType;
+        TPtrC8 iUsedMimeVersion;
+
+        RStringF iServerMimeType;
+        RStringF iServerMimeVersion;
+		
+        HBufC* iDefaultStoreName;
+
+        CNSmlDataModBase* iDataMod;
+		
+        RFs iRfs;
+        TInt iDrive;
+
+        TInt iItemSize;
+
+        HBufC* iStoreName;
+
+        RStringPool iStringPool;
+
+        CNSmlDataItemUidSet* iNewUids;
+        CNSmlDataItemUidSet* iDeletedUids;
+        CNSmlDataItemUidSet* iSoftDeletedUids;
+        CNSmlDataItemUidSet* iReplacedUids;
+        CNSmlDataItemUidSet* iMovedUids;
+
+        TBool iLastItem;
+        TInt iStateItem; 
+
+        CNsmlContactsDataStoreExtension* iContactsDataStoreExtension;
+
+        CArrayFixSeg<TNSmlSnapshotItem>* iSnapshot;
+        CArrayFixFlat<TUid>* iCntUidList;
+
+	};
+
+#endif // __NSMLCONTACTSDATASTORE_H__
+
+// End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/UT_nsmldummydataprovider.mmp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2009 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:  MMP file for contact adapter unit tests.
+*
+*/
+
+#include<Digia/Eunit/EUnitCaps.h>
+#include <platform_paths.hrh>
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+
+// DEFINES
+MACRO 			__NSML_MODULETEST__
+
+// Build target
+TARGET          UT_nsmldummydataprovider.dll
+TARGETTYPE      dll
+UID             0x1000af5a 0x01700000
+
+CAPABILITY      EUNIT_CAPS
+VENDORID        0x00000000
+
+#if defined(ARMCC)
+DEFFILE		./def/eabicontactsdataprovider_test
+#elif defined(WINSCW)
+DEFFILE		./def/bwinscwcontactsdataprovider_test
+#endif
+
+// Source files
+SOURCEPATH      .
+SOURCE          dllmain.cpp
+SOURCE          cnsmldummydataprovider_test.cpp
+SOURCE          cnsmldummydatastore_test.cpp
+SOURCE 			cnsmladaptertestutilities.cpp 
+SOURCE          cnsmldummydatastorewaiter.cpp
+// Code under test
+SOURCEPATH      ../DummyAdapter/src
+SOURCE          nsmldummydataprovider.cpp
+SOURCE          nsmldummydatastore.cpp
+
+// Include paths
+USERINCLUDE     . ../DummyAdapter/inc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE 	/epoc32/include/ecom
+SYSTEMINCLUDE 	/epoc32/include/syncml
+SYSTEMINCLUDE	/epoc32/include/internal
+SYSTEMINCLUDE   /epoc32/include/Digia/EUnit
+
+// Dependencies to system components
+LIBRARY         euser.lib
+LIBRARY         EUnit.lib
+LIBRARY         bafl.lib
+LIBRARY         smldataprovider.lib
+LIBRARY         smlstoreformat.lib
+LIBRARY         nsmlcontactsdataprovider.lib
+LIBRARY         efsrv.lib
+LIBRARY         cntmodel.lib
+LIBRARY         estor.lib
+LIBRARY         nsmldebug.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/bld.inf	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 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: Build info file for DS contact adapter unit tests.
+*
+*/
+
+//#include <platform_paths.hrh>
+
+PRJ_MMPFILES
+UT_nsmldummydataprovider.mmp
+
+PRJ_EXPORTS
+testdata\standard.vcf    c:\data\testdata\standard.vcf
+testdata\basic.vcf    c:\data\testdata\basic.vcf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmladaptertestutilities.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2009 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:  Source code file for contact adapter test utilities.
+*
+*/
+
+#include "cnsmladaptertestutilities.h"
+#include <eunitmacros.h>
+#include <utf.h> 
+#include <cntitem.h>  // CContactCard
+#include <cntfield.h> // CContactItemField
+#include <cntfldst.h> // CContactTextField
+#include <s32mem.H>
+
+namespace
+    {
+    // EUNIT_PRINT will truncate descriptors longer than 512 characters.
+    const TInt KEunitPrintMaxLength = 512;
+    }
+
+CNSmlAdapterTestUtilities* CNSmlAdapterTestUtilities::NewL()
+    {
+    CNSmlAdapterTestUtilities* self = CNSmlAdapterTestUtilities::NewLC();
+    CleanupStack::Pop();
+    return self;
+    }
+
+CNSmlAdapterTestUtilities* CNSmlAdapterTestUtilities::NewLC()
+    {
+    CNSmlAdapterTestUtilities* self = new( ELeave ) CNSmlAdapterTestUtilities();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;    
+    }
+
+CNSmlAdapterTestUtilities::CNSmlAdapterTestUtilities()
+    {
+    }
+
+CNSmlAdapterTestUtilities::~CNSmlAdapterTestUtilities()
+    {
+    iFs.Close();
+    delete iIdArray;
+    delete iContactDatabase;
+    }
+
+void CNSmlAdapterTestUtilities::ConstructL()
+    {
+    User::LeaveIfError( iFs.Connect() );
+    }
+
+void CNSmlAdapterTestUtilities::OpenVCardFromFileLC( const TDesC& aFileName, RFileReadStream& aReadStream )
+    {
+    TInt err = aReadStream.Open( iFs, aFileName, EFileRead );
+    if (err != KErrNone)
+        {
+        if (err == KErrNotFound)
+            {
+            EUNIT_PRINT( _L("%S ,vCard file not found"), &aFileName );
+            }
+        else if ( err == KErrPathNotFound )
+            {
+            EUNIT_PRINT( _L("%S ,vCard path not found"), &aFileName );        
+            }
+        else 
+            {
+            EUNIT_PRINT( _L("%S , vCard file cannot be opened. Error code %d"), &aFileName, err );
+            }
+        User::Leave( err  );
+        }
+    EUNIT_PRINT( _L("VCard opened") );
+    CleanupClosePushL( aReadStream );
+    }
+
+HBufC* CNSmlAdapterTestUtilities::ReadVCardFromFileLC( const TDesC& aFileName )
+    {
+    HBufC8* vCard8 = ReadVCard8FromFileLC( aFileName );
+    HBufC* vCard = HBufC::NewL( vCard8->Length() ); 
+    vCard8->Des().Copy( *vCard8 );
+    CleanupStack::PopAndDestroy( vCard8 );
+    
+    CleanupStack::PushL( vCard );    
+    return vCard;
+    }
+
+HBufC8* CNSmlAdapterTestUtilities::ReadVCard8FromFileLC( const TDesC& aFileName )
+    {
+    RFileReadStream readStream;
+    OpenVCardFromFileLC(aFileName, readStream);
+    
+    const TInt fileSize = readStream.Source()->SizeL();
+    CBufFlat* buffer = CBufFlat::NewL( fileSize );
+    CleanupStack::PushL( buffer );
+
+    RBufWriteStream writeStream( *buffer );
+    CleanupClosePushL( writeStream );
+    writeStream.WriteL( readStream );
+    writeStream.CommitL();
+    
+    HBufC8* vCard8 = buffer->Ptr(0).AllocL();
+    CleanupStack::PopAndDestroy( 3, &readStream );
+    
+    CleanupStack::PushL( vCard8 );
+    return vCard8;
+    }
+
+CBufFlat* CNSmlAdapterTestUtilities::ReadBufFromFileLC( const TDesC& aFileName )
+    {
+    RFileReadStream readStream;
+    OpenVCardFromFileLC(aFileName, readStream);
+    
+    const TInt fileSize = readStream.Source()->SizeL();
+    CBufFlat* buffer = CBufFlat::NewL( fileSize );
+    CleanupStack::PushL( buffer );
+
+    RBufWriteStream writeStream( *buffer );
+    CleanupClosePushL( writeStream );
+    writeStream.WriteL( readStream );
+    writeStream.CommitL();
+    CleanupStack::PopAndDestroy( &writeStream );
+    CleanupStack::Pop( buffer );
+    CleanupStack::PopAndDestroy( &readStream );
+    CleanupStack::PushL( buffer );
+    return buffer;
+    }
+
+void CNSmlAdapterTestUtilities::SetupEmptyContactDbL( const TDesC& aDbName )
+    {
+    if( aDbName.Length() > 0 )
+        {
+        iContactDatabase = CContactDatabase::ReplaceL( aDbName );
+        }
+    else
+        {
+        iContactDatabase = CContactDatabase::OpenL();  // Use default contact DB.
+        }
+    
+    CContactIdArray* array = iContactDatabase->ContactsChangedSinceL( Time::NullTTime() );
+    CleanupStack::PushL( array );
+    iContactDatabase->DeleteContactsL(*array);        
+    CleanupStack::PopAndDestroy( array );
+    }
+
+/**
+ * Setup contact DB with the following contacts
+ *   + Tim Tester (id index 0)
+ *   + Teddy McTest (id index 1)
+ *   + Tod TestHill (id index 2)
+ *   + Simon Software (id index 3)
+ *   + Cyd Effect (id index 4)
+ *   + Nick Name (id index 5)
+ * 
+ */
+void CNSmlAdapterTestUtilities::SetupAndPopulateContactDbL( const TDesC& aDbName )
+    {
+    if( aDbName.Length() > 0 )
+        {
+        iContactDatabase = CContactDatabase::ReplaceL( aDbName );
+        }
+    else
+        {
+        iContactDatabase = CContactDatabase::OpenL();  // Use default contact DB.
+        }
+    
+    iIdArray = CContactIdArray::NewL();
+
+    // Create test contacts
+    iIdArray->AddL( AddContactL( _L( "Tim" ), _L( "Tester" ), _L( "+358501234567" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Teddy" ), _L("McTest" ), _L( "+358501112222" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Tod" ), _L( "TestHill" ), _L( "+358506666666" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Simon" ), _L( "Software" ), _L( "+3585011223333" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Cyd" ), _L( "Effect" ), _L( "+358503334444" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Nick" ), _L( "Name" ), _L( "+358402223333" ) ) );
+    }
+
+// Helper method to add a simple contact to test contact DB
+TContactItemId CNSmlAdapterTestUtilities::AddContactL(
+        const TDesC& aFirstName,
+        const TDesC& aLastName,
+        const TDesC& aPhoneNumber )
+    {
+    _LIT( KLabelFamilyName, "Last name");
+    _LIT( KLabelGivenName, "First name");
+    _LIT( KLabelPhone, "Phone");
+    //_LIT( KLabelNickname, "X-EPOCSECONDNAME");
+
+    CContactCard* card = CContactCard::NewLC();
+    
+    // Family name field
+    CContactItemField* familyNameField =
+        CContactItemField::NewLC( KStorageTypeText, KUidContactFieldFamilyName );
+    familyNameField->SetLabelL( KLabelFamilyName );
+    familyNameField->SetMapping( KUidContactFieldVCardMapUnusedN );
+    familyNameField->TextStorage()->SetTextL( aLastName );
+    card->AddFieldL( *familyNameField ); // Takes ownership
+    CleanupStack::Pop( familyNameField );
+    
+    // First name field
+    CContactItemField* nameField =
+    CContactItemField::NewLC( KStorageTypeText, KUidContactFieldGivenName );
+    nameField->SetLabelL( KLabelGivenName );
+    nameField->SetMapping( KUidContactFieldVCardMapUnusedN );
+    nameField->TextStorage()->SetTextL( aFirstName );
+    card->AddFieldL( *nameField );
+    CleanupStack::Pop(nameField);
+    
+    // Phone number field
+    CContactItemField* phoneField =
+        CContactItemField::NewLC( KStorageTypeText, KUidContactFieldPhoneNumber );
+    phoneField->SetLabelL( KLabelPhone );
+    phoneField->SetMapping( KUidContactFieldVCardMapTEL );
+    phoneField->TextStorage()->SetTextL( aPhoneNumber );
+    card->AddFieldL( *phoneField );
+    CleanupStack::Pop( phoneField );
+    
+    // Nickname field
+    /*if( aNickname.Length() > 0 )
+    	{
+        CContactItemField* NicknameField =
+            CContactItemField::NewLC( KStorageTypeText, KUidContactFieldSecondName );
+        NicknameField->SetLabelL( KLabelNickname );
+        NicknameField->SetMapping( KUidContactFieldVCardMapSECONDNAME );
+        NicknameField->TextStorage()->SetTextL( aNickname );
+        card->AddFieldL( *NicknameField );
+        CleanupStack::Pop( NicknameField );
+    	}*/
+
+    
+    TContactItemId cardId = iContactDatabase->AddNewContactL( *card );        
+    CleanupStack::PopAndDestroy( card );
+    
+    return cardId;
+    }
+
+/**
+ * Empties the test contact DB to its initial state.
+ */ 
+void CNSmlAdapterTestUtilities::TeardownAndEmptyContactDbL( const TDesC& aDbName )
+    {
+    iContactDatabase->DeleteContactsL( *iIdArray );
+    
+    delete iIdArray;
+    iIdArray = NULL;
+
+    delete iContactDatabase;
+    iContactDatabase = NULL;
+    if( aDbName.Length() > 0 )
+        {
+        TRAP_IGNORE( CContactDatabase::DeleteDatabaseL( aDbName ) );
+        }
+    }
+
+CContactDatabase* CNSmlAdapterTestUtilities::GetDb()
+    {
+    EUNIT_ASSERT( iContactDatabase );
+    return iContactDatabase;
+    }
+
+CContactIdArray* CNSmlAdapterTestUtilities::GetContactArray()
+    {
+    return iIdArray;
+    }
+
+RFs& CNSmlAdapterTestUtilities::FileSession()
+    {
+    return iFs;
+    }
+
+CBufBase* CNSmlAdapterTestUtilities::ExportContactLC( TContactItemId aId )
+    {
+    CContactDatabase* db = CContactDatabase::OpenL();  // Use default contact DB.
+    CleanupStack::PushL( db );
+    CContactIdArray* idArr = CContactIdArray::NewLC();
+    idArr->AddL( aId );
+    CBufFlat* buffer = CBufFlat::NewL( 1024 );
+    CleanupStack::PushL( buffer );
+    RBufWriteStream writeStream( *buffer );
+    CleanupClosePushL( writeStream );
+    
+    TRAPD( err, iContactDatabase->ExportSelectedContactsL( TUid::Uid(KVersitEntityUidVCard), *idArr, 
+        writeStream, CContactDatabase::EExcludeUid, Versit::EUTF8CharSet ) );
+
+    EUNIT_ASSERT_EQUALS_DESC( err, KErrNone, "ExportSelectedContactsL leave" );
+    
+    CleanupStack::PopAndDestroy( &writeStream );
+    CleanupStack::Pop( buffer );
+    CleanupStack::PopAndDestroy( idArr );
+    CleanupStack::PopAndDestroy( db );
+    CleanupStack::PushL( buffer );
+    return buffer;
+    }
+
+void CNSmlAdapterTestUtilities::PrintData( const TDesC& aTitle, CBufBase& aBuf )
+    {
+
+    EUNIT_PRINT( aTitle );
+
+    for (TInt i = 0; i < aBuf.Ptr(0).Length(); i += KEunitPrintMaxLength )
+        {
+        EUNIT_PRINT( aBuf.Ptr(i) );
+        }
+
+    }
+
+void CNSmlAdapterTestUtilities::PrintData( const TDesC8& aTitle, CBufBase& aBuf )
+    {
+
+    EUNIT_PRINT( aTitle );
+
+    for (TInt i = 0; i < aBuf.Ptr(0).Length(); i += KEunitPrintMaxLength )
+        {
+        EUNIT_PRINT( aBuf.Ptr(i) );
+        }
+
+    }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmladaptertestutilities.h	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2009 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:  Header file for contact adapter test utilities.
+*
+*/
+
+#ifndef CNSMLADAPTERTESTUTILITIES_H_
+#define CNSMLADAPTERTESTUTILITIES_H_
+
+#include <e32base.h>
+#include <f32file.h>
+#include <s32file.h>
+#include <cntdb.h>    // CContactDatabase
+#include <cntdef.h>   // TContactItemId 
+
+class CNSmlAdapterTestUtilities : public CBase
+    {
+    public:
+        
+        static CNSmlAdapterTestUtilities* NewL();
+        static CNSmlAdapterTestUtilities* NewLC();
+        virtual ~CNSmlAdapterTestUtilities();
+
+    private:    
+        CNSmlAdapterTestUtilities();
+        void ConstructL();
+
+    public:
+        
+        void OpenVCardFromFileLC( const TDesC& aFileName, RFileReadStream& aReadStream  );
+        HBufC* ReadVCardFromFileLC( const TDesC& aFileName );
+        HBufC8* ReadVCard8FromFileLC( const TDesC& aFileName );
+        CBufFlat* ReadBufFromFileLC( const TDesC& aFileName );
+        
+        // Setting up / Tearing down a test DB with a few contacts
+        void SetupEmptyContactDbL( const TDesC& aDbName );
+        void SetupAndPopulateContactDbL( const TDesC& aDbName );
+        void TeardownAndEmptyContactDbL( const TDesC& aDbName );
+        CContactDatabase* GetDb();
+        CContactIdArray* GetContactArray();
+        RFs& FileSession();
+        CBufBase* ExportContactLC( TContactItemId aId );
+        void PrintData( const TDesC& aTitle , CBufBase& aBuf );
+        void PrintData( const TDesC8& aTitle , CBufBase& aBuf );
+
+    public:
+        // Helper methods
+        TContactItemId AddContactL( const TDesC& aFirstName,
+                 const TDesC& aLastName,
+                 const TDesC& aPhoneNumber );
+        
+    private:    
+        RFs                 iFs;
+        CContactDatabase*   iContactDatabase;
+        CContactIdArray*    iIdArray;
+    };
+
+#endif /* CNSMLADAPTERTESTUTILITIES_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydataprovider_test.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,341 @@
+/*
+* Copyright (c) 2009 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:  Source code file for contact adapter's dataprovider unit tests.
+*
+*/
+
+// CLASS HEADER
+#include "cnsmldummydataprovider_test.h"
+
+// EXTERNAL INCLUDES
+#include <eunitmacros.h>
+#include <eunitdecorators.h>
+#include <s32mem.h>
+#include <nsmlconstants.h> 
+#include <smldataprovider.h>
+
+//  LOCAL DEFINITIONS
+namespace
+    {
+    // Note: Currently "symbian" is used as default DB name. Earlier 
+    // was set to "C:Contacts.cdb"
+    _LIT( KDefaultDBName, "symbian" );
+    }
+
+
+
+// - Construction -----------------------------------------------------------
+
+CNSmlDummyDataProvider_Test* CNSmlDummyDataProvider_Test::NewL()
+    {
+    CNSmlDummyDataProvider_Test* self = CNSmlDummyDataProvider_Test::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CNSmlDummyDataProvider_Test* CNSmlDummyDataProvider_Test::NewLC()
+    {
+    CNSmlDummyDataProvider_Test* self = new( ELeave ) CNSmlDummyDataProvider_Test();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+CNSmlDummyDataProvider_Test::~CNSmlDummyDataProvider_Test()
+    {
+    }
+
+CNSmlDummyDataProvider_Test::CNSmlDummyDataProvider_Test()
+    {
+    }
+
+void CNSmlDummyDataProvider_Test::ConstructL()
+    {
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+
+// - Setup & Teardown ---------------------------------------------------------
+
+void CNSmlDummyDataProvider_Test::SetupL()
+    {
+    iCNSmlDummyDataProvider = CNSmlDummyDataProvider::NewL();
+    }
+    
+void CNSmlDummyDataProvider_Test::Teardown()
+    {
+    delete iCNSmlDummyDataProvider;
+    iCNSmlDummyDataProvider = NULL;
+    }   
+
+// - Actual test methods ------------------------------------------------------
+
+void CNSmlDummyDataProvider_Test::NewLL(  )
+    {
+    CNSmlDummyDataProvider* provider = CNSmlDummyDataProvider::NewL();
+    EUNIT_ASSERT( provider );
+    delete provider;
+    }
+
+void CNSmlDummyDataProvider_Test::CreateAdapterL()
+    {
+    // Platform's Contact Adapter Uid
+    TSmlDataProviderId id = { 0x101F6DDD };
+
+    CSmlDataProvider* dp = CSmlDataProvider::NewL( id );
+    CSmlDataStore* store = dp->NewStoreInstanceLC();
+    EUNIT_ASSERT( store );
+    CleanupStack::PopAndDestroy( store );
+    TBool operation = dp->SupportsOperation( KUidSmlSupportBatch );
+    EUNIT_ASSERT( operation );
+    operation = dp->SupportsOperation( KUidSmlSupportMultipleStores );
+    EUNIT_ASSERT( operation );
+    operation = dp->SupportsOperation( KUidSmlSupportSuspendResume );
+    EUNIT_ASSERT( !operation );
+    TPtrC storeName = dp->DefaultStoreL();
+    EUNIT_ASSERT( dp->DefaultStoreL().Compare( KDefaultDBName ) == 0 );
+    const CSmlDataStoreFormat& format = dp->StoreFormatL();
+    EUNIT_ASSERT( format.DisplayName().Compare( _L("Contacts") ) == 0 );
+    EUNIT_PRINT( format.DisplayName() );
+    delete dp;
+    }
+
+void CNSmlDummyDataProvider_Test::GetStoreFormatResourceFileLL()
+    {
+    const TDesC& resourceFile = iCNSmlDummyDataProvider->GetStoreFormatResourceFileL();
+    EUNIT_PRINT( resourceFile );
+    }
+
+void CNSmlDummyDataProvider_Test::DoStoreFormatLL()
+    {
+    const CSmlDataStoreFormat& storeFormat = iCNSmlDummyDataProvider->DoStoreFormatL();
+    EUNIT_PRINT( storeFormat.DisplayName() );
+    EUNIT_PRINT( _L("Property count %d"), storeFormat.FolderPropertyCount() );
+    CBufFlat* store = CBufFlat::NewL( 512 );
+    CleanupStack::PushL( store );
+    RBufWriteStream writeStream(*store, 0);
+    CleanupClosePushL( writeStream );
+    storeFormat.ExternalizeL( writeStream );
+    CleanupStack::PopAndDestroy( 2, store );
+    }
+
+void CNSmlDummyDataProvider_Test::TestStoreSupportForPartialSyncL()
+    {
+    const CSmlDataStoreFormat& storeFormat = iCNSmlDummyDataProvider->DoStoreFormatL();
+    EUNIT_ASSERT_EQUALS( storeFormat.MimeFormatCount(), 1 );
+    EUNIT_ASSERT( !storeFormat.MimeFormat(0).FieldLevel() );
+    }
+
+void CNSmlDummyDataProvider_Test::TestStoreSupportMimeTypeL()
+    {
+    _LIT8( KNSmlvCard21Name, "text/x-vcard" );
+    _LIT8( KNSmlvCard21Ver, "2.1" );
+
+    const CSmlDataStoreFormat& storeFormat = iCNSmlDummyDataProvider->DoStoreFormatL();
+    EUNIT_ASSERT_EQUALS( storeFormat.MimeFormatCount() ,1 );
+    EUNIT_ASSERT_EQUALS( storeFormat.MimeFormat(0).MimeType().DesC(), KNSmlvCard21Name() );
+    EUNIT_ASSERT_EQUALS( storeFormat.MimeFormat(0).MimeVersion().DesC(), KNSmlvCard21Ver() );
+    }
+
+void CNSmlDummyDataProvider_Test::DoListStoresLCL()
+    {
+    CDesCArray* store = iCNSmlDummyDataProvider->DoListStoresLC();
+    TPtrC ptrStoreName = ( *store )[ 0 ];
+    EUNIT_PRINT( ptrStoreName );
+    EUNIT_ASSERT( ptrStoreName.Compare( KDefaultDBName ) == 0 );
+    CleanupStack::PopAndDestroy( store );
+    }
+
+void CNSmlDummyDataProvider_Test::DoOnFrameworkEvent()
+    {
+    iCNSmlDummyDataProvider->DoOnFrameworkEvent( TSmlFrameworkEvent( 0 ), 0, 0 );
+    }
+
+void CNSmlDummyDataProvider_Test::DoSupportedServerFiltersL()
+    {
+    RPointerArray< CSyncMLFilter > filterArray;
+    filterArray = iCNSmlDummyDataProvider->DoSupportedServerFiltersL();
+    filterArray.ResetAndDestroy();
+    filterArray.Close();
+    }
+
+void CNSmlDummyDataProvider_Test::DoCheckSupportedServerFiltersL()
+    {
+    const CSmlDataStoreFormat& storeFormat =
+        iCNSmlDummyDataProvider->DoStoreFormatL();
+    RPointerArray< CSyncMLFilter >* filters = 
+        new ( ELeave ) RPointerArray< CSyncMLFilter >();
+    CleanupRPtrArrayPushL( filters );
+    TSyncMLFilterChangeInfo changeInfo( ESyncMLDefault );
+
+    TRAPD( err, iCNSmlDummyDataProvider->DoCheckSupportedServerFiltersL(
+        storeFormat, *filters, changeInfo ) );
+
+    EUNIT_ASSERT( err == KErrNotSupported );
+    CleanupStack::PopAndDestroy( filters ); 
+    }
+
+void CNSmlDummyDataProvider_Test::DoCheckServerFiltersL()
+    {
+    RPointerArray< CSyncMLFilter >* filters = 
+        new ( ELeave ) RPointerArray< CSyncMLFilter >();
+    CleanupRPtrArrayPushL( filters );
+    TSyncMLFilterChangeInfo changeInfo( ESyncMLDefault );
+
+    TRAPD( err, iCNSmlDummyDataProvider->DoCheckServerFiltersL( 
+        *filters, changeInfo ) );
+
+    EUNIT_ASSERT( err == KErrNotSupported );  
+    CleanupStack::PopAndDestroy( filters ); 
+    }
+
+void CNSmlDummyDataProvider_Test::DoGenerateRecordFilterQueryL()
+    {
+    RPointerArray< CSyncMLFilter >* filters = 
+        new ( ELeave ) RPointerArray< CSyncMLFilter >();
+    CleanupRPtrArrayPushL( filters );
+    TSyncMLFilterMatchType matchType( ESyncMLMatchDisabled );
+    TSyncMLFilterType filterType( ESyncMLTypeInclusive );
+    TBuf< 100 > mimeType;
+
+    TRAPD( err, { 
+        HBufC* storeName =  NULL;
+        HBufC* record = NULL;
+        record = iCNSmlDummyDataProvider->DoGenerateRecordFilterQueryLC( 
+        *filters, matchType, mimeType, filterType, *storeName );
+        delete record; 
+        delete storeName;
+        }
+        );
+    EUNIT_ASSERT( err == KErrNotSupported );
+
+    CleanupStack::PopAndDestroy( ); //filters
+    }
+
+void CNSmlDummyDataProvider_Test::DoGenerateFieldFilterQueryL()
+    {
+    RPointerArray< CSyncMLFilter >* filters =
+        new ( ELeave ) RPointerArray< CSyncMLFilter >();
+    CleanupRPtrArrayPushL( filters );
+    RPointerArray< CSmlDataProperty > properties; 
+    CleanupStack::PushL( PtrArrCleanupItemRArr( CSmlDataProperty, &properties ) );
+    TBuf<100> mimeType;
+    HBufC* storeName = NULL;
+    TRAPD( err, iCNSmlDummyDataProvider->DoGenerateFieldFilterQueryL( 
+        *filters, mimeType, properties, *storeName ) );
+    EUNIT_ASSERT( err == KErrNotSupported );
+    delete storeName;
+    CleanupStack::PopAndDestroy( 2 ); //filters, properties
+    }
+
+
+// - EUnit test table -------------------------------------------------------
+
+EUNIT_BEGIN_TEST_TABLE(
+    CNSmlDummyDataProvider_Test,
+    "Unit test for Contacts dataprovider.",
+    "UNIT" )
+
+EUNIT_TEST(
+    "Verify memory allocation for DataProvider object",
+    "CNSmlDummyDataProvider",
+    "NewL",
+    "FUNCTIONALITY",
+    SetupL, NewLL, Teardown)
+
+EUNIT_TEST(
+    "Test to create contact adapter and few other atapter methods",
+    "CNSmlCmtContactsDataProvider",
+    "",
+    "FUNCTIONALITY",
+    Empty, CreateAdapterL, Empty)
+
+EUNIT_TEST(
+    "Test for GetStoreFormatResourceFileL",
+    "CNSmlCmtContactsDataProvider_Test",
+    "GetStoreFormatResourceFileL",
+    "FUNCTIONALITY",
+    SetupL, GetStoreFormatResourceFileLL, Teardown )
+
+EUNIT_TEST(
+    "Test to verify DoStoreFormatL function",
+    "CNSmlCmtContactsDataProvider_Test",
+    "DoStoreFormatL",
+    "FUNCTIONALITY",
+    SetupL, DoStoreFormatLL, Teardown )
+
+EUNIT_TEST(
+    "Test DataStore support for field level partial sync",
+    "CNSmlCmtContactsDataProvider_Test",
+    "",
+    "FUNCTIONALITY",
+    SetupL, TestStoreSupportForPartialSyncL, Teardown )
+
+EUNIT_TEST(
+    "Verify operator specific MIME type",
+    "CNSmlDummyDataProvider_Test",
+    "",
+    "FUNCTIONALITY",
+    SetupL, TestStoreSupportMimeTypeL, Teardown )
+
+EUNIT_TEST(
+    "Verify method DoListStoresLCL return value",
+    "CNSmlDummyDataProvider_Test",
+    "DoListStoresLCL",
+    "FUNCTIONALITY",
+    SetupL, DoListStoresLCL, Teardown )
+
+EUNIT_TEST(
+    "Test DoOnFrameworkEvent",
+    "CNSmlDummyDataProvider_Test",
+    "DoOnFrameworkEvent",
+    "FUNCTIONALITY",
+    SetupL, DoOnFrameworkEvent, Teardown )
+
+EUNIT_TEST(
+    "Test DoSupportedServerFiltersL",
+    "CNSmlDummyDataProvider_Test",
+    "DoSupportedServerFiltersL",
+    "FUNCTIONALITY",
+    SetupL, DoSupportedServerFiltersL, Teardown )
+
+EUNIT_TEST(
+    "Test DoCheckSupportedServerFiltersL",
+    "CNSmlDummyDataProvider_Test",
+    "DoCheckSupportedServerFiltersL",
+    "FUNCTIONALITY",
+    SetupL, DoCheckSupportedServerFiltersL, Teardown )
+
+EUNIT_TEST(
+    "Test DoCheckServerFiltersL",
+    "CNSmlDummyDataProvider_Test",
+    "DoCheckServerFiltersL",
+    "FUNCTIONALITY",
+    SetupL, DoCheckServerFiltersL, Teardown )
+
+EUNIT_TEST(
+    "Test DoGenerateRecordFilterQueryL",
+    "CNSmlDummyDataProvider_Test",
+    "DoGenerateRecordFilterQueryL",
+    "FUNCTIONALITY",
+    SetupL, DoGenerateRecordFilterQueryL, Teardown )
+
+EUNIT_TEST(
+    "Test DoGenerateFieldFilterQueryL",
+    "CNSmlDummyDataProvider_Test",
+    "DoGenerateFieldFilterQueryL",
+    "FUNCTIONALITY",
+    SetupL, DoGenerateFieldFilterQueryL, Teardown )
+
+EUNIT_END_TEST_TABLE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydataprovider_test.h	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2009 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:  Header file for contact adapter's dataprovider unit tests.
+*
+*/
+
+#ifndef __CNSMLDUMMYDATAPROVIDER_TEST_H__
+#define __CNSMLDUMMYDATAPROVIDER_TEST_H__
+
+// INCLUDES
+#include <ceunittestsuiteclass.h>
+#include <eunitdecorators.h>
+
+#include "nsmldummydataprovider.h"
+
+// CLASS DEFINITION
+/**
+ * Generated EUnit test suite class.
+ */
+NONSHARABLE_CLASS( CNSmlDummyDataProvider_Test )
+	: public CEUnitTestSuiteClass
+    {
+    public:  // Constructors and destructor
+
+        static CNSmlDummyDataProvider_Test* NewL();
+        static CNSmlDummyDataProvider_Test* NewLC();
+        ~CNSmlDummyDataProvider_Test();
+
+    private: // Constructors
+
+        CNSmlDummyDataProvider_Test();
+        void ConstructL();
+
+    private: // New methods
+
+        void Empty() {};
+
+        void SetupL();
+
+        void Teardown();
+
+        void NewLL();
+        
+        void CreateAdapterL();
+
+        void GetStoreFormatResourceFileLL();
+
+        void DoStoreFormatLL();
+
+        void TestStoreSupportForPartialSyncL();
+
+        void TestStoreSupportMimeTypeL();
+
+        void DoListStoresLCL();
+        
+        void DoOnFrameworkEvent();
+        
+        void DoSupportedServerFiltersL();
+        
+        void DoCheckSupportedServerFiltersL();
+        
+        void DoCheckServerFiltersL();
+        
+        void DoGenerateRecordFilterQueryL();
+        
+        void DoGenerateFieldFilterQueryL();
+
+    private: // Data
+
+        CNSmlDummyDataProvider* iCNSmlDummyDataProvider;
+
+        EUNIT_DECLARE_TEST_TABLE;
+
+    };
+
+#endif      //  __CNSMLDUMMYDATAPROVIDER_TEST_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastore_test.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,1020 @@
+/*
+* Copyright (c) 2009 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:  Source code file for contact adapter's datastore unit tests.
+*
+*/
+
+// CLASS HEADER
+#include "cnsmldummydatastore_test.h"
+
+// EXTERNAL INCLUDES
+#include <eunitmacros.h>
+#include <eunitdecorators.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfield.h>
+#include <cntfldst.h>
+#include <s32mem.h>
+#include <bautils.h>
+#include <smldataformat.h>
+
+// INTERNAL INCLUDES
+#include "cnsmladaptertestutilities.h"
+#include "nsmldummydatastore.h"
+#include "cnsmldummydatastorewaiter.h"
+
+namespace
+    {
+    // "abld test export" will export test data.
+    _LIT( KVCardStandard, "c:\\Data\\TestData\\standard.vcf" );
+    _LIT( KVCardBasic, "c:\\Data\\TestData\\basic.vcf" );
+    }
+
+// - Construction -----------------------------------------------------------
+
+CNSmlDummyDataStore_Test* CNSmlDummyDataStore_Test::NewL()
+    {
+    CNSmlDummyDataStore_Test* self = CNSmlDummyDataStore_Test::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CNSmlDummyDataStore_Test* CNSmlDummyDataStore_Test::NewLC()
+    {
+    CNSmlDummyDataStore_Test* self = new( ELeave ) CNSmlDummyDataStore_Test();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+CNSmlDummyDataStore_Test::~CNSmlDummyDataStore_Test()
+    {
+    iWriteStream.Close();
+    iFsSession.Close();
+    delete iCNSmlDummyDataStore;
+    delete iTestUtilities;
+    delete iContactDatabase;
+    delete iIdArray;
+    delete iStoreWaiter;
+    }
+
+CNSmlDummyDataStore_Test::CNSmlDummyDataStore_Test()
+    {
+    }
+
+void CNSmlDummyDataStore_Test::ConstructL()
+    {
+    CEUnitTestSuiteClass::ConstructL();
+    User::LeaveIfError( iFsSession.Connect() );
+    }
+
+// from MSmlSyncRelationship
+TSmlSyncTaskKey CNSmlDummyDataStore_Test::SyncTaskKey() const
+    {
+    TSmlSyncTaskKey key = 0;
+    return key;
+    }
+
+void CNSmlDummyDataStore_Test::OpenReadStreamLC(
+        RReadStream& /*aReadStream*/, TUid /*aStreamUid*/)
+    {
+    }
+
+void CNSmlDummyDataStore_Test::OpenWriteStreamLC(
+        RWriteStream& aWriteStream, TUid /*aStreamUid*/ )
+    {
+    User::LeaveIfError(
+            iWriteStream.Replace( iFsSession, _L("store.test"), EFileWrite  ) );
+    aWriteStream = iWriteStream;
+    CleanupClosePushL( aWriteStream );
+    }
+
+TBool CNSmlDummyDataStore_Test::IsStreamPresentL(TUid /*aStreamUid*/) const
+    {
+    return EFalse;
+    }
+
+// - Setup & teardown ---------------------------------------------------------
+
+// ++++++++++++ SETUP METHODS ++++++++++++
+
+void CNSmlDummyDataStore_Test::SetupL(  )
+    {
+    iCNSmlDummyDataStore = CNSmlDummyDataStore::NewL();
+    iTestUtilities = CNSmlAdapterTestUtilities::NewL();
+    }
+
+void CNSmlDummyDataStore_Test::SetupAndOpenStoreL(  )
+    {
+    SetupL();
+
+    iStoreWaiter =
+        CNSmlDummyDataStoreWaiter::NewL( *iCNSmlDummyDataStore );
+    iStoreWaiter->OpenStoreL( *this );
+
+    iContactDatabase = CContactDatabase::OpenL();
+    }
+
+void CNSmlDummyDataStore_Test::SetupPopulateDbAndOpenStoreL()
+    {
+    SetupAndPopulateContactDbL();
+
+    EUNIT_ASSERT_NO_LEAVE(
+    iCNSmlDummyDataStore = CNSmlDummyDataStore::NewL() );
+
+    iStoreWaiter =
+        CNSmlDummyDataStoreWaiter::NewL( *iCNSmlDummyDataStore );
+    iStoreWaiter->OpenStoreL( *this );
+    }
+
+/**
+ * Setup contact DB with the following contacts
+ *   + Tim Tester (id index 0)
+ *   + Teddy McTest (id index 1)
+ *   + Tod TestHill (id index 2)
+ *   + Simon Software (id index 3)
+ *   + Cyd Effect (id index 4)
+ *
+ */
+void CNSmlDummyDataStore_Test::SetupAndPopulateContactDbL()
+    {
+    if( !iContactDatabase )
+        {
+        iContactDatabase = CContactDatabase::OpenL();
+        }
+    if( !iTestUtilities )
+        {
+        iTestUtilities = CNSmlAdapterTestUtilities::NewL();
+        }
+
+    iIdArray = CContactIdArray::NewL();
+
+    // Create test contacts
+    iIdArray->AddL( AddContactL( _L( "Tim" ), _L( "Tester" ), _L( "+358501234567" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Teddy" ), _L("McTest" ), _L( "+358501112222" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Tod" ), _L( "TestHill" ), _L( "+358506666666" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Simon" ), _L( "Software" ), _L( "+3585011223333" ) ) );
+    iIdArray->AddL( AddContactL( _L( "Cyd" ), _L( "Effect" ), _L( "+358503334444" ) ) );
+    }
+
+//// ++++++++++++ TEARDOWN METHODS ++++++++++++
+//
+void CNSmlDummyDataStore_Test::Teardown()
+    {
+    delete iCNSmlDummyDataStore;
+    iCNSmlDummyDataStore = NULL;
+
+    delete iTestUtilities;
+    iTestUtilities = NULL;
+    }
+
+void CNSmlDummyDataStore_Test::TeardownAndCloseStore()
+    {
+    delete iStoreWaiter;
+    iStoreWaiter = NULL;
+
+    delete iContactDatabase;
+    iContactDatabase = NULL;
+
+    Teardown();
+    }
+
+void CNSmlDummyDataStore_Test::TeardownCloseAndEmptyContactDb()
+    {
+    delete iStoreWaiter;
+    iStoreWaiter = NULL;
+
+    delete iCNSmlDummyDataStore;
+    iCNSmlDummyDataStore = NULL;
+
+    TeardownAndEmptyContactDb();
+    }
+
+void CNSmlDummyDataStore_Test::TeardownAndEmptyContactDb()
+    {
+    if (iContactDatabase && iIdArray)
+        {
+        TRAP_IGNORE( iContactDatabase->DeleteContactsL( *iIdArray ) );
+        }
+    
+    delete iIdArray;
+    iIdArray = NULL;
+    delete iContactDatabase;
+    iContactDatabase = NULL;
+    delete iTestUtilities;
+    iTestUtilities = NULL;
+    }
+
+    
+// - Test methods -------------------------------------------------------------
+
+// MEMORY ALLOCATION FOR DATASTORE
+void CNSmlDummyDataStore_Test::NewLL(  )
+    {
+    CNSmlDummyDataStore* dataStore = NULL;
+    EUNIT_ASSERT_NO_LEAVE( dataStore = CNSmlDummyDataStore::NewL() );
+    EUNIT_ASSERT( dataStore );
+    delete dataStore;
+    }
+
+// DoOpenL()
+void CNSmlDummyDataStore_Test::DoOpenLL()
+    {
+    CNSmlDummyDataStoreWaiter* storeWaiter =
+        CNSmlDummyDataStoreWaiter::NewLC( *iCNSmlDummyDataStore );
+
+    TRAPD( err, storeWaiter->OpenStoreL( *this ) );
+
+    // Check for leave
+    EUNIT_PRINT( _L( "Leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoOpenL() leave" );
+    CleanupStack::PopAndDestroy( storeWaiter );
+    }
+
+// DoHasSyncHistory()
+void CNSmlDummyDataStore_Test::DoHasSyncHistoryL()
+    {
+    TBool ret = iCNSmlDummyDataStore->DoHasSyncHistory();
+    EUNIT_ASSERT_DESC( ret == EFalse, "DoHasSyncHistory returns faulty value");
+    }
+
+// DoModifiedItems(), DoCommitChangeInfoL()
+void CNSmlDummyDataStore_Test::DoModifiedItemsL()
+    {
+    const MSmlDataItemUidSet& uiSet = iCNSmlDummyDataStore->DoModifiedItems();
+    EUNIT_ASSERT_DESC( uiSet.ItemCount() == 0, "DoModifiedItems returns faulty uid set");
+
+    TInt returnCode = KErrNone;
+
+    TRAPD( err, returnCode = iStoreWaiter->DoCommitChangeInfoL( uiSet ) );
+
+    // Check for leave
+    EUNIT_PRINT( _L( "Leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitChangeInfoL() leave" );
+
+    // Check for return code
+    EUNIT_PRINT( _L( "Return code: %d" ), returnCode );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitChangeInfoL returns error");
+    }
+
+// DoResetChangeInfoL()
+void CNSmlDummyDataStore_Test::DoResetChangeInfoLL()
+    {
+    TInt returnCode = KErrNone;
+    TRAPD( err, returnCode = iStoreWaiter->DoResetChangeInfoL() );
+
+    // Check for leave
+    EUNIT_PRINT( _L( "Leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoResetChangeInfoL() leave" );
+
+    // Check for return code
+    EUNIT_PRINT( _L( "Return code: %d" ), returnCode );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoResetChangeInfoL returns error");
+    }
+
+// DoCommitChangeInfoL()
+void CNSmlDummyDataStore_Test::DoCommitChangeInfoLL()
+    {
+    TInt returnCode = KErrNone;
+    TRAPD( err, returnCode = iStoreWaiter->DoCommitChangeInfoL() );
+
+    // Check for leave
+    EUNIT_PRINT( _L( "Leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitChangeInfoL() leave" );
+
+    // Check for return code
+    EUNIT_PRINT( _L( "Return code: %d" ), returnCode );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitChangeInfoL returns error");
+    }
+
+// Item addition - "Normal" (non-batch) mode
+//  (DoCreateItemL(), DoWriteItemL(), DoCommitItemL(), LdoAddItemL())
+void CNSmlDummyDataStore_Test::AddSingleItemL()
+    {
+    TBuf8< 20 > type;
+    TBuf8< 20 > ver = KNSmlvCard21Ver();
+    TInt returnCode = KErrNone;
+    iItemUid = KNullContactId;
+
+    // Try creating contact with illegal MIME type
+    EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 1") );
+    TRAPD( err, returnCode = iStoreWaiter->DoCreateItemL(
+        iItemUid, 0, type, ver ) );
+
+    EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( returnCode == KErrNotSupported,
+        "DoCreateItemL() accepts illegal MIME" );
+
+    // Create legal contact
+    type = KNSmlvCard21Name();
+    EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 2") );
+    TRAP( err, returnCode = iStoreWaiter->DoCreateItemL(
+        iItemUid, 512, type, ver ) );
+
+    EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCreateItemL returns error");
+
+    // Perform item writing to data store
+    HBufC8* vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardBasic() );
+    EUNIT_PRINT( _L("Calling DoWriteItemL(), STEP 3") );
+    // Non-async call (no need for iStoreWaiter usage)
+    TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+    EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+    CleanupStack::PopAndDestroy( vCard );
+
+    // Commit the contact to be created
+    EUNIT_PRINT( _L("Calling DoCommmitItemL(), STEP 4") );
+    TRAP( err, returnCode = iStoreWaiter->DoCommitItemL() );
+
+    EUNIT_PRINT( _L( "DoCommitItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitItemL returns error");
+
+    // Check the imported item
+    EUNIT_ASSERT_DESC( iItemUid != KNullContactId, "Illegal UID for imported contact" );
+    EUNIT_PRINT( _L("Item ID: %d"), iItemUid );
+
+    // Print out the imported vCard
+    CContactIdArray* idArr = CContactIdArray::NewLC();
+    idArr->AddL( iItemUid );
+    CBufFlat* buffer = CBufFlat::NewL( 1024 );
+    CleanupStack::PushL( buffer );
+    RBufWriteStream writeStream( *buffer );
+    CleanupClosePushL( writeStream );
+
+    TRAP( err, iContactDatabase->ExportSelectedContactsL( TUid::Uid(KVersitEntityUidVCard), *idArr,
+        writeStream, CContactDatabase::EExcludeUid, Versit::EUTF8CharSet ) );
+
+    EUNIT_ASSERT_EQUALS_DESC( err, KErrNone, "ExportSelectedContactsL leave" );
+
+    CleanupStack::PopAndDestroy( &writeStream );
+
+    EUNIT_PRINT( buffer->Ptr( 0 ) );
+
+    // Do some asserts
+    EUNIT_ASSERT( buffer->Ptr( 0 ).Find( _L8("N:Smith;John") ) != KErrNotFound );
+    EUNIT_ASSERT( buffer->Ptr( 0 ).Find( _L8("TITLE:Boss") ) != KErrNotFound );
+
+    CleanupStack::PopAndDestroy( 2, idArr );  // buffer, idArr
+
+    // Do cleanup (remove added contact)
+    CContactIdArray* tmpArray = CContactIdArray::NewLC();
+    tmpArray->AddL( iItemUid );
+    TRAP_IGNORE( iContactDatabase->DeleteContactsL( *tmpArray ) );
+    CleanupStack::PopAndDestroy( tmpArray );
+    }
+
+// Item addition - Batch mode
+// (LdoAddItemsL())
+void CNSmlDummyDataStore_Test::AddItemBatchL()
+    {
+    TBuf8<20> type = KNSmlvCard21Name();
+    TBuf8<20> ver = KNSmlvCard21Ver();
+    TInt returnCode = KErrNone;
+    HBufC8* vCard = NULL;
+
+    // DoBeginBatchL()
+    EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 1") );
+    TRAPD( err, iCNSmlDummyDataStore->DoBeginBatchL() );
+    EUNIT_PRINT( _L( "DoBeginBatchL(): leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoBeginBatchL() leave" );
+
+    // == == CONTACT ITEM NO 1 == ==
+    vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardBasic() );
+    EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 2") );
+    TRAP( err, returnCode = iStoreWaiter->DoCreateItemL(
+        iItemUid, vCard->Size(), type, ver ) );
+
+    EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCreateItemL returns error");
+
+    // Perform item writing to data store
+    EUNIT_PRINT( _L("Calling DoWriteItemL(), STEP 3") );
+    // Non-async call (no need for iStoreWaiter usage)
+    TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+    EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+    CleanupStack::PopAndDestroy( vCard );
+    vCard = NULL;
+
+    // Commit the contact to be created
+    EUNIT_PRINT( _L("Calling DoCommitItemL(), STEP 4") );
+    TRAP( err, returnCode = iStoreWaiter->DoCommitItemL() );
+
+    EUNIT_PRINT( _L( "DoCommitItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitItemL returns error");
+
+    // Commit batch
+    RArray<TInt> array;
+    EUNIT_PRINT( _L("Calling DoCommitBatchL(), STEP 5") );
+    TRAP( err, returnCode = iStoreWaiter->DoCommitBatchL( array ) );
+
+    EUNIT_PRINT( _L( "DoCommitBatchL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitBatchL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitBatchL returns error" );
+
+    // Verify results
+    for( TInt i = 0; i < array.Count(); i++ )
+        {
+        EUNIT_PRINT( _L( "Contact: %d, Error code: %d "), i, array[ i ] );
+        EUNIT_ASSERT( array[ i ] == KErrNone );
+        }
+    EUNIT_ASSERT_DESC( array.Count() == 1, "Wrong number of contacts added" );
+    EUNIT_PRINT( _L("Item 1 ID = %d"), iItemUid );
+
+    // Cleanup
+    array.Reset();
+    array.Close();
+
+    CContactIdArray* tmpArray = CContactIdArray::NewLC();
+    tmpArray->AddL( iItemUid );
+    TRAP_IGNORE( iContactDatabase->DeleteContactsL( *tmpArray ) );
+    CleanupStack::PopAndDestroy( tmpArray );
+    }
+
+// Item addition - cancel Batch mode 
+void CNSmlDummyDataStore_Test::CancelBatchL()
+    {
+    TBuf8<20> type = KNSmlvCard21Name();
+    TBuf8<20> ver = KNSmlvCard21Ver();
+    TInt returnCode = KErrNone;
+    HBufC8* vCard = NULL;
+
+    // DoBeginBatchL()
+    EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 1") );
+    TRAPD( err, iCNSmlDummyDataStore->DoBeginBatchL() );
+    EUNIT_PRINT( _L( "DoBeginBatchL(): leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoBeginBatchL() leave" );
+
+    // == == CONTACT ITEM NO 1 == ==
+    vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardBasic() );
+    EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 2") );
+    TRAP( err, returnCode = iStoreWaiter->DoCreateItemL(
+        iItemUid, vCard->Size(), type, ver ) );
+
+    EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCreateItemL returns error");
+
+    // Perform item writing to data store
+    EUNIT_PRINT( _L("Calling DoWriteItemL(), STEP 3") );
+    // Non-async call (no need for iStoreWaiter usage)
+    TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+    EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+    CleanupStack::PopAndDestroy( vCard );
+    vCard = NULL;
+
+    // Cancel Batch
+    EUNIT_PRINT( _L("Calling DoCancelBatch(), STEP 4") );
+    iStoreWaiter->DoCancelBatch();
+    }
+
+// DoOpenItemL(), DoReadItemL(), DoCloseItemL()
+//  (LdoFetchItemL())
+void CNSmlDummyDataStore_Test::FetchItemL()
+    {
+    TBuf8<20> type;
+    TBuf8<20> ver;
+    TInt returnCode = KErrNone;
+    TInt size = 0;
+    TSmlDbItemUid parentId = KNullContactId;
+    TBool fieldChange = EFalse;
+
+    // Open item ("Tim Tester") for reading
+    EUNIT_PRINT( _L("Calling DoOpenItemL()") );
+
+    //Make some preparations:
+    // (a) Set remote store format; needed by StripTxL()
+    //      - Otherwise we get access violation
+    EUNIT_ASSERT( iCNSmlDummyDataStore->iStoreFormat );
+    iCNSmlDummyDataStore->DoSetRemoteStoreFormatL(
+        *(iCNSmlDummyDataStore->iStoreFormat) );
+
+    TRAPD( err, returnCode = iStoreWaiter->DoOpenItemL(
+        ( *iIdArray )[ 0 ], fieldChange, size, parentId, type, ver ) );
+
+    EUNIT_PRINT( _L( "DoOpenItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoOpenItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoOpenItemL returns error");
+
+    // Execute some asserts to verify functionality
+    EUNIT_PRINT( _L( "DoOpenItemL(): size: %d" ),
+            size );
+    EUNIT_ASSERT_DESC( size != 0, "Illegal size value" );
+    EUNIT_ASSERT_DESC( parentId == KNullDataItemId, "Wrong parent ID" );
+    EUNIT_ASSERT_DESC( type.Compare( KNSmlvCard21Name() ) == 0,
+        "Illegal MIME type" );
+    EUNIT_ASSERT_DESC( ver.Compare( KNSmlvCard21Ver() ) == 0,
+        "Illegal MIME version" );
+
+    // Read the item contents (i.e. vCard)
+    HBufC8* vCard = HBufC8::NewLC( 86 );
+    TPtr8 vCardPtr = vCard->Des();
+    EUNIT_ASSERT_NO_LEAVE( iCNSmlDummyDataStore->DoReadItemL( vCardPtr ) );
+
+    EUNIT_PRINT( *vCard );
+    EUNIT_ASSERT( vCard->Find( _L8("N:Tester;Tim") ) != KErrNotFound );
+    EUNIT_ASSERT( vCard->Find( _L8("TEL:+358501234567") ) != KErrNotFound );
+
+    CleanupStack::PopAndDestroy( vCard );
+
+    // Close the contact item
+    iCNSmlDummyDataStore->DoCloseItem();
+    }
+
+// Update a standard contact
+//  (DoReplaceItemL(), ExecuteBufferL()...)
+void CNSmlDummyDataStore_Test::UpdateItemL()
+    {
+    TInt returnCode = KErrNone;
+    TSmlDbItemUid parentId = KNullContactId;
+    TBool fieldChange = EFalse;
+
+    HBufC8* vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardStandard() );
+
+    // Update "Tim Tester" contact
+    TRAPD( err, returnCode = iStoreWaiter->DoReplaceItemL(
+        ( *iIdArray )[ 0 ], vCard->Size(), parentId, fieldChange ) );
+
+    EUNIT_PRINT( _L( "DoReplaceItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoReplaceItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoReplaceItemL returns error");
+
+    // Perform item writing to data store
+    EUNIT_PRINT( _L("Calling DoWriteItemL()") );
+    TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+    EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoWriteItemL() leave" );
+    CleanupStack::PopAndDestroy( vCard );
+
+    // Commit the contact to be created
+    EUNIT_PRINT( _L("Calling DoCommmitItemL()") );
+    TRAP( err, returnCode = iStoreWaiter->DoCommitItemL() );
+
+    EUNIT_PRINT( _L( "DoCommitItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitItemL returns error");
+
+    // Print out the imported vCard
+    CContactIdArray* idArr = CContactIdArray::NewLC();
+    idArr->AddL( ( *iIdArray )[ 0 ] );
+    CBufFlat* buffer = CBufFlat::NewL( 1024 );
+    CleanupStack::PushL( buffer );
+    RBufWriteStream writeStream( *buffer );
+    CleanupClosePushL( writeStream );
+
+    TRAP( err, iContactDatabase->ExportSelectedContactsL(
+        TUid::Uid(KVersitEntityUidVCard), *idArr,
+        writeStream, CContactDatabase::EExcludeUid, Versit::EUTF8CharSet ) );
+
+    EUNIT_ASSERT_EQUALS_DESC( err, KErrNone, "ExportSelectedContactsL leave" );
+
+    CleanupStack::PopAndDestroy( &writeStream );
+
+    EUNIT_PRINT( buffer->Ptr( 0 ) );
+
+    // Do some asserts
+    EUNIT_ASSERT( buffer->Ptr( 0 ).Find( _L8("N:Smith;John") ) != KErrNotFound );
+    EUNIT_ASSERT( buffer->Ptr( 0 ).Find( _L8("TITLE:Boss") ) != KErrNotFound );
+
+    CleanupStack::PopAndDestroy( 2, idArr );  // buffer, idArr
+    }
+
+// DoDeleteItemL()
+void CNSmlDummyDataStore_Test::DeleteItemL()
+    {
+    // Delete item
+    TInt returnCode = KErrNone;
+    EUNIT_PRINT( _L("Calling DoDeleteItemL()") );
+    TRAPD( err, returnCode = iStoreWaiter->DoDeleteItemL( ( *iIdArray )[ 0 ] ) );
+
+    EUNIT_PRINT( _L( "DoDeleteItemL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoDeleteItemL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoDeleteItemL returns error");
+    
+    // Check that the contact does not exist any more
+    CContactItem* item = NULL;
+    CContactDatabase* cntDb = NULL;
+    TRAP( err, cntDb = CContactDatabase::OpenL() );
+    TRAP( err, item = cntDb->ReadMinimalContactL(
+        ( *iIdArray )[ 0 ] ) );
+    EUNIT_ASSERT( !item );
+    EUNIT_PRINT( _L("Error=%d"), err );
+    EUNIT_ASSERT_EQUALS_DESC( err, KErrNotFound, "Deleted item found" );
+    delete item;
+    item = NULL;
+
+    if( cntDb )
+        {
+        delete cntDb;
+        }
+
+    iIdArray->Remove( 0 );
+    }
+
+// DoDeleteAllItemsL()
+void CNSmlDummyDataStore_Test::DeleteAllItemsL()
+    {
+    // Temporarily remove ChangeFinder from Store to prevent leaves
+    // when reseting ChangeFinder in code under test.
+    CNSmlChangeFinder* cF = iCNSmlDummyDataStore->iChangeFinder;
+    CleanupStack::PushL( cF );
+    iCNSmlDummyDataStore->iChangeFinder = NULL;
+
+    TInt returnCode = KErrNone;
+    EUNIT_PRINT( _L("Calling DoDeleteAllItemsL()") );
+    TRAPD( err, returnCode = iStoreWaiter->DoDeleteAllItemsL() );
+
+    // Return ChangeFinders
+    CleanupStack::Pop( cF );
+    iCNSmlDummyDataStore->iChangeFinder = cF;
+
+    EUNIT_PRINT( _L( "DoDeleteAllItemsL(): leave code: %d, return code: %d" ),
+        err, returnCode );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DoDeleteAllItemsL() leave" );
+    EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoDeleteAllItemsL returns error");
+
+    // Check that all normal contacts are removed
+    TContactItemId ownCardId = iContactDatabase->OwnCardId();
+
+    TInt contactCount = 0;
+    TInt groupCount = iContactDatabase->GroupCount();
+    TContactIter iter( *iContactDatabase );
+    for( TContactItemId id = iter.FirstL(); id != KNullContactId; id = iter.NextL() )
+        {
+        // KUidContactGroup
+        if( id != ownCardId )
+            {
+            contactCount++;
+            }
+        }
+    EUNIT_PRINT( _L("Number of items in DB=%d"), contactCount );
+    EUNIT_PRINT( _L("Number of groups in DB=%d"), groupCount );
+    EUNIT_ASSERT_DESC( contactCount - groupCount == 0, "All contacts not deleted");
+    }
+
+// GetStoreFormatResourceFileL()
+void CNSmlDummyDataStore_Test::GetStoreFormatResourceFileLL()
+    {
+    const TDesC& resourceFile = iCNSmlDummyDataStore->GetStoreFormatResourceFileL();
+    EUNIT_PRINT( resourceFile );
+    }
+
+void CNSmlDummyDataStore_Test::TestStoreSupportMimeTypeL()
+    {
+    EUNIT_ASSERT( iCNSmlDummyDataStore->iStoreFormat );
+    EUNIT_ASSERT_EQUALS( iCNSmlDummyDataStore->iStoreFormat->MimeFormatCount() ,1 );
+    EUNIT_ASSERT_EQUALS(
+            iCNSmlDummyDataStore->iStoreFormat->MimeFormat(0).MimeType().DesC(),
+            KNSmlvCard21Name() );
+    EUNIT_ASSERT_EQUALS(
+            iCNSmlDummyDataStore->iStoreFormat->MimeFormat(0).MimeVersion().DesC(),
+                    KNSmlvCard21Ver() );
+    }
+
+void CNSmlDummyDataStore_Test::GetDataMod()
+    {
+    CNSmlDataModBase& dataMod = iCNSmlDummyDataStore->GetDataMod();
+    }
+
+void CNSmlDummyDataStore_Test::DoBeginTransactionL()
+    {
+    TRAPD( err, iCNSmlDummyDataStore->DoBeginTransactionL() );
+    EUNIT_ASSERT( err == KErrNotSupported );
+    }
+
+void CNSmlDummyDataStore_Test::DoCommitTransactionL()
+    {
+    TRequestStatus status;
+    iCNSmlDummyDataStore->DoCommitTransactionL( status );
+    User::WaitForRequest( status );
+    EUNIT_ASSERT_DESC( status.Int() == KErrNotSupported, "DoCommitTransactionL fail"  )
+    }
+
+void CNSmlDummyDataStore_Test::DoRevertTransaction()
+    {
+    TRequestStatus status;
+    iCNSmlDummyDataStore->DoRevertTransaction( status );
+    User::WaitForRequest( status );
+    EUNIT_ASSERT_DESC( status.Int() == KErrNotSupported, "DoRevertTransaction fail"  )
+    }
+
+void CNSmlDummyDataStore_Test::StoreNameL()
+    {
+    CreateDataStoreL();
+    EUNIT_PRINT( iDataStore->StoreName() );
+    iDataStore->CancelRequest();
+    DeleteDataStoreL();
+    }
+
+void CNSmlDummyDataStore_Test::FindChangedItemsL()
+    {
+    CreateDataStoreL();
+    const MSmlDataItemUidSet& added = iDataStore->AddedItems();
+    EUNIT_ASSERT_DESC( added.ItemCount() == 0, "AddedItems returns faulty uid set");
+    const MSmlDataItemUidSet& deleted = iDataStore->DeletedItems();
+    EUNIT_ASSERT_DESC( deleted.ItemCount() == 0, "DeletedItems returns faulty uid set");
+    const MSmlDataItemUidSet& softDeleted = iDataStore->SoftDeletedItems();
+    EUNIT_ASSERT_DESC( softDeleted.ItemCount() == 0, "SoftDeletedItems returns faulty uid set");
+    const MSmlDataItemUidSet& moved = iDataStore->MovedItems();
+    EUNIT_ASSERT_DESC( moved.ItemCount() == 0, "MovedItems returns faulty uid set");
+    DeleteDataStoreL();
+    }
+
+void CNSmlDummyDataStore_Test::MoveAndDeleteL()
+    {
+    CreateDataStoreL();
+    TSmlDbItemUid uid = 1;
+    TSmlDbItemUid parent = 0;
+    TRequestStatus status;
+    iDataStore->MoveItemL( uid, parent, status );
+    User::WaitForRequest( status );
+    
+    TRequestStatus status2;
+    iDataStore->SoftDeleteItemL( uid, status2 );
+    User::WaitForRequest( status2 );
+    
+    DeleteDataStoreL();
+    }
+
+void CNSmlDummyDataStore_Test::DoSetRemoteMaxObjectSize()
+    {
+    iCNSmlDummyDataStore->DoSetRemoteMaxObjectSize( 100000 );
+    }
+
+void CNSmlDummyDataStore_Test::DoMaxObjectSize()
+    {
+    TInt size = iCNSmlDummyDataStore->DoMaxObjectSize();
+    EUNIT_ASSERT( size == 102400 );
+    }
+
+
+// --------------- Helper methods --------------
+
+// Helper method to add a simple contact to test contact DB
+TContactItemId CNSmlDummyDataStore_Test::AddContactL(
+        const TDesC& aFirstName,
+        const TDesC& aLastName,
+        const TDesC& aPhoneNumber )
+    {
+    _LIT( KLabelFamilyName, "Last name");
+    _LIT( KLabelGivenName, "First name");
+    _LIT( KLabelPhone, "Phone");
+
+    CContactCard* card = CContactCard::NewLC();
+
+    // Family name field
+    CContactItemField* familyNameField =
+        CContactItemField::NewLC( KStorageTypeText, KUidContactFieldFamilyName );
+    familyNameField->SetLabelL( KLabelFamilyName );
+    familyNameField->SetMapping( KUidContactFieldVCardMapUnusedN );
+    familyNameField->TextStorage()->SetTextL( aLastName );
+    card->AddFieldL( *familyNameField ); // Takes ownership
+    CleanupStack::Pop( familyNameField );
+
+    // First name field
+    CContactItemField* nameField =
+    CContactItemField::NewLC( KStorageTypeText, KUidContactFieldGivenName );
+    nameField->SetLabelL( KLabelGivenName );
+    nameField->SetMapping( KUidContactFieldVCardMapUnusedN );
+    nameField->TextStorage()->SetTextL( aFirstName );
+    card->AddFieldL( *nameField );
+    CleanupStack::Pop(nameField);
+
+    // Phone number field
+    CContactItemField* phoneField =
+        CContactItemField::NewLC( KStorageTypeText, KUidContactFieldPhoneNumber );
+    phoneField->SetLabelL( KLabelPhone );
+    phoneField->SetMapping( KUidContactFieldVCardMapTEL );
+    phoneField->TextStorage()->SetTextL( aPhoneNumber );
+    card->AddFieldL( *phoneField );
+    CleanupStack::Pop( phoneField );
+
+    TContactItemId cardId = iContactDatabase->AddNewContactL( *card );
+    CleanupStack::PopAndDestroy( card );
+
+    return cardId;
+    }
+
+void CNSmlDummyDataStore_Test::CreateDataStoreL()
+    {
+    TSmlDataProviderId id = {0x101F6DDD};// Contact Adapter Uid
+    CSmlDataProvider* dp = CSmlDataProvider::NewL( id );
+    iDataStore = dp->NewStoreInstanceLC();
+    CleanupStack::Pop( iDataStore );
+    delete dp;
+    }
+
+void CNSmlDummyDataStore_Test::DeleteDataStoreL()
+    {
+    delete iDataStore;
+    iDataStore = NULL;
+    }
+
+// - EUnit test table -------------------------------------------------------
+
+EUNIT_BEGIN_TEST_TABLE(
+    CNSmlDummyDataStore_Test,
+    "Unit tests Contact adapter datastore",
+    "UNIT" )
+
+EUNIT_TEST(
+    "Test to verify memory allocation for the object",
+    "CNSmlContactsDataStore",
+    "NewL",
+    "FUNCTIONALITY",
+    Empty, NewLL, Empty)
+
+// The following unit test cases fail because of mis-match in 
+// heap cell count & thread handle count. This is caused by
+// DataStoreExtension component.
+EUNIT_TEST(
+    "Open data store",
+    "CNSmlContactsDataStore",
+    "DoOpenL",
+    "FUNCTIONALITY",
+    SetupL, DoOpenLL, Teardown )
+
+EUNIT_TEST(
+    "DoHasSyncHistory",
+    "CNSmlContactsDataStore",
+    "DoHasSyncHistory",
+    "FUNCTIONALITY",
+    SetupAndOpenStoreL, DoHasSyncHistoryL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+    "DoModifiedItems & DoCommitChangeInfoL",
+    "CNSmlContactsDataStore",
+    "DoModifiedItems",
+    "FUNCTIONALITY",
+    SetupAndOpenStoreL, DoModifiedItemsL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+    "DoResetChangeInfoL",
+    "CNSmlContactsDataStore",
+    "DoResetChangeInfoL",
+    "FUNCTIONALITY",
+    SetupAndOpenStoreL, DoResetChangeInfoLL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+    "DoCommitChangeInfoL",
+    "CNSmlContactsDataStore",
+    "DoCommitChangeInfoL",
+    "FUNCTIONALITY",
+    SetupAndOpenStoreL, DoCommitChangeInfoLL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+    "Add single item (normal mode)",
+    "CNSmlContactsDataStore",
+    "DoCreateItemL, DoCommitItemL, LdoAddItem",
+    "FUNCTIONALITY",
+    SetupAndOpenStoreL, AddSingleItemL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+    "Add item in batch mode",
+    "CNSmlContactsDataStore",
+    "DoBeginBatchL, DoCommitBatchL",
+    "FUNCTIONALITY",
+    SetupAndOpenStoreL, AddItemBatchL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+    "CancelBatchL",
+    "CNSmlContactsDataStore",
+    "DoCancelBatch",
+    "FUNCTIONALITY",
+    SetupAndOpenStoreL, CancelBatchL, TeardownAndCloseStore ) 
+
+EUNIT_TEST(
+    "Fetch/read normal contact",
+    "CNSmlContactsDataStore",
+    "LdoFetchItemL",
+    "FUNCTIONALITY",
+    SetupPopulateDbAndOpenStoreL, FetchItemL, TeardownCloseAndEmptyContactDb )
+
+EUNIT_TEST(
+    "Update normal contact",
+    "CNSmlContactsDataStore",
+    "LdoUpdateItemL",
+    "FUNCTIONALITY",
+    SetupPopulateDbAndOpenStoreL, UpdateItemL, TeardownCloseAndEmptyContactDb )
+
+EUNIT_TEST(
+    "Delete normal contact",
+    "CNSmlContactsDataStore",
+    "DoDeleteItemL",
+    "FUNCTIONALITY",
+    SetupPopulateDbAndOpenStoreL, DeleteItemL, TeardownCloseAndEmptyContactDb )
+
+EUNIT_TEST(
+    "Delete all contacts",
+    "CNSmlContactsDataStore",
+    "DoDeleteItemL",
+    "FUNCTIONALITY",
+    SetupPopulateDbAndOpenStoreL, DeleteAllItemsL, TeardownCloseAndEmptyContactDb )
+// End of failing test cases
+
+EUNIT_TEST(
+    "Test for GetStoreFormatResourceFileL function",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, GetStoreFormatResourceFileLL, Teardown )
+
+EUNIT_TEST(
+    "Verify operator specific MIME type",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, TestStoreSupportMimeTypeL, Teardown )
+
+EUNIT_TEST(
+    "GetDataMod",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, GetDataMod, Teardown )
+
+EUNIT_TEST(
+    "DoBeginTransactionL",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, DoBeginTransactionL, Teardown )
+
+EUNIT_TEST(
+    "DoCommitTransactionL",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, DoCommitTransactionL, Teardown )
+
+EUNIT_TEST(
+    "DoRevertTransaction",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, DoRevertTransaction, Teardown )
+
+EUNIT_TEST(
+    "StoreNameL",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, StoreNameL, Teardown )
+    
+EUNIT_TEST(
+    "FindChangedItemsL",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, FindChangedItemsL, Teardown )   
+
+EUNIT_TEST(
+    "MoveAndDeleteL",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, MoveAndDeleteL, Teardown )
+
+EUNIT_TEST(
+    "DoSetRemoteMaxObjectSize",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, DoSetRemoteMaxObjectSize, Teardown )
+
+EUNIT_TEST(
+    "DoMaxObjectSize",
+    "CNSmlContactsDataStore",
+    "",
+    "FUNCTIONALITY",
+    SetupL, DoMaxObjectSize, Teardown )
+
+EUNIT_END_TEST_TABLE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastore_test.h	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2009 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:  Header file for contact adapter's datastore unit tests.
+*
+*/
+
+#ifndef __CNSMLDUMMYDATASTORE_TEST_H__
+#define __CNSMLDUMMYDATASTORE_TEST_H__
+
+// INCLUDES
+#include <ceunittestsuiteclass.h>
+#include <smldatasyncdefs.h>
+#include <cntdb.h>
+#include <s32mem.h>
+
+// FORWARD DECLARATIONS
+class CNSmlDummyDataStore;
+class CNSmlAdapterTestUtilities;
+class CNSmlDummyDataStoreWaiter;
+class CSmlDataStore;
+
+// CLASS DEFINITION
+/**
+ * Generated EUnit test suite class.
+ */
+NONSHARABLE_CLASS( CNSmlDummyDataStore_Test )
+	: public CEUnitTestSuiteClass, public MSmlSyncRelationship
+    {
+    public:  // Constructors and destructor
+
+        static CNSmlDummyDataStore_Test* NewL();
+        static CNSmlDummyDataStore_Test* NewLC();
+        ~CNSmlDummyDataStore_Test();
+
+    private: // Constructors
+
+        CNSmlDummyDataStore_Test();
+        void ConstructL();
+
+    private: // New methods
+
+        void Empty() {};
+
+        // ++ Setup methods ++
+        void SetupL();
+        
+        void SetupAndOpenStoreL();
+        
+        void SetupAndPopulateContactDbL();
+        
+        void SetupPopulateDbAndOpenStoreL();
+
+        // ++ Teardown methods ++
+        void Teardown();
+        
+        void TeardownAndCloseStore();
+        
+        void TeardownAndEmptyContactDb();
+        
+        void TeardownCloseAndEmptyContactDb();
+
+        // ++ DataStore test cases ++
+        void NewLL();
+
+        void DoOpenLL();
+
+        void DoHasSyncHistoryL();
+
+        void DoModifiedItemsL();
+
+        void DoResetChangeInfoLL();
+
+        void DoCommitChangeInfoLL();
+
+        void AddSingleItemL();
+
+        void AddItemBatchL();
+        
+        void CancelBatchL();
+
+        void FetchItemL();
+
+        void UpdateItemL();
+
+        void DeleteItemL();
+
+        void DeleteAllItemsL();
+
+        void GetStoreFormatResourceFileLL();
+
+        void TestStoreSupportMimeTypeL();
+        
+        void DoBeginTransactionL();
+        
+        void DoCommitTransactionL();
+        
+        void DoRevertTransaction();
+        
+        void StoreNameL();
+        
+        void FindChangedItemsL();
+        
+        void MoveAndDeleteL();
+        
+        void DoSetRemoteMaxObjectSize();
+        
+        void DoMaxObjectSize();
+        
+        void GetDataMod();
+        
+        // ++ Helper methods ++
+        TContactItemId AddContactL( const TDesC& aFirstName,
+                 const TDesC& aLastName,
+                 const TDesC& aPhoneNumber );
+        
+        void CreateDataStoreL();
+
+        void DeleteDataStoreL();
+
+    private: // from MSmlSyncRelationship
+        TSmlSyncTaskKey SyncTaskKey() const;
+        
+        void OpenReadStreamLC( RReadStream& aReadStream, TUid aStreamUid );
+        
+        void OpenWriteStreamLC( RWriteStream& aWriteStream, TUid aStreamUid );
+        
+        TBool IsStreamPresentL( TUid aStreamUid ) const;
+
+    private: // Data
+
+        CNSmlDummyDataStore* iCNSmlDummyDataStore;
+        CNSmlAdapterTestUtilities* iTestUtilities;
+
+        CContactDatabase*   iContactDatabase;
+        CContactIdArray*    iIdArray;
+        RFs                 iFsSession;
+        RFileWriteStream    iWriteStream;
+        TSmlDbItemUid       iItemUid;
+
+        CNSmlDummyDataStoreWaiter* iStoreWaiter;
+        CSmlDataStore* iDataStore;
+
+        EUNIT_DECLARE_TEST_TABLE;
+    };
+
+#endif      //  __CNSMLDUMMYDATASTORE_TEST_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastorewaiter.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,302 @@
+/*
+* Copyright (c) 2009 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:  Source code file for datastorewaiter helper class.
+*
+*/
+
+//  CLASS HEADER
+#include "cnsmldummydatastorewaiter.h"
+
+// INTERNAL INCLUDES
+#include "nsmldummydatastore.h"
+
+//  EXTERNAL INCLUDES
+#include <eunitmacros.h>
+
+// CONSTANTS
+
+
+// --- Constructors & destructors --------------------------------------------
+CNSmlDummyDataStoreWaiter* CNSmlDummyDataStoreWaiter::NewL(
+        CNSmlDummyDataStore& aStore )
+    {
+    CNSmlDummyDataStoreWaiter* self =
+        CNSmlDummyDataStoreWaiter::NewLC( aStore );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+CNSmlDummyDataStoreWaiter* CNSmlDummyDataStoreWaiter::NewLC(
+    CNSmlDummyDataStore& aStore )
+    {
+    CNSmlDummyDataStoreWaiter* self =
+        new ( ELeave ) CNSmlDummyDataStoreWaiter( aStore );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+CNSmlDummyDataStoreWaiter::~CNSmlDummyDataStoreWaiter()
+    {
+    Cancel();
+    delete iWait;
+    iOpen = EFalse;
+    }
+
+CNSmlDummyDataStoreWaiter::CNSmlDummyDataStoreWaiter(
+    CNSmlDummyDataStore& aStore ):
+    CActive( EPriorityNormal ), iStore( aStore ), iOpen( EFalse )
+    {
+
+    }
+
+void CNSmlDummyDataStoreWaiter::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    iWait = new ( ELeave ) CActiveSchedulerWait();
+    }
+
+// --- From CActive ----------------------------------------------------------
+void CNSmlDummyDataStoreWaiter::DoCancel()
+    {
+    iStore.CancelRequest();
+    }
+
+void CNSmlDummyDataStoreWaiter::RunL()
+    {
+    iWait->AsyncStop();
+    }
+
+// --- Test methods -----------------------------------------------------------
+
+void CNSmlDummyDataStoreWaiter::OpenStoreL( MSmlSyncRelationship& aRelationship, 
+    const TDesC& /*aStoreName*/ )
+    {
+    Cancel();
+    iStore.OpenL( _L("C:Contacts.cdb"), aRelationship, iStatus );
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+    iOpen = ETrue;
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoCommitChangeInfoL(
+    const MSmlDataItemUidSet& aItems )
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+
+    Cancel();
+    iStore.DoCommitChangeInfoL( iStatus, aItems );
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoResetChangeInfoL()
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+
+    Cancel();
+    iStore.DoResetChangeInfoL( iStatus );
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoCommitChangeInfoL()
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+
+    Cancel();
+    iStore.DoCommitChangeInfoL( iStatus );
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+// Item addition in "normal" (non-batch) mode
+TInt CNSmlDummyDataStoreWaiter::DoCreateItemL( TSmlDbItemUid& aUid,
+    TInt aSize, const TDesC8& aMimeType, const TDesC8& aMimeVer )
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+    Cancel();
+    iStore.DoCreateItemL( aUid, aSize, 0, aMimeType, aMimeVer, iStatus );
+
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoCommitItemL()
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+    Cancel();
+    iStore.DoCommitItemL( iStatus );
+
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoCommitBatchL( RArray<TInt>& aResultArray )
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+    Cancel();
+    iStore.DoCommitBatchL( aResultArray, iStatus );
+
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+void CNSmlDummyDataStoreWaiter::DoCancelBatch()
+    {
+    if( !iOpen )
+        {
+        return;
+        }
+    iStore.DoCancelBatch();
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoOpenItemL( TSmlDbItemUid aUid,
+    TBool& aFieldChange, TInt& aSize, TSmlDbItemUid& aParent,
+    TDes8& aMimeType, TDes8& aMimeVer )
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+    Cancel();
+    iStore.OpenItemL( aUid, aFieldChange, aSize, aParent, aMimeType,
+        aMimeVer, iStatus );
+
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoReplaceItemL( TSmlDbItemUid aUid,
+    TInt aSize, TSmlDbItemUid aParent, TBool aFieldChange )
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+    Cancel();
+    iStore.ReplaceItemL( aUid, aSize, aParent, aFieldChange, iStatus );
+    SetActive();
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+    return iStatus.Int();
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoDeleteItemL( TSmlDbItemUid aUid )
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+    Cancel();
+    iStore.DeleteItemL( aUid, iStatus );
+
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+TInt CNSmlDummyDataStoreWaiter::DoDeleteAllItemsL()
+    {
+    if( !iOpen )
+        {
+        User::Leave( KErrNotReady );
+        }
+    Cancel();
+    iStore.DeleteAllItemsL( iStatus );
+
+    SetActive();
+
+    if( !iWait->IsStarted() )
+        {
+        iWait->Start();
+        }
+
+    return iStatus.Int();
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastorewaiter.h	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2009 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:  Header file for datastorewaiter helper class.
+*
+*/
+
+#ifndef __CNSMLDUMMYDATASTOREWAITER_H__
+#define __CNSMLDUMMYDATASTOREWAITER_H__
+
+// INCLUDES
+#include <e32base.h>
+#include "nsmldummydatastore.h"
+
+// FORWARD DECLARATIONS
+class MSmlSyncRelationship;
+
+// CLASS DEFINITION
+
+
+NONSHARABLE_CLASS( CNSmlDummyDataStoreWaiter ):
+    public CActive
+    {
+    public:  // Constructors and destructor
+        static CNSmlDummyDataStoreWaiter* NewL( CNSmlDummyDataStore& aStore );
+        static CNSmlDummyDataStoreWaiter* NewLC( CNSmlDummyDataStore& aStore );
+        virtual ~CNSmlDummyDataStoreWaiter();
+        
+    private:  // Constructors
+        CNSmlDummyDataStoreWaiter( CNSmlDummyDataStore& aStore );
+        void ConstructL();
+        
+    private:  // From CActive
+        void DoCancel();
+        void RunL();
+    
+    public:
+        void OpenStoreL( MSmlSyncRelationship& aRelationship, 
+            const TDesC& aStoreName = KNSmlContactStoreNameForDefaultDB );
+        TInt DoCommitChangeInfoL( const MSmlDataItemUidSet& aItems );
+        TInt DoResetChangeInfoL();
+        TInt DoCommitChangeInfoL();
+        
+        TInt DoCreateItemL( TSmlDbItemUid& aUid, TInt aSize, 
+            const TDesC8& aMimeType, const TDesC8& aMimeVer );
+        TInt DoCommitItemL();
+                
+        TInt DoCommitBatchL( RArray<TInt>& aResultArray );
+        void DoCancelBatch();
+        
+        TInt DoOpenItemL( TSmlDbItemUid aUid, TBool& aFieldChange, 
+            TInt& aSize, TSmlDbItemUid& aParent, TDes8& aMimeType, 
+            TDes8& aMimeVer );
+        TInt DoReplaceItemL( TSmlDbItemUid aUid, TInt aSize, 
+            TSmlDbItemUid aParent, TBool aFieldChange );
+        TInt DoDeleteItemL( TSmlDbItemUid aUid );
+        TInt DoDeleteAllItemsL();
+
+    private:  // Data
+        CActiveSchedulerWait* iWait;
+        CNSmlDummyDataStore& iStore;
+        TBool iOpen;
+    };
+
+#endif // __CNSMLDUMMYDATASTOREWAITER_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/def/bwinscwcontactsdataprovider_testu.def	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?CreateTestSuiteL@@YAPAVMEUnitTest@@XZ @ 1 NONAME ; class MEUnitTest * CreateTestSuiteL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/def/eabicontactsdataprovider_testu.def	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,9 @@
+EXPORTS
+	_Z16CreateTestSuiteLv @ 1 NONAME
+	_ZTI19CNSmlDummyDataStore @ 2 NONAME
+	_ZTI22CNSmlDummyDataProvider @ 3 NONAME
+	_ZTI25CNSmlAdapterTestUtilities @ 4 NONAME
+	_ZTV19CNSmlDummyDataStore @ 5 NONAME
+	_ZTV22CNSmlDummyDataProvider @ 6 NONAME
+	_ZTV25CNSmlAdapterTestUtilities @ 7 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/dllmain.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2009 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:  DllMain file for contact adapter unit tests.
+*
+*/
+
+//  EXTERNAL INCLUDES
+#include <ceunittestsuite.h>
+#include "cnsmldummydataprovider_test.h"
+#include "cnsmldummydatastore_test.h"
+
+/**
+* UT_nsmldscontactsdataprovider.dll test suite factory function.
+*/
+EXPORT_C MEUnitTest* CreateTestSuiteL()
+    {
+    CEUnitTestSuite* rootSuite = 
+        CEUnitTestSuite::NewLC( _L( "Unit test for Contact adapter" ) );
+
+    // Unit tests for dataprovider class (CNSmlDummyDataProvider)
+    MEUnitTest* providerSuite = CNSmlDummyDataProvider_Test::NewL();
+    CleanupStack::PushL( providerSuite );
+    rootSuite->AddL( providerSuite );
+    CleanupStack::Pop( providerSuite );
+
+    // Unit tests for datastore class (CNSmlDummyDataStore)
+    MEUnitTest* storeSuite = CNSmlDummyDataStore_Test::NewL();
+    CleanupStack::PushL( storeSuite );
+    rootSuite->AddL( storeSuite );
+    CleanupStack::Pop( storeSuite );
+
+    CleanupStack::Pop( rootSuite );
+
+    return rootSuite;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/testdata/basic.vcf	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,5 @@
+BEGIN:VCARD
+VERSION:2.1
+N:Smith;John
+TITLE:Boss
+END:VCARD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/testdata/standard.vcf	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,17 @@
+BEGIN:VCARD
+VERSION:2.1
+N:Smith;John
+FN:John Smith
+ORG:Firm
+TITLE:Boss
+NOTE;ENCODING=QUOTED-PRINTABLE:Liirum larum.=0D=0A
+TEL;WORK;VOICE:132456798
+TEL;HOME;VOICE:654654987
+TEL;CELL;VOICE:0400654987654
+TEL;WORK;FAX:2321654987987
+ADR;WORK:;;Firmstreet 1;New City;Sawo;00000;Finland
+LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Firmstreet 1=0D=0ANew City, Sawo 00000=0D=0AFinland
+URL;WORK:http://www.nokia.com
+EMAIL;PREF;INTERNET:John.Smith@firm.com
+REV:20080306T115812Z
+END:VCARD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/data/nsmldummydataprovider.loc	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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:  Localization file for DS Dummy Adapter.
+*
+*/
+
+//d:Display name for registry info 
+//l:list_setting_pane_t1
+//
+#define qtn_nsml_dummy_adapter_display_name "Contacts (dummy)" 
+
+// End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/data/nsmldummydataprovider.rss	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2009 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:  Registery info for DS Dummy Adapter.
+*
+*/
+
+#include "nsmldummydataprovider.loc"
+
+#include <registryinfo.rh>
+#include <nsmldsconstants.h>
+
+RESOURCE REGISTRY_INFO theRegistryInfo
+  {
+  dll_uid = 0x2002DC7E; // DS interface implementation UID
+  interfaces = 
+      {
+      INTERFACE_INFO
+          {
+          interface_uid = KNSmlDSInterfaceUid; // DS interface UID
+          implementations = 
+            {
+            IMPLEMENTATION_INFO
+                {
+                implementation_uid = 0x2002DC7E; // DS interface implementation UID
+                version_no = 1; 
+                display_name = qtn_nsml_dummy_adapter_display_name;
+                default_data = "";
+                opaque_data = "";
+                }
+            };
+          }
+      };
+    }
+
+// End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/data/nsmldummydatastoreformat_1_1_2.rss	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,508 @@
+CHARACTER_SET UTF8/*
+* Copyright (c) 2006 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:  Resource data for DS Dummy DataProvider
+*
+*/
+
+#include "SmlDataFormat.rh"
+#include "SmlDataFormat.hrh"
+
+RESOURCE SML_DATA_STORE_FORMAT NSML_CONTACTS_DATA_STORE_FORMAT
+	{
+	version=1;
+	display_name="Test Contacts";
+	sync_types=KSmlSyncType_TwoWay+KSmlSyncType_OneWayFromSvr+
+	           KSmlSyncType_OneWayFromClnt+KSmlSyncType_SlowSync+
+	           KSmlSyncType_RefreshFromSvr+KSmlSyncType_RefreshFromClnt;
+	mime_format=
+		{
+		SML_MIME_FORMAT
+			{
+			version=1;
+			mime_type="text/x-vcard";
+			mime_ver="2.1";
+			properties=
+				{
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Begin";
+					name="BEGIN";
+					data_type="";
+					enum_values={"VCARD"};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="End";
+					name="END";
+					data_type="";
+					enum_values={"VCARD"};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Version";
+					name="VERSION";
+					data_type="";
+					enum_values={"2.1"};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Revision";
+					name="REV";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Name";
+					name="N";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Address";
+					name="ADR";	
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Home address";
+							name="HOME";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Work address";
+							name="WORK";
+							data_type="";
+							enum_values={};
+							}
+						};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Telephone number";
+					name="TEL";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Home telephone";
+							name="HOME";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Work telephone";
+							name="WORK";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Cellular number";
+							name="CELL";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Pager number";
+							name="PAGER";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Fax number";
+							name="FAX";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Video number";
+							name="VIDEO";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Default number";
+							name="PREF";
+							data_type="";
+							enum_values={};
+							},	
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Car telephone";
+							name="CAR";
+							data_type="";
+							enum_values={};
+							}
+						};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="FullName";
+					name="FN";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Email address";
+					name="EMAIL";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="";
+							name="INTERNET";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Home email";
+							name="HOME";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Work email";
+							name="WORK";
+							data_type="";
+							enum_values={};
+							}
+						};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="URL address";
+					name="URL";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Home URL";
+							name="HOME";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Work URL";
+							name="WORK";
+							data_type="";
+							enum_values={};
+							}
+						};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Note";
+					name="NOTE";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Title";
+					name="TITLE";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Organisation";
+					name="ORG";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Photo";
+					name="PHOTO";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Birthday";
+					name="BDAY";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Sound";
+					name="SOUND";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Wireless Village Id";
+					name="X-WV-ID";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+					
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Assistant name";
+					name="X-ASSISTANT";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+					
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Assistant phone";
+					name="X-ASSISTANT-TEL";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Anniversary";
+					name="X-ANNIVERSARY";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Spouse";
+					name="X-SPOUSE";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Children";
+					name="X-CHILDREN";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+			 SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Nickname";
+					name="X-EPOCSECONDNAME";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Class";
+					name="X-CLASS";
+					data_type="";
+					enum_values={"PUBLIC","PRIVATE","CONFIDENTIAL"};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="SIP protocol";
+					name="X-SIP";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="POC";
+							name="POC";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="SWIS";
+							name="SWIS";
+							data_type="";
+							enum_values={};
+							},
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Voice over IP";
+							name="VOIP";
+							data_type="";
+							enum_values={};
+							}
+						};
+					}
+				};
+				field_level=0;
+				}
+			};
+		mime_format_tx_pref=0;     // Preferred index for tx
+		mime_format_rx_pref=0;     // Preferred index for rx
+		folder_properties={};
+		filter_capabilities={};
+		max_size=0; 	// no limit
+		max_items=0; 	// no limit
+		flags=0;
+	}
+	
+// End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/data/nsmldummydatastoreformat_1_2.rss	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,400 @@
+CHARACTER_SET UTF8/*
+* Copyright (c) 2006 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:  Resource data for DS Dummy DataProvider
+*
+*/
+
+#include "SmlDataFormat.rh"
+#include "SmlDataFormat.hrh"
+
+RESOURCE SML_DATA_STORE_FORMAT NSML_CONTACTS_DATA_STORE_FORMAT
+	{
+	version=1;
+	display_name="Test Contacts";
+	sync_types=KSmlSyncType_TwoWay+KSmlSyncType_OneWayFromSvr+
+	           KSmlSyncType_OneWayFromClnt+KSmlSyncType_SlowSync+
+	           KSmlSyncType_RefreshFromSvr+KSmlSyncType_RefreshFromClnt;
+	mime_format=
+		{
+		SML_MIME_FORMAT
+			{
+			version=1;
+			mime_type="text/x-vcard";
+			mime_ver="2.1";
+			properties=
+				{
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Begin";
+					name="BEGIN";
+					data_type="";
+					enum_values={"VCARD"};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="End";
+					name="END";
+					data_type="";
+					enum_values={"VCARD"};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Version";
+					name="VERSION";
+					data_type="";
+					enum_values={"2.1"};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Revision";
+					name="REV";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Name";
+					name="N";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Address";
+					name="ADR";	
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Type";
+							name="TYPE";
+							data_type="";
+							enum_values={"HOME", "WORK"};
+							}
+						};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Telephone number";
+					name="TEL";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Type";
+							name="TYPE";
+							data_type="";
+							enum_values={"HOME", "WORK", "CELL", "PAGER", "FAX", "VIDEO", "PREF", "CAR"};
+							}
+						};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="FullName";
+					name="FN";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Email address";
+					name="EMAIL";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Type";
+							name="TYPE";
+							data_type="";
+							enum_values={"INTERNET", "HOME", "WORK"};
+							}
+						};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="URL address";
+					name="URL";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Type";
+							name="TYPE";
+							data_type="";
+							enum_values={"HOME", "WORK"};
+							}
+						};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Note";
+					name="NOTE";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Title";
+					name="TITLE";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Organisation";
+					name="ORG";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Photo";
+					name="PHOTO";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Birthday";
+					name="BDAY";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Sound";
+					name="SOUND";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Wireless Village Id";
+					name="X-WV-ID";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Assistant name";
+					name="X-ASSISTANT";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Assistant phone";
+					name="X-ASSISTANT-TEL";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Anniversary";
+					name="X-ANNIVERSARY";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Spouse";
+					name="X-SPOUSE";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Children";
+					name="X-CHILDREN";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+			 SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Nickname";
+					name="X-EPOCSECONDNAME";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Class";
+					name="X-CLASS";
+					data_type="";
+					enum_values={"PUBLIC","PRIVATE","CONFIDENTIAL"};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="SIP protocol";
+					name="X-SIP";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params=
+						{
+						SML_DATA_PROPERTY_PARAM
+							{
+							version=1;
+							display_name="Type";
+							name="TYPE";
+							data_type="";
+							enum_values={"POC", "SWIS", "VOIP"};
+							}
+						};
+					}
+				};
+				field_level=0;
+				}
+			};
+		mime_format_tx_pref=0;     // Preferred index for tx
+		mime_format_rx_pref=0;     // Preferred index for rx
+		folder_properties={};
+		filter_capabilities={};
+		max_size=0; 	// no limit
+		max_items=0; 	// no limit
+		flags=0;
+	}
+	
+// End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/group/bld.inf	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 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:  build info file for DS Dummy adapter
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_MMPFILES
+.\nsmldummydataprovider.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/group/def/bwinscwdummydataprovideru.def	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/group/def/eabidummydataprovideru.def	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS
+	_Z24ImplementationGroupProxyRi @ 1 NONAME
+	_ZTI19CNSmlDummyDataStore @ 2 NONAME
+	_ZTI22CNSmlDummyDataProvider @ 3 NONAME
+	_ZTV19CNSmlDummyDataStore @ 4 NONAME
+	_ZTV22CNSmlDummyDataProvider @ 5 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/group/nsmldummydataprovider.mmp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2009 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:  mmp file for DS Dummy Adapter
+*
+*/
+
+#include <platform_paths.hrh>
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+
+CAPABILITY CAP_ECOM_PLUGIN
+
+TARGET          nsmldummydataprovider.dll
+TARGETPATH      PLUGINS_1_DIR
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x2002DC7E
+VENDORID        VID_DEFAULT
+
+#if defined(ARMCC)
+DEFFILE            ./def/eabidummydataprovider
+#elif defined(WINSCW)
+DEFFILE            ./def/bwinscwdummydataprovider
+#endif
+
+SOURCEPATH      ../src
+SOURCE          nsmldummydataprovider.cpp
+SOURCE          nsmldummydatastore.cpp
+SOURCE          nsmldummydllmain.cpp
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE     /epoc32/include/ecom
+SYSTEMINCLUDE     /epoc32/include/syncml
+
+USERINCLUDE     ../inc
+
+SOURCEPATH      ../data
+START RESOURCE nsmldummydataprovider.rss
+    HEADER
+    TARGET nsmldummydataprovider.rsc
+    TARGETPATH ECOM_RESOURCE_DIR
+    LANG    sc
+END
+
+START RESOURCE nsmldummydatastoreformat_1_1_2.rss
+    HEADER
+    TARGET         nsmldummydatastoreformat_1_1_2.rsc
+    TARGETPATH  RESOURCE_FILES_DIR 
+    LANG    sc
+END 
+
+START RESOURCE nsmldummydatastoreformat_1_2.rss
+    HEADER
+    TARGET         nsmldummydatastoreformat_1_2.rsc
+    TARGETPATH  RESOURCE_FILES_DIR 
+    LANG    sc
+END 
+
+LIBRARY        ECom.lib
+LIBRARY        bafl.lib
+LIBRARY        euser.lib
+LIBRARY        efsrv.lib
+LIBRARY        estor.lib
+LIBRARY        nsmldebug.lib
+LIBRARY        sysutil.lib
+LIBRARY        nsmlchangefinder.lib  
+LIBRARY        wbxmllib.lib
+LIBRARY        nsmldatamod.lib
+LIBRARY        smlstoreformat.lib
+LIBRARY        smldataprovider.lib
+LIBRARY        nsmldshostclient.lib
+LIBRARY        nsmlcontactsdatastoreextension.lib
+LIBRARY        nsmlcontactsdataprovider.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/inc/nsmldummydataprovider.h	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2009 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:  DS Dummy dataprovider
+*
+*/
+
+#ifndef CNSMLDUMMYDATAPROVIDER_H
+#define CNSMLDUMMYDATAPROVIDER_H
+
+//  EXTERNAL INCLUDES
+#include <e32base.h>
+
+
+//  INTERNAL INCLUDES
+#include "nsmlcontactsdataprovider.h"
+
+//  CONSTANTS
+const TUint KNSmlDummyAdapterImplUid = 0x2002DC7E;
+
+
+
+//  CLASS DEFINITION
+/**
+ * Dataprovider class for Dummy adapters
+ * @lib nsmldummydataprovider.lib
+ * @since 5.0
+ */
+class CNSmlDummyDataProvider : public CNSmlContactsDataProvider
+    {
+    
+    private:    // Friend class definitions
+        friend class CNSmlDummyDataProvider_Test;
+    
+    public:     // Constructors and destructor
+        static CNSmlDummyDataProvider* NewL();
+        static CNSmlDummyDataProvider* NewLC();
+        ~CNSmlDummyDataProvider();
+
+    protected:    // Constructors
+        CNSmlDummyDataProvider();
+        void ConstructL();
+
+    protected:  // CSmlDataProvider
+        /**
+         * Not supported currently.
+         * When framework event occurs this method is called with type of 
+         * the event TsmlFrameworkEvent and additional parameters aParam1 
+         * and aParam2.
+         */
+        void DoOnFrameworkEvent( TSmlFrameworkEvent aFrameworkEvent,
+            TInt aParam1, TInt aParam2 );
+
+        /**
+         * Returns True if operation of id aOpId is supported otherwise 
+         * returns False. Supported operations are KUidSmlSupportBatch 
+         * and KUidSmlSupportMultipleStores
+         */
+        TBool DoSupportsOperation( TUid aOpId ) const;
+
+        /**
+         * Reads CDP's DataStoreFormat from resources.
+         */
+        const CSmlDataStoreFormat& DoStoreFormatL();
+
+        /**
+         * Reads all Contact database names from client. 
+         * This calls CNSmlContactsDataStore method DoListStoresLC().
+         */
+        CDesCArray* DoListStoresLC();
+
+        /**
+         * Reads default database name from client. This calls 
+         * CNSmlContactsDataStore method DoGetDefaultFileNameL().
+         */
+        const TDesC& DoDefaultStoreL();
+
+        /**
+         * Creates new CSmlDataStore datastore instance
+         */
+        CSmlDataStore* DoNewStoreInstanceLC();
+
+        /**
+         * Not supported on CDP.
+         * (Returns the set of filters that can be used to send to the 
+         * SyncML server.)
+         */
+        const RPointerArray< CSyncMLFilter >& DoSupportedServerFiltersL();
+
+        /**
+         * Not supported on CDP.
+         * (The set of filters that can be used to send to the SyncML 
+         * server filtered with the set of keywords supported by the server.)
+         *  
+         */
+        void DoCheckSupportedServerFiltersL(
+            const CSmlDataStoreFormat& aServerDataStoreFormat, 
+            RPointerArray< CSyncMLFilter >& aFilters, 
+            TSyncMLFilterChangeInfo& aChangeInfo );
+
+        /**
+         * Not supported on CDP.
+         */
+        void DoCheckServerFiltersL( RPointerArray< CSyncMLFilter >& aFilters, 
+            TSyncMLFilterChangeInfo& aChangeInfo );
+
+        /**
+         * Not supported on CDP
+         * (Generates a record filter query to be sent to the SyncML server 
+         * for the provided filters.)
+         */
+        HBufC* DoGenerateRecordFilterQueryLC( 
+            const RPointerArray< CSyncMLFilter >& aFilters, 
+            TSyncMLFilterMatchType aMatch, TDes& aFilterMimeType, 
+            TSyncMLFilterType& aFilterType, TDesC& aStoreName );
+
+        /**
+         * Not supported on CDP
+         * (Generates a field filter query to be sent to the SyncML server 
+         * for the provided filters.)
+         */
+        void DoGenerateFieldFilterQueryL(
+            const RPointerArray< CSyncMLFilter >& aFilters, 
+            TDes& aFilterMimeType, 
+            RPointerArray< CSmlDataProperty >& aProperties, TDesC& aStoreName );
+
+        const TDesC& GetStoreFormatResourceFileL() const;
+        CNSmlContactsDataStore* CreateDataStoreLC() const;
+
+    };
+
+
+#endif      //  CNSMLDUMMYDATAPROVIDER_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/inc/nsmldummydatastore.h	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,313 @@
+/*
+* Copyright (c) 2009 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:  DS Dummy datastore
+*
+*/
+
+#ifndef CNSMLDUMMYDATASTORE_H
+#define CNSMLDUMMYDATASTORE_H
+
+//  EXTERNAL INCLUDES
+#include <nsmlcontactsdatastore.h>
+
+// Device Info resource filenames
+_LIT( KNSmlDummyContactsStoreFormatRsc_1_1_2, "NSmlDummyDataStoreFormat_1_1_2.rsc" );
+_LIT( KNSmlDummyContactsStoreFormatRsc_1_2, "NSmlDummyDataStoreFormat_1_2.rsc" );
+
+//  CLASS DEFINITION
+/**
+ * Datastore class for Dummy adapters
+ * @lib nsmldummydataprovider.lib
+ * @since 3.23
+ */
+class CNSmlDummyDataStore : public CNSmlContactsDataStore
+    {
+    private:    // Friend class definitions (for unit test purposes)
+        friend class CNSmlDummyDataStore_Test;
+        friend class CNSmlDummyDataStoreWaiter;
+        
+    public:     // Constructors and destructor
+
+        static CNSmlDummyDataStore* NewL();
+        static CNSmlDummyDataStore* NewLC();
+        ~CNSmlDummyDataStore();
+
+    protected:    // Constructors
+
+        CNSmlDummyDataStore();
+        void ConstructL();
+
+    protected:  // From CNSmlContactsDataStore
+
+        /**
+         * Opens datastore for read/write access. Store to open is specified 
+         * by datastore name aStoreName and syncronisation relationship 
+         * aContext. Command status is returned in aStatus. Internal state 
+         * of this class instance is set to ENSmlOpenAndWaiting and was 
+         * expected to be ENSmlClosed before calling this method, otherwise 
+         * KErrInUse error is returned.
+         */
+        void DoOpenL( const TDesC& aStoreName, MSmlSyncRelationship& aContext,
+            TRequestStatus& aStatus);
+
+        /**
+         * Cancels the current asynchronous request (including OpenL()-method.)
+         */
+        void DoCancelRequest();
+
+        /**
+         * Returns the name of the currently opened datastore.
+         */
+        const TDesC& DoStoreName() const;
+
+        /**
+         * Not supported currently (Starts the transaction.)
+         */
+        void DoBeginTransactionL();
+
+        /**
+         * Not supported currently
+         * 
+         * (After executing operations for data items and no errors has 
+         * occurred CommitTransactionL() is called. aStatus is a return 
+         * status for CommitTransactionL()method.) 
+         */
+        void DoCommitTransactionL( TRequestStatus& aStatus );
+
+        /**
+         * Not supported currently
+         *  
+         * (If an execution of an operation for a dataitem fails during 
+         * transaction then RevertTransactionL() is called. aStatus is 
+         * a return status for RevertTransactionL()method. )
+         */
+        void DoRevertTransaction( TRequestStatus& aStatus );
+
+        /**
+         * Starts the batch. During this mode calls to CreateItemL(), 
+         * ReplaceItemL(), WriteItemL(), CommitItemL(), MoveItemL(), 
+         * DeleteItemL() and SoftDeleteItemL() will be buffered until 
+         * DoCommitBatchL().
+         */
+        void DoBeginBatchL();
+
+        /**
+         * Executes all batched commands. Results for items are returned 
+         * in array structure aResultArray and status for CommitBatchL 
+         * is returned in aStatus.
+         */
+        void DoCommitBatchL( RArray< TInt >& aResultArray,
+            TRequestStatus& aStatus );
+
+        /**
+         * Cancels the ongoing batch command buffering and frees all 
+         * buffered commands.
+         */
+        void DoCancelBatch();
+
+        /**
+         * Sets the datastore format according aServerDataStoreFormat 
+         * structure. This is used in stripping and merging.
+         */
+        void DoSetRemoteStoreFormatL(
+            const CSmlDataStoreFormat& aServerDataStoreFormat );
+
+        /**
+         * Sets the SyncML Remote Server maximum object size. This size 
+         * is used to check that only smaller items than maximum object 
+         * size are sent to SyncML Remote Server. 
+         */
+        void DoSetRemoteMaxObjectSize( TInt aServerMaxObjectSize );
+
+        /**
+         * Returns the maximum object size of data provider. Size is read 
+         * from resources if they are already opened otherwise default 
+         * value KNSmlDataStoreMaxSize is returned.
+         */
+        TInt DoMaxObjectSize() const;
+
+        /**        
+         * Indicates that SyncML Remote Server is going to read item with 
+         * ReadItemL() method. Input value aUid indicates item id to open, 
+         * references returned aFieldChange, aSize, aParent, aMimeType, 
+         * aMimeVer and aStatus indicates if fieldchange is possible, 
+         * parent uid, item’s mimetype, item’s mimeversion and status of 
+         * this commands execution respectively. aFieldChange is not currently
+         * supported. Internal state of this class instance is set to 
+         * ENSmlItemOpen and was expected to be ENSmlOpenAndWaiting before 
+         * calling this method, otherwise KErrNotReady error is returned. 
+         */
+        void DoOpenItemL( TSmlDbItemUid aUid, TBool& aFieldChange, 
+            TInt& aSize, TSmlDbItemUid& aParent, TDes8& aMimeType,
+            TDes8& aMimeVer, TRequestStatus& aStatus );
+
+        /**
+         * Indicates that SyncML Remote Server is going to create item with 
+         * WriteItemL() method. Input values aSize, aParent, aMimeType and 
+         * aMimeVer indicates item size that is to be created, parent’s uid, 
+         * item’s mimetype and item’s mimeversion respectively. Status of 
+         * this commands execution is returned in reference aStatus and 
+         * item’s uid that is created is returned in aUid. Internal state 
+         * of this class instance is set to ENSmlItemCreating and was expected 
+         * to be ENSmlOpenAndWaiting before calling this method, otherwise 
+         * KErrNotReady error is returned. 
+         */
+        void DoCreateItemL( TSmlDbItemUid& aUid, TInt aSize,
+            TSmlDbItemUid aParent, const TDesC8& aMimeType, 
+            const TDesC8& aMimeVer, TRequestStatus& aStatus );
+
+        /**
+         * Indicates that SyncPartner is going to replace item’s data with 
+         * WriteItemL() method. Input values aUid, aSize, aParent and 
+         * aFieldChange indicates item’s id, size, parent’s uid that is to 
+         * be replaced and if replace is field change respectively. Status 
+         * of this commands execution is returned in reference aStatus. 
+         * Internal state of this class instance is set to ENSmlItemUpdating 
+         * and was expected to be ENSmlOpenAndWaiting before calling this 
+         * method, otherwise KErrNotReady error is returned.
+         */
+        void DoReplaceItemL( TSmlDbItemUid aUid, TInt aSize,
+            TSmlDbItemUid aParent, TBool aFieldChange, 
+            TRequestStatus& aStatus );
+
+        /**
+         * Reads data from item at Data Store. Item must be opened with 
+         * DoOpenItemL() method before calling this method. Internal state 
+         * of this class instance is expected to be ENSmlItemOpen before 
+         * calling this method, otherwise KErrNotReady error is returned. 
+         * This method leaves with KErrEof when item is completely read.
+         */
+        void DoReadItemL( TDes8& aBuffer );
+
+        /**
+         * DoCreateItemL() or DoReplaceItemL() method must be called before 
+         * this method can be called. This method is called until all data 
+         * to current item is written. Internal state of this class instance 
+         * is expected to be ENSmlItemCreating or ENSmlItemUpdating before 
+         * calling this method, otherwise KErrNotReady error is returned.
+         */
+        void DoWriteItemL( const TDesC8& aData );
+
+        /**
+         * Commits item changes to Contacts database. This method updates 
+         * Contacts database through contacts model method ImportContactsL 
+         * to update or to create item respectively. Internal state of this 
+         * class instance is expected to be ENSmlItemCreating or 
+         * ENSmlItemUpdating before calling this method, otherwise 
+         * KErrNotReady error is returned.On BatchMode KErrNone returned 
+         * and final command status(es) for each buffered command is returned 
+         * when DoCommitBatchL() is called.
+         */
+        void DoCommitItemL( TRequestStatus& aStatus );
+
+        /**
+         * Closes operations for opened item. Called after DoReadItemL().
+         */
+        void DoCloseItem();
+
+        /**
+         * Not supported for Contacts data provider.
+         */
+        void DoMoveItemL( TSmlDbItemUid aUid,
+            TSmlDbItemUid aNewParent, TRequestStatus& aStatus );
+
+        /**
+         * Deletes item with given aUid.
+         */
+        void DoDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus );
+
+        /**
+         * Soft delete is not supported.
+         */
+        void DoSoftDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus );
+
+        /**
+         * Deletes all items except OwnCardId. ChangeFinder data is resetted.
+         */
+        void DoDeleteAllItemsL( TRequestStatus& aStatus );
+
+        /**
+         * Returns True if synchronisation history is available for server, 
+         * otherwise False. Checks also that database id is not changed 
+         * for some reason.
+         */
+        TBool DoHasSyncHistory() const;
+
+        /**
+         * Returns UIDs of items that are added to client after previous 
+         * synchronization.  ChangeFinder-method FindNewItemsL() called 
+         * to get list.
+         */
+        const MSmlDataItemUidSet& DoAddedItems() const;
+
+        /**
+         * Returns UIDs of items that are deleted from client after previous 
+         * synchronization. ChangeFinder-method FindDeletedItemsL() called 
+         * to get list.
+         */
+        const MSmlDataItemUidSet& DoDeletedItems() const;
+
+        /**
+         * Returns UIDs of items that are softdeleted from client after 
+         * previous synchronization. ChangeFinder-method 
+         * FindSoftDeletedItemsL() called to get list.
+         */
+        const MSmlDataItemUidSet& DoSoftDeletedItems() const;
+
+        /**
+         * Returns UIDs of items that are updated in client after previous 
+         * synchronization. ChangeFinder-method FindChangedItemsL() called 
+         * to get list.
+         */
+        const MSmlDataItemUidSet& DoModifiedItems() const;
+
+        /**
+         * Not actually supported for Contacts.
+         * Returns UIDs of items that are moved in client after previous 
+         * synchronization. ChangeFinder-method FindMovedItemsL() called 
+         * to get list.
+         */
+        const MSmlDataItemUidSet& DoMovedItems() const;
+
+        /**
+         * Resets the current synchronisation history by ChangeFinder 
+         * ResetL()-method. ResetChangeInfoL()status is returned in aStatus.
+         */
+        void DoResetChangeInfoL( TRequestStatus& aStatus );
+
+        /**
+         * Commits change info changes with ChangeFinder 
+         * CommitChangesL()-method and returns status for uid set aItems. 
+         * CommitChangeInfoL()status is returned in aStatus. This method 
+         * is called for all commands succefully executed in HostServer.
+         */
+        void DoCommitChangeInfoL( TRequestStatus& aStatus, 
+            const MSmlDataItemUidSet& aItems );
+
+        /**
+         * Commits change info changes with ChangeFinder 
+         * CommitChangesL()-method and returns status in aStatus.
+         */
+        void DoCommitChangeInfoL( TRequestStatus& aStatus );
+
+        const TDesC& GetStoreFormatResourceFileL() const;        
+        TInt DoExecuteBufferL( RArray< TInt >& aResultArray );
+        CNSmlDataModBase& GetDataMod();
+        TInt ExportContactsL( const TUid& aUid, CBufBase& aContactBufBase );
+        CArrayFixFlat<TUid>* ImportContactsL( const TDesC8& aContactBufBase );
+    };
+
+#endif      //  CNSMLDUMMYDATASTORE_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/readme.txt	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,9 @@
+What is DummyAdapter?
+
+Dummy adapter is a ECOM plugin, which acts as a stub implementation for Adapter Customization API. It is a SyncML adapter, which fully implements Adapter Customization API interface, but does not extend or restrict the default functionality provided by platform. Dummy adapter works identically compared to platform contact adapter. It enables to synchronize contacts with SyncML servers, such as Nokia OVI server, using vCards.
+
+Dummy adapter can be also used as a skeleton for new operator adapters. This will reduce the work effort to implement new operator specific adapters compared to starting implementation from the scratch.
+
+
+How to synchronize with OVI server using Dummy adapter?
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/src/nsmldummydataprovider.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2009 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:  DS Dummy dataprovider
+*
+*/
+
+//  CLASS HEADER
+#include "nsmldummydataprovider.h"
+
+//  EXTERNAL INCLUDES
+#include <datasyncinternalpskeys.h>
+#include <e32property.h>
+#include <nsmldebug.h>
+
+// INTERNAL INCLUDES
+#include "nsmldummydatastore.h"
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataProvider::NewL
+// -----------------------------------------------------------------------------
+//
+CNSmlDummyDataProvider* CNSmlDummyDataProvider::NewL()
+    {
+    CNSmlDummyDataProvider* self = CNSmlDummyDataProvider::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataProvider::NewLC
+// -----------------------------------------------------------------------------
+//
+CNSmlDummyDataProvider* CNSmlDummyDataProvider::NewLC()
+    {
+    CNSmlDummyDataProvider* self = new( ELeave ) CNSmlDummyDataProvider;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataProvider::~CNSmlDummyDataProvider
+// -----------------------------------------------------------------------------
+//
+CNSmlDummyDataProvider::~CNSmlDummyDataProvider()
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::~CNSmlDummyDataProvider(): begin");
+    _DBG_FILE("CNSmlDummyDataProvider::~CNSmlDummyDataProvider(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataProvider::CNSmlDummyDataProvider
+// -----------------------------------------------------------------------------
+//
+CNSmlDummyDataProvider::CNSmlDummyDataProvider()
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::CNSmlDummyDataProvider(): begin");
+    _DBG_FILE("CNSmlDummyDataProvider::CNSmlDummyDataProvider(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataProvider::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataProvider::ConstructL()
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::ConstructL(): begin");
+    CNSmlContactsDataProvider::ConstructL();
+    _DBG_FILE("CNSmlDummyDataProvider::ConstructL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataProvider::DoOnFrameworkEvent
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataProvider::DoOnFrameworkEvent( TSmlFrameworkEvent aFrameworkEvent, 
+    TInt aParam1, TInt aParam2 )
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoOnFrameworkEvent(): begin");
+    CNSmlContactsDataProvider::DoOnFrameworkEvent( aFrameworkEvent, 
+        aParam1, aParam2 );
+    _DBG_FILE("CNSmlDummyDataProvider::DoOnFrameworkEvent(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// TBool CNSmlDummyDataProvider::DoSupportsOperation
+// -----------------------------------------------------------------------------
+//
+TBool CNSmlDummyDataProvider::DoSupportsOperation( TUid aOpId ) const
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoSupportsOperation()");
+    return CNSmlContactsDataProvider::DoSupportsOperation( aOpId );
+    }
+
+// -----------------------------------------------------------------------------
+// const CSmlDataStoreFormat& CNSmlDummyDataProvider::DoStoreFormatL
+// -----------------------------------------------------------------------------
+//
+const CSmlDataStoreFormat& CNSmlDummyDataProvider::DoStoreFormatL()
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoStoreFormatL()");
+    return CNSmlContactsDataProvider::DoStoreFormatL();
+    }
+
+// -----------------------------------------------------------------------------
+// CDesCArray* CNSmlDummyDataProvider::DoListStoresLC
+// -----------------------------------------------------------------------------
+//
+CDesCArray* CNSmlDummyDataProvider::DoListStoresLC()
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoListStoresLC()");
+    return CNSmlContactsDataProvider::DoListStoresLC();
+    }
+
+// -----------------------------------------------------------------------------
+// const TDesC& CNSmlDummyDataProvider::DoDefaultStoreL
+// -----------------------------------------------------------------------------
+//
+const TDesC& CNSmlDummyDataProvider::DoDefaultStoreL()
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoDefaultStoreL()");
+    return CNSmlContactsDataProvider::DoDefaultStoreL();
+    }
+
+// -----------------------------------------------------------------------------
+// CSmlDataStore*CNSmlDummyDataProvider::DoNewStoreInstanceLC
+// -----------------------------------------------------------------------------
+//
+CSmlDataStore* CNSmlDummyDataProvider::DoNewStoreInstanceLC()
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoNewStoreInstanceLC()");
+    return CNSmlContactsDataProvider::DoNewStoreInstanceLC();
+    }
+
+// -----------------------------------------------------------------------------
+// const RPointerArray< CSyncMLFilter >& CNSmlDummyDataProvider::
+// -----------------------------------------------------------------------------
+//
+const RPointerArray< CSyncMLFilter >& CNSmlDummyDataProvider::DoSupportedServerFiltersL()
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoSupportedServerFiltersL()");
+    return CNSmlContactsDataProvider::DoSupportedServerFiltersL();
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataProvider::DoCheckSupportedServerFiltersL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataProvider::DoCheckSupportedServerFiltersL(
+    const CSmlDataStoreFormat& aServerDataStoreFormat, 
+    RPointerArray< CSyncMLFilter >& aFilters, 
+    TSyncMLFilterChangeInfo& aChangeInfo )
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoCheckSupportedServerFiltersL(): begin");
+    CNSmlContactsDataProvider::DoCheckSupportedServerFiltersL(
+        aServerDataStoreFormat, aFilters, aChangeInfo );
+    _DBG_FILE("CNSmlDummyDataProvider::DoCheckSupportedServerFiltersL(): end");
+    }
+
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataProvider::DoCheckServerFiltersL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataProvider::DoCheckServerFiltersL( 
+    RPointerArray< CSyncMLFilter >& aFilters, 
+    TSyncMLFilterChangeInfo& aChangeInfo )
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoCheckServerFiltersL(): begin");
+    CNSmlContactsDataProvider::DoCheckServerFiltersL( aFilters, aChangeInfo );
+    _DBG_FILE("CNSmlDummyDataProvider::DoCheckServerFiltersL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// HBufC* CNSmlDummyDataProvider::DoGenerateRecordFilterQueryLC
+// -----------------------------------------------------------------------------
+//
+HBufC* CNSmlDummyDataProvider::DoGenerateRecordFilterQueryLC( 
+    const RPointerArray< CSyncMLFilter >& aFilters, 
+    TSyncMLFilterMatchType aMatch, TDes& aFilterMimeType, 
+    TSyncMLFilterType& aFilterType, TDesC& aStoreName )
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoGenerateRecordFilterQueryLC()");
+    return CNSmlContactsDataProvider::DoGenerateRecordFilterQueryLC( 
+        aFilters, aMatch, aFilterMimeType, aFilterType, aStoreName );
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataProvider::DoGenerateFieldFilterQueryL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataProvider::DoGenerateFieldFilterQueryL(
+    const RPointerArray< CSyncMLFilter >& aFilters, TDes& aFilterMimeType, 
+    RPointerArray< CSmlDataProperty >& aProperties, TDesC& aStoreName )
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoGenerateFieldFilterQueryL(): begin");
+    CNSmlContactsDataProvider::DoGenerateFieldFilterQueryL(
+        aFilters, aFilterMimeType, aProperties, aStoreName );
+    _DBG_FILE("CNSmlDummyDataProvider::DoGenerateFieldFilterQueryL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataProvider::GetStoreFormatResourceFileL
+// -----------------------------------------------------------------------------
+//
+const TDesC& CNSmlDummyDataProvider::GetStoreFormatResourceFileL() const
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::DoStoreFormatL(): begin");
+
+    // Check correct Data Sync protocol
+    TInt value( EDataSyncNotRunning );
+    TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys,
+                                 KDataSyncStatus,
+                                 value );
+
+    if ( error == KErrNone && value == EDataSyncRunning )
+        {
+        _DBG_FILE("CNSmlDummyDataProvider::DoStoreFormatL(): end");
+        return KNSmlDummyContactsStoreFormatRsc_1_1_2;
+        }
+    else // error or protocol version 1.2
+        {
+        _DBG_FILE("CNSmlDummyDataProvider::DoStoreFormatL(): end");
+        return KNSmlDummyContactsStoreFormatRsc_1_2;
+        }
+    }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDummyDataProvider::CreateDataStoreLC
+// ------------------------------------------------------------------------------------------------
+//
+CNSmlContactsDataStore* CNSmlDummyDataProvider::CreateDataStoreLC() const
+    {
+    _DBG_FILE("CNSmlDummyDataProvider::CreateDataStoreLC()");
+    CNSmlContactsDataStore* dataStore = CNSmlDummyDataStore::NewLC();
+    return dataStore;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/src/nsmldummydatastore.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,496 @@
+/*
+* Copyright (c) 2009 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:  DS Dummy datastore
+*
+*/
+
+//  CLASS HEADER
+#include "nsmldummydatastore.h"
+
+//  EXTERNAL INCLUDES
+#include <DataSyncInternalPSKeys.h>
+#include <e32property.h>
+#include <nsmldebug.h>
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataStore::NewL
+// -----------------------------------------------------------------------------
+//
+CNSmlDummyDataStore* CNSmlDummyDataStore::NewL()
+    {
+    CNSmlDummyDataStore* self = CNSmlDummyDataStore::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataStore::NewLC
+// -----------------------------------------------------------------------------
+//
+CNSmlDummyDataStore* CNSmlDummyDataStore::NewLC()
+    {
+    CNSmlDummyDataStore* self = new( ELeave ) CNSmlDummyDataStore;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataStore::CNSmlDummyDataStore
+// -----------------------------------------------------------------------------
+//
+CNSmlDummyDataStore::CNSmlDummyDataStore()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::CNSmlDummyDataStore()");
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataStore::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::ConstructL()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::ConstructL(): begin");
+    CNSmlContactsDataStore::ConstructL();
+    _DBG_FILE("CNSmlDummyDataStore::ConstructL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyDataStore::~CNSmlDummyDataStore
+// -----------------------------------------------------------------------------
+//
+CNSmlDummyDataStore::~CNSmlDummyDataStore()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::~CNSmlDummyDataStore()");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoOpenL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoOpenL( const TDesC& aStoreName,
+    MSmlSyncRelationship& aContext, TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoOpenL(): begin");
+    CNSmlContactsDataStore::DoOpenL( aStoreName, aContext, aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoOpenL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCancelRequest
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoCancelRequest()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCancelRequest(): begin");
+    CNSmlContactsDataStore::DoCancelRequest();
+    _DBG_FILE("CNSmlDummyDataStore::DoCancelRequest(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// const TDesC& CNSmlDummyDataStore::DoStoreName
+// -----------------------------------------------------------------------------
+//
+const TDesC& CNSmlDummyDataStore::DoStoreName() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoStoreName(): begin");
+    return CNSmlContactsDataStore::DoStoreName();
+    _DBG_FILE("CNSmlDummyDataStore::DoStoreName(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoBeginTransactionL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoBeginTransactionL()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoBeginTransactionL(): begin");
+    CNSmlContactsDataStore::DoBeginTransactionL();
+    _DBG_FILE("CNSmlDummyDataStore::DoBeginTransactionL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCommitTransactionL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoCommitTransactionL( TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitTransactionL(): begin");
+    CNSmlContactsDataStore::DoCommitTransactionL( aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitTransactionL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoRevertTransaction
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoRevertTransaction( TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoRevertTransaction(): begin");
+    CNSmlContactsDataStore::DoRevertTransaction( aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoRevertTransaction(): end");
+    }
+
+// ----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoBeginBatchL
+// ----------------------------------------------------------------------------
+void CNSmlDummyDataStore::DoBeginBatchL()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoBeginBatchL(): begin");
+    CNSmlContactsDataStore::DoBeginBatchL();
+    _DBG_FILE("CNSmlDummyDataStore::DoBeginBatchL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCommitBatchL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoCommitBatchL( RArray< TInt >& aResultArray,
+    TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitBatchL(): begin");
+    CNSmlContactsDataStore::DoCommitBatchL( aResultArray, aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitBatchL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCancelBatch
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoCancelBatch()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCancelBatch(): begin");
+    CNSmlContactsDataStore::DoCancelBatch();
+    _DBG_FILE("CNSmlDummyDataStore::DoCancelBatch(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoSetRemoteStoreFormatL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoSetRemoteStoreFormatL(
+    const CSmlDataStoreFormat& aServerDataStoreFormat )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoSetRemoteStoreFormatL(): begin");
+    CNSmlContactsDataStore::DoSetRemoteStoreFormatL( aServerDataStoreFormat );
+    _DBG_FILE("CNSmlDummyDataStore::DoSetRemoteStoreFormatL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoSetRemoteMaxObjectSize
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoSetRemoteMaxObjectSize( TInt aServerMaxObjectSize )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoSetRemoteMaxObjectSize(): begin");
+    CNSmlContactsDataStore::DoSetRemoteMaxObjectSize( aServerMaxObjectSize );
+    _DBG_FILE("CNSmlDummyDataStore::DoSetRemoteMaxObjectSize(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// TInt CNSmlDummyDataStore::DoMaxObjectSize
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlDummyDataStore::DoMaxObjectSize() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoMaxObjectSize()");
+    return CNSmlContactsDataStore::DoMaxObjectSize();
+    }
+
+// ----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoOpenItemL
+// ----------------------------------------------------------------------------
+void CNSmlDummyDataStore::DoOpenItemL( TSmlDbItemUid aUid,
+    TBool& aFieldChange, TInt& aSize, TSmlDbItemUid& aParent,
+    TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoOpenItemL(): begin");
+	CNSmlContactsDataStore::DoOpenItemL( aUid, aFieldChange,
+			aSize, aParent, aMimeType, aMimeVer, aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoOpenItemL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCreateItemL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoCreateItemL( TSmlDbItemUid& aUid, TInt aSize,
+    TSmlDbItemUid aParent, const TDesC8& aMimeType, const TDesC8& aMimeVer, 
+    TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCreateItemL(): begin");
+    CNSmlContactsDataStore::DoCreateItemL( aUid, aSize, aParent, aMimeType, 
+        aMimeVer, aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoCreateItemL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoReplaceItemL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoReplaceItemL( TSmlDbItemUid aUid, TInt aSize, 
+    TSmlDbItemUid aParent, TBool aFieldChange, TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoReplaceItemL(): begin");
+    CNSmlContactsDataStore::DoReplaceItemL( aUid, aSize, aParent, aFieldChange, 
+        aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoReplaceItemL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoReadItemL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoReadItemL( TDes8& aBuffer )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoReadItemL(): begin");
+    CNSmlContactsDataStore::DoReadItemL( aBuffer );
+    _DBG_FILE("CNSmlDummyDataStore::DoReadItemL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoWriteItemL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoWriteItemL( const TDesC8& aData )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoWriteItemL(): begin");
+    CNSmlContactsDataStore::DoWriteItemL( aData );
+    _DBG_FILE("CNSmlDummyDataStore::DoWriteItemL(): end");
+    }
+
+// ----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCommitItemL()
+// ----------------------------------------------------------------------------
+void CNSmlDummyDataStore::DoCommitItemL( TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitItemL(): begin");
+    CNSmlContactsDataStore::DoCommitItemL( aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitItemL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCloseItem
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoCloseItem()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCloseItem(): begin");
+    CNSmlContactsDataStore::DoCloseItem();
+    _DBG_FILE("CNSmlDummyDataStore::DoCloseItem(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoMoveItemL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoMoveItemL( TSmlDbItemUid aUid, 
+    TSmlDbItemUid aNewParent, TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoMoveItemL(): begin");
+    CNSmlContactsDataStore::DoMoveItemL( aUid, aNewParent, aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoMoveItemL(): end");
+    }
+
+// ----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoDeleteItemL
+// ----------------------------------------------------------------------------
+void CNSmlDummyDataStore::DoDeleteItemL(
+    TSmlDbItemUid aUid, TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoDeleteItemL(): begin");
+    CNSmlContactsDataStore::DoDeleteItemL( aUid, aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoDeleteItemL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoSoftDeleteItemL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoSoftDeleteItemL( TSmlDbItemUid aUid, 
+    TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoSoftDeleteItemL(): begin");
+    CNSmlContactsDataStore::DoSoftDeleteItemL( aUid, aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoSoftDeleteItemL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoDeleteAllItemsL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoDeleteAllItemsL( TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::: begin");
+    CNSmlContactsDataStore::DoDeleteAllItemsL( aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::: end");
+    }
+
+// ----------------------------------------------------------------------------
+// TBool CNSmlDummyDataStore::DoHasSyncHistory
+// ----------------------------------------------------------------------------
+TBool CNSmlDummyDataStore::DoHasSyncHistory() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoHasSyncHistory()");
+    return CNSmlContactsDataStore::DoHasSyncHistory();
+    }
+
+// ----------------------------------------------------------------------------
+// const MSmlDataItemUidSet& CNSmlDummyDataStore::DoAddedItems
+// ----------------------------------------------------------------------------
+//
+const MSmlDataItemUidSet& CNSmlDummyDataStore::DoAddedItems() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoAddedItems()");
+    return CNSmlContactsDataStore::DoAddedItems();
+    }
+
+// ----------------------------------------------------------------------------
+// const MSmlDataItemUidSet& CNSmlDummyDataStore::DoDeletedItems
+// ----------------------------------------------------------------------------
+//
+const MSmlDataItemUidSet& CNSmlDummyDataStore::DoDeletedItems() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoDeletedItems()");
+    return CNSmlContactsDataStore::DoDeletedItems();
+    }
+
+// ----------------------------------------------------------------------------
+// const MSmlDataItemUidSet& CNSmlDummyDataStore::DoSoftDeletedItems
+// ----------------------------------------------------------------------------
+//
+const MSmlDataItemUidSet& CNSmlDummyDataStore::DoSoftDeletedItems() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoSoftDeletedItems()");
+    return CNSmlContactsDataStore::DoSoftDeletedItems();
+    }
+
+// ----------------------------------------------------------------------------
+// const MSmlDataItemUidSet& CNSmlDummyDataStore::DoModifiedItems
+// ----------------------------------------------------------------------------
+//
+const MSmlDataItemUidSet& CNSmlDummyDataStore::DoModifiedItems() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoModifiedItems()");
+    return CNSmlContactsDataStore::DoModifiedItems();
+    }
+
+// ----------------------------------------------------------------------------
+// const MSmlDataItemUidSet& CNSmlDummyDataStore::DoMovedItems
+// ----------------------------------------------------------------------------
+//
+const MSmlDataItemUidSet& CNSmlDummyDataStore::DoMovedItems() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoMovedItems()");
+    return CNSmlContactsDataStore::DoMovedItems();
+    }
+
+// ----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoResetChangeInfoL
+// ----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoResetChangeInfoL( TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoResetChangeInfoL(): begin");
+    CNSmlContactsDataStore::DoResetChangeInfoL( aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoResetChangeInfoL(): end");
+    }
+
+// ----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCommitChangeInfoL
+// ----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus,
+    const MSmlDataItemUidSet& aItems )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitChangeInfoL(aItems): begin");
+    CNSmlContactsDataStore::DoCommitChangeInfoL( aStatus, aItems );
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitChangeInfoL(aItems): end");
+    }
+
+// ----------------------------------------------------------------------------
+// void CNSmlDummyDataStore::DoCommitChangeInfoL
+// ----------------------------------------------------------------------------
+//
+void CNSmlDummyDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitChangeInfoL(): begin");
+    CNSmlContactsDataStore::DoCommitChangeInfoL( aStatus );
+    _DBG_FILE("CNSmlDummyDataStore::DoCommitChangeInfoL(): end");
+    }
+
+// -----------------------------------------------------------------------------
+// const TDesC& CNSmlDummyDataStore::GetStoreFormatResourceFileL
+// -----------------------------------------------------------------------------
+const TDesC& CNSmlDummyDataStore::GetStoreFormatResourceFileL() const
+    {
+    _DBG_FILE("CNSmlDummyDataStore::GetStoreFormatResourceFileL()");
+    // Check correct Data Sync protocol
+    TInt value( EDataSyncNotRunning );
+    TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys,
+                                 KDataSyncStatus,
+                                 value );
+    if ( error == KErrNone && value == EDataSyncRunning )
+        {
+        return KNSmlDummyContactsStoreFormatRsc_1_1_2;
+        }
+    else // error or protocol version 1.2
+        {
+        return KNSmlDummyContactsStoreFormatRsc_1_2;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TInt CNSmlDummyDataStore::DoExecuteBufferL
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlDummyDataStore::DoExecuteBufferL( RArray< TInt >& aResultArray)
+    {
+    _DBG_FILE("CNSmlDummyDataStore::DoExecuteBufferL()");
+    return CNSmlContactsDataStore::DoExecuteBufferL( aResultArray );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDataModBase& CNSmlDummyDataStore::GetDataMod
+// -----------------------------------------------------------------------------
+//
+CNSmlDataModBase& CNSmlDummyDataStore::GetDataMod()
+    {
+    _DBG_FILE("CNSmlDummyDataStore::GetDataMod()");
+    return CNSmlContactsDataStore::GetDataMod();
+    }
+
+// -----------------------------------------------------------------------------
+// TInt CNSmlDummyDataStore::ExportContactsL
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlDummyDataStore::ExportContactsL( const TUid& aUid, 
+    CBufBase& aContactBufBase )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::ExportContactsL()");
+    return CNSmlContactsDataStore::ExportContactsL( aUid, aContactBufBase );
+    }
+
+// -----------------------------------------------------------------------------
+// CArrayFixFlat<TUid>* CNSmlDummyDataStore::ImportContactsL
+// -----------------------------------------------------------------------------
+//
+CArrayFixFlat<TUid>* CNSmlDummyDataStore::ImportContactsL( 
+    const TDesC8& aContactBufBase )
+    {
+    _DBG_FILE("CNSmlDummyDataStore::ImportContactsL()");
+    return CNSmlContactsDataStore::ImportContactsL( aContactBufBase );
+    }
+
+// END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/DummyAdapter/src/nsmldummydllmain.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2009 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:  DS Dummy adapter entry point
+*
+*/
+
+#include <ImplementationProxy.h>
+#include "nsmldebug.h"
+#include "nsmlDummydataprovider.h"
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy array
+// -----------------------------------------------------------------------------
+//
+#ifndef IMPLEMENTATION_PROXY_ENTRY
+#define IMPLEMENTATION_PROXY_ENTRY( aUid, aFuncPtr ) {{aUid},(aFuncPtr)}
+#endif
+
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY( KNSmlDummyAdapterImplUid, CNSmlDummyDataProvider::NewL )
+    };
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    _DBG_FILE("ImplementationGroupProxy() for CNSmlDummyDataProvider: begin");
+
+    aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+
+    _DBG_FILE("ImplementationGroupProxy() for CNSmlDummyDataProvider: end");
+    return ImplementationTable;
+    }
--- a/contentctrl_plat/group/bld.inf	Wed Aug 18 09:39:14 2010 +0300
+++ b/contentctrl_plat/group/bld.inf	Thu Sep 02 20:16:30 2010 +0300
@@ -18,4 +18,5 @@
 
 #include "../ds_data_modification_api/group/bld.inf"
 #include "../ds_contactsdatastoreextension_api/group/bld.inf"
+#include "../ds_contact_adapter_customization_api/group/bld.inf"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/adapters/contacts/bld/def/bwinscwcontactsdataprovideru.def	Thu Sep 02 20:16:30 2010 +0300
@@ -0,0 +1,77 @@
+EXPORTS
+	?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+	?DoWriteItemL@CNSmlContactsDataStore@@MAEXABVTDesC8@@@Z @ 2 NONAME ; void CNSmlContactsDataStore::DoWriteItemL(class TDesC8 const &)
+	?DoSupportedServerFiltersL@CNSmlContactsDataProvider@@MAEABV?$RPointerArray@VCSyncMLFilter@@@@XZ @ 3 NONAME ; class RPointerArray<class CSyncMLFilter> const & CNSmlContactsDataProvider::DoSupportedServerFiltersL(void)
+	?DoModifiedItems@CNSmlContactsDataStore@@MBEABVMSmlDataItemUidSet@@XZ @ 4 NONAME ; class MSmlDataItemUidSet const & CNSmlContactsDataStore::DoModifiedItems(void) const
+	?DoReadItemL@CNSmlContactsDataStore@@MAEXAAVTDes8@@@Z @ 5 NONAME ; void CNSmlContactsDataStore::DoReadItemL(class TDes8 &)
+	?DoDeletedItems@CNSmlContactsDataStore@@MBEABVMSmlDataItemUidSet@@XZ @ 6 NONAME ; class MSmlDataItemUidSet const & CNSmlContactsDataStore::DoDeletedItems(void) const
+	?ConstructL@CNSmlContactsDataStore@@IAEXXZ @ 7 NONAME ; void CNSmlContactsDataStore::ConstructL(void)
+	?NewL@CNSmlContactsDataStore@@SAPAV1@XZ @ 8 NONAME ; class CNSmlContactsDataStore * CNSmlContactsDataStore::NewL(void)
+	?DoGenerateFieldFilterQueryL@CNSmlContactsDataProvider@@MAEXABV?$RPointerArray@VCSyncMLFilter@@@@AAVTDes16@@AAV?$RPointerArray@VCSmlDataProperty@@@@AAVTDesC16@@@Z @ 9 NONAME ; void CNSmlContactsDataProvider::DoGenerateFieldFilterQueryL(class RPointerArray<class CSyncMLFilter> const &, class TDes16 &, class RPointerArray<class CSmlDataProperty> &, class TDesC16 &)
+	??0CNSmlContactsDataStore@@IAE@XZ @ 10 NONAME ; CNSmlContactsDataStore::CNSmlContactsDataStore(void)
+	?DoResetChangeInfoL@CNSmlContactsDataStore@@MAEXAAVTRequestStatus@@@Z @ 11 NONAME ; void CNSmlContactsDataStore::DoResetChangeInfoL(class TRequestStatus &)
+	?DoBeginBatchL@CNSmlContactsDataStore@@MAEXXZ @ 12 NONAME ; void CNSmlContactsDataStore::DoBeginBatchL(void)
+	?DoSoftDeletedItems@CNSmlContactsDataStore@@MBEABVMSmlDataItemUidSet@@XZ @ 13 NONAME ; class MSmlDataItemUidSet const & CNSmlContactsDataStore::DoSoftDeletedItems(void) const
+	??1CNSmlContactsDataStore@@UAE@XZ @ 14 NONAME ; CNSmlContactsDataStore::~CNSmlContactsDataStore(void)
+	?GetStoreFormatResourceFileL@CNSmlContactsDataProvider@@MBEABVTDesC16@@XZ @ 15 NONAME ; class TDesC16 const & CNSmlContactsDataProvider::GetStoreFormatResourceFileL(void) const
+	?SetOwnStoreFormatL@CNSmlContactsDataStore@@IAEXXZ @ 16 NONAME ; void CNSmlContactsDataStore::SetOwnStoreFormatL(void)
+	?AddBufferListL@CNSmlContactsDataStore@@IAEPAVCBufBase@@AAHHH@Z @ 17 NONAME ; class CBufBase * CNSmlContactsDataStore::AddBufferListL(int &, int, int)
+	?LdoMergeLC@CNSmlContactsDataStore@@IAEPAVCBufBase@@AAHABVTDesC8@@@Z @ 18 NONAME ; class CBufBase * CNSmlContactsDataStore::LdoMergeLC(int &, class TDesC8 const &)
+	?DoListStoresLC@CNSmlContactsDataStore@@QAEPAVCDesC16Array@@XZ @ 19 NONAME ; class CDesC16Array * CNSmlContactsDataStore::DoListStoresLC(void)
+	?StripPropertyL@CNSmlContactsDataStore@@IBEXAAPAVCBufBase@@ABVTDesC8@@@Z @ 20 NONAME ; void CNSmlContactsDataStore::StripPropertyL(class CBufBase * &, class TDesC8 const &) const
+	??0CNSmlContactsDataProvider@@IAE@XZ @ 21 NONAME ; CNSmlContactsDataProvider::CNSmlContactsDataProvider(void)
+	?ConstructL@CNSmlContactsDataProvider@@IAEXXZ @ 22 NONAME ; void CNSmlContactsDataProvider::ConstructL(void)
+	?DoCommitChangeInfoL@CNSmlContactsDataStore@@MAEXAAVTRequestStatus@@ABVMSmlDataItemUidSet@@@Z @ 23 NONAME ; void CNSmlContactsDataStore::DoCommitChangeInfoL(class TRequestStatus &, class MSmlDataItemUidSet const &)
+	?DoOnFrameworkEvent@CNSmlContactsDataProvider@@MAEXW4TSmlFrameworkEvent@@HH@Z @ 24 NONAME ; void CNSmlContactsDataProvider::DoOnFrameworkEvent(enum TSmlFrameworkEvent, int, int)
+	?DoDeleteAllItemsL@CNSmlContactsDataStore@@MAEXAAVTRequestStatus@@@Z @ 25 NONAME ; void CNSmlContactsDataStore::DoDeleteAllItemsL(class TRequestStatus &)
+	?LdoAddItemL@CNSmlContactsDataStore@@IAEHAAHABVTDesC8@@HAAVTTime@@@Z @ 26 NONAME ; int CNSmlContactsDataStore::LdoAddItemL(int &, class TDesC8 const &, int, class TTime &)
+	??1CNSmlContactsDataProvider@@UAE@XZ @ 27 NONAME ; CNSmlContactsDataProvider::~CNSmlContactsDataProvider(void)
+	?DefaultStoreNameL@CNSmlContactsDataStore@@QBEABVTDesC16@@XZ @ 28 NONAME ; class TDesC16 const & CNSmlContactsDataStore::DefaultStoreNameL(void) const
+	?DoSetRemoteStoreFormatL@CNSmlContactsDataStore@@MAEXABVCSmlDataStoreFormat@@@Z @ 29 NONAME ; void CNSmlContactsDataStore::DoSetRemoteStoreFormatL(class CSmlDataStoreFormat const &)
+	?DriveBelowCriticalLevelL@CNSmlContactsDataStore@@IAEHH@Z @ 30 NONAME ; int CNSmlContactsDataStore::DriveBelowCriticalLevelL(int)
+	?ExecuteBufferL@CNSmlContactsDataStore@@IAEHAAV?$RArray@H@@@Z @ 31 NONAME ; int CNSmlContactsDataStore::ExecuteBufferL(class RArray<int> &)
+	?GetDataMod@CNSmlContactsDataStore@@MAEAAVCNSmlDataModBase@@XZ @ 32 NONAME ; class CNSmlDataModBase & CNSmlContactsDataStore::GetDataMod(void)
+	?DoSoftDeleteItemL@CNSmlContactsDataStore@@MAEXHAAVTRequestStatus@@@Z @ 33 NONAME ; void CNSmlContactsDataStore::DoSoftDeleteItemL(int, class TRequestStatus &)
+	?DoMoveItemL@CNSmlContactsDataStore@@MAEXHHAAVTRequestStatus@@@Z @ 34 NONAME ; void CNSmlContactsDataStore::DoMoveItemL(int, int, class TRequestStatus &)
+	?DoDefaultStoreL@CNSmlContactsDataProvider@@MAEABVTDesC16@@XZ @ 35 NONAME ; class TDesC16 const & CNSmlContactsDataProvider::DoDefaultStoreL(void)
+	?LdoUpdateItemL@CNSmlContactsDataStore@@IAEHHABVTDesC8@@HAAVTTime@@@Z @ 36 NONAME ; int CNSmlContactsDataStore::LdoUpdateItemL(int, class TDesC8 const &, int, class TTime &)
+	?DoStoreName@CNSmlContactsDataStore@@MBEABVTDesC16@@XZ @ 37 NONAME ; class TDesC16 const & CNSmlContactsDataStore::DoStoreName(void) const
+	?DoCreateItemL@CNSmlContactsDataStore@@MAEXAAHHHABVTDesC8@@1AAVTRequestStatus@@@Z @ 38 NONAME ; void CNSmlContactsDataStore::DoCreateItemL(int &, int, int, class TDesC8 const &, class TDesC8 const &, class TRequestStatus &)
+	??1CNSmlContactsBufferItem@CNSmlContactsDataStore@@UAE@XZ @ 39 NONAME ; CNSmlContactsDataStore::CNSmlContactsBufferItem::~CNSmlContactsBufferItem(void)
+	?DoListStoresLC@CNSmlContactsDataProvider@@MAEPAVCDesC16Array@@XZ @ 40 NONAME ; class CDesC16Array * CNSmlContactsDataProvider::DoListStoresLC(void)
+	?DoSupportsOperation@CNSmlContactsDataProvider@@MBEHVTUid@@@Z @ 41 NONAME ; int CNSmlContactsDataProvider::DoSupportsOperation(class TUid) const
+	?DoCommitChangeInfoL@CNSmlContactsDataStore@@MAEXAAVTRequestStatus@@@Z @ 42 NONAME ; void CNSmlContactsDataStore::DoCommitChangeInfoL(class TRequestStatus &)
+	?NewL@CNSmlContactsDataProvider@@SAPAV1@XZ @ 43 NONAME ; class CNSmlContactsDataProvider * CNSmlContactsDataProvider::NewL(void)
+	?DoGenerateRecordFilterQueryLC@CNSmlContactsDataProvider@@MAEPAVHBufC16@@ABV?$RPointerArray@VCSyncMLFilter@@@@W4TSyncMLFilterMatchType@@AAVTDes16@@AAW4TSyncMLFilterType@@AAVTDesC16@@@Z @ 44 NONAME ; class HBufC16 * CNSmlContactsDataProvider::DoGenerateRecordFilterQueryLC(class RPointerArray<class CSyncMLFilter> const &, enum TSyncMLFilterMatchType, class TDes16 &, enum TSyncMLFilterType &, class TDesC16 &)
+	?DoExecuteBufferL@CNSmlContactsDataStore@@MAEHAAV?$RArray@H@@@Z @ 45 NONAME ; int CNSmlContactsDataStore::DoExecuteBufferL(class RArray<int> &)
+	?DoCheckSupportedServerFiltersL@CNSmlContactsDataProvider@@MAEXABVCSmlDataStoreFormat@@AAV?$RPointerArray@VCSyncMLFilter@@@@AAW4TSyncMLFilterChangeInfo@@@Z @ 46 NONAME ; void CNSmlContactsDataProvider::DoCheckSupportedServerFiltersL(class CSmlDataStoreFormat const &, class RPointerArray<class CSyncMLFilter> &, enum TSyncMLFilterChangeInfo &)
+	?DoRevertTransaction@CNSmlContactsDataStore@@MAEXAAVTRequestStatus@@@Z @ 47 NONAME ; void CNSmlContactsDataStore::DoRevertTransaction(class TRequestStatus &)
+	?DoCommitItemL@CNSmlContactsDataStore@@MAEXAAVTRequestStatus@@@Z @ 48 NONAME ; void CNSmlContactsDataStore::DoCommitItemL(class TRequestStatus &)
+	?DoDeleteItemL@CNSmlContactsDataStore@@MAEXHAAVTRequestStatus@@@Z @ 49 NONAME ; void CNSmlContactsDataStore::DoDeleteItemL(int, class TRequestStatus &)
+	?CreateDataStoreLC@CNSmlContactsDataProvider@@MBEPAVCNSmlContactsDataStore@@XZ @ 50 NONAME ; class CNSmlContactsDataStore * CNSmlContactsDataProvider::CreateDataStoreLC(void) const
+	?DoHasSyncHistory@CNSmlContactsDataStore@@MBEHXZ @ 51 NONAME ; int CNSmlContactsDataStore::DoHasSyncHistory(void) const
+	?DoCommitBatchL@CNSmlContactsDataStore@@MAEXAAV?$RArray@H@@AAVTRequestStatus@@@Z @ 52 NONAME ; void CNSmlContactsDataStore::DoCommitBatchL(class RArray<int> &, class TRequestStatus &)
+	?DoMaxObjectSize@CNSmlContactsDataStore@@MBEHXZ @ 53 NONAME ; int CNSmlContactsDataStore::DoMaxObjectSize(void) const
+	?DoReplaceItemL@CNSmlContactsDataStore@@MAEXHHHHAAVTRequestStatus@@@Z @ 54 NONAME ; void CNSmlContactsDataStore::DoReplaceItemL(int, int, int, int, class TRequestStatus &)
+	?DoCloseItem@CNSmlContactsDataStore@@MAEXXZ @ 55 NONAME ; void CNSmlContactsDataStore::DoCloseItem(void)
+	?DoCommitTransactionL@CNSmlContactsDataStore@@MAEXAAVTRequestStatus@@@Z @ 56 NONAME ; void CNSmlContactsDataStore::DoCommitTransactionL(class TRequestStatus &)
+	?LdoAddItemsL@CNSmlContactsDataStore@@IAEHAAV?$RArray@H@@AAPAVCBufBase@@HAAVTTime@@@Z @ 57 NONAME ; int CNSmlContactsDataStore::LdoAddItemsL(class RArray<int> &, class CBufBase * &, int, class TTime &)
+	?LdoFetchItemL@CNSmlContactsDataStore@@IAEHAAHAAVCBufBase@@@Z @ 58 NONAME ; int CNSmlContactsDataStore::LdoFetchItemL(int &, class CBufBase &)
+	?DoStoreFormatL@CNSmlContactsDataProvider@@MAEABVCSmlDataStoreFormat@@XZ @ 59 NONAME ; class CSmlDataStoreFormat const & CNSmlContactsDataProvider::DoStoreFormatL(void)
+	?GetStoreFormatResourceFileL@CNSmlContactsDataStore@@MBEABVTDesC16@@XZ @ 60 NONAME ; class TDesC16 const & CNSmlContactsDataStore::GetStoreFormatResourceFileL(void) const
+	?DoCancelBatch@CNSmlContactsDataStore@@MAEXXZ @ 61 NONAME ; void CNSmlContactsDataStore::DoCancelBatch(void)
+	?NewLC@CNSmlContactsDataProvider@@KAPAV1@XZ @ 62 NONAME ; class CNSmlContactsDataProvider * CNSmlContactsDataProvider::NewLC(void)
+	?ConstructL@CNSmlContactsDataStore@@IAEXABVTDesC16@@@Z @ 63 NONAME ; void CNSmlContactsDataStore::ConstructL(class TDesC16 const &)
+	?DoCheckServerFiltersL@CNSmlContactsDataProvider@@MAEXAAV?$RPointerArray@VCSyncMLFilter@@@@AAW4TSyncMLFilterChangeInfo@@@Z @ 64 NONAME ; void CNSmlContactsDataProvider::DoCheckServerFiltersL(class RPointerArray<class CSyncMLFilter> &, enum TSyncMLFilterChangeInfo &)
+	?DoCancelRequest@CNSmlContactsDataStore@@MAEXXZ @ 65 NONAME ; void CNSmlContactsDataStore::DoCancelRequest(void)
+	?DoOpenItemL@CNSmlContactsDataStore@@MAEXHAAH00AAVTDes8@@1AAVTRequestStatus@@@Z @ 66 NONAME ; void CNSmlContactsDataStore::DoOpenItemL(int, int &, int &, int &, class TDes8 &, class TDes8 &, class TRequestStatus &)
+	?DoBeginTransactionL@CNSmlContactsDataStore@@MAEXXZ @ 67 NONAME ; void CNSmlContactsDataStore::DoBeginTransactionL(void)
+	?DoAddedItems@CNSmlContactsDataStore@@MBEABVMSmlDataItemUidSet@@XZ @ 68 NONAME ; class MSmlDataItemUidSet const & CNSmlContactsDataStore::DoAddedItems(void) const
+	?DoSetRemoteMaxObjectSize@CNSmlContactsDataStore@@MAEXH@Z @ 69 NONAME ; void CNSmlContactsDataStore::DoSetRemoteMaxObjectSize(int)
+	?StripPropertyL@CNSmlContactsDataStore@@IBEXAAPAVHBufC8@@ABVTDesC8@@@Z @ 70 NONAME ; void CNSmlContactsDataStore::StripPropertyL(class HBufC8 * &, class TDesC8 const &) const
+	?DoOpenL@CNSmlContactsDataStore@@MAEXABVTDesC16@@AAVMSmlSyncRelationship@@AAVTRequestStatus@@@Z @ 71 NONAME ; void CNSmlContactsDataStore::DoOpenL(class TDesC16 const &, class MSmlSyncRelationship &, class TRequestStatus &)
+	?DoMovedItems@CNSmlContactsDataStore@@MBEABVMSmlDataItemUidSet@@XZ @ 72 NONAME ; class MSmlDataItemUidSet const & CNSmlContactsDataStore::DoMovedItems(void) const
+	?DoNewStoreInstanceLC@CNSmlContactsDataProvider@@MAEPAVCSmlDataStore@@XZ @ 73 NONAME ; class CSmlDataStore * CNSmlContactsDataProvider::DoNewStoreInstanceLC(void)
+	?ExportContactsL@CNSmlContactsDataStore@@MAEHABVTUid@@AAVCBufBase@@@Z @ 74 NONAME ; int CNSmlContactsDataStore::ExportContactsL(class TUid const &, class CBufBase &)
+	?ImportContactsL@CNSmlContactsDataStore@@MAEPAV?$CArrayFixFlat@VTUid@@@@ABVTDesC8@@@Z @ 75 NONAME ; class CArrayFixFlat<class TUid> * CNSmlContactsDataStore::ImportContactsL(class TDesC8 const &)
+
--- a/omads/omadsextensions/adapters/contacts/bld/def/eabicontactsdataprovideru.def	Wed Aug 18 09:39:14 2010 +0300
+++ b/omads/omadsextensions/adapters/contacts/bld/def/eabicontactsdataprovideru.def	Thu Sep 02 20:16:30 2010 +0300
@@ -41,51 +41,51 @@
 	_ZN22CNSmlContactsDataStore24DoSetRemoteMaxObjectSizeEi @ 40 NONAME
 	_ZN22CNSmlContactsDataStore24DriveBelowCriticalLevelLEi @ 41 NONAME
 	_ZN22CNSmlContactsDataStore4NewLEv @ 42 NONAME
-	_ZN22CNSmlContactsDataStore6MergeLER8CBufBaseS1_i @ 43 NONAME
-	_ZN22CNSmlContactsDataStore7DoOpenLERK7TDesC16R20MSmlSyncRelationshipR14TRequestStatus @ 44 NONAME
-	_ZN22CNSmlContactsDataStore8StripTxLER8CBufBase @ 45 NONAME
-	_ZN22CNSmlContactsDataStoreC1Ev @ 46 NONAME
-	_ZN22CNSmlContactsDataStoreC2Ev @ 47 NONAME
-	_ZN22CNSmlContactsDataStoreD0Ev @ 48 NONAME
-	_ZN22CNSmlContactsDataStoreD1Ev @ 49 NONAME
-	_ZN22CNSmlContactsDataStoreD2Ev @ 50 NONAME
-	_ZN25CNSmlContactsDataProvider10ConstructLEv @ 51 NONAME
-	_ZN25CNSmlContactsDataProvider14DoListStoresLCEv @ 52 NONAME
-	_ZN25CNSmlContactsDataProvider14DoStoreFormatLEv @ 53 NONAME
-	_ZN25CNSmlContactsDataProvider15DoDefaultStoreLEv @ 54 NONAME
-	_ZN25CNSmlContactsDataProvider18DoOnFrameworkEventE18TSmlFrameworkEventii @ 55 NONAME
-	_ZN25CNSmlContactsDataProvider20DoNewStoreInstanceLCEv @ 56 NONAME
-	_ZN25CNSmlContactsDataProvider21DoCheckServerFiltersLER13RPointerArrayI13CSyncMLFilterER23TSyncMLFilterChangeInfo @ 57 NONAME
-	_ZN25CNSmlContactsDataProvider25DoSupportedServerFiltersLEv @ 58 NONAME
-	_ZN25CNSmlContactsDataProvider27DoGenerateFieldFilterQueryLERK13RPointerArrayI13CSyncMLFilterER6TDes16RS0_I16CSmlDataPropertyER7TDesC16 @ 59 NONAME
-	_ZN25CNSmlContactsDataProvider29DoGenerateRecordFilterQueryLCERK13RPointerArrayI13CSyncMLFilterE22TSyncMLFilterMatchTypeR6TDes16R17TSyncMLFilterTypeR7TDesC16 @ 60 NONAME
-	_ZN25CNSmlContactsDataProvider30DoCheckSupportedServerFiltersLERK19CSmlDataStoreFormatR13RPointerArrayI13CSyncMLFilterER23TSyncMLFilterChangeInfo @ 61 NONAME
-	_ZN25CNSmlContactsDataProvider4NewLEv @ 62 NONAME
-	_ZN25CNSmlContactsDataProvider5NewLCEv @ 63 NONAME
-	_ZN25CNSmlContactsDataProviderC1Ev @ 64 NONAME
-	_ZN25CNSmlContactsDataProviderC2Ev @ 65 NONAME
-	_ZN25CNSmlContactsDataProviderD0Ev @ 66 NONAME
-	_ZN25CNSmlContactsDataProviderD1Ev @ 67 NONAME
-	_ZN25CNSmlContactsDataProviderD2Ev @ 68 NONAME
-	_ZNK22CNSmlContactsDataStore11DoStoreNameEv @ 69 NONAME
-	_ZNK22CNSmlContactsDataStore12DoAddedItemsEv @ 70 NONAME
-	_ZNK22CNSmlContactsDataStore12DoMovedItemsEv @ 71 NONAME
-	_ZNK22CNSmlContactsDataStore14DoDeletedItemsEv @ 72 NONAME
-	_ZNK22CNSmlContactsDataStore14StripPropertyLERP6HBufC8RK6TDesC8 @ 73 NONAME
-	_ZNK22CNSmlContactsDataStore14StripPropertyLERP8CBufBaseRK6TDesC8 @ 74 NONAME
-	_ZNK22CNSmlContactsDataStore15DoMaxObjectSizeEv @ 75 NONAME
-	_ZNK22CNSmlContactsDataStore15DoModifiedItemsEv @ 76 NONAME
-	_ZNK22CNSmlContactsDataStore16DoHasSyncHistoryEv @ 77 NONAME
-	_ZNK22CNSmlContactsDataStore17DefaultStoreNameLEv @ 78 NONAME
-	_ZNK22CNSmlContactsDataStore18DoSoftDeletedItemsEv @ 79 NONAME
-	_ZNK22CNSmlContactsDataStore27GetStoreFormatResourceFileLEv @ 80 NONAME
-	_ZNK25CNSmlContactsDataProvider17CreateDataStoreLCEv @ 81 NONAME
-	_ZNK25CNSmlContactsDataProvider19DoSupportsOperationE4TUid @ 82 NONAME
-	_ZNK25CNSmlContactsDataProvider27GetStoreFormatResourceFileLEv @ 83 NONAME
-	_ZTI22CNSmlContactsDataStore @ 84 NONAME
-	_ZTI25CNSmlContactsDataProvider @ 85 NONAME
-	_ZTIN22CNSmlContactsDataStore23CNSmlContactsBufferItemE @ 86 NONAME
-	_ZTV22CNSmlContactsDataStore @ 87 NONAME
-	_ZTV25CNSmlContactsDataProvider @ 88 NONAME
-	_ZTVN22CNSmlContactsDataStore23CNSmlContactsBufferItemE @ 89 NONAME
+	_ZN22CNSmlContactsDataStore7DoOpenLERK7TDesC16R20MSmlSyncRelationshipR14TRequestStatus @ 43 NONAME
+	_ZN22CNSmlContactsDataStoreC1Ev @ 44 NONAME
+	_ZN22CNSmlContactsDataStoreC2Ev @ 45 NONAME
+	_ZN22CNSmlContactsDataStoreD0Ev @ 46 NONAME
+	_ZN22CNSmlContactsDataStoreD1Ev @ 47 NONAME
+	_ZN22CNSmlContactsDataStoreD2Ev @ 48 NONAME
+	_ZN25CNSmlContactsDataProvider10ConstructLEv @ 49 NONAME
+	_ZN25CNSmlContactsDataProvider14DoListStoresLCEv @ 50 NONAME
+	_ZN25CNSmlContactsDataProvider14DoStoreFormatLEv @ 51 NONAME
+	_ZN25CNSmlContactsDataProvider15DoDefaultStoreLEv @ 52 NONAME
+	_ZN25CNSmlContactsDataProvider18DoOnFrameworkEventE18TSmlFrameworkEventii @ 53 NONAME
+	_ZN25CNSmlContactsDataProvider20DoNewStoreInstanceLCEv @ 54 NONAME
+	_ZN25CNSmlContactsDataProvider21DoCheckServerFiltersLER13RPointerArrayI13CSyncMLFilterER23TSyncMLFilterChangeInfo @ 55 NONAME
+	_ZN25CNSmlContactsDataProvider25DoSupportedServerFiltersLEv @ 56 NONAME
+	_ZN25CNSmlContactsDataProvider27DoGenerateFieldFilterQueryLERK13RPointerArrayI13CSyncMLFilterER6TDes16RS0_I16CSmlDataPropertyER7TDesC16 @ 57 NONAME
+	_ZN25CNSmlContactsDataProvider29DoGenerateRecordFilterQueryLCERK13RPointerArrayI13CSyncMLFilterE22TSyncMLFilterMatchTypeR6TDes16R17TSyncMLFilterTypeR7TDesC16 @ 58 NONAME
+	_ZN25CNSmlContactsDataProvider30DoCheckSupportedServerFiltersLERK19CSmlDataStoreFormatR13RPointerArrayI13CSyncMLFilterER23TSyncMLFilterChangeInfo @ 59 NONAME
+	_ZN25CNSmlContactsDataProvider4NewLEv @ 60 NONAME
+	_ZN25CNSmlContactsDataProvider5NewLCEv @ 61 NONAME
+	_ZN25CNSmlContactsDataProviderC1Ev @ 62 NONAME
+	_ZN25CNSmlContactsDataProviderC2Ev @ 63 NONAME
+	_ZN25CNSmlContactsDataProviderD0Ev @ 64 NONAME
+	_ZN25CNSmlContactsDataProviderD1Ev @ 65 NONAME
+	_ZN25CNSmlContactsDataProviderD2Ev @ 66 NONAME
+	_ZNK22CNSmlContactsDataStore11DoStoreNameEv @ 67 NONAME
+	_ZNK22CNSmlContactsDataStore12DoAddedItemsEv @ 68 NONAME
+	_ZNK22CNSmlContactsDataStore12DoMovedItemsEv @ 69 NONAME
+	_ZNK22CNSmlContactsDataStore14DoDeletedItemsEv @ 70 NONAME
+	_ZNK22CNSmlContactsDataStore14StripPropertyLERP6HBufC8RK6TDesC8 @ 71 NONAME
+	_ZNK22CNSmlContactsDataStore14StripPropertyLERP8CBufBaseRK6TDesC8 @ 72 NONAME
+	_ZNK22CNSmlContactsDataStore15DoMaxObjectSizeEv @ 73 NONAME
+	_ZNK22CNSmlContactsDataStore15DoModifiedItemsEv @ 74 NONAME
+	_ZNK22CNSmlContactsDataStore16DoHasSyncHistoryEv @ 75 NONAME
+	_ZNK22CNSmlContactsDataStore17DefaultStoreNameLEv @ 76 NONAME
+	_ZNK22CNSmlContactsDataStore18DoSoftDeletedItemsEv @ 77 NONAME
+	_ZNK22CNSmlContactsDataStore27GetStoreFormatResourceFileLEv @ 78 NONAME
+	_ZNK25CNSmlContactsDataProvider17CreateDataStoreLCEv @ 79 NONAME
+	_ZNK25CNSmlContactsDataProvider19DoSupportsOperationE4TUid @ 80 NONAME
+	_ZNK25CNSmlContactsDataProvider27GetStoreFormatResourceFileLEv @ 81 NONAME
+	_ZTI22CNSmlContactsDataStore @ 82 NONAME
+	_ZTI25CNSmlContactsDataProvider @ 83 NONAME
+	_ZTIN22CNSmlContactsDataStore23CNSmlContactsBufferItemE @ 84 NONAME
+	_ZTV22CNSmlContactsDataStore @ 85 NONAME
+	_ZTV25CNSmlContactsDataProvider @ 86 NONAME
+	_ZTVN22CNSmlContactsDataStore23CNSmlContactsBufferItemE @ 87 NONAME
+	_ZN22CNSmlContactsDataStore15ExportContactsLERK4TUidR8CBufBase @ 88 NONAME
+	_ZN22CNSmlContactsDataStore15ImportContactsLERK6TDesC8 @ 89 NONAME
 
--- a/omads/omadsextensions/adapters/contacts/inc/NSmlContactsDataProvider.h	Wed Aug 18 09:39:14 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
-* Copyright (c) 2005 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:  DS contacts dataprovider.
-*
-*/
-
-#ifndef __NSMLCONTACTSDATAPROVIDER_H__
-#define __NSMLCONTACTSDATAPROVIDER_H__
-
-// INCLUDES
-#include <f32file.h>
-#include <SmlDataProvider.h>
-#include "NSmlContactsDataStore.h"
-
-// CLASS DECLARATION
-
-// ------------------------------------------------------------------------------------------------
-//  CNSmlContactsDataProvider
-//
-//  @lib nsmlcontactsdataprovider.lib
-// ------------------------------------------------------------------------------------------------
-class CNSmlContactsDataProvider : public CSmlDataProvider 
-	{
-	public:
-		/**
-		* Two-phased constructor.
-		*/
-		IMPORT_C static CNSmlContactsDataProvider* NewL();
-
-		/**
-		* Destructor.
-		*/
-		IMPORT_C virtual ~CNSmlContactsDataProvider();
-
-	protected:
-		/**
-		* Two-phased constructor.
-		*/
-		IMPORT_C static CNSmlContactsDataProvider* NewLC();
-
-		/**
-		* This method handles framework events.
-		* @param					Frameworks event.
-		* @param	aParam1			First parameter.
-		* @param	aParam2			Second parameter.
-		*/
-		IMPORT_C void DoOnFrameworkEvent(TSmlFrameworkEvent, TInt aParam1, TInt aParam2);
-
-		/**
-		* Check if operation is supported by dataprovider.
-		* @param	aOpId			Operations type.
-		* @return	ETrue if the operation is supported.
-		*/
-		IMPORT_C TBool DoSupportsOperation(TUid aOpId) const;
-
-		/**
-		* Gets dataproviders own StoreFormat.
-		*/
-		IMPORT_C const CSmlDataStoreFormat& DoStoreFormatL();
-
-		/**
-		* Lists all contacts databases on client.
-		* @return List of contact databases.
-		*/
-		IMPORT_C CDesCArray* DoListStoresLC();
-
-		/**
-		* Gets default storename on client.
-		* @return Default storename.
-		*/
-		IMPORT_C const TDesC& DoDefaultStoreL();
-
-		/**
-		* Constructs new instance of datastore.
-		* @return Newly created instance.
-		*/
-		IMPORT_C CSmlDataStore* DoNewStoreInstanceLC();
-
-		/**
-		This method returns the set of filters that can be used to send to the SyncML server.
-		* @return New filters.
-		*/
-		IMPORT_C const RPointerArray<CSyncMLFilter>& DoSupportedServerFiltersL();
-		
-		/**
-		This method checks what filters are supported by server.
-		@param	aServerDataStoreFormat	The store format of server
-		@param	aFilters				The array that includes filters
-		@param	aChangeInfo				The change information about changes that data provider did
-		*/
-		IMPORT_C void DoCheckSupportedServerFiltersL(const CSmlDataStoreFormat& aServerDataStoreFormat, RPointerArray<CSyncMLFilter>& aFilters, TSyncMLFilterChangeInfo& aChangeInfo);
-		
-		/**
-		This method updates dynamic filters up-to-date.
-		@param	aFilters				The array that includes filters
-		@param	aChangeInfo				The change information about changes that data provider did
-		*/
-		IMPORT_C void DoCheckServerFiltersL(RPointerArray<CSyncMLFilter>& aFilters, TSyncMLFilterChangeInfo& aChangeInfo);
-		
-		/**
-		This method generates a record filter query to be sent to the SyncML server for the provided filters.
-		@param	aFilters			The filters to be used for the query generation
-		@param	aMatch				The filter match type to be used
-		@param	aFilterMimeType		The mime type of the returned filter query
-		@param	TSyncMLFilterType 	The filter type of the returned filter query
-		@param	aStoreName			The name of used store
-		@return						The record filter query to be sent to the SyncML server - empty if no record filter involved
-									for this specific filter
-		*/
-		IMPORT_C HBufC* DoGenerateRecordFilterQueryLC(const RPointerArray<CSyncMLFilter>& aFilters, TSyncMLFilterMatchType aMatch, TDes& aFilterMimeType, TSyncMLFilterType& aFilterType, TDesC& aStoreName);
-		
-		/**
-		This method generates a field filter query to be sent to the SyncML server for the provided filters.
-		@param	aFilters		The filters to be used for the query generation
-		@param	aFilterMimeType		The mime type of the returned filter query
-		@param	aProperties		The field filter query to be sent to the SyncML server - empty if no field filter involved
-								for this specific filter
-		@param  aStoreName		The name of used store
-		*/
-		IMPORT_C void DoGenerateFieldFilterQueryL(const RPointerArray<CSyncMLFilter>& aFilters, TDes& aFilterMimeType, RPointerArray<CSmlDataProperty>& aProperties, TDesC& aStoreName);
-
-		/**
-		* C++ constructor.
-		*/
-		IMPORT_C CNSmlContactsDataProvider();
-
-		/**
-		* 2nd phase constructor.
-		*/
-		IMPORT_C void ConstructL();
-
-	protected: // New 
-		
-		IMPORT_C virtual const TDesC& GetStoreFormatResourceFileL() const;
-    	
-		IMPORT_C virtual CNSmlContactsDataStore* CreateDataStoreLC() const;
-		
-	private: // data
-		CNSmlContactsDataStore* iContactsDataStore; 
-		RPointerArray<CSyncMLFilter> iFilterArray;
-		RFs iRfs;
-		RStringPool iStringPool;
-		CSmlDataStoreFormat* iStoreFormat;
-	};
-	
-#endif // __NSMLCONTACTSDATAPROVIDER_H__
-
-// End of File  
--- a/omads/omadsextensions/adapters/contacts/inc/NSmlContactsDataStore.h	Wed Aug 18 09:39:14 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,593 +0,0 @@
-/*
-* Copyright (c) 2006 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:  DS contacts datastore.
-*
-*/
-
-#ifndef __NSMLCONTACTSDATASTORE_H__
-#define __NSMLCONTACTSDATASTORE_H__
-
-// INCLUDE FILES
-#include <SmlDataProvider.h>
-#include <SmlDataFormat.h>
-#include <f32file.h>
-
-// MACROS
-#define KNSmlvCard21Version TVersion(2,1,0);
-#define KNSmlvCard30Version TVersion(3,0,0);
-
-// CONSTANTS
-_LIT(  KNSmlContactStoreNameForDefaultDB, "symbian" );
-_LIT(  KNSmlDriveC, "C" );
-_LIT8( KNSmlvCard30Name, "text/vcard" );
-_LIT8( KNSmlvCard30Ver, "3.0" );
-_LIT8( KNSmlvCard21Name, "text/x-vcard" );
-_LIT8( KNSmlvCard21Ver, "2.1" );
-_LIT8(KUidFormat, "%d");
-
-
-_LIT8( KVersitTokenHOME, "HOME"  );
-_LIT8( KVersitTokenWORK, "WORK"  );
-_LIT8( KVersitTokenCELL, "CELL"  );
-_LIT8( KVersitTokenPAGER,"PAGER" );
-_LIT8( KVersitTokenFAX,  "FAX"   );
-_LIT8( KVersitTokenVOICE,"VOICE" );
-_LIT8( KVersitTokenVIDEO,"VIDEO" );
-
-const TInt KNSmlContactsGranularity = 8;
-const TInt KNSmlCompactAfterChanges = 16;
-const TInt KNSmlDataStoreMaxSize = 102400;		// 100 k
-const TInt KNSmlDefaultStoreNameMaxSize = 256;
-const TInt KNSmlItemDataExpandSize = 1024;
-const TInt KNSmlNoError = 1;
-
-_LIT(KNSmlContactsStoreFormatRsc_1_1_2,"NSmlContactsDataStoreFormat_1_1_2.rsc");
-_LIT(KNSmlContactsStoreFormatRsc_1_2,"NSmlContactsDataStoreFormat_1_2.rsc");
-
-// FORWARD DECLARATIONS
-
-class CNsmlContactsDataStoreExtension;
-class MContactsModsFetcher;
-class CNSmlDataModBase;
-class CNSmlChangeFinder;
-class CNSmlDataItemUidSet;
-class TNSmlSnapshotItem;
-
-// CLASS DECLARATION
-
-// ------------------------------------------------------------------------------------------------
-// CNSmlContactsDataStore
-//
-// @lib nsmlcontactsdataprovider.lib
-// ------------------------------------------------------------------------------------------------
-class CNSmlContactsDataStore : public CSmlDataStore
-	{
-	public:	
-		/**
-		* Two-phased constructor.
-		*/
-		IMPORT_C static CNSmlContactsDataStore* NewL();
-
-		/**
-		* Destructor.
-		*/
-		IMPORT_C virtual ~CNSmlContactsDataStore();
-
-		/**
-		* Default store name of client.
-		* @return Default store name.
-		*/
-		IMPORT_C const TDesC& DefaultStoreNameL() const;
-
-		/**
-		* Gets a list of all contacts databases on client.
-		* @return List of databases.
-		*/
-		IMPORT_C CDesCArray* DoListStoresLC();
-
-	protected:
-		/**
-		* 2nd phase constructor.
-		*/
-		IMPORT_C void ConstructL();
-
-        /**
-        * 2nd phase constructor.
-        * @param aStorename Name of the contact database instance.
-        */
-		IMPORT_C void ConstructL( const TDesC& aStoreName );
-		
-		/**
-		* DoOpenL() opens the data store specified by aStoreName asynchronously.
-		* @param		aStoreName			The name of the data store to open.
-		* @param		aContext			Identifies the specific synchronisation relationship to use for the synchronisation.
-		* @param		aStatus				On completion of the open, contains the result code.
-		*/
-		IMPORT_C void DoOpenL(const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus);
-
-		/**
-		* DoCancelRequest() cancels the current asynchronous request, including open. Only one asynchronous request may be outstanding at any one time.
-		*/
-		IMPORT_C void DoCancelRequest();
-
-		/**
-		* DoStoreName() returns the name of the open data store.
-		* @return The name of the currently opened data store.
-		*/
-		IMPORT_C const TDesC& DoStoreName() const;
-
-		/**
-		* DoBeginTransactionL() starts the transaction mode. During this mode calls to CreateItemL, ReplaceItemL,
-		* WriteItemL, CommitItemL, MoveItemL, DeleteItemL and SoftDeleteItemL will be part of this transaction.
-		* Their RequestStatus must be completed, even if the change is not yet really executed in the Data Store.
-		* If a RequestStatus is completed with an error code, the transaction has failed and a rollback must be
-		* done. In this case RevertTransaction will be called.
-		*/
-		IMPORT_C void DoBeginTransactionL();
-
-		/**
-		* DoCommitTransactionL() will be called at the end of a successful transaction. At this point in time the
-		* operations within the transaction are applied to the Data Store in an atomic way. If all operations
-		* succeed, the RequestStatus must be completed with KErrNone. If an operation fails, a rollback must be
-		* done and the RequestStatus must be completed with an appropriate error code.
-		*/
-		IMPORT_C void DoCommitTransactionL(TRequestStatus& aStatus);
-
-		/**
-		* DoRevertTransaction() will be called to abort an ongoing transaction. None of the operations already
-		* submitted may be applied to the Data Store. The RequestStatus must be completed with KErrNone as a revert
-		* cannot fail.
-		*/
-		IMPORT_C void DoRevertTransaction(TRequestStatus& aStatus);
-
-		/**
-		* DoBeginBatchL() starts the batch mode. During this mode calls to CreateItemL, ReplaceItemL,
-		* WriteItemL, CommitItemL, MoveItemL, DeleteItemL and SoftDeleteItemL will be part of this batch.
-		* Their RequestStatus must be completed with KErrNone, which only signals acceptance of the operation
-		* for batch processing.
-		*/
-		IMPORT_C void DoBeginBatchL();
-
-		/**
-		* DoCommitBatchL() will be called at the end of the batch mode. This tells the Data Store to
-		* process the batched operations (in the order they were submitted), and to append the error code
-		* for each operation to aResultArray.
-		* The error codes in aResultArray are only valid if the RequestStatus is completed with KErrNone.
-		* If the RequestStatus is completed with an error code none of the operations in the batch mode
-		* were applied to the Data Store.
-		*/
-		IMPORT_C void DoCommitBatchL(RArray<TInt>& aResultArray, TRequestStatus& aStatus);
-
-		/**
-		* DoCancelBatch() will be called to abort an ongoing batch mode. None of the operations already
-		* submitted may be applied to the Data Store.
-		*/
-		IMPORT_C void DoCancelBatch();
-
-		/**
-		* DoSetRemoteStoreFormatL() sets the SyncML server Data Format - this may optionally be used by the Data 
-		* Provider to filter out properties that the server does not support, and should be used to avoid deleting 
-		* these properties in case the server sends a changed item to the Data Provider
-		*/
-		IMPORT_C void DoSetRemoteStoreFormatL(const CSmlDataStoreFormat& aServerDataStoreFormat);
-
-		/**
-		* DoSetRemoteMaxObjectSize() sets the SyncML server maximum object size - this may optionally be used by the 
-		* Data Provider to not send items to the server exceeding its maximum size. 0 means there is no limit.
-		*/
-		IMPORT_C void DoSetRemoteMaxObjectSize(TInt aServerMaxObjectSize);
-
-		/**
-		* DoMaxObjectSize() gets the Data Store maximum object size which is reported to the SyncML server. 0 means 
-		* there is no limit.
-		* @return The maximum object size.
-		*/
-		IMPORT_C TInt DoMaxObjectSize() const;
-
-		/**
-		* DoOpenItemL() opens the data item specified by aUid asynchronously for reading.
-		* @param		aUid				Item UID which going to be read.
-		* @param		aFieldChange		Accept field changes.
-		* @param		aParent				Parent of the item.
-		* @param		aSize				Size of the item data.
-		* @param		aMimeType			MIME type of the item.
-		* @param		aMimeVer			MIME version used on item.
-		* @param		aStatus				On completion of the opening of item, contains the result code.
-		*/
-		IMPORT_C void DoOpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize, TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus);
-
-		/**
-		* DoCreateItemL() sets the item properties and reference to aUid which will be created.
-		* @param		aUid				Reference to item UID which going to be created.
-		* @param		aSize				Size of the item to be created.
-		* @param		aParent				Parent of the item.
-		* @param		aMimeType			MIME type of the item.
-		* @param		aMimeVer			MIME version used on item.
-		* @param		aStatus				On completion of the creating an item, contains the result code.
-		*/
-		IMPORT_C void DoCreateItemL(TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent, const TDesC8& aMimeType, const TDesC8& aMimeVer, TRequestStatus& aStatus);
-
-		/**
-		* DoReplaceItemL() opens the data item specified by aUid asynchronously to be updated.
-		* @param		aUid				Item UID which going to be updated.
-		* @param		aSize				Size of the item data.
-		* @param		aParent				Parent of the item.
-		* @param		aFieldChange		Accept field changes.
-		* @param		aStatus				On completion of the updating of item, contains the result code.
-		*/
-		IMPORT_C void DoReplaceItemL(TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent, TBool aFieldChange, TRequestStatus& aStatus);
-
-		/**
-		* DoReadItemL() reads data(or size of aBuffer) of an item opened in DoOpenItemL() to given aBuffer.
-		* @param		aBuffer				Buffer to item data.
-		*/
-		IMPORT_C void DoReadItemL(TDes8& aBuffer);
-
-		/**
-		* DoWriteItemL() writes aData of an item opened in DoCreateItemL() or DoReplaceItemL() to be saved on database.
-		* @param		aData				Item data (or part of data).
-		*/
-		IMPORT_C void DoWriteItemL(const TDesC8& aData);
-
-		/**
-		* DoCommitItemL() completes an item operation started in DoCreateItemL() or DoReplaceItemL().
-		* @param		aStatus				On completion of the operation, contains the result code.
-		*/
-		IMPORT_C void DoCommitItemL(TRequestStatus& aStatus);
-
-		/**
-		* DoCloseItem() completes an item operation started in DoOpenItemL().
-		*/
-		IMPORT_C void DoCloseItem();
-
-		/**
-		* DoMoveItemL() moves item specified by aUid asynchronously.
-		* @param		aUid				Item UID which going to be moved.
-		* @param		aNewParent			A new parent of the item.
-		* @param		aStatus				On completion of the moving an item, contains the result code.
-		*/
-		IMPORT_C void DoMoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent, TRequestStatus& aStatus);
-
-		/**
-		* DoDeleteItemL() deletes item specified by aUid asynchronously.
-		* @param		aUid				Item UID which going to be deleted.
-		* @param		aStatus				On completion of the deleting an item, contains the result code.
-		*/
-		IMPORT_C void DoDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
-
-		/**
-		* DoSoftDeleteItemL() soft deletes item specified by aUid asynchronously.
-		* @param		aUid				Item UID which going to be softdeleted.
-		* @param		aStatus				On completion of the softdeleting an item, contains the result code.
-		*/
-		IMPORT_C void DoSoftDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
-
-		/**
-		* DoDeleteAllItemsL() deletes all items from opened database asynchronously.
-		* @param		aStatus				On completion of delete, contains the result code.
-		*/
-		IMPORT_C void DoDeleteAllItemsL(TRequestStatus& aStatus);
-
-		/**
-		* DoHasSyncHistory() checks if previous sync with opened server and context.
-		* @return ETrue if there is synchonization history.
-		*/
-		IMPORT_C TBool DoHasSyncHistory() const;
-
-		/**
-		* DoAddedItems() gets all added items on client since previous synchronization.
-		* @return Added items.
-		*/
-		IMPORT_C const MSmlDataItemUidSet& DoAddedItems() const;
-
-		/**
-		* DoDeletedItems() gets all deleted items on client since previous synchronization.
-		* @return Deleted items.
-		*/
-		IMPORT_C const MSmlDataItemUidSet& DoDeletedItems() const;
-
-		/**
-		* DoSoftDeletedItems() gets all softdeleted items on client since previous synchronization.
-		* @return Soft deleted items.
-		*/
-		IMPORT_C const MSmlDataItemUidSet& DoSoftDeletedItems() const;
-
-		/**
-		* DoModifiedItems() gets all modified items on client since previous synchronization.
-		* @return Modified items.
-		*/
-		IMPORT_C const MSmlDataItemUidSet& DoModifiedItems() const;
-
-		/**
-		* DoMovedItems() gets all moved items on client since previous synchronization.
-		* @return Moved items.
-		*/
-		IMPORT_C const MSmlDataItemUidSet& DoMovedItems() const;
-
-		/**
-		* DoResetChangeInfoL() resets client synchronization data => next time will be slow sync.
-		* @param		aStatus				On completion of reset, contains the result code.
-		*/
-		IMPORT_C void DoResetChangeInfoL(TRequestStatus& aStatus);
-
-		/**
-		* DoCommitChangeInfoL() commits client synchronization changes for given aItems list.
-		* @param		aStatus				On completion of given items, contains the result code.
-		* @param		aItems				Item ids to be commited.
-		*/
-		IMPORT_C void DoCommitChangeInfoL(TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems);
-
-		/**
-		* DoCommitChangeInfoL() commits all client synchronization changes.
-		* @param		aStatus				On completion of all items, contains the result code.
-		*/
-		IMPORT_C void DoCommitChangeInfoL(TRequestStatus& aStatus);
-
-		/**
-		* Default constructor.
-		*/
-		IMPORT_C CNSmlContactsDataStore();
-
-		/**
-		* SetOwnStoreFormatL() Sets dataproviders own storeformat.
-		*/
-		IMPORT_C void SetOwnStoreFormatL();
-
-		/**
-		* LdoFetchItemL() Fetches item data from database.
-		* @param		aUid				Items uid for fetching.
-		* @param		aItem				Items data after fetch.
-		* @return KErrNone if successful.
-		*/
-		IMPORT_C TInt LdoFetchItemL( TSmlDbItemUid& aUid, CBufBase& aItem );
-
-		/**
-		* LdoAddItemL() Adds item data to database.
-		* @param		aUid				Item uid reference for add.
-		* @param		aItem				Item data to be added.
-		* @param		aSize				Item data size.
-		* @param		aLastModified		Item creation date.
-		* @return KErrNone if successful.
-		*/
-		IMPORT_C TInt LdoAddItemL( TSmlDbItemUid& aUid,
-		                  const TDesC8& aItem,
-		                  TInt aSize,
-		                  TTime& aLastModified );
-
-		/**
-		* LdoAddItemsL() Adds several items to database.
-		* @param		aUids				Array of items uid references for add.
-		* @param		aItem				Items data to be added.
-		* @param		aSize				Items data size.
-		* @param		aLastModified		Last items creation date.
-		* @return KErrNone if successful.
-		*/
-		IMPORT_C TInt LdoAddItemsL( RArray<TInt>& aUids,
-		                   CBufBase*& aItem,
-		                   TInt aSize,
-		                   TTime& aLastModified );
-
-		/**
-		* LdoUpdateItemL() Updates item data to database.
-		* @param		aUid				Item uid for update.
-		* @param		aItem				Item data to be updated.
-		* @param		aSize				Item data size.
-		* @param		aLastModified		Item modification date.
-		* @return KErrNone if successful.
-		*/
-		IMPORT_C TInt LdoUpdateItemL( TSmlDbItemUid aUid,
-		                     const TDesC8& aItem,
-		                     TInt aSize,
-		                     TTime& aLastModified );
-
-		/**
-		* LdoMergeLC() Merges item data from server in update with clients item data.
-		* @param		aUid				Item uid for update.
-		* @param		aItem				Item data to be merged.
-		* @return KErrNone if successful.
-		*/
-		IMPORT_C CBufBase* LdoMergeLC( TSmlDbItemUid& aUid, const TDesC8& aItem );
-
-		/**
-		* DriveBelowCriticalLevelL() Checks if there is enough space on client to store added item data.
-		* @param		aSize				Item size to be added.
-		* @return ETrue if there isn't enough drive space.
-		*/
-		IMPORT_C TBool DriveBelowCriticalLevelL( TInt aSize );
-
-		/**
-		* StripPropertyL() Removes aProperty from aItem data.
-		* @param		aItem				Item data to be stripped.
-		* @param		aProperty			Property to be removed from aItem.
-		*/
-		IMPORT_C void StripPropertyL( HBufC8*& aItem, const TDesC8& aProperty ) const;
-
-		/**
-		* StripPropertyL() Remove aPropertys from aItem data.
-		* @param		aItem				Item(s) data to be stripped.
-		* @param		aProperty			Property to be removed from aItem.
-		*/
-		IMPORT_C void StripPropertyL( CBufBase*& aItem, const TDesC8& aProperty ) const;
-
-		/**
-		* ExecuteBufferL()Executes all buffered items from buffer.
-		* @param		aResultArray		Array to return statuscodes for each command.
-		* @return KErrNone if successful.
-		*/
-		IMPORT_C TInt ExecuteBufferL(RArray<TInt>& aResultArray);
-	
-		/**
-		* AddBufferListL()Adds a new item to buffer.
-		* @param 		aUid 				New item's uid.
-		* @param 		aSize 				New item's size.
-		* @param 		aStatus 			New item's status.
-		* @return Pointer to the buffer.
-		*/
-		IMPORT_C CBufBase* AddBufferListL(TSmlDbItemUid& aUid, TInt aSize, TInt aStatus);
-		
-		/**
-        * Reads all modifications from clients contacts databse.
-        */      
-        TInt FetchModificationsL();
-
-    protected: // New 
-        
-    	IMPORT_C virtual const TDesC& GetStoreFormatResourceFileL() const;    
-        
-        /**
-         * Performs the actual computation for ExecuteBufferL() method.
-         * Allows re-implementation of the method in sub-classes.
-         *
-         * @param aResultArray Array to return statuscodes for each command.
-         * @return KErrNone if successful.
-         */
-        IMPORT_C virtual TInt DoExecuteBufferL(RArray<TInt>& aResultArray);
-		    	
-        /**
-        * Merges two vCards
-        * @param aNewItem Received item. On return aNewItem contains merged item.
-        * @param aOldItem Item with which aNewItem is merged.
-        * @param aFieldLevel Merge using field level change 	
-        */
-    	IMPORT_C virtual void MergeL( CBufBase& aNewItem, CBufBase& aOldItem, TBool aFieldLevel = EFalse );
-
-        /**
-         * Strips data that is to be transmitted to the sync partner.
-         * @param aItem Item's data. On returns this data may have changed due 
-         *  to stripping.
-         */
-        IMPORT_C virtual void StripTxL( CBufBase& aItem );
-        
-        /**
-         * Get datamod instance
-         * @return reference to datamod instance.
-         */
-        IMPORT_C virtual CNSmlDataModBase& GetDataMod();
-
-    protected: // data
-	
-		// MODULE DATA STRUCTURES
-		enum TNSmlDataStoreStatus  // DataStore status
-			{
-			ENSmlClosed = 1,
-			ENSmlOpenAndWaiting,
-			ENSmlItemOverflow,
-			ENSmlItemOpen,
-			ENSmlItemCreating,
-			ENSmlItemUpdating
-			};
-
-		enum TNSmlCntCommand		// Modification type
-			{
-			ENSmlCntItemAdd = 1,
-			ENSmlCntItemDelete,
-			ENSmlCntItemSoftDelete,
-			ENSmlCntItemRead,
-			ENSmlCntItemMove,
-			ENSmlCntItemReplace,
-			ENSmlCntItemFieldLevelReplace
-			};
-
-		// ------------------------------------------------------------------------------------------------
-		// Buffering Stuff for BatchMode operations
-		// ------------------------------------------------------------------------------------------------
-		class CNSmlContactsBufferItem : public CBase
-			{
-			public:	
-				/**
-				* Destructor.
-				*/
-				~CNSmlContactsBufferItem();
-				
-			public: // data
-				TSmlDbItemUid	*iPUid;			// New item ID 
-				TSmlDbItemUid	iUid;			// Item ID
-				CBufBase		*iItemData;		// Item data
-				HBufC8 			*iMimeType;		// Mimetype
-				HBufC8 			*iMimeVersion;	// Mime version
-				TNSmlCntCommand iModType;		// Commands type
-				TInt			iStatus;		// Command status
-				TInt 			iSize;			// Item size
-			};
-
-       
-	protected:
-        TRequestStatus* iCallerStatus;
-        TBool iBatchMode;
-        TNSmlCntCommand iModType;
-        TBool iOpened;
-        TBool iSyncHistory;
-        TInt64 iOpenedStoreId;
-        RPointerArray<CNSmlContactsBufferItem> iContactsBufferItemList;
-        TSmlDbItemUid *iPUid;
-        TSmlDbItemUid iUid;
-        CBufBase* iItemDataAddBatch;
-        RArray<TInt> iAddResultArray;
-        CBufBase* iItemData;
-
-        CNSmlChangeFinder* iChangeFinder;
-        TKeyArrayFix iKey;
-        TBool iSnapshotRegistered;
-		TBool iFieldLevelReplace;
-        CSmlDataStoreFormat* iStoreFormat;
-
-        TInt iServerMaxObjectSize;
-        TInt iItemPos;
-        TNSmlDataStoreStatus iState;
-
-	private:
-		TBool iTransactionMode;
-		TInt iModificationCount;
-
-		TPtrC8 iMimeTypeItem;
-		TPtrC8 iMimeVersionItem;
-		
-		TPtrC8 iUsedMimeType;
-		TPtrC8 iUsedMimeVersion;
-
-		RStringF iServerMimeType;
-		RStringF iServerMimeVersion;
-		
-		HBufC* iDefaultStoreName;
-
-		CNSmlDataModBase* iDataMod;
-		
-		RFs iRfs;
-		TInt iDrive;
-		
-		TInt iItemSize;
-		
-		HBufC* iStoreName;
-		
-		RStringPool iStringPool;
-		
-		CNSmlDataItemUidSet* iNewUids;
-		CNSmlDataItemUidSet* iDeletedUids;
-		CNSmlDataItemUidSet* iSoftDeletedUids;
-		CNSmlDataItemUidSet* iReplacedUids;
-		CNSmlDataItemUidSet* iMovedUids;
-
-		TBool iLastItem;
-		TInt iStateItem; 
-		
-		CNsmlContactsDataStoreExtension* iContactsDataStoreExtension;
-		
-		CArrayFixSeg<TNSmlSnapshotItem>* iSnapshot;
-		CArrayFixFlat<TUid>* iCntUidList;
-
-	};
-
-#endif // __NSMLCONTACTSDATASTORE_H__
-
-// End of File  
--- a/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataProvider.cpp	Wed Aug 18 09:39:14 2010 +0300
+++ b/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataProvider.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -32,7 +32,7 @@
 #include <DataSyncInternalPSKeys.h>
 #include <implementationproxy.h>
 #include <NSmlDataModBase.h>
-#include "NSmlContactsDataProvider.h"
+#include <nsmlcontactsdataprovider.h>
 #include "nsmldebug.h"
 #include "nsmlconstants.h"
 #include "nsmldsimpluids.h"
--- a/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStore.cpp	Wed Aug 18 09:39:14 2010 +0300
+++ b/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStore.cpp	Thu Sep 02 20:16:30 2010 +0300
@@ -36,7 +36,7 @@
 #include <DataSyncInternalPSKeys.h>
 #include <nsmlcontactsdatastoreextension.h>
 #include <NSmlDataModBase.h>
-#include "NSmlContactsDataStore.h"
+#include <nsmlcontactsdatastore.h>
 #include "nsmldebug.h"
 #include "nsmlconstants.h"
 #include "nsmldsimpluids.h"
@@ -779,7 +779,7 @@
 	_DBG_FILE("CNSmlContactsDataStore::DoReplaceItemL(): CContactDatabase::ExportSelectedContactsL() begin");
 	
 	TInt ret = KErrNone;
-	TRAP( err, ret = iContactsDataStoreExtension->ExportContactsL( TUid::Uid(aUid), *tempData ) );
+	TRAP( err, ret = ExportContactsL( TUid::Uid(aUid), *tempData ) );
 	
 	_DBG_FILE("CNSmlContactsDataStore::DoReplaceItemL(): CContactDatabase::ExportSelectedContactsL() end");
 	CleanupStack::PopAndDestroy( tempData );
@@ -1346,7 +1346,7 @@
 	TInt err = KErrNone;	
 	TInt ret = KErrNone;
 	
-	TRAP( err, ret = iContactsDataStoreExtension->ExportContactsL( TUid::Uid(aUid), aItem ) );
+	TRAP( err, ret = ExportContactsL( TUid::Uid(aUid), aItem ) );
 	
 	if( ret != KErrNone )
 	    {
@@ -1390,7 +1390,7 @@
 	StripPropertyL( buf, KVersitTokenUID() );
 
 	CArrayFixFlat<TUid>* entryArray = NULL;
-	TRAP( ret, entryArray = iContactsDataStoreExtension->ImportContactsL( *buf ) );
+	TRAP( ret, entryArray = ImportContactsL( *buf ) );
 
     DBG_ARGS(_S("New item to database with return value: '%d'"), ret );
 
@@ -1453,7 +1453,7 @@
 		}
 
 	CArrayFixFlat<TUid>* entryArray = NULL;
-    TRAP( ret, entryArray = iContactsDataStoreExtension->ImportContactsL(  aItems->Ptr(0) ) );
+    TRAP( ret, entryArray = ImportContactsL( aItems->Ptr( 0 ) ) );
 	
     DBG_ARGS(_S("New items to database with return value: '%d'"), ret );
 
@@ -1567,7 +1567,7 @@
 
 	// TODO: Get it reviewed
 	CArrayFixFlat<TUid>* entryArray = NULL;
-    TRAP( ret, entryArray = iContactsDataStoreExtension->ImportContactsL( hItemPtr ) );
+    TRAP( ret, entryArray = ImportContactsL( hItemPtr ) );
 	
     if( ret == KErrNone && entryArray != NULL)
 		{
@@ -2077,25 +2077,6 @@
     return KErrGeneral; // All commands failed    
     }
 
-
-// ------------------------------------------------------------------------------------------------
-// CNSmlContactsDataStore::MergeL
-// 
-// ------------------------------------------------------------------------------------------------
-EXPORT_C void CNSmlContactsDataStore::MergeL( CBufBase& aNewItem, CBufBase& aOldItem, TBool aFieldLevel )
-    {
-    iDataMod->MergeRxL( aNewItem, aOldItem, aFieldLevel );
-    }
-
-// ----------------------------------------------------------------------------
-// CNSmlContactsDataStore::StripTxL
-//  Strips data that is to be transmitted to the sync partner.
-// ----------------------------------------------------------------------------
-EXPORT_C void CNSmlContactsDataStore::StripTxL( CBufBase& aItem )
-    {
-    iDataMod->StripTxL( aItem );
-    }
-
 // ------------------------------------------------------------------------------------------------
 // CNSmlContactsDataStore::FetchModificationsL
 // ------------------------------------------------------------------------------------------------
@@ -2154,4 +2135,22 @@
     return *iDataMod;
     }
 
+// ----------------------------------------------------------------------------
+// CNSmlContactsDataStore::ExportContactsL
+// ----------------------------------------------------------------------------
+EXPORT_C TInt CNSmlContactsDataStore::ExportContactsL( 
+    const TUid& aUid, CBufBase& aContactBufBase )
+    {
+    return iContactsDataStoreExtension->ExportContactsL( aUid, aContactBufBase ); 
+    }
+
+// ----------------------------------------------------------------------------
+// CNSmlContactsDataStore::ImportContactsL
+// ----------------------------------------------------------------------------
+EXPORT_C CArrayFixFlat<TUid>* CNSmlContactsDataStore::ImportContactsL( 
+    const TDesC8& aContactBufBase )
+    {
+    return iContactsDataStoreExtension->ImportContactsL( aContactBufBase ); 
+    }
+
 // End of File