Revision: 200949
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:39:39 +0200
changeset 1 95fdac6ccb5c
parent 0 dab8a81a92de
child 2 19dc812fb587
Revision: 200949 Kit: 200951
contentctrl_plat/ds_agenda_handler_plugin_api/ds_agenda_handler_plugin_api.metaxml
contentctrl_plat/ds_agenda_handler_plugin_api/group/bld.inf
contentctrl_plat/ds_agenda_handler_plugin_api/inc/nsmlagendaadapterhandler.h
contentctrl_plat/ds_agenda_handler_plugin_api/inc/nsmlagendaadapterhandler.inl
contentctrl_plat/ds_folder_util_api/ds_folder_util_api.metaxml
contentctrl_plat/ds_folder_util_api/group/bld.inf
contentctrl_plat/ds_folder_util_api/inc/nsmlfolderparser.h
contentctrl_plat/group/bld.inf
omads/omadsappui/AiwSyncProvider/src/AiwSyncProvider.rss
omads/omadsappui/AspSyncUtil/group/AspSyncUtil.mmp
omads/omadsappui/AspSyncUtil/inc/AspProfile.h
omads/omadsappui/AspSyncUtil/src/AspAdvanceSettingsDialog.cpp
omads/omadsappui/AspSyncUtil/src/AspContentDialog.cpp
omads/omadsappui/AspSyncUtil/src/AspFilterDialog.cpp
omads/omadsappui/AspSyncUtil/src/AspProfile.cpp
omads/omadsappui/AspSyncUtil/src/AspProfileDialog.cpp
omads/omadsappui/AspSyncUtil/src/AspProfileWizardDialog.cpp
omads/omadsappui/AspSyncUtil/src/AspScheduleDialog.cpp
omads/omadsappui/AspSyncUtil/src/AspSettingDialog.cpp
omads/omadsappui/AspSyncUtil/src/AspSettingViewDialog.cpp
omads/omadsappui/AspSyncUtil/src/AspSyncUtil.rss
omads/omadsappui/OmaDsAppUiPlugin/data/NsmlDSGSPluginResource.rss
omads/omadsappui/help/data/xhtml.zip
omads/omadsappui/help/inc/ds.hlp.hrh
omads/omadsappui/ui/src/NSmlDSSync.rss
omads/omadsappui/ui/src/NSmlDSSyncAppUi.cpp
omads/omadsextensions/adapters/agenda/bld/nsmlagendadataprovider.mmp
omads/omadsextensions/adapters/agenda/inc/nsmlagendadataprovider.h
omads/omadsextensions/adapters/agenda/inc/nsmlagendadatastore.h
omads/omadsextensions/adapters/agenda/inc/nsmlagendadebug.h
omads/omadsextensions/adapters/agenda/src/101F6DD7.rss
omads/omadsextensions/adapters/agenda/src/NSmlAgendaDataStore_1_2.rss
omads/omadsextensions/adapters/agenda/src/nsmlagendadataprovider.cpp
omads/omadsextensions/adapters/agenda/src/nsmlagendadatastore.cpp
omads/omadsextensions/adapters/agenda/src/nsmlagendaprogressview.cpp
omads/omadsextensions/adapters/contacts/src/101F6DD6.rss
omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStoreFormat_1_1_2.rss
omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStoreFormat_1_2.rss
omads/omadsextensions/dsutils/emailxmlutils/bld/bld.inf
omads/omadsextensions/dsutils/emailxmlutils/bld/def/bwinscwxmlparseru.def
omads/omadsextensions/dsutils/emailxmlutils/bld/def/eabixmlparseru.def
omads/omadsextensions/dsutils/emailxmlutils/bld/nsmlxmlparser.mmp
omads/omadsextensions/dsutils/emailxmlutils/inc/nsmlxmlparser.h
omads/omadsextensions/dsutils/emailxmlutils/src/NSmlEmailFileParser.cpp
omads/omadsextensions/dsutils/emailxmlutils/src/NSmlEmailParser.cpp
omads/omadsextensions/dsutils/emailxmlutils/src/NSmlExtData.cpp
omads/omadsextensions/dsutils/emailxmlutils/src/NSmlFolderAttributeData.cpp
omads/omadsextensions/dsutils/emailxmlutils/src/NSmlFolderParser.cpp
omads/omadsextensions/dsutils/emailxmlutils/src/NSmlTruncatedData.cpp
omads/omadsextensions/dsutils/emailxmlutils/src/nsmlxmlparser.cpp
omads/omadsextensions/dsutils/nsmldefaultagendahandler/bld/bld.inf
omads/omadsextensions/dsutils/nsmldefaultagendahandler/bld/def/bwinscwnsmldefaultagendahandleru.DEF
omads/omadsextensions/dsutils/nsmldefaultagendahandler/bld/def/eabinsmldefaultagendahandleru.DEF
omads/omadsextensions/dsutils/nsmldefaultagendahandler/bld/nsmldefaultagendahandler.mmp
omads/omadsextensions/dsutils/nsmldefaultagendahandler/data/nsmldefaultagendahandler.rss
omads/omadsextensions/dsutils/nsmldefaultagendahandler/data/nsmldefaultagendahandler_1_2.rss
omads/omadsextensions/dsutils/nsmldefaultagendahandler/inc/nsmldefaultagendahandlerdebug.h
omads/omadsextensions/dsutils/nsmldefaultagendahandler/inc/nsmldefaultagendahandlerplugin.h
omads/omadsextensions/dsutils/nsmldefaultagendahandler/inc/nsmldefaultagendahandlerutil.h
omads/omadsextensions/dsutils/nsmldefaultagendahandler/loc/nsmldefaultagendahandler.loc
omads/omadsextensions/dsutils/nsmldefaultagendahandler/src/nsmldefaultagendahandlerplugin.cpp
omads/omadsextensions/dsutils/nsmldefaultagendahandler/src/nsmldefaultagendahandlerutil.cpp
omads/omadsextensions/dsutils/nsmlfolderutils/bld/bld.inf
omads/omadsextensions/dsutils/nsmlfolderutils/bld/def/bwinscwfolderparseru.def
omads/omadsextensions/dsutils/nsmlfolderutils/bld/def/eabifolderparseru.def
omads/omadsextensions/dsutils/nsmlfolderutils/bld/nsmlfolderparser.mmp
omads/omadsextensions/dsutils/nsmlfolderutils/inc/nsmlparserconstants.h
omads/omadsextensions/dsutils/nsmlfolderutils/src/NSmlExtData.cpp
omads/omadsextensions/dsutils/nsmlfolderutils/src/NSmlFolderAttributeData.cpp
omads/omadsextensions/dsutils/nsmlfolderutils/src/NSmlFolderParser.cpp
omads/omadsextensions/dsutils/nsmlfolderutils/src/nsmlxmlparser.cpp
omads/omadsextensions/group/bld.inf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_agenda_handler_plugin_api/ds_agenda_handler_plugin_api.metaxml	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="e875aa7198efe7485167b690e8fa48d7" dataversion="1.0">
+<name>ds_agenda_handler_plugin_api</name>
+<description>This api is used for creating new implementation to support multiple calendar feature for Agenda Adapter</description>
+<type>c++</type>
+<subsystem>Agenda Adapter</subsystem>
+<libs></libs>
+<release category="domain" sinceversion=""/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_agenda_handler_plugin_api/group/bld.inf	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,27 @@
+/*
+* 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:  
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/nsmlagendaadapterhandler.h      APP_LAYER_PLATFORM_EXPORT_PATH(nsmlagendaadapterhandler.h)
+../inc/nsmlagendaadapterhandler.inl    APP_LAYER_PLATFORM_EXPORT_PATH(nsmlagendaadapterhandler.inl)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_agenda_handler_plugin_api/inc/nsmlagendaadapterhandler.h	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,168 @@
+/*
+* 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:  
+*
+*/
+
+#ifndef C_NSMLAGENDA_ADAPTERHANDLERPLUGIN_H
+#define C_NSMLAGENDA_ADAPTERHANDLERPLUGIN_H
+
+// SYSTEM INCLUDES
+#include <e32base.h>
+#include <s32mem.h>
+#include <ecom.h>
+#include <SmlDataFormat.h>
+#include <nsmlchangefinder.h>
+#include <calcalendarinfo.h>
+#include <e32cmn.h>
+
+// Constants
+const TUid KAgendaAdapterHandlerInterfaceUid = { 0x20029F14 };
+
+/**
+* Interface definition for ECoM plug-in adapters
+*/
+class CNSmlAgendaAdapterHandler: public CBase
+    {
+	public:
+	    /**
+        * Ecom interface static factory method implementation.
+        * @param aImpUid Ecom's implementation uid
+        * @return A pointer to the created instance of CNSmlAgendaAdapterHandler
+        */
+		static inline CNSmlAgendaAdapterHandler* NewL(TUid aImpUid);
+
+		/**
+		* Destructor
+		*/
+		virtual ~CNSmlAgendaAdapterHandler();
+
+	public:
+	    /**
+        * Determines the Server supported folder properties
+        * 
+        * @param aServerDataStoreFormat Class structure of server device information
+        *         
+        */
+	    virtual void CheckServerSupportForFolder( const CSmlDataStoreFormat& aServerDataStoreFormat ) = 0;
+	    
+	    /**
+        * Retrieve the folder from the Organizer db
+        * 
+        * @param aUid variable specifing which Folder to be fetched
+        * @param aStream on return will have the Folder details
+        *         
+        */
+	    virtual void FetchFolderL( const TSmlDbItemUid aUid, RBufWriteStream& aStream ) = 0;
+	    
+	    /**
+        * Determine the list of folders in the Organizer db owned by the calling application
+        * 
+        * @param aFolderUidArray array on return will have UID's of owned folders
+        *         
+        */
+	    virtual void SynchronizableCalendarIdsL( CArrayFixFlat<TUint>* aFolderUidArray ) = 0;
+	    
+	    /**
+        * Create a folder on to Organizer db
+        * 
+        * @param aStream containing the folder details to be created with
+        * @return TCalLocalUid of the newly created folder
+        *         
+        */
+	    virtual TCalLocalUid CreateFolderL( RBufReadStream& aStream ) = 0;
+	    
+	    /**
+        * Replace the existing folder with updated info
+        * 
+        * @param aUid determines folder to act upon
+        * @param aStream containing the folder information to be updated
+        * @param aSyncStatus updated folders current syncstatus
+        *         
+        */
+	    virtual void ReplaceFolderL( const TCalLocalUid& aUid, RBufReadStream& aStream, TBool& aSyncStatus ) = 0;
+	    
+	    /**
+        * Retrieves the foldername 
+        * 
+        * @param aUid of the folder whose name to be determined
+        * @return HBufC* name of the folder
+        *         
+        */
+	    virtual HBufC* FolderNameL( TSmlDbItemUid aUid ) = 0;
+	    
+	    /**
+        * Retrieve the calendar sync capability supported by the device
+        * 
+        * @param aStringPool 
+        * @return CSmlDataStoreFormat* Class structure of supported capabilities
+        *         
+        */	 
+	    virtual CSmlDataStoreFormat* StoreFormatL( RStringPool& aStringPool ) = 0;
+	    
+	    /**
+        * Create a snap shot item
+        * 
+        * @param aUid of folder whose snapshot to be created
+        * @retrun TNSmlSnapshotItem class 
+        *         
+        */
+	    virtual TNSmlSnapshotItem CreateFolderSnapShotItemL( const TCalLocalUid& aUid ) = 0;
+	    
+	    /**
+        * Determine the folder owner
+        * 
+        * @return TInt uid of the owner application
+        *         
+        */	    
+	    virtual TInt DeviceSyncOwner() = 0;
+	    
+	    /**
+        * Determines the sync status of the folder
+        * 
+        * @param aUid determine the folder whose sync status to be retrieved
+        * @return TBool sync status
+        *         
+        */
+	    virtual TBool FolderSyncStatusL( TSmlDbItemUid aUid ) = 0;
+	    
+	    /**
+        * Determines the sync status of the folder
+        * 
+        * @param aFolderName determine the folder whose sync status to be retrieved
+        * @return TBool sync status
+        *         
+        */	    
+	    virtual TBool FolderSyncStatusL( HBufC* aFolderName ) = 0; 
+	    
+	public:
+	    /**
+        * Variable to hold the Plugin's Opaque Data
+        */
+	    HBufC8* iOpaqueData;
+   
+	private:    
+		/**
+		* Used internally to create ECOM implementation
+	    */
+  	   	TUid iDtor_ID_Key;  	   
+    
+    };
+
+#include "nsmlagendaadapterhandler.inl"
+
+#endif		// C_NSMLAGENDA_ADAPTERHANDLERPLUGIN_H
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_agenda_handler_plugin_api/inc/nsmlagendaadapterhandler.inl	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,44 @@
+/*
+* 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:  
+*
+*/
+
+// INCLUDE FILES
+#include <eCom.h>
+#include "nsmlagendaadapterhandler.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CNSmlAgendaAdapterHandler::NewL
+// Two phase construction
+// ----------------------------------------------------------------------------
+inline CNSmlAgendaAdapterHandler* CNSmlAgendaAdapterHandler::NewL( TUid aImpUid)
+    {
+    TAny* implementation = REComSession::CreateImplementationL ( aImpUid,
+    _FOFF ( CNSmlAgendaAdapterHandler, iDtor_ID_Key ));
+    CNSmlAgendaAdapterHandler* self = REINTERPRET_CAST( CNSmlAgendaAdapterHandler*, implementation );
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CNSmlAgendaAdapterHandler::~CNSmlAgendaAdapterHandler
+// Destructor
+// ----------------------------------------------------------------------------
+inline CNSmlAgendaAdapterHandler::~CNSmlAgendaAdapterHandler()
+    {
+    REComSession::DestroyedImplementation( iDtor_ID_Key );
+    delete iOpaqueData;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_folder_util_api/ds_folder_util_api.metaxml	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<api id="7098f3668c6fd3af3740e501929c045b" dataversion="1.0">
+<name>ds_folder_util_api</name>
+<description>Support for folderparsing API</description>
+<type>c++</type>
+<subsystem>DSUtils</subsystem>
+<libs></libs>
+<release category="domain" sinceversion=""/>
+<attributes>
+<htmldocprovided>no</htmldocprovided>
+<adaptation>no</adaptation>
+</attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_folder_util_api/group/bld.inf	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,26 @@
+/*
+* 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:  
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/nsmlfolderparser.h        APP_LAYER_PLATFORM_EXPORT_PATH(nsmlfolderparser.h)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_folder_util_api/inc/nsmlfolderparser.h	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,310 @@
+/*
+* Copyright (c) 2004 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:  Folder XML parser
+*
+*/
+
+
+// 1.2 Changes: nsmlxmlparser module added
+
+
+#ifndef __NSMLFOLDERPARSER_H__
+#define __NSMLFOLDERPARSER_H__
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <e32base.h>
+#include <s32strm.h>
+
+// ------------------------------------------------------------------------------------------------
+// Class forward declarations
+// ------------------------------------------------------------------------------------------------
+class CNSmlXmlParser;
+class CNSmlExtData;
+
+
+//Constants
+
+// the maximum length of an integer in characters
+const TInt KIntegerMaxLength = 12;
+
+// the length of a datetime in characters
+const TInt KDateTimeLength = 16;
+
+// ------------------------------------------------------------------------------------------------
+// Typedefs
+// ------------------------------------------------------------------------------------------------
+// the array used for xval-values
+typedef CArrayPtrFlat<HBufC8> CNSmlXValArray;
+// the array used for extension data
+typedef CArrayPtrFlat<CNSmlExtData> CNSmlExtDataArray;
+
+// enumeration for boolean values
+enum TNSmlBoolean
+    {
+    EBooleanMissing = 0, // not included in the xml
+    EBooleanTrue,
+    EBooleanFalse
+    };
+
+// The error values returned from parser and generator functions
+enum TNSmlParserGeneratorError
+    {
+    EErrorNone,             // no error
+    EOutOfMemory,           // out of memory
+    EMandatoryFieldNotFound,// XNam inside Ext missing
+    EInvalidBooleanValue,   // Invalid value inside boolean elements
+    EInvalidIntegerValue,   // Invalid value inside integer elements
+    EInvalidDatetimeValue,  // Invalid value inside datetime elements
+    EInvalidCDataStructure, // CDATA error
+    EInvalidXmlError,       // Xml includes invalid data, i.e. xml generally against dtd
+    EInvalidFilename,       // file was not found or the filename was otherwise erroneous
+    EUnknownError           // Unknown error
+    };
+
+// extension data (found in and folder)
+class CNSmlExtData : public CBase
+	{
+public:
+	IMPORT_C static CNSmlExtData* NewL();
+	IMPORT_C static CNSmlExtData* NewLC();
+	IMPORT_C virtual ~CNSmlExtData();
+
+	IMPORT_C void AddXValL( HBufC8* aXVal );
+
+	IMPORT_C void GenerateXmlL( TPtr8& aXml, const CNSmlXmlParser* aParser ) const;
+	IMPORT_C TInt CountXmlSize( const CNSmlXmlParser* aParser ) const;
+	IMPORT_C void ConvertIntoEntitiesL( const CNSmlXmlParser* aParser );
+
+private:
+	CNSmlExtData();
+	void ConstructL();
+
+public:
+	HBufC8* iXNam;
+	CNSmlXValArray* iXVals;
+	};
+
+
+// folder attributes
+struct TNSmlFolderAttributeData
+	{
+	IMPORT_C TNSmlFolderAttributeData();
+
+	/*
+	* Returns the count of attributes that are not EBooleanMissing.
+	*/
+	IMPORT_C TInt AttributeCount() const;
+
+	IMPORT_C void GenerateXml( TPtr8& aXml, const CNSmlXmlParser* aParser ) const;
+	IMPORT_C TInt CountXmlSize( const CNSmlXmlParser* aParser ) const;
+
+	TNSmlBoolean iHidden;
+	TNSmlBoolean iSystem;
+	TNSmlBoolean iArchived;
+	TNSmlBoolean iDelete;
+	TNSmlBoolean iWritable;
+	TNSmlBoolean iReadable;
+	TNSmlBoolean iExecutable;
+	};
+
+// Base class for actual parsergenerators. 
+// Implements basic utilities for parsing and generating the xml.
+class CNSmlXmlParser : public CBase  
+	{
+public:
+	/*
+	* The constructor.
+	*/
+	IMPORT_C CNSmlXmlParser();
+
+	/*
+	* The destructor.
+	*/
+	IMPORT_C virtual ~CNSmlXmlParser();
+
+	/*
+	* Parses through the given xml and places the data it contains to 
+	* member variables.	Removes all the comments from the original string.
+	* @param aXml The xml to be parsed.
+	* @return 
+	*/
+	virtual TNSmlParserGeneratorError ParseXml( HBufC8* aXml ) =0;
+
+	/*
+	* Generates xml using the data in member variables of the child class. 
+	* aXml contains the generated xml when method returns successfully. 
+	* Caller should not instantiate 
+	* the buffer, since this method counts the size of the xml and 
+	* instantiates the buffer using the size as its maximum size.
+	* Caller gets the control of the buffer when method returns.
+	* @param aXml A pointer to a buffer, which is instantiated in this 
+	* method and contains the xml when method returns succesfully.
+	* @return 
+	*/
+	virtual TNSmlParserGeneratorError GenerateXml( HBufC8*& aXml ) =0;
+
+	/*
+	* Counts the size of the generated xml, when the xml would be generated 
+	* using the data in child class' member variables.
+	*/
+	virtual TInt CountXmlSizeL() =0;
+
+	/* utility functions */
+
+	void PreProcessL( HBufC8* aXml ) const;
+
+	TPtrC8 BooleanToString( const TNSmlBoolean aValue ) const;
+	TBuf8<KDateTimeLength> DateTimeToStringL( const TTime& aValue ) const;
+	TBuf8<KIntegerMaxLength> IntegerToString( const TInt aValue ) const;
+
+	TNSmlBoolean StringToBooleanL( const TPtrC8& aValue ) const;
+	TInt StringToIntegerL( const TPtrC8& aValue ) const;
+	// Note: Ignores UTC-times (Z-ending) and treats them as local time!
+	TTime StringToTTimeL( TPtrC8& aValue ) const;
+
+	void AppendElement( TPtr8& aPtr, const TDesC8& aElementName, const TDesC8& aValue ) const;
+	void AppendElement( TPtr8& aPtr, const TDesC8& aElementName ) const;
+	void AppendEndElement( TPtr8& aPtr, const TDesC8& aElementName ) const;
+
+	TInt SizeOfElements( const TDesC8& aElementName ) const;
+	TInt SizeOfBoolean( const TNSmlBoolean aValue, const TDesC8& aElementName ) const;
+	TInt SizeOfDatetime( const TDesC8& aElementName ) const;
+	TInt SizeOfInteger( const TDesC8& aElementName ) const;
+	TInt SizeOfString( const HBufC8* aValue, const TDesC8& aElementName ) const;
+
+	TInt EntitiesToCharactersL( HBufC8*& aXml, TInt aStartPos, TInt aEndPos ) const;
+	TInt CharactersToEntitiesL( HBufC8*& aXml, TInt aStartPos, TInt aEndPos ) const;
+
+	TBool IsWhitespace( const TDesC8& aText ) const;
+	void LeaveIfNotWhiteSpaceL( const TDesC8& aText ) const;
+
+	TNSmlParserGeneratorError CheckError( const TInt error ) const;
+
+protected:
+	// parsing methods
+	void ParseL( TPtrC8& aXml );
+	void AddToCompleteL( const TPtrC8 aStr );
+	void ResetBufferL( HBufC8*& aBuf ) const;
+	void AddToBufferL( const TText c, HBufC8*& aBuf ) const;
+
+	virtual void NextElementL( TPtrC8 aElement ) =0;
+	virtual void NextDataL( TPtrC8 aData ) =0;
+
+private:
+	TInt ReplaceL( HBufC8*& aText, const TDesC8& aTarget, const TDesC8& aItem, TInt aStartPos, TInt aEndPos ) const;
+	void CheckDatetimeErrorL( const TInt error ) const;
+
+protected:
+	HBufC8* iBuffer;
+	HBufC8* iCompleteBuffer;
+	};
+
+// Folder parser. Implements parsing and generating of Folder xml.
+class CNSmlFolderParser : public CNSmlXmlParser
+	{
+public:
+	IMPORT_C static CNSmlFolderParser* NewL();
+	IMPORT_C static CNSmlFolderParser* NewLC();
+	IMPORT_C virtual ~CNSmlFolderParser();
+
+	IMPORT_C virtual TNSmlParserGeneratorError ParseXml( HBufC8* aXml );
+	IMPORT_C virtual TNSmlParserGeneratorError GenerateXml( HBufC8*& aXml );
+	IMPORT_C virtual TInt CountXmlSizeL() ;
+
+	IMPORT_C void AddExtL( CNSmlExtData* aExt );
+
+protected:
+	virtual void NextElementL( TPtrC8 aElement );
+	virtual void NextDataL( TPtrC8 aData );
+
+protected:
+	
+	// the folder elements (states) in the order they appear in DTD
+	enum TNSmlCurrentFolderElement
+		{
+		EFolderNone = 0,
+		EFolder,
+		EFolderName, 
+		EFolderCreated,
+		EFolderModified,
+		EFolderAccessed,
+		EAttributes,
+		EAttributesH,
+		EAttributesS,
+		EAttributesA,
+		EAttributesD,
+		EAttributesW,
+		EAttributesR,
+		EAttributesX,
+		EFolderRole,
+		EFolderExt,
+		EFolderExtXNam,
+		EFolderExtXVal
+		};
+	
+	// struct used in folder parsing (which members are already set)
+	struct TNSmlSetFolderValues
+		{
+		TNSmlSetFolderValues();
+		void Reset();
+		
+		TBool iFolder;
+		TBool iName;
+		TBool iCreated;
+		TBool iModified;
+		TBool iAccessed;
+		TBool iAttributes;
+		TBool iAttributesH;
+		TBool iAttributesS;
+		TBool iAttributesA;
+		TBool iAttributesD;
+		TBool iAttributesW;
+		TBool iAttributesR;
+		TBool iAttributesX;
+		TBool iRole;
+		TBool iXNam;
+		};
+	
+private:
+	void StartElementStateChangeL( TNSmlCurrentFolderElement aCurrentState, TNSmlCurrentFolderElement aNextState, TBool aIsSet = EFalse );
+	void EndElementStateChangeL( TNSmlCurrentFolderElement aCurrentState, TNSmlCurrentFolderElement aNextState );
+
+	void GenerateFolderXmlL( HBufC8*& aXml );
+	void ConvertIntoEntitiesL();
+
+	CNSmlFolderParser();
+	void ConstructL();
+
+public:
+	HBufC8* iName;
+	TTime iCreated;
+	TTime iModified;
+	TTime iAccessed;
+	TNSmlFolderAttributeData iAttributes;
+	HBufC8* iRole;
+	CNSmlExtDataArray* iExt;
+
+private:
+	TNSmlCurrentFolderElement iCurrentState;
+	TNSmlCurrentFolderElement iLastState;
+	TNSmlSetFolderValues iSetValues;
+
+	CNSmlExtData* iExtData;
+	};
+
+
+
+#endif // __NSMLFOLDERPARSER_H__
--- a/contentctrl_plat/group/bld.inf	Mon Nov 23 14:46:41 2009 +0200
+++ b/contentctrl_plat/group/bld.inf	Thu Dec 17 08:39:39 2009 +0200
@@ -17,7 +17,6 @@
 */
 
 
-
-//#include "../syncml_notifier_roaming_api/group/bld.inf"
-//#include "../sync_service_api/group/bld.inf"
 #include "../oma_ds_presync_plugin_api/group/bld.inf"
+#include "../ds_agenda_handler_plugin_api/group/bld.inf"
+#include "../ds_folder_util_api/group/bld.inf"
--- a/omads/omadsappui/AiwSyncProvider/src/AiwSyncProvider.rss	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AiwSyncProvider/src/AiwSyncProvider.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -19,7 +19,7 @@
 #include <eikon.rh>
 #include "registryinfov2.rh" 
 #include "AiwSyncProvider.rh"
-#include<NSmlDSSync.loc>
+#include<nsmldssync.loc>
 #include "AiwCommon.hrh"
 
 #include <avkon.rsg>
--- a/omads/omadsappui/AspSyncUtil/group/AspSyncUtil.mmp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/group/AspSyncUtil.mmp	Thu Dec 17 08:39:39 2009 +0200
@@ -117,12 +117,11 @@
 //LIBRARY syncmldatafilter.lib
 LIBRARY nsmltransporthandler.lib
 
-LIBRARY	 centralrepository.lib
-
 //#ifdef __SAP_POLICY_MANAGEMENT
-LIBRARY	policyengine.lib
+LIBRARY	policyengine.lib calinterimapi.lib 
 //#endif
-
+LIBRARY     	calencommonutils.lib
+LIBRARY			CalenInterimUtils2.lib
 
 //LIBRARY nsmlxml.lib
 //LIBRARY nsmlwbxml.lib
--- a/omads/omadsappui/AspSyncUtil/inc/AspProfile.h	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/inc/AspProfile.h	Thu Dec 17 08:39:39 2009 +0200
@@ -22,6 +22,7 @@
 // INCLUDES
 #include <e32base.h>
 #include <ecom.h>
+#include <calsession.h>
 
 #include <SyncMLClient.h>    // for RSyncMLSession
 #include <SyncMLClientDS.h>  // for RSyncMLDataSyncProfile
@@ -469,7 +470,9 @@
     	void ReadDataProviderItemL(RSyncMLDataProvider& aProvider, TAspProviderItem& aItem);
 
 
-		
+    	void CreateCalLocalDatabaseL(TDes& aCalName);
+    	void RetrieveCalLocalDatabaseL(TDes& aCalName);
+    	TBool IsCalNameAvailableL(CCalSession& aSession ,TDes& aCalName);
 		
     private:
     
--- a/omads/omadsappui/AspSyncUtil/src/AspAdvanceSettingsDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspAdvanceSettingsDialog.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -176,11 +176,11 @@
 	  {
 	   switch ( aEventType )
         {
-         case EEventItemDoubleClicked:
+        case EEventItemSingleClicked:
               HandleOKL();
               break;
          case EEventEnterKeyPressed :
-         case EEventItemClicked :
+
          case EEventItemDraggingActioned :
          case EEventPenDownOnItem :
         	  if(iEditMode != EDialogModeSettingEnforcement)
--- a/omads/omadsappui/AspSyncUtil/src/AspContentDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspContentDialog.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -546,7 +546,7 @@
 	{
     switch ( aEventType )
         {
-        case EEventItemDoubleClicked:
+        case EEventItemSingleClicked:
             HandleOKL();
             break;
         default:
--- a/omads/omadsappui/AspSyncUtil/src/AspFilterDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspFilterDialog.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -326,7 +326,7 @@
 //
 void CAspFilterDialog::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
 	{
-	if (aEventType == EEventEnterKeyPressed || aEventType == EEventItemDoubleClicked)
+	if (aEventType == EEventEnterKeyPressed || aEventType == EEventItemSingleClicked)
 		{
 		HandleOKL();
 		}
--- a/omads/omadsappui/AspSyncUtil/src/AspProfile.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspProfile.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -21,6 +21,10 @@
 
 #include <SyncMLTransportProperties.h>
 #include <featmgr.h>   // FeatureManager
+#include <calsession.h>
+#include <calcalendarinfo.h>
+#include <e32math.h>
+#include <gdi.h>
 
 #include "AspProfile.h"
 #include "AspResHandler.h"
@@ -28,8 +32,12 @@
 #include "AspDebug.h"
 #include "AspSchedule.h"
 #include <centralrepository.h> //CRepository
-
-
+#include <calenmulticaluids.hrh> // Calendar File Meta Data Properties
+#include <calenmulticalutil.h>
+#include <CalenInterimUtils2.h>
+
+_LIT(KDrive ,"C:");
+_LIT(KCharUnderscore, "_");
 
 /*******************************************************************************
  * class TAspProviderItem
@@ -833,6 +841,33 @@
 			aContentCount = goodContentCount;
 		    return EMandatoryNoRemoteDatabase;
 			}
+       	
+       	if (task.iDataProviderId == KUidNSmlAdapterCalendar.iUid)
+       	    {
+       	    CCalSession* session = CCalSession::NewL();
+       	    CleanupStack::PushL(session);
+       	    TRAPD (err, session->OpenL(task.iClientDataSource));
+       	    if (err == KErrNotFound)
+       	        {
+       	        TInt index = FindProviderIndex(task.iDataProviderId);
+       	        TAspProviderItem& provider = ProviderItem(index);
+       	              	        
+                TBuf<KBufSize> localDatabase;
+       	        TBuf<KBufSize> remoteDatabase;
+       	        TInt syncDirection;
+       	        TBool taskEnabled;
+       	        ReadTaskL(provider.iDataProviderId, localDatabase, remoteDatabase,
+       	           taskEnabled, syncDirection);
+       	        
+       	        //Creating new task creates new calendar local database
+                CreateTaskL(provider.iDataProviderId, localDatabase, remoteDatabase,
+                   taskEnabled, syncDirection);
+                
+                InitAllTasksL();
+                InitDataProvidersL();
+       	        }
+       	    CleanupStack::PopAndDestroy(session);
+       	    }
 
 		goodContentCount++;
 		}
@@ -1150,9 +1185,18 @@
 	RSyncMLTask task;
 	CleanupClosePushL(task);
 	
-	task.CreateL(iProfile->Profile(), aDataProvider.iDataProviderId, 
+	if (aDataProvider.iDataProviderId == KUidNSmlAdapterCalendar.iUid )
+        {
+        TBuf<128> calLocalDb ;
+        CreateCalLocalDatabaseL(calLocalDb);
+        task.CreateL(iProfile->Profile(), aDataProvider.iDataProviderId, 
+                KNullDesC, calLocalDb);
+        }
+    else
+        {
+        task.CreateL(iProfile->Profile(), aDataProvider.iDataProviderId, 
 	              KNullDesC, aDataProvider.iDefaultDataStore);
-	
+        }
 	task.SetEnabledL(aDataProvider.iIsIncludedInSync);
 	task.SetDefaultSyncTypeL(SmlSyncDirection());
 	
@@ -1212,14 +1256,39 @@
 			}
 		else
 			{
-			task.CreateL(iProfile->Profile(), aDataProviderId, 
+			if (aDataProviderId == KUidNSmlAdapterCalendar.iUid )
+                {
+                TBuf<128> calLocalDb ;
+                CreateCalLocalDatabaseL(calLocalDb);
+                task.CreateL(iProfile->Profile(), aDataProviderId, 
+                                              aRemoteDatabase, calLocalDb);
+                }
+            else
+                {
+                task.CreateL(iProfile->Profile(), aDataProviderId, 
 			             aRemoteDatabase, item.iDefaultDataStore);
+                }
 			}
 		}
 	else
 		{
-		task.CreateL(iProfile->Profile(), aDataProviderId, 
-		                                  aRemoteDatabase, aLocalDatabase);
+		if (aDataProviderId == KUidNSmlAdapterCalendar.iUid )
+		    {
+		    TBuf<128> calLocalDb ;
+		    TRAPD(err ,RetrieveCalLocalDatabaseL(calLocalDb));
+		    if (err != KErrNone)
+		        {
+		        CreateCalLocalDatabaseL(calLocalDb);
+		        }
+		    
+		    task.CreateL(iProfile->Profile(), aDataProviderId, 
+		                                  aRemoteDatabase, calLocalDb);
+		    }
+		else
+		    {
+		    task.CreateL(iProfile->Profile(), aDataProviderId, 
+		                                              aRemoteDatabase, aLocalDatabase);
+		    }
 		}
 	
 	task.SetEnabledL(aEnabled);
@@ -1255,6 +1324,213 @@
 	FLOG( _L("CAspContentList::CreateTask END") );
 	}
 
+// -----------------------------------------------------------------------------
+// CAspContentList::CreateTask
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspContentList::CreateCalLocalDatabaseL(TDes& aCalName)
+    {
+            
+    aCalName.Copy(KDrive);
+    
+    TBuf<128> buffer;
+    iProfile->GetName(buffer);
+     
+    CCalSession* calSession = CCalSession::NewL();
+    CleanupStack::PushL(calSession);
+    
+        
+    TInt suffix = 0;
+    TInt suffixLen = 0;
+    TInt delPos = buffer.Length();
+    
+    while (!IsCalNameAvailableL(*calSession ,buffer))
+        {
+        //A db with profile name already exists , try profile_1 ,profile_2 etc..
+        if (!suffix)
+            {
+            buffer.Append(KCharUnderscore);
+            ++delPos;
+            }
+        else
+            {
+            while (suffix/10)
+                {
+                ++suffixLen;
+                }
+            
+            buffer.Delete(delPos ,++suffixLen);
+            suffixLen = 0;
+            }   
+        buffer.AppendNum(++suffix);
+        }
+    
+    TBuf8<128> keyBuff;
+    TUint calValue = 0;
+    CCalCalendarInfo* calinfo = CCalCalendarInfo::NewL();
+    CleanupStack::PushL(calinfo);
+    //Visibility
+    calinfo->SetEnabled(ETrue);
+    
+    calinfo->SetNameL(buffer);
+    calinfo->SetColor(Math::Random());
+    
+    // Set Meta Data Properties
+    // LUID Meta Property
+    keyBuff.Zero();
+    keyBuff.AppendNum( EFolderLUID );
+    calValue = CCalenMultiCalUtil::GetNextAvailableOffsetL();
+    FLOG(_L("CNSmlOviAgendaAdapterPlugin::CreateFolderItemL: nextoffset: '%d'"), calValue);
+    TPckgC<TUint> pckgUidValue( calValue );
+    calinfo->SetPropertyL( keyBuff, pckgUidValue );
+    
+    // Create & Modified Time Meta Property
+    keyBuff.Zero();
+    keyBuff.AppendNum( ECreationTime );
+    TTime time;
+    time.HomeTime();
+    TPckgC<TTime> pckgCreateTimeValue( time );
+    calinfo->SetPropertyL( keyBuff, pckgCreateTimeValue );
+    keyBuff.Zero();
+    keyBuff.AppendNum( EModificationTime );
+    calinfo->SetPropertyL( keyBuff, pckgCreateTimeValue );
+    
+    // Sync Status
+    keyBuff.Zero();
+    keyBuff.AppendNum( ESyncStatus );
+    TBool syncstatus( ETrue );
+    TPckgC<TBool> pckgSyncStatusValue( syncstatus );
+    calinfo->SetPropertyL( keyBuff, pckgSyncStatusValue );
+    
+    // Global UID MetaDataProperty 
+    keyBuff.Zero();
+    keyBuff.AppendNum( EGlobalUUID );
+    CCalenInterimUtils2* interimUtils = CCalenInterimUtils2::NewL();
+    CleanupStack::PushL( interimUtils );
+    HBufC8* guuid = interimUtils->CalFileGlobalUidL();
+    TPtr8 guuidPtr = guuid->Des();
+    CleanupStack::PushL( guuid );
+    calinfo->SetPropertyL( keyBuff, guuidPtr );
+    CleanupStack::PopAndDestroy( guuid );
+    CleanupStack::PopAndDestroy( interimUtils );
+          
+    // Owner Name
+    keyBuff.Zero();
+    keyBuff.AppendNum( EDeviceSyncServiceOwner );
+    TPckgC<TInt> pckgAppUIDValue( KCRUidNSmlDSApp.iUid );    
+    calinfo->SetPropertyL( keyBuff, pckgAppUIDValue );
+
+
+    keyBuff.Zero();
+    keyBuff.AppendNum( EDeviceSyncProfileID );
+    TPckgC<TInt> pckgProfileIdValue( iProfile->ProfileId() );    
+    calinfo->SetPropertyL( keyBuff, pckgProfileIdValue );
+
+    
+    // Create the CalFile
+    HBufC* calfilename = CCalenMultiCalUtil::GetNextAvailableCalFileL();
+    calSession->CreateCalFileL( calfilename->Des(), *calinfo );
+	
+	aCalName.Copy( calfilename->Des() );
+    
+    delete calfilename;
+    
+    CleanupStack::PopAndDestroy(calinfo);
+    CleanupStack::PopAndDestroy(calSession);
+    }
+
+// -----------------------------------------------------------------------------
+// CAspContentList::IsCalNameAvailableL
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CAspContentList::IsCalNameAvailableL(CCalSession& aSession ,TDes& aCalName)
+    {
+    CCalSession* vCalSubSession = NULL;  
+    CDesCArray* calfilearr = aSession.ListCalFilesL();
+    
+    for(TInt i = 0; i < calfilearr->Count(); i++)
+        {
+        vCalSubSession = CCalSession::NewL(aSession);
+        CleanupStack::PushL(vCalSubSession);
+        vCalSubSession->OpenL(calfilearr->MdcaPoint(i));
+    
+        CCalCalendarInfo* caleninfo = vCalSubSession->CalendarInfoL(); 
+        
+        if (aCalName == caleninfo->NameL())
+            {
+            delete caleninfo;
+            delete calfilearr;
+            CleanupStack::PopAndDestroy(vCalSubSession);
+            return EFalse;
+            }
+    
+        delete caleninfo;    
+        CleanupStack::PopAndDestroy(vCalSubSession); 
+        }
+    delete calfilearr;
+    return ETrue;
+    
+    }
+// -----------------------------------------------------------------------------
+// CAspContentList::RetrieveCalLocalDatabaseL
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspContentList::RetrieveCalLocalDatabaseL(TDes& aCalName)
+    {
+      
+    FLOG(_L("CAspContentList::RetrieveCalLocalDatabaseL: BEGIN"));   
+      
+    TBuf8<128> keyBuff;
+    CCalSession* vCalSession = NULL;
+    CCalSession* vCalSubSession = NULL;   
+    
+    vCalSession = CCalSession::NewL();
+    CleanupStack::PushL(vCalSession);
+    
+    CDesCArray* calfilearr = vCalSession->ListCalFilesL();            
+    
+    TBool dbFound = EFalse;
+    for(TInt i = 0; i < calfilearr->Count(); i++)
+        {
+        vCalSubSession = CCalSession::NewL(*vCalSession);
+        CleanupStack::PushL(vCalSubSession);
+        vCalSubSession->OpenL(calfilearr->MdcaPoint(i));
+        
+        CCalCalendarInfo* caleninfo = vCalSubSession->CalendarInfoL(); 
+        CleanupStack::PushL(caleninfo);
+        
+        TInt profileId;
+        keyBuff.Zero();
+        keyBuff.AppendNum( EDeviceSyncProfileID );
+        TPckgC<TInt> intBuf(profileId);
+        TRAP_IGNORE(intBuf.Set(caleninfo->PropertyValueL(keyBuff)));
+                
+        profileId = intBuf();
+        
+        if ( profileId == iProfile->ProfileId())
+            {
+            aCalName.Append(caleninfo->FileNameL());
+            dbFound = ETrue;
+            CleanupStack::PopAndDestroy(caleninfo);   
+            CleanupStack::PopAndDestroy(vCalSubSession);
+            break;
+            }
+        CleanupStack::PopAndDestroy(caleninfo);    
+        CleanupStack::PopAndDestroy(vCalSubSession); 
+        }
+		
+		if( dbFound == EFalse )
+			{
+			delete calfilearr; 
+			User::Leave( KErrNotFound );
+			}
+ 
+    delete calfilearr;     
+    CleanupStack::PopAndDestroy(vCalSession);
+    }
 
 // -----------------------------------------------------------------------------
 // CAspContentList::ReadTaskL
--- a/omads/omadsappui/AspSyncUtil/src/AspProfileDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspProfileDialog.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -190,11 +190,11 @@
 	  {
 	   switch ( aEventType )
         {
-         case EEventItemDoubleClicked:
+        case EEventItemSingleClicked:
               HandleOKL();
               break;
          case EEventEnterKeyPressed :
-         case EEventItemClicked :
+         
          case EEventItemDraggingActioned :
          case EEventPenDownOnItem :
         	  if(iEditMode != EDialogModeSettingEnforcement)
--- a/omads/omadsappui/AspSyncUtil/src/AspProfileWizardDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspProfileWizardDialog.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -260,7 +260,7 @@
 	{
 	  	switch(aEventType)
 		{  
-			case EEventItemClicked:
+		   case EEventItemSingleClicked:
        			 this->ProcessCommandL(EAknSoftkeySelect);	
         		 break;
 		  	default:
@@ -531,7 +531,7 @@
 	  	switch(aEventType)
 	
 		{   
-			case EEventItemClicked:
+		  case EEventItemSingleClicked:
        		 	 index=aListBox->CurrentItemIndex();
        		 	 selectableItem = (*iSelectionItemList)[index];
        		 	 if(selectableItem->SelectionStatus())
--- a/omads/omadsappui/AspSyncUtil/src/AspScheduleDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspScheduleDialog.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -204,11 +204,10 @@
 	  {
 	   switch ( aEventType )
         {
-         case EEventItemDoubleClicked:
+         case EEventItemSingleClicked:
               HandleOKL();
               break;
          case EEventEnterKeyPressed :
-         case EEventItemClicked :
          case EEventItemDraggingActioned :
          case EEventPenDownOnItem :
               break;
@@ -2785,7 +2784,7 @@
 	  	switch(aEventType)
 	
 		{   
-			case EEventItemClicked:
+			 case EEventItemSingleClicked:
        		 	 index=aListBox->CurrentItemIndex();
        		 	 selectableItem = (*iSelectionItemList)[index];
        		 	 if(selectableItem->SelectionStatus())
--- a/omads/omadsappui/AspSyncUtil/src/AspSettingDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspSettingDialog.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -1614,16 +1614,17 @@
 		
     TAspParam param(iApplicationId, iSyncSession);
 	CAspProfile* profile = CAspProfile::NewLC(param);
-    profile->OpenL(iCurrentProfileId, CAspProfile::EOpenRead,
+    profile->OpenL(iCurrentProfileId, CAspProfile::EOpenReadWrite,
                                       CAspProfile::EAllProperties);
     
     
     TInt mandatoryConnectionData = CAspProfile::CheckMandatoryConnData(profile);
-    CleanupStack::PopAndDestroy(profile);
-	
+    iContentList->SetProfile(profile);	
 	TInt contentCount = 0;
 	TInt mandatoryContentData = iContentList->CheckMandatoryDataL(contentCount);
-	
+	iContentList->SetProfile(NULL);
+	CleanupStack::PopAndDestroy(profile);
+
 	if (mandatoryConnectionData != EMandatoryOk)
 		{
 		return mandatoryConnectionData;
@@ -2406,7 +2407,7 @@
 	   {
 	   	 switch(aEventType)
 		{
-			case EEventItemClicked :
+			case EEventItemSingleClicked :
 			     HandleOKL();
 			     break;
 			default:
--- a/omads/omadsappui/AspSyncUtil/src/AspSettingViewDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspSettingViewDialog.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -181,7 +181,7 @@
     switch ( aEventType )
         {
         case EEventEnterKeyPressed:
-        case EEventItemDoubleClicked:
+        case EEventItemSingleClicked:
             HandleOKL();
             break;
         default:
--- a/omads/omadsappui/AspSyncUtil/src/AspSyncUtil.rss	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/AspSyncUtil/src/AspSyncUtil.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -25,10 +25,10 @@
 #include "AspSyncUtil.rh"
 
 // aspsyncutil uses sync app .loc file
-#include<NSmlDSSync.loc>
+#include<nsmldssync.loc>
 
 // For profiles sync application brings
-#include<NSmlSyncProfiles.loc>
+#include<nsmlsyncprofiles.loc>
 
 // common avkon strings
 #include<avkon.loc>
@@ -1457,7 +1457,7 @@
     {
     items=
         {
-		MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; },
+		MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; flags = EEikMenuItemAction;},
 		
 #ifdef __SERIES60_HELP				
     	MENU_ITEM { command=EAknCmdHelp; txt=qtn_options_help; },
@@ -1524,7 +1524,7 @@
     {
     items=
         {
-		MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; },
+		MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; flags = EEikMenuItemAction;},
 		
 #ifdef __SERIES60_HELP		
     	MENU_ITEM { command=EAknCmdHelp; txt=qtn_options_help; },
@@ -1538,7 +1538,7 @@
     {
     items=
         {
-        MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; },
+        MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; flags = EEikMenuItemAction; },
         
 #ifdef __SERIES60_HELP      
         MENU_ITEM { command=EAspMenuCmdHelp; txt=qtn_options_help; },
@@ -1626,7 +1626,7 @@
     {
     items=
         {
-		MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; },
+		MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; flags = EEikMenuItemAction; },
 		
 #ifdef __SERIES60_HELP		
     	MENU_ITEM { command=EAknCmdHelp; txt=qtn_options_help; },
@@ -1678,7 +1678,7 @@
     {
     items=
         {
-		MENU_ITEM { command=EAspMenuCmdSelect; txt=qtn_sml_cmd_select; },
+		MENU_ITEM { command=EAspMenuCmdSelect; txt=qtn_sml_cmd_select; flags = EEikMenuItemAction;},
 		MENU_ITEM { command=EAspMenuCmdView; txt=qtn_sml_cmd_view_contents; },
 		
 #ifdef __SERIES60_HELP		
@@ -1735,7 +1735,7 @@
     {
     items=
         {
-		MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change; },
+		MENU_ITEM { command=EAspMenuCmdChange; txt=qtn_options_change;flags = EEikMenuItemAction; },
 		
 #ifdef __SERIES60_HELP		
     	MENU_ITEM { command=EAknCmdHelp; txt=qtn_options_help; },
@@ -1789,7 +1789,7 @@
     {
     items=
         {
-		MENU_ITEM { command=EAspMenuCmdOpen; txt=qtn_options_open; },
+		MENU_ITEM { command=EAspMenuCmdOpen; txt=qtn_options_open; flags = EEikMenuItemAction; },
 		
 #ifdef __SERIES60_HELP		
     	MENU_ITEM { command=EAknCmdHelp; txt=qtn_options_help; },
@@ -1920,8 +1920,8 @@
 	{
 	items =
 		{
-		MENU_ITEM { command=EAspMenuCmdMark; 			txt=qtn_sml_cmd_mark; },
-		MENU_ITEM { command=EAspMenuCmdUnmark; 			txt=qtn_sml_cmd_unmark; },
+		MENU_ITEM { command=EAspMenuCmdMark; 			txt=qtn_sml_cmd_mark; flags = EEikMenuItemAction;  },
+		MENU_ITEM { command=EAspMenuCmdUnmark; 			txt=qtn_sml_cmd_unmark; flags = EEikMenuItemAction; },
 		MENU_ITEM { command=EAspMenuCmdSync;           txt=qtn_sml_cmd_sync; },
 		MENU_ITEM { command=EAspMenuCmdNewSet;         txt=qtn_sml_cmd_create_new; },
 		MENU_ITEM { command=EAspMenuCmdEdit;           txt=qtn_sml_cmd_edit; },
--- a/omads/omadsappui/OmaDsAppUiPlugin/data/NsmlDSGSPluginResource.rss	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/OmaDsAppUiPlugin/data/NsmlDSGSPluginResource.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -25,7 +25,7 @@
 #include <avkon.loc>
 #include <data_caging_paths_strings.hrh>
 
-#include<NSmlDSSync.loc>
+#include<nsmldssync.loc>
 
 RESOURCE RSS_SIGNATURE { }
 
Binary file omads/omadsappui/help/data/xhtml.zip has changed
--- a/omads/omadsappui/help/inc/ds.hlp.hrh	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/help/inc/ds.hlp.hrh	Thu Dec 17 08:39:39 2009 +0200
@@ -1,10 +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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+*
+*/
+	
 //
-// ds.hlp.hrh
-// 
-
-//
-// File generated by CSXHelp Utilities on 2009-05-26
-// 
+// ds.hlp.hrh generated by CSXHelp Utilities.
+//           
 
 #ifndef __DS_HLP_HRH__
 #define __DS_HLP_HRH__
@@ -15,6 +28,7 @@
 _LIT(KDS_HLP_SETTINGS_CNT, "DS_HLP_SETTINGS_CNT"); // 
 _LIT(KDS_HLP_SETTINGS_NOTES, "DS_HLP_SETTINGS_NOTES"); // 
 _LIT(KDS_HLP_SETTINGS_SMS, "DS_HLP_SETTINGS_SMS"); // 
+_LIT(KDS_HLP_SETTINGS_SYNCML, "DS_HLP_SETTINGS_SYNCML"); // 
 _LIT(KDS_HLP_SETTINGS_BOOKMARKS, "DS_HLP_SETTINGS_BOOKMARKS"); // 
 _LIT(KDS_HLP_AUTO_SYNC_SETTINGS, "DS_HLP_AUTO_SYNC_SETTINGS"); // 
 _LIT(KDS_HLP_SETTINGS_MMS, "DS_HLP_SETTINGS_MMS"); // 
--- a/omads/omadsappui/ui/src/NSmlDSSync.rss	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/ui/src/NSmlDSSync.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -24,7 +24,7 @@
 //  INCLUDES
 
 #include "NSmlDSSync.hrh"
-#include<NSmlDSSync.loc>
+#include<nsmldssync.loc>
 
 #include <eikon.rh>
 #include <avkon.rsg>
--- a/omads/omadsappui/ui/src/NSmlDSSyncAppUi.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsappui/ui/src/NSmlDSSyncAppUi.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -45,7 +45,7 @@
     const TInt KBufSize128 = 128;
     const TInt KModeDialogNoWait = 4;
     
-    BaseConstructL(EAknEnableSkin | EAknDisableHighlightAnimation | EAknEnableMSK);
+    BaseConstructL(EAknEnableSkin | EAknDisableHighlightAnimation | EAknEnableMSK | EAknSingleClickCompatible);
 
 	TBool flag = CEikonEnv::Static()->StartedAsServerApp() ;
 	if (flag)
--- a/omads/omadsextensions/adapters/agenda/bld/nsmlagendadataprovider.mmp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/agenda/bld/nsmlagendadataprovider.mmp	Thu Dec 17 08:39:39 2009 +0200
@@ -57,14 +57,14 @@
 LANGUAGE_IDS
 END 
 
-START RESOURCE NSmlAgendaDataStore_1_2.rss
-HEADER
-TARGETPATH	RESOURCE_FILES_DIR
-LANGUAGE_IDS
-END 
-
+//RD_MULTICAL
+LIBRARY 	gdi.lib
+//RD_MULTICAL
 LIBRARY		ECom.lib euser.lib efsrv.lib estor.lib smlstoreformat.lib
 LIBRARY		nsmldebug.lib smldataprovider.lib nsmldatamod.lib
 LIBRARY		nsmlchangefinder.lib wbxmllib.lib bafl.lib sysutil.lib
-LIBRARY		CalInterimAPI.lib msgs.lib CalenImp.lib CalenInterimUtils2.lib
+LIBRARY		CalInterimAPI.lib msgs.lib CalenImp.lib CalenInterimUtils2.lib calencommonutils.lib
 LIBRARY 	versit.lib
+LIBRARY 	charconv.lib 
+LIBRARY 	flogger.lib
+LIBRARY 	centralrepository.lib
--- a/omads/omadsextensions/adapters/agenda/inc/nsmlagendadataprovider.h	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/agenda/inc/nsmlagendadataprovider.h	Thu Dec 17 08:39:39 2009 +0200
@@ -20,8 +20,8 @@
 #define __NSMLAGENDADATAPROVIDER_H__
 
 //  INCLUDES
+#include <SmlDataFormat.h>
 #include "nsmlagendadatastore.h"
-#include <SmlDataFormat.h>
 
 // CONSTANTS
 _LIT( KNSmlDSAgendaDataStoreRsc_1_1_2,"z:NSMLAGENDADATASTORE_1_1_2.RSC" );
@@ -133,21 +133,12 @@
         * By default Symbian 2nd phase constructor is private.
         */
 	    void ConstructL();
-	    
-        /**
-        * Returns data providers own supported features in a store format class.
-        */
-	    CSmlDataStoreFormat* DoOwnStoreFormatL();
 
     private:
         // Agenda data store
 	    CNSmlAgendaDataStore* iAgnDataStore;
-        // String ool
-	    RStringPool iStringPool;
         // Data store format
 	    CSmlDataStoreFormat* iDSFormat;
-        // A handle to a file server session
-	    RFs iSession;
 	    // Filter array
 	    RPointerArray<CSyncMLFilter> iFilterArray;
 	};
--- a/omads/omadsextensions/adapters/agenda/inc/nsmlagendadatastore.h	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/agenda/inc/nsmlagendadatastore.h	Thu Dec 17 08:39:39 2009 +0200
@@ -21,10 +21,6 @@
 
 
 //  INCLUDES
-#include "nsmlconstants.h"
-#include "nsmlchangefinder.h"
-#include "NSmlDataModBase.h"
-#include "nsmlagendadefines.hrh"
 #include <calentry.h>
 #include <calsession.h> 
 #include <caldataexchange.h> 
@@ -38,6 +34,11 @@
 #include <CalenExporter.h>
 #include <CalenInterimUtils2.h>
 #include <versittls.h>
+#include <nsmlagendaadapterhandler.h>
+#include "nsmlconstants.h"
+#include "nsmlchangefinder.h"
+#include "NSmlDataModBase.h"
+#include "nsmlagendadefines.hrh"
 
 // CONSTANTS
 const TInt KNSmlAgendaCompressLimit        = 20;
@@ -48,15 +49,33 @@
 const TInt KNSmlCompactAfterChanges        = 30;
 const TInt KNSmlDefaultStoreNameMaxSize    = 256;
 const TInt KNSmlItemDataExpandSize         = 1024;
+const TUint KNSmlAgendaAdapterUid    	   = 0x101F6DDD;
+const TUint KNSmlAgendaAdapterStreamUid    = 0x101F6DDD+0x10009d8d;
 _LIT( KNSmlDriveC, "C" );
 _LIT( KNSmlAgendaStoreNameForDefaultDB, "Calendar" );
-_LIT8( KNSmlMRUtilitiesEComPlugInUID,   "AgnEntryUi" );
+_LIT( KNSmlAgendaFileNameForDefaultDB, "c:calendar" );
 _LIT8( KNSmlVersitTokenRecurrenceID, 	"RECURRENCE-ID");
 _LIT8( KNSmlVersitTokenXRecurrenceID, 	"X-RECURRENCE-ID");
 _LIT8(KNSmlVersitTokenGeoID,"GEO");
 
+//RD_MULTICAL
+// MIME content type for folder item
+_LIT8( KNSmlContentTypeFolder, "application/vnd.omads-folder+xml" );
+// Email folder item type version
+_LIT8( KNSmlContentTypeFolderVersion, "1.2" );
+_LIT8( KNSmlDefaultOpaqueData, "Default" );
+
+const TInt KArrayGranularity    = 30;
+const TInt KBuffLength = 128;
 
 // DATA TYPES
+enum TNSmlDataMimeType
+    {
+    ENSmlNone = 0,
+    ENSmlCalendar,
+    ENSmlFolder
+    };
+//RD_MULTICAL
 enum TNSmlDataStoreStatus
 	{
 	ENSmlClosed = 0,
@@ -72,6 +91,8 @@
 	ENSmlICal,
 	ENSmlNotSet
 	};
+// FORWARD CLASS DECLARATIONS
+class CNSmlAgendaAdapterLog;
 
 // CLASS DECLARATIONS
 // ----------------------------------------------------------------------------
@@ -174,6 +195,20 @@
         */
 	    const TDesC& DoGetDefaultFileNameL() const;
 	    
+	    /**
+	    * Providing DataStore access to CNSmlDataProvider Class
+	    */
+	    CSmlDataStoreFormat* StoreFormatL();
+	    
+	    /**
+        * Check existance of CalFile with the given ProfileID associativity
+        */
+	    TBool IsCalFileAvailableL( TInt aProfileId, CDesCArray* aCalFileArr );
+	    
+	    /**
+        * Create CalFile with the attributes provided
+        */
+	    HBufC* CreateCalFileL( HBufC* aProfileName, TInt aProfileId );	    
     private:
 
         /**
@@ -473,12 +508,21 @@
 	    /**
 		* Completes an item operation started in DoCreateItemL().
 		*/
-	    void DoCommitCreateItemL();
+	    void DoCommitCreateCalItemL();
 	    
 	    /**
 		* Completes an item operation started in DoReplaceItemL().
 		*/
-	    void DoCommitReplaceItemL();
+	    void DoCommitReplaceCalItemL();
+	    /**
+       * Completes an Folder item operation started in DoCreateItemL().
+       */
+       void DoCommitCreateFolderItemL();
+       
+       /**
+       * Completes an Folder item operation started in DoReplaceItemL().
+       */
+       void DoCommitReplaceFolderItemL();
 	    
 	    /**
 		* Gets property from old item.
@@ -498,7 +542,51 @@
 		*/
 	    void SetPropertiesToDataL( HBufC8*& aValue,
 	                               const TDesC8& aProperty );
+	    
+		/**
+        * Method to determine the MIME type, provided the UID
+        */
+		void DataMimeType( TSmlDbItemUid aUid );
+		
+		/**
+        * Get All the AdapterHandler instance
+        */
+	    void ListAllAgendaPluginAdaptersL();
+	    
+	    /**
+        * Get the AdapterHandler instance
+        */
+	    void AgendaAdapterHandlerL();
+	    
+	    /**
+        * Retrieve the CalendarFile and associated entries ID
+        */
+	    void SynchronizableCalEntryIdsL( RArray<TCalLocalUid>& aUidArray );	    
+
+        /**
+        * Method to retrieve the Id of the Calendar Entry
+        */
+        void GetCalendarEntryIdL( TCalLocalUid& aParentId, TCalLocalUid& aCalId ) const;
         
+        /**
+        * Open the Store if present else create one to work upon
+        */
+        void OpenStoreL();
+        
+        /**
+        * Filters out the non-active items from the given array
+        */
+        CNSmlDataItemUidSet* ActiveItemsL( CNSmlDataItemUidSet& aUids ) const;
+        
+        /**
+        * Populate iCommittedUidArr from the Stream
+        */
+        void ExternalizeCommittedUidL() const;
+        
+        /**
+        * Write the contents of iCommittedUidArr to the Stream
+        */
+        void InternalizeCommittedUidL() const;
 
     private: // Data
         // Key
@@ -533,8 +621,10 @@
 	    TInt iServerMaxObjectSize;
         // Name of the opened database
 	    HBufC* iOpenedStoreName;
+	    // Name of the received storename
+	    HBufC* iReceivedStoreName;
         // Default name of the database
-	    HBufC* iDefaultStoreName;
+	    HBufC* iDefaultStoreFileName;
         // Opened database ID
 	    TInt64 iOpenedStoreId;
         // Item's ID that is to be added
@@ -555,23 +645,111 @@
 	    CNSmlDataItemUidSet* iReplacedUids;
         // Uids of moved items
 	    CNSmlDataItemUidSet* iMovedUids;
-        // Session to calendar server
+        /*// Session to calendar server
 	    CCalSession* iVCalSession;
         // Internal progress notifier
-	    CNSmlAgendaProgressview* iAgendaProgressview;
+	    CNSmlAgendaProgressview* iAgendaProgressview;*/
 	    // Interim Utility
 	    CCalenInterimUtils2* iInterimUtils;
 	    
-        // Importer
+        /*// Importer
 	    CCalenImporter* iImporter;
 	    // Exporter
 	    CCalenExporter* iExporter;
 	    
 	    // Entry view
         CCalEntryView* iEntryView;
-        CVersitTlsData *iVersitTlsData; // for better performance
+        CVersitTlsData *iVersitTlsData; // for better performance*/
+        // Flag is Hierarchical Sync is supported
+		TBool iIsHierarchicalSyncSupported;
+		// Mime Type of Calendar Item
+		TNSmlDataMimeType iDataMimeType;
+		// Parent Id of the Calendar Item
+		TInt iParentItemId;
+		// Offset value
+		TUint iCalOffsetVal;
+		// Offset memory values of the Calendar DB
+		CArrayFixFlat<TUint>* iCalOffsetArr;
+		// List of committed UIDs
+		CNSmlDataItemUidSet* iCommittedUidArr;
+		// Agenda Adapter Handler Instance
+		RPointerArray<CNSmlAgendaAdapterHandler>  iAgendaPluginAdapters;  
+		// Agenda Adapter Handler Instance
+        CNSmlAgendaAdapterHandler* iAgendaAdapterHandler;
+        // SyncRelationship instance
+        CNSmlAgendaAdapterLog* iAgendaAdapterLog;
 	};
 
+// ----------------------------------------------------------------------------
+// CNSmlAgendaDataStoreUtil provides services to cope with maintaining calendar 
+// API's used for database access
+// @lib nsmlagendadataprovider.dll
+// ----------------------------------------------------------------------------
+NONSHARABLE_CLASS(CNSmlAgendaDataStoreUtil) : public CBase
+    {
+    public:
+        /**
+        * Two-phased constructor.
+        */
+        static CNSmlAgendaDataStoreUtil* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CNSmlAgendaDataStoreUtil();
+      
+    private:
+        /**
+        * C++ default constructor.
+        */
+        CNSmlAgendaDataStoreUtil();
+        
+    public: // New Functions
+        /**
+        * Initialize Calendar APIs for database access using the provided name and id
+        */
+        void InitializeCalAPIsL( HBufC* aFileName, TSmlDbItemUid aUid = NULL );
+       
+    
+    public: // Data
+        CCalSession* iCalSession;
+        CCalenExporter* iExporter;
+        CCalenImporter* iImporter;
+        CNSmlAgendaProgressview* iProgressView;
+        CCalEntryView* iEntryView;
+        CCalEntry* iEntry;
+        HBufC8* iFileName;
+        TSmlDbItemUid iUid;
+    };
+
+// ----------------------------------------------------------------------------
+// CNSmlAgendaAdapterLog provides services know active Sync 
+// API's used for database access
+// @lib nsmlagendadataprovider.dll
+// ----------------------------------------------------------------------------
+NONSHARABLE_CLASS(CNSmlAgendaAdapterLog) : public CBase
+    {
+    public:
+        /**
+        * Two-phased constructor.
+        */
+        static CNSmlAgendaAdapterLog* NewL( MSmlSyncRelationship& aSyncRelationship );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CNSmlAgendaAdapterLog();
+      
+    private:
+        /**
+        * C++ default constructor.
+        */
+        CNSmlAgendaAdapterLog( MSmlSyncRelationship& aSyncRelationship );
+    
+    public: // Data
+        MSmlSyncRelationship& iSyncRelationship;
+        
+    };
 #endif // __NSMLAGENDADATASTORE_H__
             
 // End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/adapters/agenda/inc/nsmlagendadebug.h	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,62 @@
+/*
+* 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: Debug macros definition and constant declaration 
+*
+*/
+
+
+
+#ifndef NSMLDSAGENDASYNC__DEBUG_H
+#define NSMLDSAGENDASYNC__DEBUG_H
+
+#include <e32svr.h>
+#include <e32std.h>
+#include <f32file.h>
+#include <flogger.h>
+
+_LIT(KLogFile,"Agenda.txt");
+_LIT(KLogDirFullName,"c:\\logs\\");
+_LIT(KLogDir,"MultiCalDB");
+
+// Declare the FPrint function
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+    }
+
+// ===========================================================================
+#ifdef __WINS__     // File logging for WINS
+// ===========================================================================
+#define FLOG(arg...)   { FPrint(arg); }
+//#define FLOG(a) { RDebug::Print(a);  }
+#define FTRACE(a) { a; }
+// ===========================================================================
+#else               // RDebug logging for target HW
+// ===========================================================================
+//#define FLOG(arg...) { RDebug::Print(arg);  }
+#define FLOG(arg...)   { FPrint(arg); }
+#define FTRACE(a) { a; }
+#endif //__WINS__
+
+// ===========================================================================
+#else // // No loggings --> Reduced binary size
+// ===========================================================================
+#define FLOG(arg...)
+#define FTRACE(a)
+
+#endif // NSMLDSSYNC__DEBUG_H
+
+// End of File
--- a/omads/omadsextensions/adapters/agenda/src/101F6DD7.rss	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/agenda/src/101F6DD7.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -16,7 +16,7 @@
 */
 
 
-#include<101F6DD7.loc>
+#include<101f6dd7.loc>
 
 #include <registryinfo.rh>
 #include <nsmldsconstants.h>
--- a/omads/omadsextensions/adapters/agenda/src/NSmlAgendaDataStore_1_2.rss	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,866 +0,0 @@
-CHARACTER_SET UTF8/*
-* 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:  Resource data for DS agenda adapter
-*
-*/
-
-
-#include <bldvariant.hrh>
-#include "SmlDataFormat.rh"
-#include "SmlDataFormat.hrh"
-#include "nsmlagendadefines.hrh"
-
-RESOURCE SML_DATA_STORE_FORMAT nsml_agenda_data_store
-	{
-	version=1;
-	display_name="Calendar";
-	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-vcalendar";
-			mime_ver="1.0";
-			properties=
-				{
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Begin";
-					name="BEGIN";
-					data_type="";
-					enum_values={"VCALENDAR","VEVENT","VTODO"};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="End";
-					name="END";
-					data_type="";
-					enum_values={"VCALENDAR","VEVENT","VTODO"};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Version";
-					name="VERSION";	
-					data_type="";
-					enum_values={"1.0"};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Uid";
-					name="UID";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Summary";
-					name="SUMMARY";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Description";
-					name="DESCRIPTION";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Dstart";
-					name="DTSTART";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Dtend";
-					name="DTEND";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Aalarm";
-					name="AALARM";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params= {
-							SML_DATA_PROPERTY_PARAM
-								{
-								version=1;
-								display_name="Alarm type";
-								name="TYPE";
-								data_type="";
-								enum_values={};
-								}
-							};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Class";
-					name="CLASS";
-					data_type="";
-					enum_values={"PUBLIC","PRIVATE","CONFIDENTIAL"};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Location";
-					name="LOCATION";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Last Modified";
-					name="LAST-MODIFIED";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Priority";
-					name="PRIORITY";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Status";
-					name="STATUS";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Rrule";
-					name="RRULE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Completed";
-					name="COMPLETED";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Dcreated";
-					name="DCREATED";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Due";
-					name="DUE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="ExDate";
-					name="EXDATE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Categories";
-					name="CATEGORIES";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Sequence";
-					name="SEQUENCE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-		                SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="TZ";
-					name="TZ";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-         		       SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Daylight";
-					name="DAYLIGHT";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="RDate";
-					name="RDATE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Attendee";
-					name="ATTENDEE";
-					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={"ROLE", "STATUS", "X-CN", "X-ROLE", "X-SENTBY", "X-STATUS"};
-								}
-							};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Recurrence";
-					name="X-RECURRENCE-ID";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Method";
-					name="X-METHOD";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-                		SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Local UID";
-					name="X-SYMBIAN-LUID";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-                		SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Time stamp";
-					name="X-SYMBIAN-DTSTAMP";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="X-Epoc Agenda Entry Type";
-					name="X-EPOCAGENDAENTRYTYPE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="GEO Address";
-					name="GEO";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					}
-				};
-			field_level=0;
-			}
-#ifdef __NSML_USE_ICAL_FEATURE
-			,
-		SML_MIME_FORMAT
-			{
-			version=1;
-			mime_type="text/calendar";
-			mime_ver="2.0";
-			properties=
-				{
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Begin";
-					name="BEGIN";
-					data_type="";
-					enum_values={"VCALENDAR","VEVENT","VTODO","STANDARD","DAYLIGHT","VTIMEZONE","VALARM"};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="End";
-					name="END";
-					data_type="";
-					enum_values={"VCALENDAR","VEVENT","VTODO","STANDARD","DAYLIGHT","VTIMEZONE","VALARM"};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Version";
-					name="VERSION";	
-					data_type="";
-					enum_values={"2.0"};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Uid";
-					name="UID";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Summary";
-					name="SUMMARY";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Description";
-					name="DESCRIPTION";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Dstart";
-					name="DTSTART";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Dtend";
-					name="DTEND";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Aalarm";
-					name="AALARM";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params= {
-							SML_DATA_PROPERTY_PARAM
-								{
-								version=1;
-								display_name="Alarm type";
-								name="TYPE";
-								data_type="";
-								enum_values={};
-								}
-							};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Class";
-					name="CLASS";
-					data_type="";
-					enum_values={"PUBLIC","PRIVATE","CONFIDENTIAL"};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Location";
-					name="LOCATION";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Last Modified";
-					name="LAST-MODIFIED";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Priority";
-					name="PRIORITY";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Status";
-					name="STATUS";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Recurrence-Id";
-					name="RECURRENCE-ID";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Rrule";
-					name="RRULE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Sequence";
-					name="SEQUENCE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Method";
-					name="METHOD";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="ATTENDEE";
-					name="ATTENDEE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Categories";
-					name="CATEGORIES";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Organizer";
-					name="ORGANIZER";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Time stamp";
-					name="DTSTAMP";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Completed";
-					name="COMPLETED";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Created";
-					name="CREATED";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="ExDate";
-					name="EXDATE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="RDate";
-					name="RDATE";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Product ID";
-					name="PRODID";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Timezone ID";
-					name="TZID";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Timezone OFFSET from";
-					name="TZOFFSETFROM";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Timezone OFFSET to";
-					name="TZOFFSETTO";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Alarm action";
-					name="ACTION";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="Alarm trigger";
-					name="TRIGGER";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					},
-				SML_DATA_PROPERTY
-					{
-					version=1;
-					display_name="GEO Address";
-					name="GEO";
-					data_type="";
-					enum_values={};
-					flags=0;
-					max_size=256;
-					max_occur=0;
-					params={};
-					}
-				};
-			field_level=0;
-			}
-#endif // __NSML_USE_ICAL_FEATURE
-		};
-#ifdef __NSML_USE_ICAL_FEATURE
-	mime_format_tx_pref=1;     // Preferred index for tx
-	mime_format_rx_pref=1;     // Preferred index for rx
-#else // __NSML_USE_ICAL_FEATURE
-  mime_format_tx_pref=0;     // Preferred index for tx
-	mime_format_rx_pref=0;     // Preferred index for rx
-#endif // __NSML_USE_ICAL_FEATURE
-	folder_properties={};
-	filter_capabilities={};
-	max_size=0; 	// no limit
-	max_items=0; 	// no limit
-	flags=0;
-	}
-            
-// End of File
--- a/omads/omadsextensions/adapters/agenda/src/nsmlagendadataprovider.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/agenda/src/nsmlagendadataprovider.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -17,21 +17,21 @@
 
 
 // INCLUDE FILES
-#include "nsmlagendadataprovider.h"
-#include "nsmlagendadatastore.h"
-#include "nsmldebug.h"
-#include "nsmldsimpluids.h"
 #include <SmlDataProvider.h>
 #include <ecom.h>
 #include <barsc.h>
 #include <bautils.h>
-#include <NSmlAgendaDataStore_1_1_2.rsg>
-#include <NSmlAgendaDataStore_1_2.rsg>
+#include <nsmlagendadatastore_1_1_2.rsg>
 #include <SmlDataFormat.h>
 #include <implementationproxy.h>
 #include <data_caging_path_literals.hrh>
 #include <e32property.h>
 #include <DataSyncInternalPSKeys.h>
+#include <nsmldebug.h>
+#include "nsmlagendadataprovider.h"
+#include "nsmlagendadatastore.h"
+#include "nsmlagendadebug.h"
+#include "nsmldsimpluids.h"
 
 // ====================================== MEMBER FUNCTIONS ========================================
 
@@ -43,8 +43,8 @@
 //
 CNSmlAgendaDataProvider::CNSmlAgendaDataProvider()
 	{
-	_DBG_FILE("CNSmlAgendaDataProvider::CNSmlAgendaDataProvider(): BEGIN");
-	_DBG_FILE("CNSmlAgendaDataProvider::CNSmlAgendaDataProvider(): END");
+	FLOG(_L("CNSmlAgendaDataProvider::CNSmlAgendaDataProvider(): BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::CNSmlAgendaDataProvider(): END"));
 	}
 
 // ------------------------------------------------------------------------------------------------
@@ -54,11 +54,9 @@
 //
 void CNSmlAgendaDataProvider::ConstructL( )
 	{
-	_DBG_FILE("CNSmlAgendaDataProvider::NewL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::NewL: BEGIN"));
 	iAgnDataStore = CNSmlAgendaDataStore::NewL();
-	iStringPool.OpenL();
-	User::LeaveIfError( iSession.Connect() );
-	_DBG_FILE("CNSmlAgendaDataProvider::NewL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::NewL: END"));
 	}
 
 // ------------------------------------------------------------------------------------------------
@@ -68,12 +66,12 @@
 //
 CNSmlAgendaDataProvider* CNSmlAgendaDataProvider::NewL()
 	{
-	_DBG_FILE("CNSmlAgendaDataProvider::NewL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::NewL: BEGIN"));
 	CNSmlAgendaDataProvider* self = new ( ELeave ) CNSmlAgendaDataProvider();
 	CleanupStack::PushL( self );
 	self->ConstructL();
 	CleanupStack::Pop( self );
-	_DBG_FILE("CNSmlAgendaDataProvider::NewL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::NewL: END"));
 	return self;
 	}
 
@@ -84,14 +82,12 @@
 //
 CNSmlAgendaDataProvider::~CNSmlAgendaDataProvider()
 	{
-	_DBG_FILE("CNSmlAgendaDataProvider::~CNSmlAgendaDataProvider(): BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::~CNSmlAgendaDataProvider(): BEGIN"));
+	delete iDSFormat;
 	delete iAgnDataStore;
-	iSession.Close();
-	delete iDSFormat;
-	iStringPool.Close();
 	iFilterArray.ResetAndDestroy();
 	iFilterArray.Close();
-	_DBG_FILE("CNSmlAgendaDataProvider::~CNSmlAgendaDataProvider(): END");
+	FLOG(_L("CNSmlAgendaDataProvider::~CNSmlAgendaDataProvider(): END"));
 	}
 
 // ------------------------------------------------------------------------------------------------
@@ -101,8 +97,8 @@
 //
 void CNSmlAgendaDataProvider::DoOnFrameworkEvent( TSmlFrameworkEvent /*aEvent*/, TInt /*aParam1*/, TInt /*aParam2*/ )
     {
-	_DBG_FILE("CNSmlAgendaDataProvider::DoOnFrameworkEvent: BEGIN");
-	_DBG_FILE("CNSmlAgendaDataProvider::DoOnFrameworkEvent: END");
+	FLOG(_L("CNSmlAgendaDataProvider::DoOnFrameworkEvent: BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::DoOnFrameworkEvent: END"));
     }
 
 // ------------------------------------------------------------------------------------------------
@@ -112,13 +108,13 @@
 //
 TBool CNSmlAgendaDataProvider::DoSupportsOperation( TUid aOpId ) const
     {
-	_DBG_FILE("CNSmlAgendaDataProvider::DoSupportsOperation: BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::DoSupportsOperation: BEGIN"));
 	if ( aOpId == KUidSmlSupportMultipleStores )
 		{
-		_DBG_FILE("CNSmlAgendaDataProvider::DoSupportsOperation: END");
+		FLOG(_L("CNSmlAgendaDataProvider::DoSupportsOperation: END"));
 		return ETrue;
 		}
-	_DBG_FILE("CNSmlAgendaDataProvider::DoSupportsOperation: END");
+	FLOG(_L("CNSmlAgendaDataProvider::DoSupportsOperation: END"));
 	return EFalse;
     }
 
@@ -129,16 +125,17 @@
 //
 const CSmlDataStoreFormat& CNSmlAgendaDataProvider::DoStoreFormatL()
     {
-	_DBG_FILE("CNSmlAgendaDataProvider::DoStoreFormatL(): BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::DoStoreFormatL(): BEGIN"));
 	
 	if ( iDSFormat )
 		{
        	delete iDSFormat;
        	iDSFormat = NULL;
 		}
-	iDSFormat = DoOwnStoreFormatL();
-	
-    return *iDSFormat;
+	// RD_MULTICAL
+	iDSFormat = iAgnDataStore->StoreFormatL();
+	// RD_MULTICAL
+	return *iDSFormat;
     }
 
 // ------------------------------------------------------------------------------------------------
@@ -148,8 +145,8 @@
 //
 CDesCArray* CNSmlAgendaDataProvider::DoListStoresLC()
     {
-	_DBG_FILE("CNSmlAgendaDataProvider::DoListStoresLC(): BEGIN");
-	_DBG_FILE("CNSmlAgendaDataProvider::DoListStoresLC(): END");
+	FLOG(_L("CNSmlAgendaDataProvider::DoListStoresLC(): BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::DoListStoresLC(): END"));
 	return iAgnDataStore->DoListAgendaFilesLC();
     }
 
@@ -160,8 +157,8 @@
 //
 const TDesC& CNSmlAgendaDataProvider::DoDefaultStoreL()
     {
-	_DBG_FILE("CNSmlAgendaDataProvider::DoDefaultStoreL(): BEGIN");
-	_DBG_FILE("CNSmlAgendaDataProvider::DoDefaultStoreL(): END");
+	FLOG(_L("CNSmlAgendaDataProvider::DoDefaultStoreL(): BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::DoDefaultStoreL(): END"));
 	return iAgnDataStore->DoGetDefaultFileNameL();
     }
 
@@ -172,10 +169,10 @@
 //
 CSmlDataStore* CNSmlAgendaDataProvider::DoNewStoreInstanceLC()
     {
-	_DBG_FILE("CNSmlAgendaDataProvider::DoNewStoreInstanceLC(): BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::DoNewStoreInstanceLC(): BEGIN"));
 	CNSmlAgendaDataStore* newStore = CNSmlAgendaDataStore::NewL();
 	CleanupStack::PushL( newStore );
-	_DBG_FILE("CNSmlAgendaDataProvider::DoNewStoreInstanceLC(): END");
+	FLOG(_L("CNSmlAgendaDataProvider::DoNewStoreInstanceLC(): END"));
 	return newStore;
     } 
 
@@ -186,8 +183,8 @@
 const RPointerArray<CSyncMLFilter>& CNSmlAgendaDataProvider::DoSupportedServerFiltersL()
 	{
 	// This method returns empty array. It means that this Data Provider does not support filtering
-	_DBG_FILE("CNSmlAgendaDataProvider::DoSupportedServerFiltersL(): BEGIN");
-	_DBG_FILE("CNSmlAgendaDataProvider::DoSupportedServerFiltersL(): END");
+	FLOG(_L("CNSmlAgendaDataProvider::DoSupportedServerFiltersL(): BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::DoSupportedServerFiltersL(): END"));
 	return iFilterArray;
 	}
 
@@ -197,9 +194,9 @@
 // ------------------------------------------------------------------------------------------------
 void CNSmlAgendaDataProvider::DoCheckSupportedServerFiltersL( const CSmlDataStoreFormat& /*aServerDataStoreFormat*/, RPointerArray<CSyncMLFilter>& /*aFilters*/, TSyncMLFilterChangeInfo& /*aChangeInfo*/ )
 	{
-	_DBG_FILE("CNSmlAgendaDataProvider::DoCheckSupportedServerFiltersL(): BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::DoCheckSupportedServerFiltersL(): BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::DoCheckSupportedServerFiltersL(): END"));
 	User::Leave( KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataProvider::DoCheckSupportedServerFiltersL(): END");
 	}
 
 // ------------------------------------------------------------------------------------------------
@@ -208,9 +205,9 @@
 // ------------------------------------------------------------------------------------------------
 void CNSmlAgendaDataProvider::DoCheckServerFiltersL( RPointerArray<CSyncMLFilter>& /*aFilters*/, TSyncMLFilterChangeInfo& /*aChangeInfo*/ )
 	{
-	_DBG_FILE("CNSmlAgendaDataProvider::DoCheckServerFiltersL(): BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::DoCheckServerFiltersL(): BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::DoCheckServerFiltersL(): END"));
 	User::Leave( KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataProvider::DoCheckServerFiltersL(): END");
 	}
 
 // ------------------------------------------------------------------------------------------------
@@ -219,9 +216,9 @@
 // ------------------------------------------------------------------------------------------------
 HBufC* CNSmlAgendaDataProvider::DoGenerateRecordFilterQueryLC( const RPointerArray<CSyncMLFilter>& /*aFilters*/, TSyncMLFilterMatchType /*aMatch*/, TDes& /*aFilterMimeType*/, TSyncMLFilterType& /*aFilterType*/, TDesC& /*aStoreName*/ )
 	{
-	_DBG_FILE("CNSmlAgendaDataProvider::DoGenerateRecordFilterQueryLC(): BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::DoGenerateRecordFilterQueryLC(): BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::DoGenerateRecordFilterQueryLC(): END"));
 	User::Leave( KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataProvider::DoGenerateRecordFilterQueryLC(): END");
 	return NULL;
 	}
 	
@@ -231,53 +228,9 @@
 // ------------------------------------------------------------------------------------------------
 void CNSmlAgendaDataProvider::DoGenerateFieldFilterQueryL( const RPointerArray<CSyncMLFilter>& /*aFilters*/, TDes& /*aFilterMimeType*/, RPointerArray<CSmlDataProperty>& /*aProperties*/, TDesC& /*aStoreName*/ )
 	{
-	_DBG_FILE("CNSmlAgendaDataProvider::DoGenerateFieldFilterQueryL(): BEGIN");
+	FLOG(_L("CNSmlAgendaDataProvider::DoGenerateFieldFilterQueryL(): BEGIN"));
+	FLOG(_L("CNSmlAgendaDataProvider::DoGenerateFieldFilterQueryL(): END"));
 	User::Leave( KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataProvider::DoGenerateFieldFilterQueryL(): END");
-	}
-
-// ------------------------------------------------------------------------------------------------
-// CNSmlAgendaDataProvider::DoOwnStoreFormatL
-// Read own store format from own resource file.
-// ------------------------------------------------------------------------------------------------
-//
-CSmlDataStoreFormat* CNSmlAgendaDataProvider::DoOwnStoreFormatL()
-	{
-	_DBG_FILE("CNSmlAgendaDataProvider::DoOwnStoreFormatL(): BEGIN");
-	TFileName fileName;
-	TParse parse;
-
-    // Check correct Data Sync protocol
-	TInt value( EDataSyncNotRunning );
-	TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys,
-                                 KDataSyncStatus,
-                                 value );
-	if ( error == KErrNone &&
-	     value == EDataSyncRunning )
-	    {
-	    parse.Set( KNSmlDSAgendaDataStoreRsc_1_1_2, &KDC_RESOURCE_FILES_DIR, NULL );
-	    }
-	else // error or protocol version 1.2 
-	    {
-	    parse.Set( KNSmlDSAgendaDataStoreRsc_1_2, &KDC_RESOURCE_FILES_DIR, NULL );
-	    }		
-	
-	fileName = parse.FullName();
-	RResourceFile resourceFile;
-	BaflUtils::NearestLanguageFile( iSession, fileName );
-
-	resourceFile.OpenL( iSession, fileName );
-	CleanupClosePushL( resourceFile );
-
-	HBufC8* profileRes = resourceFile.AllocReadLC( NSML_AGENDA_DATA_STORE );
-	TResourceReader reader;
-	reader.SetBuffer( profileRes );
-
-	CSmlDataStoreFormat* dsFormat = CSmlDataStoreFormat::NewLC( iStringPool, reader );
-	CleanupStack::Pop(); // dsFormat
-	CleanupStack::PopAndDestroy( 2 ); // profileRes, resourceFile
-	_DBG_FILE("CNSmlAgendaDataProvider::DoOwnStoreFormatL(): END");
-	return dsFormat;
 	}
 
 // =================================== OTHER EXPORTED FUNCTIONS ===================================
@@ -297,9 +250,9 @@
 //
 EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
     {
-	_DBG_FILE("ImplementationGroupProxy() for CNSmlAgendaDataProvider: begin");
+	FLOG(_L("ImplementationGroupProxy() for CNSmlAgendaDataProvider: begin"));
     aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
-	_DBG_FILE("ImplementationGroupProxy() for CNSmlAgendaDataProvider: end");
+	FLOG(_L("ImplementationGroupProxy() for CNSmlAgendaDataProvider: end"));
     return ImplementationTable;
 	}
 
--- a/omads/omadsextensions/adapters/agenda/src/nsmlagendadatastore.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/agenda/src/nsmlagendadatastore.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -18,12 +18,6 @@
 
 
 // INCLUDES
-#include "nsmldebug.h"
-#include "nsmlagendadatastore.h"
-#include "nsmlagendadataprovider.h"
-#include "nsmlchangefinder.h"
-#include "NSmlDataModBase.h"
-#include "nsmlagendadefines.hrh"
 #include <ecom.h>
 #include <barsc.h>
 #include <bautils.h>
@@ -40,12 +34,24 @@
 #include <SmlDataFormat.h>
 #include <SmlDataSyncDefs.h>
 #include <data_caging_path_literals.hrh>
-#include <NSmlAgendaDataStore_1_1_2.rsg>
-#include <NSmlAgendaDataStore_1_2.rsg>
+#include <nsmlagendadatastore_1_1_2.rsg>
 #include <e32property.h>
 #include <DataSyncInternalPSKeys.h>
 #include <CalenImporter.h>
 #include <CalenInterimUtils2.h>
+#include <utf.h>
+#include <nsmldebug.h>
+#include <nsmlagendaadapterhandler.h>
+#include <calenmulticaluids.hrh>
+#include <calenmulticalutil.h>
+#include <nsmlconstants.h>
+#include <centralrepository.h> 
+#include "nsmlagendadebug.h"
+#include "nsmlagendadatastore.h"
+#include "nsmlagendadataprovider.h"
+#include "nsmlchangefinder.h"
+#include "NSmlDataModBase.h"
+#include "nsmlagendadefines.hrh"
 
 #ifndef __WINS__
 // This lowers the unnecessary compiler warning (armv5) to remark.
@@ -70,10 +76,16 @@
 	iDrive( -1 ),
 	iReplaceItemId( -1 ),
 	iRXEntryType( ENSmlNotSet ),
-	iTXEntryType( ENSmlNotSet )
+	iTXEntryType( ENSmlNotSet ),
+	iIsHierarchicalSyncSupported( EFalse ),
+	iParentItemId( 0 )
 	{
-	_DBG_FILE("CNSmlAgendaDataStore::CNSmlAgendaDataStore(): BEGIN");
-	_DBG_FILE("CNSmlAgendaDataStore::CNSmlAgendaDataStore(): END");
+	FLOG(_L("CNSmlAgendaDataStore::CNSmlAgendaDataStore(): BEGIN"));
+	// RD_MULTICAL
+	iDataMimeType = ENSmlNone;
+	iAgendaAdapterHandler = NULL;
+	// RD_MULTICAL
+	FLOG(_L("CNSmlAgendaDataStore::CNSmlAgendaDataStore(): END"));
 	}
 
 // -----------------------------------------------------------------------------
@@ -83,7 +95,7 @@
 //
 void CNSmlAgendaDataStore::ConstructL()
 	{
-	_DBG_FILE("CNSmlAgendaDataStore::ConstructL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::ConstructL: BEGIN"));
 
 	iStringPool.OpenL();
 	User::LeaveIfError( iRfs.Connect() );
@@ -96,21 +108,32 @@
 	iMovedUids = new ( ELeave ) CNSmlDataItemUidSet();
 	iReplacedUids = new ( ELeave ) CNSmlDataItemUidSet();
 	
-	iDefaultStoreName = HBufC::NewL( KNSmlDefaultStoreNameMaxSize );
+	iDefaultStoreFileName = HBufC::NewL( KNSmlDefaultStoreNameMaxSize );
+	*iDefaultStoreFileName = KNSmlAgendaFileNameForDefaultDB; 
 	
-	iVersitTlsData = &CVersitTlsData::VersitTlsDataL();
-	// Create CalSession and CalEntryView instances
-	iVCalSession = CCalSession::NewL();
 	
-	TPtr obptr = iDefaultStoreName->Des();
-	obptr = iVCalSession->DefaultFileNameL(); 
-
+	// RD_MULTICAL
+	iAgendaAdapterLog = NULL;
+	iCalOffsetArr = new (ELeave) CArrayFixFlat<TUint>( KArrayGranularity );
+	iCommittedUidArr = new ( ELeave ) CNSmlDataItemUidSet();
+	//iCalOffsetVal = CCalenMultiCalUtil::GetOffsetL();
+	// TODO: Tweak code: BEGIN
+	iCalOffsetVal = 100000;	
+	ListAllAgendaPluginAdaptersL();
+	// END  
+		
 	iOwnFormat = DoOwnStoreFormatL();
-	iDataMod->SetOwnStoreFormat( *iOwnFormat );
-	
+	// RD_MULTICAL
+	iDataMod->SetOwnStoreFormat( *iOwnFormat );	
     iInterimUtils = CCalenInterimUtils2::NewL();
-	
-	_DBG_FILE("CNSmlAgendaDataStore::ConstructL: END");
+    
+    // Initialize the FieldId to a default value [UID3 of the application]
+    // This value will be rewritten once the exact single CalendarDB is determined
+    // In case of HF synchronization involving multiple CalendarDB's the below value 
+    // will be retained.
+    iOpenedStoreId = KNSmlAgendaAdapterUid;
+    
+	FLOG(_L("CNSmlAgendaDataStore::ConstructL: END"));
 	}
 
 // -----------------------------------------------------------------------------
@@ -120,7 +143,7 @@
 //
 CNSmlAgendaDataStore* CNSmlAgendaDataStore::NewL()
 	{
-	_DBG_FILE("CNSmlAgendaDataStore::NewL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::NewL: BEGIN"));
 	
 	CNSmlAgendaDataStore* self = new ( ELeave ) CNSmlAgendaDataStore();
 	CleanupStack::PushL( self );
@@ -128,7 +151,7 @@
 	self->ConstructL();
 	CleanupStack::Pop(); // self
 	
-	_DBG_FILE("CNSmlAgendaDataStore::NewL: END");
+	FLOG(_L("CNSmlAgendaDataStore::NewL: END"));
 	return self;
 	}
 
@@ -139,53 +162,61 @@
 //
 CNSmlAgendaDataStore::~CNSmlAgendaDataStore()
 	{
-	_DBG_FILE("CNSmlAgendaDataStore::~CNSmlAgendaDataStore(): BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::~CNSmlAgendaDataStore(): BEGIN"));
 
     // Enable notifications
     TInt error( KErrNone );
-    if ( iVCalSession )
+   
+    // TODO:
+    /*if ( iVCalSession )
         {
         TRAP_IGNORE( iVCalSession->EnablePubSubNotificationsL() );
         TRAP_IGNORE( iVCalSession->EnableChangeBroadcast() );
-        }
-
-	delete iOwnFormat;
-	iRfs.Close();
-	iStringPool.Close();
+        }*/  
 	
     if ( iChangeFinder )
 		{
 		TRAP( error, iChangeFinder->CloseL() );
 		}
-	if (iVersitTlsData)
-			{
-			iVersitTlsData->VersitTlsDataClose();
-			}
-	delete iChangeFinder;
+
+    delete iChangeFinder;
 	delete iNewUids;
 	delete iDeletedUids;
 	delete iSoftDeletedUids;
 	delete iMovedUids;
 	delete iReplacedUids;
 
-    delete iDefaultStoreName;
+    delete iDefaultStoreFileName;
     delete iOpenedStoreName;
+    delete iReceivedStoreName;
 	delete iDataMod;
 	delete iItemData;
-
-    delete iAgendaProgressview;
-    
-	delete iImporter;
-    delete iExporter;
-    
-    delete iEntryView;
-    delete iVCalSession;
+	
     delete iInterimUtils;
     
+    iAgendaPluginAdapters.ResetAndDestroy();    
     
-    // REComSession::FinalClose();
-	
-	_DBG_FILE("CNSmlAgendaDataStore::~CNSmlAgendaDataStore(): END");
+    if( iOwnFormat )
+       {
+       delete iOwnFormat;
+       iOwnFormat = NULL;
+       }
+   
+    iRfs.Close();
+    iStringPool.Close();
+    
+    if ( iCalOffsetArr )
+       {
+       iCalOffsetArr->Reset();
+       delete iCalOffsetArr;
+       }
+    
+    if ( iCommittedUidArr )
+       {
+       iCommittedUidArr->Reset();
+       delete iCommittedUidArr;
+       }
+	FLOG(_L("CNSmlAgendaDataStore::~CNSmlAgendaDataStore(): END"));
 	}
 
 // -----------------------------------------------------------------------------
@@ -196,7 +227,8 @@
 void CNSmlAgendaDataStore::DoOpenL( const TDesC& aStoreName,
                 MSmlSyncRelationship& aContext, TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoOpenL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoOpenL: BEGIN"));
+	
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	if ( iState != ENSmlClosed )
@@ -209,72 +241,72 @@
 		{
 		RFs::CharToDrive( KNSmlDriveC()[0], iDrive );
 		}
-    
+	
+	if ( iReceivedStoreName )
+        {
+        delete iReceivedStoreName;
+        iReceivedStoreName = NULL;
+        } 
+	iReceivedStoreName = aStoreName.AllocL();
     // Open database
 	TInt err( KErrNone );	
-	if ( aStoreName == KNSmlAgendaStoreNameForDefaultDB )
+	if ( aStoreName == KNSmlAgendaFileNameForDefaultDB )
 		{
-		TRAP( err, iVCalSession->OpenL( *iDefaultStoreName ) );
+		FLOG(_L("CNSmlAgendaDataStore::DoOpenL: Calling the OpenStoreL: '%S'"), &aStoreName);
+		TRAP( err, OpenStoreL() );
 		}
     else 
     	{
-    	TRAP( err, iVCalSession->OpenL( aStoreName ) );
+    	// Provided profile is created from the DS Application
+    	FLOG(_L("CNSmlAgendaDataStore::DoOpenL: storename: '%S'"), &aStoreName);    	
+    	if ( iOpenedStoreName )
+            {
+            delete iOpenedStoreName;
+            iOpenedStoreName = NULL;
+            }
+        iOpenedStoreName = aStoreName.AllocL();  
+        
+        CCalSession* calsession = CCalSession::NewL();
+        CleanupStack::PushL(calsession);
+        TRAP( err, calsession->OpenL( aStoreName ) );
+        if ( err )
+            {
+            FLOG(_L("CNSmlAgendaDataStore::DoOpenL: Cannot open the session: '%d'"), err); 
+            CleanupStack::PopAndDestroy( calsession ); 
+            User::RequestComplete( iCallerStatus, err );
+            return;
+            }
+            
+        // Disable notifications
+        TRAP_IGNORE( calsession->DisablePubSubNotificationsL() );
+        TRAP_IGNORE( calsession->DisableChangeBroadcast() );    
+        // Get ID of database
+        calsession->FileIdL( iOpenedStoreId );
+        
+        // Close the session
+        CleanupStack::PopAndDestroy( calsession ); 
     	}
+		
 	if ( err )
 	    {
 	    User::RequestComplete( iCallerStatus, err );
 	    return;
 	    }
 	
-	// Disable notifications
-	TRAP_IGNORE( iVCalSession->DisablePubSubNotificationsL() );
-	TRAP_IGNORE( iVCalSession->DisableChangeBroadcast() );
-	    
-	if ( iOpenedStoreName )
-		{
-		delete iOpenedStoreName;
-		iOpenedStoreName = NULL;
-		}
-	iOpenedStoreName = aStoreName.AllocL();
-	
-	// Initialize some member variables
-	// Create importer and exporter
-    iImporter = CCalenImporter::NewL( *iVCalSession );
-	iExporter = CCalenExporter::NewL( *iVCalSession );
-
-    // Progress view
-	iAgendaProgressview = CNSmlAgendaProgressview::NewL();
-
-    iEntryView = CCalEntryView::NewL( *iVCalSession, *iAgendaProgressview );
-    CActiveScheduler::Start();
-    TInt completedStatus = iAgendaProgressview->GetCompletedStatus();
-    if ( completedStatus != KErrNone )
-        {
-        User::RequestComplete( iCallerStatus, completedStatus );
-        return;
-        }
-
 	if ( iChangeFinder )
 		{
 		iChangeFinder->CloseL();
 		delete iChangeFinder;
 		iChangeFinder = NULL;
 		}
+	
 	iChangeFinder = CNSmlChangeFinder::NewL( aContext, iKey, iHasHistory,
 	                                         KNSmlAgendaAdapterImplUid );
-    
-    // Get ID of database
-	iVCalSession->FileIdL( iOpenedStoreId );
-	
-	if( !iSnapshotRegistered )
-		{
-		RegisterSnapshotL();
-		}
-     	
+	iAgendaAdapterLog = CNSmlAgendaAdapterLog::NewL( aContext );
 	iState = ENSmlOpenAndWaiting;
     User::RequestComplete( iCallerStatus, err );
 	    
-	_DBG_FILE("CNSmlAgendaDataStore::DoOpenL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoOpenL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -284,7 +316,7 @@
 //
 void CNSmlAgendaDataStore::DoCancelRequest()
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCancelRequest: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoCancelRequest: BEGIN"));
     if ( iState == ENSmlOpenAndWaiting )
         {
     	iState = ENSmlClosed;
@@ -293,7 +325,7 @@
         {
 	    iState = ENSmlOpenAndWaiting;
         }
-	_DBG_FILE("CNSmlAgendaDataStore::DoCancelRequest: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoCancelRequest: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -303,9 +335,9 @@
 //
 const TDesC& CNSmlAgendaDataStore::DoStoreName() const
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoStoreName: BEGIN");
-	_DBG_FILE("CNSmlAgendaDataStore::DoStoreName: END");
-	return *iOpenedStoreName;
+	FLOG(_L("CNSmlAgendaDataStore::DoStoreName: BEGIN"));
+	FLOG(_L("CNSmlAgendaDataStore::DoStoreName: END"));
+	return *iReceivedStoreName;
     }
 
 // -----------------------------------------------------------------------------
@@ -315,9 +347,9 @@
 //
 void CNSmlAgendaDataStore::DoBeginTransactionL()
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoBeginTransactionL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoBeginTransactionL: BEGIN"));
 	User::Leave( KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataStore::DoBeginTransactionL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoBeginTransactionL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -327,11 +359,11 @@
 //
 void CNSmlAgendaDataStore::DoCommitTransactionL( TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitTransactionL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitTransactionL: BEGIN"));
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	User::RequestComplete( iCallerStatus, KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitTransactionL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitTransactionL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -341,11 +373,11 @@
 //
 void CNSmlAgendaDataStore::DoRevertTransaction( TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoRevertTransaction: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoRevertTransaction: BEGIN"));
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	User::RequestComplete( iCallerStatus, KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataStore::DoRevertTransaction: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoRevertTransaction: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -355,9 +387,9 @@
 //
 void CNSmlAgendaDataStore::DoBeginBatchL()
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoBeginBatchL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoBeginBatchL: BEGIN"));
 	User::Leave( KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataStore::DoBeginBatchL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoBeginBatchL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -368,11 +400,11 @@
 void CNSmlAgendaDataStore::DoCommitBatchL( RArray<TInt>& /*aResultArray*/,
                 TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitBatchL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitBatchL: BEGIN"));
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	User::RequestComplete( iCallerStatus, KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitBatchL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitBatchL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -382,9 +414,9 @@
 //
 void CNSmlAgendaDataStore::DoCancelBatch()
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCancelBatch: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoCancelBatch: BEGIN"));
 	// Nothing to do
-	_DBG_FILE("CNSmlAgendaDataStore::DoCancelBatch: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoCancelBatch: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -395,7 +427,7 @@
 void CNSmlAgendaDataStore::DoSetRemoteStoreFormatL(
                 const CSmlDataStoreFormat& aServerDataStoreFormat )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: BEGIN"));
 	
 	if ( iOwnFormat )
 	    {
@@ -404,6 +436,24 @@
 	    }
 	
 	iOwnFormat = DoOwnStoreFormatL();
+	// RD_MULTICAL
+	if ( aServerDataStoreFormat.IsSupported( 
+	                                CSmlDataStoreFormat::EOptionHierarchial ) )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Supports HIERARCHIAL"));
+       
+		
+        iIsHierarchicalSyncSupported = ETrue;
+	
+		// Check what properties are supported for folders
+        iAgendaAdapterHandler->CheckServerSupportForFolder( aServerDataStoreFormat );
+        }
+	else
+	    {
+	    FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Do not support HIERARCHIAL"));	           
+	    iIsHierarchicalSyncSupported = EFalse;
+	    }
+	// RD_MULTICAL       
 	iDataMod->SetOwnStoreFormat( *iOwnFormat );
 	
     iDataMod->SetPartnerStoreFormat( ( CSmlDataStoreFormat& )
@@ -416,7 +466,7 @@
 
 #ifdef __NSML_USE_ICAL_FEATURE
 
-    _DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Support iCal");
+    FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Support iCal"));
    	returnValue = iDataMod->SetUsedMimeType(
        	    iOwnFormat->MimeFormat( 1 ).MimeType(),
            	iOwnFormat->MimeFormat( 1 ).MimeVersion() );
@@ -425,19 +475,19 @@
 
     if ( returnValue == KErrNone )
         {
-        _DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Sets iCal");
+        FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Sets iCal"));
         iRXEntryType = ENSmlICal;
         iTXEntryType = ENSmlICal;
         }
     else
         {
-        _DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Support vCal");
+        FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Support vCal"));
         returnValue = iDataMod->SetUsedMimeType(
             iOwnFormat->MimeFormat( 0 ).MimeType(),
             iOwnFormat->MimeFormat( 0 ).MimeVersion() );
         if ( returnValue == KErrNone )
             {
-            _DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Sets vCal");
+            FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: Sets vCal"));
             iRXEntryType = ENSmlVCal;
             iTXEntryType = ENSmlVCal;
             }
@@ -445,11 +495,18 @@
     if ( iRXEntryType == ENSmlNotSet || iTXEntryType == ENSmlNotSet )
         {
         // Leave if server does not support either vCal or iCal
-        _DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: MimeType Not supported");
+        FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: MimeType Not supported"));
         User::Leave( KErrNotFound );        
         }
     
-	_DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: END");
+    // RD_MULTICAL
+    if( !iSnapshotRegistered )
+        {
+        RegisterSnapshotL();
+        }
+    // RD_MULTICAL
+    
+	FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteStoreFormatL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -459,9 +516,9 @@
 //
 void CNSmlAgendaDataStore::DoSetRemoteMaxObjectSize( TInt aServerMaxObjectSize )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteMaxObjectSize: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteMaxObjectSize: BEGIN"));
 	iServerMaxObjectSize = aServerMaxObjectSize;
-	_DBG_FILE("CNSmlAgendaDataStore::DoSetRemoteMaxObjectSize: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoSetRemoteMaxObjectSize: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -471,8 +528,8 @@
 //
 TInt CNSmlAgendaDataStore::DoMaxObjectSize() const
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoMaxObjectSize: BEGIN");
-	_DBG_FILE("CNSmlAgendaDataStore::DoMaxObjectSize - Default: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoMaxObjectSize: BEGIN"));
+	FLOG(_L("CNSmlAgendaDataStore::DoMaxObjectSize - Default: END"));
 	return KNSmlAgendaOwnMaxObjectSize;
     }
 
@@ -481,104 +538,187 @@
 // Open calendar item for reading.
 // -----------------------------------------------------------------------------
 //
-void CNSmlAgendaDataStore::DoOpenItemL( TSmlDbItemUid aUid, TBool& aFieldChange,
-                TInt& aSize, TSmlDbItemUid& /*aParent*/, TDes8& aMimeType,
-                TDes8& aMimeVer, TRequestStatus& aStatus )
+void CNSmlAgendaDataStore::DoOpenItemL( TSmlDbItemUid aUid,
+                                        TBool& aFieldChange,
+                                        TInt& aSize,
+                                        TSmlDbItemUid& aParent,
+                                        TDes8& aMimeType,
+                                        TDes8& aMimeVer,
+                                        TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoOpenItemL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: BEGIN"));
     iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
+	// Leave if Data Store is in wrong state
 	if ( iState != ENSmlOpenAndWaiting )
 		{
+		FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL:Returing due to invalid state"));
 		User::RequestComplete( iCallerStatus, KErrNotReady );
 		return;
 		}
 		
- 	iReplaceItemId = aUid;
- 	
-	CCalEntry* entry = NULL;
-	TInt err( KErrNone );
-    TRAP( err, entry = iEntryView->FetchL( aUid ) );
-	CleanupStack::PushL( entry );
+	// Add field change info
+	aFieldChange = EFalse;
 	
-	if ( err || !entry )
-		{
-		CleanupStack::PopAndDestroy( entry ); // entry
-		User::RequestComplete( iCallerStatus, KErrNotFound );
-		return;
-		}
-		
+	// Update the SnapShots
 	if ( !iSnapshotRegistered )
-		{
-		RegisterSnapshotL();
-		}
-	delete iItemData;
-	iItemData = NULL;
-	iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize );
+        {
+        RegisterSnapshotL();
+        }
+        
+	// Initialize the Buffer
+    delete iItemData;
+    iItemData = NULL;
+    iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize );
 
-	RBufWriteStream writeStream( *iItemData );
-	writeStream.PushL();
-	
-	// Export item from database
-	if ( iTXEntryType == ENSmlICal )
-	    {
-	    _DBG_FILE("CNSmlAgendaDataStore::DoOpenItemL: Export - iCal DB");
-	    iExporter->ExportICalL( *entry, writeStream );
-	    aMimeType = iOwnFormat->MimeFormat( 1 ).MimeType().DesC();
-	    aMimeVer = iOwnFormat->MimeFormat( 1 ).MimeVersion().DesC();
-	    }
-    else if ( iTXEntryType == ENSmlVCal )
+    RBufWriteStream writeStream( *iItemData );
+    writeStream.PushL();
+
+	// RD_MULTICAL
+  	//Determine the Mime Type
+    DataMimeType( aUid );
+	TInt fetchError( KErrNone );
+	switch( iDataMimeType )
 	    {
-	    _DBG_FILE("CNSmlAgendaDataStore::DoOpenItemL: Export - vCal DB");
-	    iExporter->ExportVCalL( *entry, writeStream );
-	    aMimeType = iOwnFormat->MimeFormat( 0 ).MimeType().DesC();
-	    aMimeVer = iOwnFormat->MimeFormat( 0 ).MimeVersion().DesC();
+	    case ENSmlFolder:
+    	    {
+    	    //Set the Parent UID
+    	    aParent = KDbItemUidRoot; // parent is root
+    	    FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: calling fetch"));
+	        FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL:writestream before size: '%d'"), writeStream.Sink()->SizeL());
+	        TRAP( fetchError, iAgendaAdapterHandler->FetchFolderL( aUid, writeStream ) );
+	        FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL:writestream size: '%d'"), writeStream.Sink()->SizeL());
+    	
+	        if(fetchError != KErrNone)
+    	        {
+    	        FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: fetch error: '%d'"), fetchError);
+    	        CleanupStack::PopAndDestroy( ); // writeStream
+    	        User::RequestComplete( iCallerStatus, fetchError );
+    	        return;
+    	        }
+    	    
+            aMimeType.Append( KNSmlContentTypeFolder );
+            aMimeVer.Append( KNSmlContentTypeFolderVersion );
+            
+            writeStream.CommitL();
+            iItemData->Compress();
+            iPos = 0;
+            }
+    	    break;
+	    case ENSmlCalendar:
+    	    {
+    	    FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: calendar item"));
+            CNSmlAgendaDataStoreUtil* agendautil = NULL;
+            HBufC* calfilename = NULL;
+            TCalLocalUid parentid(NULL);
+            TCalLocalUid entryid(aUid);
+            TInt err( KErrNone );
+            
+            if( iIsHierarchicalSyncSupported )
+                {
+                TRAP( err, GetCalendarEntryIdL( parentid, entryid ));
+                if ( err )
+                    {
+                    FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL:Parent Id is not Valid one"));
+                    User::RequestComplete( iCallerStatus, KErrNotFound );
+                    return;
+                    }
+                aParent = parentid;
+                //Get the Folder Name
+                TRAP(err, calfilename = iAgendaAdapterHandler->FolderNameL( parentid ));  
+                }
+            else
+                {
+                calfilename = iOpenedStoreName->AllocL();
+                }
+            
+            if( err != KErrNone || NULL == calfilename )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL:Invalid CalendarInfo"));
+                User::RequestComplete( iCallerStatus, KErrNotFound );
+                return;
+                }     
+            
+            iReplaceItemId = entryid;            
+            agendautil = CNSmlAgendaDataStoreUtil::NewL();
+            if( agendautil )
+                {
+                CleanupStack::PushL(agendautil);
+                TRAP(err, agendautil->InitializeCalAPIsL( calfilename, entryid ));
+                CleanupStack::Pop(agendautil);
+                }
+            if ( err || !agendautil )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: entry is not valid"));
+                delete agendautil; 
+                delete calfilename;
+                User::RequestComplete( iCallerStatus, KErrNotFound );
+                return;
+                }    
+            // Export item from database
+            if ( iTXEntryType == ENSmlICal )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: Export - iCal DB"));
+                agendautil->iExporter->ExportICalL( *agendautil->iEntry, writeStream );
+                aMimeType = iOwnFormat->MimeFormat( 1 ).MimeType().DesC();
+                aMimeVer = iOwnFormat->MimeFormat( 1 ).MimeVersion().DesC();
+                }
+            else if ( iTXEntryType == ENSmlVCal )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: Export - vCal DB"));
+                agendautil->iExporter->ExportVCalL( *agendautil->iEntry, writeStream );
+                aMimeType = iOwnFormat->MimeFormat( 0 ).MimeType().DesC();
+                aMimeVer = iOwnFormat->MimeFormat( 0 ).MimeVersion().DesC();
+                }
+            else
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: Export - DB Not Supported"));
+                delete agendautil;
+                delete calfilename;
+                CleanupStack::PopAndDestroy( &writeStream ); 
+                User::RequestComplete( iCallerStatus, KErrNotSupported );
+                return;
+                }
+            writeStream.CommitL();
+            iItemData->Compress();
+            iPos = 0;
+     
+            iDataMod->StripTxL( *iItemData );
+            delete agendautil;
+            delete calfilename;
+            }
+    	    break;
+	    default:
+    	    {
+    	    iDataMimeType = ENSmlNone;
+    	    CleanupStack::PopAndDestroy( ); // writeStream
+    	    User::RequestComplete( iCallerStatus, KErrNotFound );
+    	    return;
+    	    }
 	    }
-	else
-	    {
-	    _DBG_FILE("CNSmlAgendaDataStore::DoOpenItemL: Export - DB Not Supported");
-	    CleanupStack::PopAndDestroy( 2 ); // writeStream, entry
-	    User::RequestComplete( iCallerStatus, KErrNotSupported );
-		return;
-	    }
-	
-	writeStream.CommitL();
-	iItemData->Compress();
-	iPos = 0;
+    
+	CleanupStack::PopAndDestroy( ); // writeStream
 	
-#ifdef __NSML_MORE_DEBUG_FOR_ITEMS__
-
-	DBG_DUMP( ( void* )iItemData->Ptr( 0 ).Ptr(), iItemData->Size(),
-	         _S8( "Item from database:" ) );
-
-#endif // __NSML_MORE_DEBUG_FOR_ITEMS__
-
+	FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: destroying the stream"));
 	
-	iDataMod->StripTxL( *iItemData );
-	CleanupStack::PopAndDestroy( 2 ); // writeStream, entry
-	
-#ifdef __NSML_MORE_DEBUG_FOR_ITEMS__
-
-	DBG_DUMP( ( void* )iItemData->Ptr( 0 ).Ptr(), iItemData->Size(),
-	         _S8( "Item from database after strip:" ) );
-
-#endif // __NSML_MORE_DEBUG_FOR_ITEMS__
-	
-	aFieldChange = EFalse;
+	// Set the Size
 	aSize = iItemData->Size();
 	
 	iState = ENSmlItemOpen;
 	
+	FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: user complete"));
+	
 	if ( iServerMaxObjectSize == 0 || aSize <= iServerMaxObjectSize )
 		{
+		FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: error none"));
 		User::RequestComplete( iCallerStatus, KErrNone );
 		}
 	else
 		{
+		FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: error too big"));
 		User::RequestComplete( iCallerStatus, KErrTooBig );
 		}
-		
-	_DBG_FILE("CNSmlAgendaDataStore::DoOpenItemL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -587,87 +727,157 @@
 // buffered.
 // -----------------------------------------------------------------------------
 //
-void CNSmlAgendaDataStore::DoCreateItemL( TSmlDbItemUid& aUid, TInt aSize,
-                TSmlDbItemUid /*aParent*/, const TDesC8& aMimeType,
-                const TDesC8& /*aMimeVer*/, TRequestStatus& aStatus )
+void CNSmlAgendaDataStore::DoCreateItemL( TSmlDbItemUid& aUid,
+                                          TInt aSize,
+                                          TSmlDbItemUid aParent,
+                                          const TDesC8& aMimeType,
+                                          const TDesC8& /*aMimeVer*/,
+                                          TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: BEGIN"));
+	FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: Parent id: '%d'"), aParent);
+	FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: UID: '%d'"), aUid);
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	iAddItemId = &aUid;
 	
-	if ( iState != ENSmlOpenAndWaiting )
-		{
-		User::RequestComplete( iCallerStatus, KErrNotReady );
-		_DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL - KErrNotReady: END");
-		return;
-		}
-		
-	if ( KNSmlAgendaOwnMaxObjectSize < aSize )
-		{
-		User::RequestComplete( iCallerStatus, KErrTooBig );
-		_DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL - KErrTooBig: END");
-		return;
-		}
-		
-	if( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, iDrive ) )
-		{
-		User::RequestComplete( iCallerStatus, KErrDiskFull );
-		_DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL - KErrDiskFull: END");
-		return;
-		}
-
-    // Check if MIME type of new item is supported
-	TBool mimeFound( EFalse );
-	// vCal
-    if ( iOwnFormat->MimeFormat( 0 ).MimeType().DesC().Compare( aMimeType )
-         == 0 )
-	    {
-	    _DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL: received vCal");
-	    mimeFound = ETrue;
-	    iRXEntryType = ENSmlVCal;
-	    }
-	        
-#ifdef __NSML_USE_ICAL_FEATURE
-
-     // iCal
-    else if ( iOwnFormat->MimeFormat( 1 ).MimeType().DesC().Compare( aMimeType )
-              == 0 ) 
+    //Leave if Data Store is in wrong state
+    if ( iState != ENSmlOpenAndWaiting )
         {
-        _DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL: received iCal");
-        mimeFound = ETrue;
-	    iRXEntryType = ENSmlICal;
+        User::RequestComplete( iCallerStatus, KErrNotReady );
+        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL - KErrNotReady: END"));
+        return;
         }
 
+    // Leave if item is larger than we support
+    if ( KNSmlAgendaOwnMaxObjectSize < aSize )
+        {
+        User::RequestComplete( iCallerStatus, KErrTooBig );
+        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL - KErrTooBig: END"));
+        return;
+        }
+        
+    // Check the drive free space
+    if( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, iDrive ) )
+        {
+        User::RequestComplete( iCallerStatus, KErrDiskFull );
+        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL - KErrDiskFull: END"));
+        return;
+        }
+    
+    // Check the MIME type
+    if ( 0 == iOwnFormat->MimeFormat( 0 ).MimeType().DesC().Compare( aMimeType ) )
+        {
+        // vcal
+        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: received vCal"));
+        iRXEntryType = ENSmlVCal;
+        iDataMimeType = ENSmlCalendar;
+        
+        TInt err( KErrNone );
+        // Check the Sync Status
+        if( iIsHierarchicalSyncSupported )
+            {
+            if( !iAgendaAdapterHandler->FolderSyncStatusL( aParent ) )
+                {
+                User::RequestComplete( iCallerStatus, KErrGeneral );
+                FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL - Sync Disabled: END"));
+                return;
+                }
+            }
+        else
+            {
+            TBool syncstatus( EFalse );
+            HBufC* calfilename = iOpenedStoreName->AllocL();
+            TRAP( err, syncstatus = iAgendaAdapterHandler->FolderSyncStatusL( calfilename ) );
+            if( err || !syncstatus )
+                {
+                delete calfilename;
+                User::RequestComplete( iCallerStatus, KErrGeneral );
+                FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL - Sync Disabled: END"));
+                return;
+                }
+            delete calfilename;            
+            }
+        }
+#ifdef __NSML_USE_ICAL_FEATURE     
+    else if ( 0 == iOwnFormat->MimeFormat( 1 ).MimeType().DesC().Compare( aMimeType ) ) 
+        {
+        //ical
+        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: received iCal"));
+        iRXEntryType = ENSmlICal;
+        iDataMimeType = ENSmlCalendar;
+        }
 #endif // __NSML_USE_ICAL_FEATURE
-
-    // Else use original iRXEntryType
+    // RD_MULTICAL
+    else if( aMimeType == KNSmlContentTypeFolder() && iIsHierarchicalSyncSupported )
+        {
+        // Check the validity 
+        /*if ( aUid <= 0 || aParent <= 0 )
+          {
+          FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: Corrupt ids"));
+          User::RequestComplete( iCallerStatus, KErrCorrupt );
+          return;
+          }*/
+        iDataMimeType = ENSmlFolder;
+        }
+    // RD_MULTICAL
     else
         {
-        _DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL: \
-                   mime type not received");
+        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: \
+                               mime type not received"));
         iRXEntryType = iTXEntryType;
+        iDataMimeType = ENSmlNone;
+        User::RequestComplete( iCallerStatus, KErrNotSupported );
+        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: end with leave"));
+        return;
         }
-
-	if ( !mimeFound )
-		{
-		User::RequestComplete( iCallerStatus, KErrNotSupported );
-		_DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL -KErrNotSupported: END");
-		return;
+    
+	if( iIsHierarchicalSyncSupported )
+		{	
+	    // Check that parent exists
+	    iParentItemId = aParent;
+	    if ( iParentItemId == KDbItemUidRoot 
+	         && iDataMimeType == ENSmlCalendar )
+	        {
+	        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: ParentId is NULL"));
+	        iParentItemId = NULL;
+	        User::RequestComplete( iCallerStatus, KErrGeneral );
+	        return;
+	        }
+	  
+	    TInt index = KErrNotFound;
+	    TInt err = KErrNone;
+	    TKeyArrayFix key( 0, ECmpTInt ); // Find key for Ids.
+	    
+	    err = iCalOffsetArr->Find( iParentItemId, key, index );
+	 
+	    if( err != KErrNone && iDataMimeType == ENSmlCalendar )
+	        {
+	        FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: ParentId is NotFound"));
+	        iParentItemId = NULL;
+	        User::RequestComplete( iCallerStatus, KErrNotFound );
+	        return;
+	        }
 		}
+    
+    // TODO: Any other validation is required ?
+    
+    // Register snapshots if needed
+    if( !iSnapshotRegistered )
+        {
+        RegisterSnapshotL();
+        }
+    
+    // Buffer is reinitialized
+    delete iItemData;
+    iItemData = NULL;
+    iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize );
+    iPos = 0;
+    
+    iState = ENSmlItemCreating;
+    User::RequestComplete( iCallerStatus, KErrNone );
 
-	if( !iSnapshotRegistered )
-		{
-		RegisterSnapshotL();
-		}
-	delete iItemData;
-	iItemData = NULL;
-	iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize );
-	iPos = 0;
-	
-	iState = ENSmlItemCreating;
-	User::RequestComplete( iCallerStatus, KErrNone );
-	_DBG_FILE("CNSmlAgendaDataStore::DoCreateItemL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoCreateItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -676,80 +886,170 @@
 // writes item's data as buffered.
 // -----------------------------------------------------------------------------
 //
-void CNSmlAgendaDataStore::DoReplaceItemL( TSmlDbItemUid aUid, TInt aSize,
-                TSmlDbItemUid /*aParent*/, TBool aFieldChange,
-                TRequestStatus& aStatus )
+void CNSmlAgendaDataStore::DoReplaceItemL( TSmlDbItemUid aUid,
+                                           TInt aSize,
+                                           TSmlDbItemUid aParent,
+                                           TBool aFieldChange,
+                                           TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoReplaceItemL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL: BEGIN"));
+	FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL: Parent id: '%d'"), aParent);
+	FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL: UID: '%d'"), aUid);
+	
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
+	TInt err( KErrNone );
 	
-	if ( iState != ENSmlOpenAndWaiting )
-		{
-		User::RequestComplete( iCallerStatus, KErrNotReady );
-		_DBG_FILE("CNSmlAgendaDataStore::DoReplaceItemL - KErrNotReady: END");
-		return;
-		}
-
-	if ( KNSmlAgendaOwnMaxObjectSize < aSize )
-		{
-		User::RequestComplete( iCallerStatus, KErrTooBig );
-		_DBG_FILE("CNSmlAgendaDataStore::DoReplaceItemL - KErrTooBig: END");
-		return;
-		}
+    // Leave if Data Store is in wrong state
+    if ( iState != ENSmlOpenAndWaiting )
+        {
+        User::RequestComplete( iCallerStatus, KErrNotReady );
+        FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL - KErrNotReady: END"));
+        return;
+        }
 
-	if ( aFieldChange )
-		{
-		User::RequestComplete( iCallerStatus, KErrNotSupported );
-		_DBG_FILE("CNSmlAgendaDataStore::DoReplaceItemL \
-		           - KErrNotSupported: END");
-		return;
-		}
-	if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, iDrive ) )
-		{
-		User::RequestComplete( iCallerStatus, KErrDiskFull );
-		_DBG_FILE("CNSmlAgendaDataStore::DoReplaceItemL - KErrDiskFull: END");
-		return;
-		}
-	
- 	iReplaceItemId = aUid;
-
- 	CCalEntry* entry = NULL;
- 	TInt err( KErrNone );
-    TRAP( err, entry = iEntryView->FetchL( aUid ) );
-	CleanupStack::PushL( entry );
- 		
-	if ( !entry || err == KErrNotFound )
-		{
-		CleanupStack::PopAndDestroy( entry ); // entry
-		User::RequestComplete( iCallerStatus, KErrNotFound );
-		_DBG_FILE("CNSmlAgendaDataStore::DoReplaceItemL - KErrNotFound: END");
-		return;
-		}
-    else if ( err )
+    // Leave if item is larger than we support
+    if ( KNSmlAgendaOwnMaxObjectSize < aSize )
         {
-		CleanupStack::PopAndDestroy( entry ); // entry
-		User::RequestComplete( iCallerStatus, err );
-		_DBG_FILE("CNSmlAgendaDataStore::DoReplaceItemL - Error: END");
-		return;
+        User::RequestComplete( iCallerStatus, KErrTooBig );
+        FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL - KErrTooBig: END"));
+        return;
         }
 
-	CleanupStack::PopAndDestroy( entry ); // entry
-		
-	if ( !iSnapshotRegistered )
-		{
-		RegisterSnapshotL();
-		}
-		
-	delete iItemData;
-	iItemData = NULL;
-	iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize );
-	iPos = 0;
-	iReplaceItemId = aUid;
+    // This adapter does not support Field Level sync
+    if ( aFieldChange )
+        {
+        User::RequestComplete( iCallerStatus, KErrNotSupported );
+        FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL \
+                   - KErrNotSupported: END"));
+        return;
+        }
+    
+    // Check the drive free space
+    if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, iDrive ) )
+        {
+        User::RequestComplete( iCallerStatus, KErrDiskFull );
+        FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL - KErrDiskFull: END"));
+        return;
+        }
+    
+    // Check the Sync Status
+    if( iIsHierarchicalSyncSupported )
+        {
+        TCalLocalUid parentid( aParent );
+        TCalLocalUid entryid( aUid );
+        
+        TRAP( err, GetCalendarEntryIdL( parentid, entryid ));
+        if ( err )
+            {
+            FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL: Invalid UID"));
+            User::RequestComplete( iCallerStatus, KErrGeneral );
+            FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL - Sync Disabled: END"));
+            return;
+            }         
+        
+        if( !iAgendaAdapterHandler->FolderSyncStatusL( parentid ) )
+            {
+            User::RequestComplete( iCallerStatus, KErrGeneral );
+            FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL - Sync Disabled: END"));
+            return;
+            }
+        }
+    else
+        {
+        TBool syncstatus( EFalse );
+        HBufC* calfilename = iOpenedStoreName->AllocL();
+        TRAP( err, syncstatus = iAgendaAdapterHandler->FolderSyncStatusL( calfilename ) );
+        if( err || !syncstatus )
+            {
+            delete calfilename;
+            User::RequestComplete( iCallerStatus, KErrGeneral );
+            FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL - Sync Disabled: END"));
+            return;
+            }
+        delete calfilename;            
+        }
+    
+    // Determine the Mime Type
+    DataMimeType( aUid ); 
+    switch( iDataMimeType )
+        {
+        case ENSmlFolder:
+            {
+            iReplaceItemId = aUid;
+            }
+            break;
+        case ENSmlCalendar:
+            {
+            CNSmlAgendaDataStoreUtil* agendautil = NULL;
+            HBufC* calfilename = NULL;
+            iParentItemId = aParent;
+            
+            if( iIsHierarchicalSyncSupported )
+                {
+                iReplaceItemId = aUid - aParent;
+                //Get the Folder Information
+                TRAP(err, calfilename = iAgendaAdapterHandler->FolderNameL( aParent ));
+                }
+            else
+                {
+                iReplaceItemId = aUid;
+                calfilename = iOpenedStoreName->AllocL();
+                }
+                
+            if( err != KErrNone || NULL == calfilename )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL:Invalid CalendarInfo"));
+                User::RequestComplete( iCallerStatus, KErrNotFound );
+                return;
+                }
+            
+            FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL: entry id to be fetched: '%d'"), iReplaceItemId);             
+            agendautil = CNSmlAgendaDataStoreUtil::NewL();
+            if( agendautil )
+                {
+                CleanupStack::PushL(agendautil);
+                TRAP(err, agendautil->InitializeCalAPIsL( calfilename, iReplaceItemId ));
+                CleanupStack::Pop(agendautil);
+                }
+                
+            if ( err || !agendautil )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL: entry is not valid"));  
+                delete agendautil;
+                delete calfilename;             
+                User::RequestComplete( iCallerStatus, KErrNotFound );               
+                return;
+                }
+            delete agendautil;
+            delete calfilename;  
+            }
+            break;
+        default:
+            {
+            iDataMimeType = ENSmlNone;
+            User::RequestComplete( iCallerStatus, KErrNotSupported );
+            FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL \
+                       - KErrNotSupported: END"));
+            return;
+            }
+        }
+    
+    if ( !iSnapshotRegistered )
+        {
+        RegisterSnapshotL();
+        }
+   
+    //Reinitialize the Buffer
+    delete iItemData;
+    iItemData = NULL;
+    iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize );
+    iPos = 0;
+    
+    iState = ENSmlItemUpdating;
+    User::RequestComplete( iCallerStatus, KErrNone );
 	
-	iState = ENSmlItemUpdating;
-	User::RequestComplete( iCallerStatus, KErrNone );
-	_DBG_FILE("CNSmlAgendaDataStore::DoReplaceItemL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -759,7 +1059,7 @@
 //
 void CNSmlAgendaDataStore::DoReadItemL( TDes8& aBuffer )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoReadItemL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoReadItemL: BEGIN"));
     if ( iState != ENSmlItemOpen || !iItemData )
         {
         iPos = -1;
@@ -781,7 +1081,7 @@
         iItemData->Read( iPos, aBuffer, iItemData->Size() - iPos );
         iPos = -1;
         }
-	_DBG_FILE("CNSmlAgendaDataStore::DoReadItemL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoReadItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -791,7 +1091,7 @@
 //
 void CNSmlAgendaDataStore::DoWriteItemL( const TDesC8& aData )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoWriteItemL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoWriteItemL: BEGIN"));
 	if ( iState == ENSmlItemCreating || iState == ENSmlItemUpdating )
 		{
 		if ( iItemData )
@@ -806,7 +1106,7 @@
 			}
 		}
 	User::Leave( KErrNotReady );
-	_DBG_FILE("CNSmlAgendaDataStore::DoWriteItemL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoWriteItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -816,34 +1116,63 @@
 //
 void CNSmlAgendaDataStore::DoCommitItemL( TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitItemL: BEGIN");
-	iCallerStatus = &aStatus;
-	*iCallerStatus = KRequestPending;
-	
-	if ( iState != ENSmlItemCreating && iState != ENSmlItemUpdating )
-		{
-		User::RequestComplete( iCallerStatus, KErrNotReady );
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitItemL - KErrNotReady: END");
-		return;
-		}
-	
-	iItemData->Compress();
-	TInt error( KErrNone );
-	
-	if ( iState == ENSmlItemCreating )
-		{
-		TRAP( error, DoCommitCreateItemL() );
-		}
-	else // ENSmlItemUpdating
-		{
-        TRAP( error, DoCommitReplaceItemL() );
-		}
-	iReplaceItemId = -1;
-	iPos = -1;
-	iState = ENSmlOpenAndWaiting;
-	iRXEntryType = iTXEntryType;
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitItemL: BEGIN"));
+    iCallerStatus = &aStatus;
+    *iCallerStatus = KRequestPending;
+    
+    // Leave if Data Store is in wrong state
+    if ( iState != ENSmlItemCreating && iState != ENSmlItemUpdating )
+        {
+        User::RequestComplete( iCallerStatus, KErrNotReady );
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitItemL - KErrNotReady: END"));
+        return;
+        }
+    
+    iItemData->Compress();
+    TInt error( KErrNone );
+    
+    // RD_MULTICAL
+    switch(iDataMimeType)
+        {
+        case ENSmlCalendar:
+            {
+            if( iState == ENSmlItemCreating )
+                {
+                TRAP( error, DoCommitCreateCalItemL() );
+                }
+            else
+                {
+                TRAP( error, DoCommitReplaceCalItemL() );
+                }
+            }
+            break;
+        case ENSmlFolder:
+            {
+            if( iState == ENSmlItemCreating )
+                {
+                TRAP( error, DoCommitCreateFolderItemL() );
+                }
+            else
+                {
+                TRAP( error, DoCommitReplaceFolderItemL() );
+                }
+            }
+            break;
+        default:
+            {
+            FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateItemL - \
+                                           KErrNotSupported: END"));
+            User::Leave( KErrNotSupported );
+            }                
+        }
+    // RD_MULTICAL
+    
+    iReplaceItemId = -1;
+    iPos = -1;
+    iState = ENSmlOpenAndWaiting;
+    iRXEntryType = iTXEntryType;
     User::RequestComplete( iCallerStatus, error );    
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitItemL: END");
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -853,13 +1182,13 @@
 //
 void CNSmlAgendaDataStore::DoCloseItem()
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCloseItem: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoCloseItem: BEGIN"));
 	if ( iState == ENSmlItemOpen )
 		{
 		iPos = -1;
 		iState = ENSmlOpenAndWaiting;
 		}
-	_DBG_FILE("CNSmlAgendaDataStore::DoCloseItem: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoCloseItem: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -868,18 +1197,16 @@
 // -----------------------------------------------------------------------------
 //
 void CNSmlAgendaDataStore::DoMoveItemL( TSmlDbItemUid /*aUid*/,
-            TSmlDbItemUid /*aNewParent*/, TRequestStatus& aStatus )
+                                        TSmlDbItemUid /*aNewParent*/,
+                                        TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoMoveItemL: BEGIN");
-	iCallerStatus = &aStatus;
-	*iCallerStatus = KRequestPending;
-	if ( iState != ENSmlOpenAndWaiting )
-		{
-		User::RequestComplete( iCallerStatus, KErrNotReady );
-		return;
-		}
-	User::RequestComplete( iCallerStatus, KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataStore::DoMoveItemL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoMoveItemL: BEGIN"));
+	
+    iCallerStatus = &aStatus;
+    *iCallerStatus = KRequestPending;
+    User::RequestComplete( iCallerStatus, KErrNotSupported );
+	    
+	FLOG(_L("CNSmlAgendaDataStore::DoMoveItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -888,46 +1215,233 @@
 // -----------------------------------------------------------------------------
 //
 void CNSmlAgendaDataStore::DoDeleteItemL( TSmlDbItemUid aUid,
-                TRequestStatus& aStatus )
+                                          TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoDeleteItemL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL: BEGIN"));
+	FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL: aUid: '%d'"), aUid);
+	
+	TInt err(KErrNone);
 	iCallerStatus = &aStatus;
-	*iCallerStatus = KRequestPending;
-	if ( iState != ENSmlOpenAndWaiting )
-		{
-		User::RequestComplete( iCallerStatus, KErrNotReady );
-		return;
-		}
-
-    CCalEntry* entry = NULL;
-    TInt err( KErrNone );
-    TRAP( err, entry = iEntryView->FetchL( aUid ) );
-    CleanupStack::PushL( entry );	
+    *iCallerStatus = KRequestPending;
+    
+    // Leave is Data Store is in wrong state
+    if ( iState != ENSmlOpenAndWaiting )
+        {
+        User::RequestComplete( iCallerStatus, KErrNotReady );
+        return;
+        }
+    
+    //Check validity of UID
+    if ( aUid <= 0 )
+        {
+        User::RequestComplete( iCallerStatus, KErrCorrupt );
+        return;
+        }
 
-	if ( !entry || err == KErrNotFound )
-		{
-		CleanupStack::PopAndDestroy( entry ); // entry
-		User::RequestComplete( iCallerStatus, KErrNotFound );
-		return;
-		}
-	else if ( err )
-	    {
-	    CleanupStack::PopAndDestroy( entry ); // entry
-		User::RequestComplete( iCallerStatus, err );
-		return;
-	    }
+    // Check the Sync Status
+    if( iIsHierarchicalSyncSupported )
+        {
+        TCalLocalUid parentid( NULL );
+        TCalLocalUid entryid( aUid );
+       
+        TRAP( err, GetCalendarEntryIdL( parentid, entryid ));
+        if ( err )
+            {
+            FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL: Invalid UID"));
+            User::RequestComplete( iCallerStatus, KErrGeneral );
+            FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL - Sync Disabled: END"));
+            return;
+            }    
+        
+        if( !iAgendaAdapterHandler->FolderSyncStatusL( parentid ) )
+            {
+            User::RequestComplete( iCallerStatus, KErrGeneral );
+            FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL - Sync Disabled: END"));
+            return;
+            }
+        }
+     else
+        {
+        TBool syncstatus( EFalse );
+        HBufC* calfilename = iOpenedStoreName->AllocL();
+        TRAP( err, syncstatus = iAgendaAdapterHandler->FolderSyncStatusL( calfilename ) );
+        if( err || !syncstatus )
+            {
+            delete calfilename;
+            User::RequestComplete( iCallerStatus, KErrGeneral );
+            FLOG(_L("CNSmlAgendaDataStore::DoReplaceItemL - Sync Disabled: END"));
+            return;
+            }
+        delete calfilename;            
+        }
+     
+    //Determine the Mime Type
+    DataMimeType( aUid );
+    switch( iDataMimeType )
+        {
+        case ENSmlFolder:
+            {        
+            HBufC* calfilename = NULL;
+            //Get the Calendar information
+            TRAP(err, calfilename = iAgendaAdapterHandler->FolderNameL(aUid) );
+            if( err != KErrNone || NULL == calfilename )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL:Invalid CalendarInfo"));
+                User::RequestComplete( iCallerStatus, KErrNotFound );
+                return;
+                }
+            
+            FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL: name exists"));
+            CCalSession* vCalSession = CCalSession::NewL();
+            CleanupStack::PushL(vCalSession);
+            vCalSession->OpenL(calfilename->Des());
+            FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL: before deleting"));
+            TRAP(err, vCalSession->DeleteCalFileL(calfilename->Des()));
+            FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL: after deleting err: '%d'"), err);
+            if( err == KErrInUse )
+                {
+                // Delete all the entries associated with this CalFile
+                CNSmlAgendaDataStoreUtil* agendautil = NULL;
+                TBuf8<KBuffLength> keyBuff;
+                TInt aNumSuccessfulDeleted( 0 );
+                RArray<TCalLocalUid> uidArray;
+                CleanupClosePushL( uidArray );
+                TCalTime zeroTime;
+                zeroTime.SetTimeUtcL( Time::NullTTime() );
+                
+                agendautil = CNSmlAgendaDataStoreUtil::NewL();
+                if( agendautil )
+                    {
+                    CleanupStack::PushL(agendautil);
+                    TRAP(err, agendautil->InitializeCalAPIsL( calfilename ));
+                    CleanupStack::Pop(agendautil);
+                    }                      
+                if ( err || !agendautil )
+                    {
+                    FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL:Invalid CalendarInfo"));
+                    delete calfilename;
+                    User::RequestComplete( iCallerStatus, KErrNotFound );
+                    return;
+                    }            
+                agendautil->iEntryView->GetIdsModifiedSinceDateL( zeroTime, uidArray );
+                // ... and then delete them
+                agendautil->iEntryView->DeleteL( uidArray, aNumSuccessfulDeleted );
+                CleanupStack::PopAndDestroy( &uidArray ); // uidArray
+                delete agendautil;    
+                
+                // Get the CalFile
+                CCalCalendarInfo* caleninfo = vCalSession->CalendarInfoL();
+                CleanupStack::PushL(caleninfo);
+                
+                // Mark the CalFile as Hidden
+                caleninfo->SetEnabled( EFalse );
+                            
+                // Set the SyncStatus to False
+                keyBuff.Zero();
+                keyBuff.AppendNum( ESyncStatus );
+                TBool syncstatus( EFalse );
+                TPckgC<TBool> pckgSyncStatusValue( syncstatus );
+                caleninfo->SetPropertyL( keyBuff, pckgSyncStatusValue );
+                
+                // Mark the meta property as SoftDeleted
+                keyBuff.Zero();
+                keyBuff.AppendNum(EMarkAsDelete);
+                TPckgC<TBool> pkgSoftDelete( ETrue );
+                caleninfo->SetPropertyL(keyBuff, pkgSoftDelete);
+                
+                vCalSession->SetCalendarInfoL( *caleninfo );
+                CleanupStack::PopAndDestroy(caleninfo);            
+                }
+            else if( err != KErrNone )
+                {
+                CleanupStack::PopAndDestroy(vCalSession);
+                delete calfilename;
+                User::RequestComplete( iCallerStatus, KErrGeneral );
+                return;
+                }
+            CleanupStack::PopAndDestroy(vCalSession);            
+            delete calfilename;  
+            
+            //Update the array
+            TInt index = KErrNotFound;
+            TInt err = KErrNone;
+            TKeyArrayFix key( 0, ECmpTInt ); // Find key for Ids.
+       
+            err = iCalOffsetArr->Find( aUid, key, index );
+                  
+            if( err == KErrNone )
+                {
+                iCalOffsetArr->Delete(index);
+                FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL: updated the array"));
+                }
+            }
+            break;
+        case ENSmlCalendar:
+            {
+            CNSmlAgendaDataStoreUtil* agendautil = NULL;
+            HBufC* calfilename = NULL;
+            TCalLocalUid parentid(NULL);
+            TCalLocalUid entryid(aUid);
+            TInt err( KErrNone );
+            
+            if( iIsHierarchicalSyncSupported )
+                {
+                TRAP( err, GetCalendarEntryIdL( parentid, entryid ));
+                if ( err )
+                    {
+                    FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL:Parent Id is not Valid one"));
+                    User::RequestComplete( iCallerStatus, KErrNotFound );
+                    return;
+                    }
+                //Get the Folder Information
+                TRAP(err, calfilename = iAgendaAdapterHandler->FolderNameL(parentid) );
+                }
+            else
+                {
+                calfilename = iOpenedStoreName->AllocL();
+                }
+                
+            if( err != KErrNone || NULL == calfilename )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL:Invalid CalendarInfo"));
+                User::RequestComplete( iCallerStatus, KErrNotFound );
+                return;
+                }
+            
+            agendautil = CNSmlAgendaDataStoreUtil::NewL();
+            if( agendautil )
+                {
+                CleanupStack::PushL(agendautil);
+                TRAP(err, agendautil->InitializeCalAPIsL( calfilename, entryid ));
+                CleanupStack::Pop(agendautil);
+                }                      
+            if ( err || !agendautil )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::DoOpenItemL: entry is not valid"));
+                delete agendautil;
+                delete calfilename;
+                User::RequestComplete( iCallerStatus, KErrNotFound );
+                return;
+                }                
+            agendautil->iEntryView->DeleteL( *agendautil->iEntry );
+            delete agendautil;
+            delete calfilename;
+            }
+            break;
+        default:
+            break;
+        }
+    
+    //Update the Snapshots
+    if ( iChangeFinder )
+        {
+        TNSmlSnapshotItem item( aUid );
+        iChangeFinder->ItemDeleted( item );        
+        }
+        
+    User::RequestComplete( iCallerStatus, KErrNone );
 	    
-    iEntryView->DeleteL( *entry );
-	CleanupStack::PopAndDestroy( entry ); // entry
-	
-	if ( iChangeFinder )
-		{
-		TNSmlSnapshotItem item( aUid );
-		iChangeFinder->ItemDeleted( item );
-		}
-		
-	User::RequestComplete( iCallerStatus, KErrNone );
-	_DBG_FILE("CNSmlAgendaDataStore::DoDeleteItemL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoDeleteItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -936,13 +1450,13 @@
 // -----------------------------------------------------------------------------
 //
 void CNSmlAgendaDataStore::DoSoftDeleteItemL( TSmlDbItemUid /*aUid*/,
-                TRequestStatus& aStatus )
+                                              TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoSoftDeleteItemL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoSoftDeleteItemL: BEGIN"));
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	User::RequestComplete( iCallerStatus, KErrNotSupported );
-	_DBG_FILE("CNSmlAgendaDataStore::DoSoftDeleteItemL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoSoftDeleteItemL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -952,40 +1466,62 @@
 //
 void CNSmlAgendaDataStore::DoDeleteAllItemsL( TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoDeleteAllItemsL: BEGIN");
-	iCallerStatus = &aStatus;
-	*iCallerStatus = KRequestPending;
-	if ( iState != ENSmlOpenAndWaiting ) 
-		{
-		User::RequestComplete( iCallerStatus, KErrNotReady );
-		return;
-		}
-
-	// Delete all items
-	// First searh every UIDs ...
-	TInt aNumSuccessfulDeleted( 0 );
-	RArray<TCalLocalUid> uidArray;
-	CleanupClosePushL( uidArray );
-	TCalTime zeroTime;
-	zeroTime.SetTimeUtcL( Time::NullTTime() );
-	iEntryView->GetIdsModifiedSinceDateL( zeroTime, uidArray );
-	
-	
-	// ... and then delete them
-    iEntryView->DeleteL( uidArray, aNumSuccessfulDeleted );
-	CleanupStack::PopAndDestroy( &uidArray ); // uidArray
-
+    FLOG(_L("CNSmlAgendaDataStore::DoDeleteAllItemsL: BEGIN"));
+    iCallerStatus = &aStatus;
+    *iCallerStatus = KRequestPending;
+    if ( iState != ENSmlOpenAndWaiting ) 
+        {
+        User::RequestComplete( iCallerStatus, KErrNotReady );
+        return;
+        }
+    
+    if( iIsHierarchicalSyncSupported )
+        {
+        // TODO: Have to enable once the delete issue is fixed by Organizer
+        FLOG(_L("CNSmlAgendaDataStore::DoDeleteAllItemsL: Temporarily doesnot support"));
+        User::RequestComplete( iCallerStatus, KErrNotSupported );
+        return;
+        }
+    else
+        {
+        CNSmlAgendaDataStoreUtil* agendautil = NULL;
+        HBufC* calfilename = NULL;
+        
+        agendautil = CNSmlAgendaDataStoreUtil::NewL();
+        calfilename = iOpenedStoreName->AllocL();
+        if( agendautil )
+            {
+            CleanupStack::PushL(agendautil);
+            agendautil->InitializeCalAPIsL( calfilename ); 
+            CleanupStack::Pop(agendautil);
+            // Delete all items
+            // First searh every UIDs ...
+            TInt aNumSuccessfulDeleted( 0 );
+            RArray<TCalLocalUid> uidArray;
+            CleanupClosePushL( uidArray );
+            TCalTime zeroTime;
+            zeroTime.SetTimeUtcL( Time::NullTTime() );
+            agendautil->iEntryView->GetIdsModifiedSinceDateL( zeroTime, uidArray );
+            
+            // ... and then delete them
+            agendautil->iEntryView->DeleteL( uidArray, aNumSuccessfulDeleted );
+            CleanupStack::PopAndDestroy( &uidArray ); // uidArray            
+            }
+        delete agendautil;
+        delete calfilename;
+        }
+        
     // Update changefinder
-	if ( iChangeFinder )
-		{
-		iChangeFinder->ResetL();
-		}
-	iSnapshotRegistered = EFalse;
-	RegisterSnapshotL();
-	
-	User::RequestComplete( iCallerStatus, KErrNone );
-	
-	_DBG_FILE("CNSmlAgendaDataStore::DoDeleteAllItemsL: END");
+    if ( iChangeFinder )
+        {
+        iChangeFinder->ResetL();
+        }
+    iSnapshotRegistered = EFalse;
+    RegisterSnapshotL();
+    
+    User::RequestComplete( iCallerStatus, KErrNone );
+    
+    FLOG(_L("CNSmlAgendaDataStore::DoDeleteAllItemsL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -995,7 +1531,7 @@
 //
 TBool CNSmlAgendaDataStore::DoHasSyncHistory() const
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoHasSyncHistory: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoHasSyncHistory: BEGIN"));
 	TBool ret = EFalse;
 	if ( iHasHistory )
 		{
@@ -1012,7 +1548,7 @@
 		{
 		iChangeFinder->SetDataStoreUid( iOpenedStoreId );
 		}
-	_DBG_FILE("CNSmlAgendaDataStore::DoHasSyncHistory: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoHasSyncHistory: END"));
 	return ret;
     }
 
@@ -1023,13 +1559,40 @@
 //
 const MSmlDataItemUidSet& CNSmlAgendaDataStore::DoAddedItems() const
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoAddedItems: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoAddedItems: BEGIN"));
 	if ( iState == ENSmlOpenAndWaiting )
 		{
 		iNewUids->Reset();
 		TRAP_IGNORE( iChangeFinder->FindNewItemsL( *iNewUids ) );
+		
+		// RD_MULTICAL		
+        if( iIsHierarchicalSyncSupported )
+            {
+            CNSmlDataItemUidSet* inactiveuids = NULL;
+            TRAP_IGNORE(inactiveuids = ActiveItemsL( *iNewUids ));
+            delete inactiveuids;
+            }
+        else
+            {
+            TBool syncstatus( EFalse );
+            HBufC* calfilename = NULL;
+            TRAP_IGNORE( calfilename = iOpenedStoreName->AllocL() );
+            TRAP_IGNORE( syncstatus = iAgendaAdapterHandler->FolderSyncStatusL( calfilename ) );
+            if( !syncstatus )
+                {
+                iNewUids->Reset();
+                }
+            delete calfilename;
+            }
+        // RD_MULTICAL		
 		}
-	_DBG_FILE("CNSmlAgendaDataStore::DoAddedItems: END");
+	
+	for( TInt count = 0; count < iNewUids->ItemCount(); count++ )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoAddedItems: list '%d'"), iNewUids->ItemAt(count) );
+        }
+	
+	FLOG(_L("CNSmlAgendaDataStore::DoAddedItems: END"));
 	return *iNewUids;
     }
 
@@ -1040,13 +1603,93 @@
 //
 const MSmlDataItemUidSet& CNSmlAgendaDataStore::DoDeletedItems() const
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoDeletedItems: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoDeletedItems: BEGIN"));
 	if ( iState == ENSmlOpenAndWaiting )
 		{
 		iDeletedUids->Reset();
-		TRAP_IGNORE( iChangeFinder->FindDeletedItemsL( *iDeletedUids ) );
+		TRAP_IGNORE( iChangeFinder->FindDeletedItemsL( *iDeletedUids ) );		
+	
+    	// RD_MULTICAL
+    	if( iIsHierarchicalSyncSupported )
+    	    {
+        	CArrayFixFlat<TInt>* folderuidarr; 
+        	CNSmlDataItemUidSet* tempdeleteuids; 
+        	TSmlDbItemUid uid(0);
+        	
+        	folderuidarr = new CArrayFixFlat<TInt>( KArrayGranularity );
+        	tempdeleteuids= new CNSmlDataItemUidSet();
+        	
+        	// Get the list of Folder ids
+        	for( TInt count =0; count < iDeletedUids->ItemCount(); count++ )
+                {
+                uid = iDeletedUids->ItemAt(count);
+                
+                if( 0 == (uid % iCalOffsetVal) )
+                    {
+                    TRAP_IGNORE( folderuidarr->AppendL(uid) );
+                    FLOG(_L("CNSmlAgendaDataStore::DoDeletedItems: Folderuid: '%d'"), uid);
+                    }        
+                }
+        	
+        	CNSmlDataItemUidSet* inactiveuids = NULL;
+        	TRAP_IGNORE( inactiveuids = ActiveItemsL( *iDeletedUids ) );
+            delete inactiveuids;
+        	
+        	if( folderuidarr->Count() > 0 )
+        	    {
+        	    TInt index = KErrNotFound;
+                TInt err = KErrNone;
+                TKeyArrayFix key( 0, ECmpTInt ); // Find key for Ids.
+                
+                // Fill the temp uid array
+                for (TInt folderidcount = 0; folderidcount< folderuidarr->Count(); folderidcount++)
+                    {
+                    tempdeleteuids->AddItem(folderuidarr->At(folderidcount));
+                    }
+                
+        	    // Filter out ID's of entries for Folder deletion
+                for( TInt count =0; count < iDeletedUids->ItemCount(); count++ )
+                    {
+                    uid = iDeletedUids->ItemAt(count);
+                    uid = (uid/iCalOffsetVal)*iCalOffsetVal;
+                    err = folderuidarr->Find( uid, key, index );
+                    if (err == KErrNone)
+                        {
+                        break;
+                        }
+                    tempdeleteuids->AddItem(uid);
+                    }
+                // Store the proper UID values
+                iDeletedUids->Reset();
+                for( TInt count =0; count < tempdeleteuids->ItemCount(); count++ )
+                    {
+                    iDeletedUids->AddItem(tempdeleteuids->ItemAt(count));
+                    }
+        	    }	
+        	delete tempdeleteuids;
+        	delete folderuidarr;
+    	    }
+    	else
+    	    {
+    	    TBool syncstatus( EFalse );
+    	    HBufC* calfilename = NULL;
+    	    TRAP_IGNORE( calfilename = iOpenedStoreName->AllocL() );
+    	    TRAP_IGNORE( syncstatus = iAgendaAdapterHandler->FolderSyncStatusL( calfilename ) );
+            if( !syncstatus )
+                {
+                iDeletedUids->Reset();
+                }
+            delete calfilename;
+    	    }	    
+    	// RD_MULTICAL
 		}
-	_DBG_FILE("CNSmlAgendaDataStore::DoDeletedItems: END");
+	
+	for( TInt count = 0; count < iDeletedUids->ItemCount(); count++ )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoDeletedItems: list '%d'"), iDeletedUids->ItemAt(count) );
+        }
+	
+	FLOG(_L("CNSmlAgendaDataStore::DoDeletedItems: END"));	
 	return *iDeletedUids;
     }
 
@@ -1057,14 +1700,14 @@
 //
 const MSmlDataItemUidSet& CNSmlAgendaDataStore::DoSoftDeletedItems() const
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoSoftDeletedItems: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoSoftDeletedItems: BEGIN"));
 	if ( iState == ENSmlOpenAndWaiting )
 		{
 		iSoftDeletedUids->Reset();
 		TRAP_IGNORE(
 		    iChangeFinder->FindSoftDeletedItemsL( *iSoftDeletedUids ) );
 		}
-	_DBG_FILE("CNSmlAgendaDataStore::DoSoftDeletedItems: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoSoftDeletedItems: END"));
 	return *iSoftDeletedUids;
     }
 
@@ -1075,13 +1718,58 @@
 //
 const MSmlDataItemUidSet& CNSmlAgendaDataStore::DoModifiedItems() const
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoModifiedItems: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoModifiedItems: BEGIN"));
 	if ( iState == ENSmlOpenAndWaiting )
 		{
 		iReplacedUids->Reset();
 		TRAP_IGNORE( iChangeFinder->FindChangedItemsL( *iReplacedUids ) );
+		
+		// RD_MULTICAL
+	    if( iIsHierarchicalSyncSupported )
+            {
+            CNSmlDataItemUidSet* inactiveuids = NULL;
+            TRAP_IGNORE( inactiveuids = ActiveItemsL( *iReplacedUids ) );
+            
+            if( inactiveuids )
+                {
+                TRAP_IGNORE( InternalizeCommittedUidL() );
+                for( TInt count = 0; count < inactiveuids->ItemCount(); count++ )
+                    {
+                    TSmlDbItemUid inactiveuid = inactiveuids->ItemAt(count);
+                    FLOG(_L("CNSmlAgendaDataStore::DoModifiedItems: inactive '%d'"), inactiveuid );
+                    for( TInt uidcount = 0; uidcount < iCommittedUidArr->ItemCount(); uidcount++ )
+                        {
+                        if( inactiveuid == iCommittedUidArr->ItemAt( uidcount ) )
+                            {
+                            FLOG(_L("CNSmlAgendaDataStore::DoModifiedItems: '%d'"), inactiveuid );
+                            iReplacedUids->AddItem( inactiveuid );
+                            }
+                        }
+                    }            
+                delete inactiveuids;
+                }
+            }
+        else
+            {
+            TBool syncstatus( EFalse );
+            HBufC* calfilename = NULL;
+            TRAP_IGNORE( calfilename= iOpenedStoreName->AllocL() );
+            TRAP_IGNORE( syncstatus = iAgendaAdapterHandler->FolderSyncStatusL( calfilename ) );
+            if( !syncstatus )
+                {
+                iReplacedUids->Reset();
+                }
+            delete calfilename;
+            }	    
+        // RD_MULTICAL
 		}
-	_DBG_FILE("CNSmlAgendaDataStore::DoModifiedItems: END");
+	
+	 for( TInt count = 0; count < iReplacedUids->ItemCount(); count++ )
+	     {
+	     FLOG(_L("CNSmlAgendaDataStore::DoModifiedItems: list '%d'"), iReplacedUids->ItemAt(count) );
+	     }
+	
+	FLOG(_L("CNSmlAgendaDataStore::DoModifiedItems: END"));
 	return *iReplacedUids;
     }
 
@@ -1092,13 +1780,19 @@
 //
 const MSmlDataItemUidSet& CNSmlAgendaDataStore::DoMovedItems() const
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoMovedItems: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoMovedItems: BEGIN"));
 	if ( iState == ENSmlOpenAndWaiting )
 		{
 		iMovedUids->Reset();
 		TRAP_IGNORE( iChangeFinder->FindMovedItemsL( *iMovedUids ) );
 		}
-	_DBG_FILE("CNSmlAgendaDataStore::DoMovedItems: END");
+	
+	for( TInt count = 0; count < iMovedUids->ItemCount(); count++ )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoMovedItems: list '%d'"), iMovedUids->ItemAt(count) );
+        }
+	
+	FLOG(_L("CNSmlAgendaDataStore::DoMovedItems: END"));
 	return *iMovedUids;
     }
 
@@ -1109,7 +1803,7 @@
 //
 void CNSmlAgendaDataStore::DoResetChangeInfoL( TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoResetChangeInfoL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoResetChangeInfoL: BEGIN"));
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	if ( iState != ENSmlOpenAndWaiting ) 
@@ -1124,7 +1818,7 @@
 		RegisterSnapshotL();
 		}
 	User::RequestComplete( iCallerStatus, KErrNone );
-	_DBG_FILE("CNSmlAgendaDataStore::DoResetChangeInfoL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoResetChangeInfoL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -1135,7 +1829,7 @@
 void CNSmlAgendaDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus,
                 const MSmlDataItemUidSet& aItems )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitChangeInfoL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitChangeInfoL: BEGIN"));
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	if ( iState != ENSmlOpenAndWaiting ) 
@@ -1144,8 +1838,28 @@
 		return;
 		}
 	iChangeFinder->CommitChangesL( aItems );
+	
+	// Save the UIDs to the list
+	iCommittedUidArr->Reset();
+	for ( TInt count = 0; count < aItems.ItemCount(); count++ )
+        {
+        iCommittedUidArr->AddItem( aItems.ItemAt( count ) );
+        }
+	CNSmlDataItemUidSet* inactiveuids = NULL;
+	TRAP_IGNORE( inactiveuids = ActiveItemsL( *iCommittedUidArr ) ); 
+	delete inactiveuids;
+	
+	// Print the iCommittedUidArr array
+	FLOG(_L("CNSmlAgendaAdapter::DoCommitChangeInfoL(): CommittedUidArr"));
+    for( TInt count = 0; count < iCommittedUidArr->ItemCount(); count++ )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::iCommittedUidArr: list '%d'"), iCommittedUidArr->ItemAt(count) );
+        }   
+    
+    // Store the array in the stream
+    ExternalizeCommittedUidL();
 	User::RequestComplete( iCallerStatus, KErrNone );
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitChangeInfoL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitChangeInfoL: END"));
     }
 
 // -----------------------------------------------------------------------------
@@ -1155,7 +1869,7 @@
 //
 void CNSmlAgendaDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus )
     {
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitChangeInfoL: BEGIN");
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitChangeInfoL: BEGIN"));
 	iCallerStatus = &aStatus;
 	*iCallerStatus = KRequestPending;
 	if ( iState != ENSmlOpenAndWaiting ) 
@@ -1164,8 +1878,17 @@
 		return;
 		}
 	iChangeFinder->CommitChangesL();
+    // Print the iInterCommittedUidArr array
+    FLOG(_L("CNSmlAgendaAdapter::DoCommitChangeInfoL() Without Param: CommittedUidArr"));
+    for( TInt count = 0; count < iCommittedUidArr->ItemCount(); count++ )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::iCommittedUidArr: list '%d'"), iCommittedUidArr->ItemAt(count) );
+        }
+    
+    // Store the array in the stream
+    ExternalizeCommittedUidL();
 	User::RequestComplete( iCallerStatus, KErrNone );
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitChangeInfoL: END");
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitChangeInfoL: END"));
     }
     
 // -----------------------------------------------------------------------------
@@ -1175,18 +1898,40 @@
 //
 void CNSmlAgendaDataStore::RegisterSnapshotL()
     {
-	_DBG_FILE("CNSmlAgendaAdapter::RegisterSnapshotL(): begin");
+	FLOG(_L("CNSmlAgendaAdapter::RegisterSnapshotL(): begin"));
 	CArrayFixSeg<TNSmlSnapshotItem>* snapshot =
 	                new ( ELeave ) CArrayFixSeg<TNSmlSnapshotItem>( 64 );
 	CleanupStack::PushL( snapshot );
-	
-    // First find all entries ...
 	RArray<TCalLocalUid> uidArray;
 	CleanupClosePushL( uidArray );
-	TCalTime zeroTime;
-	zeroTime.SetTimeUtcL( Time::NullTTime() );
-	iEntryView->GetIdsModifiedSinceDateL( zeroTime, uidArray );
 	
+	// RD_MULTICAL
+	if( iIsHierarchicalSyncSupported )
+	    {
+    	// First find all entries ...
+	    iAgendaAdapterHandler->SynchronizableCalendarIdsL( iCalOffsetArr );  
+	    // Populate the Entry ID's associated with the CalFile
+	    SynchronizableCalEntryIdsL( uidArray );
+        }
+	else
+	    {
+	    HBufC* calfilename = iOpenedStoreName->AllocL();
+	    CNSmlAgendaDataStoreUtil* agendautil = CNSmlAgendaDataStoreUtil::NewL();
+        if( agendautil )
+            {
+            CleanupStack::PushL(agendautil);
+            agendautil->InitializeCalAPIsL( calfilename );
+            CleanupStack::Pop(agendautil);
+            }	   
+	    // First find all entries ...
+        TCalTime zeroTime;
+        zeroTime.SetTimeUtcL( Time::NullTTime() );
+        agendautil->iEntryView->GetIdsModifiedSinceDateL( zeroTime, uidArray );
+        delete agendautil;
+        delete calfilename;
+	    }
+	// RD_MULTICAL
+    
 	// ... and then create snapshot items
 	for ( TInt i = 0; i < uidArray.Count(); i++ )
 	    {
@@ -1197,15 +1942,38 @@
 	        }
 	    }
 	
-	CleanupStack::PopAndDestroy( &uidArray );
+	CleanupStack::PopAndDestroy( &uidArray );	
+	
+    for ( TInt i = 0; i < snapshot->Count(); i++ )
+        {
+        TNSmlSnapshotItem item = snapshot->At(i);
+        FLOG(_L("CNSmlAgendaAdapter::RegisterSnapshotL(): id: '%d'"), item.ItemId());
+        }
 		
 	iChangeFinder->SetNewSnapshot( snapshot );
 	
+	// Save the UIDs to the list
+	iCommittedUidArr->Reset();
+	for ( TInt count = 0; count < snapshot->Count(); count++ )
+        {
+        iCommittedUidArr->AddItem( snapshot->At( count ).ItemId() );
+        }
+	CNSmlDataItemUidSet* inactiveuids = NULL;
+	TRAP_IGNORE( inactiveuids = ActiveItemsL( *iCommittedUidArr ) );
+	delete inactiveuids;
+	// Print the iCommittedUidArr array
+	FLOG(_L("CNSmlAgendaAdapter::RegisterSnapshotL(): CommittedUidArr"));
+	for( TInt count = 0; count < iCommittedUidArr->ItemCount(); count++ )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::RegisterSnapshotL: list '%d'"), iCommittedUidArr->ItemAt(count) );
+        }
+	
 	// iChangeFinder takes ownership of items
 	CleanupStack::Pop( snapshot );
+	    
 	iSnapshotRegistered = ETrue;
 	
-	_DBG_FILE("CNSmlAgendaAdapter::RegisterSnapshotL(): end");
+	FLOG(_L("CNSmlAgendaAdapter::RegisterSnapshotL(): end"));
     }
 
 // -----------------------------------------------------------------------------
@@ -1215,25 +1983,85 @@
 TNSmlSnapshotItem CNSmlAgendaDataStore::CreateSnapshotItemL(
                 const TCalLocalUid& aUid )
     {
+    FLOG(_L("CNSmlAgendaAdapter::CreateSnapshotItemL(): Begin"));
+    
     TNSmlSnapshotItem item( 0 );
-    CCalEntry* entry = iEntryView->FetchL( aUid );
-    CleanupStack::PushL( entry );
-
-    if( entry )
-		{
-		CCalEntry::TReplicationStatus replicationStatus =
-		                    entry->ReplicationStatusL();
-		if ( CanBeSynchronized( replicationStatus ) )
-			{
-			TUint intUid = entry->LocalUidL();
-			item.SetItemId( intUid );
-			item.SetLastChangedDate(
-			                entry->LastModifiedDateL().TimeUtcL() );
-			item.SetSoftDelete( EFalse );
-			}
-		}
-		
-    CleanupStack::PopAndDestroy( entry ); // entry
+    DataMimeType( aUid );
+    
+    switch( iDataMimeType )
+        {
+        case ENSmlFolder:
+            {
+            item = iAgendaAdapterHandler->CreateFolderSnapShotItemL( aUid );
+            }
+            break;
+        case ENSmlCalendar:
+            {
+            CNSmlAgendaDataStoreUtil* agendautil = NULL;
+            HBufC* calfilename = NULL;
+            TCalLocalUid parentid(NULL);
+            TCalLocalUid entryid(aUid);
+            TInt err( KErrNone );
+            
+            if( iIsHierarchicalSyncSupported )
+                {
+                TRAP( err, GetCalendarEntryIdL( parentid, entryid ));
+                if ( err )
+                    {
+                    FLOG(_L("CNSmlAgendaDataStore::CreateSnapshotItemL:Parent Id is not Valid one"));
+                    return item;
+                    }
+                //Get the Folder Information
+                TRAP(err, calfilename = iAgendaAdapterHandler->FolderNameL(parentid) );
+                }  
+            else
+                {
+                calfilename = iOpenedStoreName->AllocL();
+                }
+                
+             if( err != KErrNone || NULL == calfilename )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::CreateSnapshotItemL:Invalid CalendarInfo"));
+                return item;
+                }
+            
+            FLOG(_L("CNSmlAgendaDataStore::CreateSnapshotItemL:Parent Id: '%d'"), parentid);
+            FLOG(_L("CNSmlAgendaDataStore::CreateSnapshotItemL:Entry Id: '%d'"), entryid);
+            
+            agendautil = CNSmlAgendaDataStoreUtil::NewL();
+            if( agendautil )
+                {
+                CleanupStack::PushL(agendautil);
+                TRAP(err, agendautil->InitializeCalAPIsL( calfilename, entryid ));
+                CleanupStack::Pop(agendautil);
+                }            
+            if ( err || !agendautil )
+                {
+                FLOG(_L("CNSmlAgendaDataStore::CreateSnapshotItemL: entry is not valid"));  
+                delete agendautil;
+                delete calfilename; 
+                return item;
+                }
+         
+            CCalEntry::TReplicationStatus replicationStatus =
+                                            agendautil->iEntry->ReplicationStatusL();
+            if ( CanBeSynchronized( replicationStatus ) )
+                {
+                TUint intUid = agendautil->iEntry->LocalUidL() + parentid;
+                item.SetItemId( intUid );
+                item.SetLastChangedDate(
+                        agendautil->iEntry->LastModifiedDateL().TimeUtcL() );
+                item.SetSoftDelete( EFalse );
+                }
+            delete agendautil;
+            delete calfilename;
+            }
+            break;
+        default:
+            break;
+        }
+    FLOG(_L("CNSmlAgendaAdapter::CreateSnapshotItemL(): end"));
+    
 	return item;
     }
 
@@ -1244,9 +2072,10 @@
 //
 CDesCArray* CNSmlAgendaDataStore::DoListAgendaFilesLC() const
     {
-    CDesCArray* array = iVCalSession->ListCalFilesL();    
-	CleanupStack::PushL( array );
-	return array;
+    CDesCArray* array = new (ELeave) CDesCArrayFlat(1);
+    array->AppendL(*iDefaultStoreFileName);
+    CleanupStack::PushL( array );
+    return array;
     }
 
 // -----------------------------------------------------------------------------
@@ -1256,11 +2085,11 @@
 //
 const TDesC& CNSmlAgendaDataStore::DoGetDefaultFileNameL() const
     {
-	if ( !iDefaultStoreName )
+	if ( !iDefaultStoreFileName )
 		{
         User::Leave( KErrGeneral );
 		}
-	return *iDefaultStoreName;
+	return *iDefaultStoreFileName;
     }
 
 // -----------------------------------------------------------------------------
@@ -1283,337 +2112,538 @@
 //
 CSmlDataStoreFormat* CNSmlAgendaDataStore::DoOwnStoreFormatL()
 	{
-	_DBG_FILE("CNSmlAgendaDataStore:::DoOwnStoreFormatL(): BEGIN");
-	TFileName fileName;
-	TParse parse;
+	FLOG(_L("CNSmlAgendaDataStore:::DoOwnStoreFormatL(): BEGIN"));
+	
+	AgendaAdapterHandlerL();
 	
-	// Check correct Data Sync protocol
-	TInt value( EDataSyncNotRunning );
-	TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys,
-                                 KDataSyncStatus,
-                                 value );
-	if ( error == KErrNone &&
-	     value == EDataSyncRunning )
+	if( NULL == iAgendaAdapterHandler )
 	    {
-	    parse.Set( KNSmlDSAgendaDataStoreRsc_1_1_2,
-	               &KDC_RESOURCE_FILES_DIR, NULL );
-	    }
-	else // error or protocol version 1.2 
-	    {
-	    parse.Set( KNSmlDSAgendaDataStoreRsc_1_2,
-	               &KDC_RESOURCE_FILES_DIR, NULL );
+        FLOG(_L("CNSmlAgendaDataStore:::DoOwnStoreFormatL(): Invalid AgendaAdapterHandler Error END"));
+        User::Leave( KErrGeneral );
 	    }
 	
-	fileName = parse.FullName();
-	RResourceFile resourceFile;
-	BaflUtils::NearestLanguageFile( iRfs, fileName );
+    TFileName fileName;
+    TParse* parse = NULL;
+    parse = new(ELeave) TParse();
+    CleanupStack::PushL( parse );
+    
+    // Check correct Data Sync protocol
+    TInt value( EDataSyncNotRunning );
+    TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys,
+                                 KDataSyncStatus,
+                                 value );
+    
+    FLOG(_L("CNSmlAgendaDataStore:::DoOwnStoreFormatL(): SyncStatus: '%d'"), KDataSyncStatus);
+    FLOG(_L("CNSmlAgendaDataStore:::DoOwnStoreFormatL(): value: '%d'"), value);
+    
+    if ( error == KErrNone &&
+         value == EDataSyncRunning )
+        {
+        parse->Set( KNSmlDSAgendaDataStoreRsc_1_1_2,
+                          &KDC_RESOURCE_FILES_DIR, NULL );
+        }
+    else
+        { 
+        FLOG(_L("CNSmlAgendaDataStore:::DoOwnStoreFormatL(): Invoking AdapterHandler Implementation"));
+        CleanupStack::PopAndDestroy( parse );
+        return iAgendaAdapterHandler->StoreFormatL( iStringPool );
+        }
+    
+    fileName = parse->FullName();
+    RResourceFile resourceFile;
+    BaflUtils::NearestLanguageFile( iRfs, fileName );
 
-	TRAPD( leavecode, resourceFile.OpenL( iRfs,fileName ) );
-	if ( leavecode != 0 )
-		{
-		CleanupStack::PopAndDestroy(); // parse
-		_DBG_FILE("CNSmlAgendaDataProvider::DoStoreFormatL(): END");
-		User::Leave( leavecode );
-		}
-	CleanupClosePushL( resourceFile );
-	HBufC8* profileRes = resourceFile.AllocReadLC( NSML_AGENDA_DATA_STORE );
-	TResourceReader reader;
-	reader.SetBuffer( profileRes );
+    TRAPD( leavecode, resourceFile.OpenL( iRfs,fileName ) );
+    if ( leavecode != 0 )
+        {
+        CleanupStack::PopAndDestroy(); // parse
+        FLOG(_L("CNSmlAgendaDataStore:::StoreFormatL(): Error END"));
+        User::Leave( leavecode );
+        }
+    
+    CleanupClosePushL( resourceFile );
+    HBufC8* buffer = resourceFile.AllocReadLC( NSML_AGENDA_DATA_STORE );
+    TResourceReader reader;
+    reader.SetBuffer( buffer );
 
-	CSmlDataStoreFormat* dsFormat = CSmlDataStoreFormat::NewLC( iStringPool,
-	                                                            reader );
-	CleanupStack::Pop();
-	CleanupStack::PopAndDestroy( 2 ); // resourceFile, profileRes
-	_DBG_FILE("CNSmlAgendaDataStore:::DoOwnStoreFormatL(): END");
-	return dsFormat;
+    CSmlDataStoreFormat* dsFormat = NULL;
+    dsFormat = CSmlDataStoreFormat::NewLC( iStringPool, reader );
+    CleanupStack::Pop(); // dsFormat
+    CleanupStack::PopAndDestroy( 3 ); // buffer, resourceFile, parse
+    
+    FLOG(_L("CNSmlAgendaDataStore::DoOwnStoreFormatL: END"));
+    return dsFormat;
 	}
 
 // -----------------------------------------------------------------------------
-// CNSmlAgendaDataStore::DoCommitCreateItemL
-// Commit item data to database when adding item.
+// CNSmlAgendaDataStore::DoCommitCreateCalItemL
+// Commit Calendar item data to database when adding item.
 // -----------------------------------------------------------------------------
 //
-void CNSmlAgendaDataStore::DoCommitCreateItemL()
+void CNSmlAgendaDataStore::DoCommitCreateCalItemL()
     {
-    _DBG_FILE("CNSmlAgendaDataStore::DoCommitCreateItemL: BEGIN");
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL: BEGIN"));
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL: Parentid: '%d'"), iParentItemId);
     iState = ENSmlOpenAndWaiting; // iState set to closed to handle leave
 	CCalEntry::TReplicationStatus  replicationStatus;
-	
+	TInt err(KErrNone);
+	CNSmlAgendaDataStoreUtil* agendautil = NULL;
+	HBufC* calfilename = NULL;
 	RBufReadStream readStream;
 	readStream.Open( *iItemData );
 	readStream.PushL();
 
     RPointerArray<CCalEntry> rdArray;
 	CleanupStack::PushL( PtrArrCleanupItemRArr ( CCalEntry, &rdArray ) );
-	if ( iRXEntryType == ENSmlICal )
-	    {
-	    _DBG_FILE("CNSmlAgendaDataStore::DoCommitCreateItemL: ImportICalendarL");
-	    iImporter->ImportICalendarL( readStream, rdArray );
-	    }
-    else if ( iRXEntryType == ENSmlVCal )
+	
+    if( iIsHierarchicalSyncSupported )
         {
-        _DBG_FILE("CNSmlAgendaDataStore::DoCommitCreateItemL: ImportVCalendarL");
-        iImporter->ImportVCalendarL( readStream, rdArray );
+        //Get the Folder Information
+        TRAP(err, calfilename = iAgendaAdapterHandler->FolderNameL(iParentItemId) );
         }
     else
         {
+        calfilename = iOpenedStoreName->AllocL();
+        }
+        
+    if( err != KErrNone || NULL == calfilename )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL:Invalid CalendarInfo"));
         CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitCreateItemL - \
-		           KErrNotSupported: END");
+        User::Leave( KErrNotFound );
+        }
+        
+    agendautil = CNSmlAgendaDataStoreUtil::NewL();
+    if( agendautil )
+        {
+        CleanupStack::PushL(agendautil);
+        TRAP(err, agendautil->InitializeCalAPIsL( calfilename ));
+        CleanupStack::Pop(agendautil);
+        }   
+        
+    if ( err || !agendautil )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL:Invalid CalendarInfo"));
+        CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
+        delete calfilename;
+        User::Leave( KErrNotFound );
+        }
+        
+    if ( iRXEntryType == ENSmlICal )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL: ImportICalendarL"));           
+        agendautil->iImporter->ImportICalendarL( readStream, rdArray );
+        }
+    else if ( iRXEntryType == ENSmlVCal )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL: ImportVCalendarL"));
+        agendautil->iImporter->ImportVCalendarL( readStream, rdArray );
+        }
+    else
+        {
+        delete agendautil;
+        delete calfilename; 
+        CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL - \
+                   KErrNotSupported: END"));
         User::Leave( KErrNotSupported );
         }
     
     // If rdArray is empty or there is multiple items then return error
-	// Multiple items are not supported
-	if ( rdArray.Count() != 1 )
-	    {
-	    CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitCreateItemL - \
-		           Multiple items are not supported: END");
+    // Multiple items are not supported
+    if ( rdArray.Count() != 1 )
+        {
+        delete agendautil;
+        delete calfilename; 
+        CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL - \
+                   Multiple items are not supported: END"));
         User::Leave( KErrNotSupported );
-	    }
-	    
-    TInt err( KErrNone );
-
-    _DBG_FILE("CNSmlAgendaDataStore::DoCommitCreateItemL: before StoreL");
-    TRAP( err, iInterimUtils->StoreL( *iEntryView, *rdArray[0], ETrue ) );
-    DBG_ARGS(_S("CNSmlAgendaDataStore::DoCommitCreateItemL: after StoreL '%d'"), err );
+        }           
+        
+    err = KErrNone;    
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL: before StoreL"));
+    TRAP( err, iInterimUtils->StoreL( *agendautil->iEntryView, *rdArray[0], ETrue ) );
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL: after StoreL '%d'"), err );
     if ( err )
         {
+        delete agendautil;
+        delete calfilename; 
         CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitCreateItemL - \
-		           Error at storing item to database: END");
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL - \
+                   Error at storing item to database: END"));
         User::Leave( KErrGeneral );
         }
 
-    *iAddItemId = rdArray[0]->LocalUidL();
+    *iAddItemId = rdArray[0]->LocalUidL();        
+    CCalEntry* newEntry = agendautil->iEntryView->FetchL( *iAddItemId );
     
-    CCalEntry* newEntry = iEntryView->FetchL( *iAddItemId );
+    // RD_MULTICAL
+    if( iIsHierarchicalSyncSupported )
+        {
+        *iAddItemId = *iAddItemId + iParentItemId;
+        }
+    // RD_MULTICAL
     
     if( newEntry )
-    	{
-	    CleanupStack::PushL( newEntry );
+        {
+        CleanupStack::PushL( newEntry );
         
-		replicationStatus = newEntry->ReplicationStatusL();
-	
-    	if ( CanBeSynchronized( replicationStatus ) )
-			{
-			if ( iChangeFinder )
-				{
-				TNSmlSnapshotItem item( *iAddItemId );
-        			item.SetLastChangedDate(
-                   	newEntry->LastModifiedDateL().TimeUtcL() );
-            	item.SetSoftDelete( EFalse );
-				TRAPD( changeFinderError, iChangeFinder->ItemAddedL( item ) );
-				if ( changeFinderError == KErrAlreadyExists )
-			    	{
-			    	iChangeFinder->ItemUpdatedL( item );
-			    	}
-				else
-			    	{
-			    	User::LeaveIfError( changeFinderError );    
-			    	}
-				}
-			}
-    	CleanupStack::PopAndDestroy();// newEntry,
-    	}
+        replicationStatus = newEntry->ReplicationStatusL();
+    
+        if ( CanBeSynchronized( replicationStatus ) )
+            {
+            if ( iChangeFinder )
+                {
+                TNSmlSnapshotItem item( *iAddItemId );
+                    item.SetLastChangedDate(
+                    newEntry->LastModifiedDateL().TimeUtcL() );
+                item.SetSoftDelete( EFalse );
+                TRAPD( changeFinderError, iChangeFinder->ItemAddedL( item ) );
+                if ( changeFinderError == KErrAlreadyExists )
+                    {
+                    iChangeFinder->ItemUpdatedL( item );
+                    }
+                else
+                    {
+                    User::LeaveIfError( changeFinderError );    
+                    }
+                }
+            }
+        CleanupStack::PopAndDestroy();// newEntry,
+        }
+    delete agendautil;
+    delete calfilename;     	
     CleanupStack::PopAndDestroy( 2 ); //  rdArray, readStream   
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitCreateItemL: END");
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateCalItemL: END"));
     }
     
 // -----------------------------------------------------------------------------
-// CNSmlAgendaDataStore::DoCommitReplaceItemL
-// Commit item data to database when replacing item.
+// CNSmlAgendaDataStore::DoCommitReplaceCalItemL
+// Commit Calendar item data to database when replacing item.
 // -----------------------------------------------------------------------------
 //
-void CNSmlAgendaDataStore::DoCommitReplaceItemL()
+void CNSmlAgendaDataStore::DoCommitReplaceCalItemL()
     {
-    _DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL: BEGIN");
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: BEGIN"));
     iState = ENSmlOpenAndWaiting; // iState set to closed to handle leave
 	CBufFlat* oldItem = CBufFlat::NewL( KNSmlItemDataExpandSize );
 	CleanupStack::PushL( oldItem );
 	RBufWriteStream writeStream( *oldItem );
 	writeStream.PushL();
-	
-	CCalEntry* entry = NULL;
-	TInt error( KErrNone );
-    TRAP( error, entry = iEntryView->FetchL( iReplaceItemId ) );
-	if ( error || !entry )
-	{
-    	CleanupStack::PopAndDestroy( 2 ); // writeStream, oldItem
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL - \
-		           Error in fetching the item: END");
-    	User::Leave( KErrGeneral );
-    }
-    CleanupStack::PushL( entry );
+	CNSmlAgendaDataStoreUtil* agendautil = NULL;
+	HBufC* calfilename = NULL;
+	TInt err( KErrNone );
 	
-	// Export item from database depending on transmitted item entry type
-	if ( iTXEntryType == ENSmlVCal )
-	    {
-	    _DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL: ExportVCalL");
-    	iExporter->ExportVCalL( *entry, writeStream );        
-    	}
+    
+    if( iIsHierarchicalSyncSupported )
+        {
+        TRAP(err, calfilename = iAgendaAdapterHandler->FolderNameL(iParentItemId) );
+        }
+    else
+        {
+        calfilename = iOpenedStoreName->AllocL();
+        }
+    
+    if( err != KErrNone || NULL == calfilename )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL:Invalid CalendarInfo"));
+        CleanupStack::PopAndDestroy( 2 ); // olditem, writeStream
+        User::Leave( KErrNotFound );
+        }
+    
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: entry id: '%d'"), iReplaceItemId);
+    
+    agendautil = CNSmlAgendaDataStoreUtil::NewL();
+    if( agendautil )
+        {
+        CleanupStack::PushL(agendautil);
+        TRAP(err, agendautil->InitializeCalAPIsL( calfilename, iReplaceItemId ));
+        CleanupStack::Pop(agendautil);
+        }
+        
+    if ( err || !agendautil )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: entry is not valid"));
+        delete agendautil;
+        delete calfilename;
+        CleanupStack::PopAndDestroy( 2 ); // olditem, writeStream
+        User::Leave( KErrGeneral );
+        }  
+        
+    // Export item from database depending on transmitted item entry type
+    if ( iTXEntryType == ENSmlVCal )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: ExportVCalL"));
+        agendautil->iExporter->ExportVCalL( *agendautil->iEntry, writeStream );        
+        }
 #ifdef __NSML_USE_ICAL_FEATURE
-	else if ( iTXEntryType == ENSmlICal )
-	    {
-	    _DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL: ExportICalL");
-    	iExporter->ExportICalL( *entry, writeStream );
-	    }
+    else if ( iTXEntryType == ENSmlICal )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: ExportICalL"));
+        agendautil->iExporter->ExportICalL( *agendautil->iEntry, writeStream );
+        }
 #endif // __NSML_USE_ICAL_FEATURE
-	else
+    else
         {
-        CleanupStack::PopAndDestroy( 2 ); // entry, writeStream
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL - \
-		           KErrNotSupported: END");
+        delete agendautil;
+        delete calfilename;
+        CleanupStack::PopAndDestroy( 2 ); // olditem, writeStream
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL - \
+                   KErrNotSupported: END"));
         User::Leave( KErrNotSupported );
         }
         
-	writeStream.CommitL();
-	oldItem->Compress();
-
-	CleanupStack::PopAndDestroy( 2 ); // entry, writeStream
-	
-	// Get original UID, geoId and Recurrence-ID properties
-	HBufC8* uid = NULL;
-	HBufC8* recurrenceId = NULL;
-	HBufC8* xRecurrenceId = NULL;
-	HBufC8* geoId = NULL;
-	GetPropertiesFromDataL( oldItem, uid, KVersitTokenUID()  );
-	GetPropertiesFromDataL( oldItem, recurrenceId, KNSmlVersitTokenRecurrenceID() );
-	GetPropertiesFromDataL( oldItem, xRecurrenceId, KNSmlVersitTokenXRecurrenceID() );
-	GetPropertiesFromDataL( oldItem, geoId, KNSmlVersitTokenGeoID() );
-	CleanupStack::PushL( uid );
-	CleanupStack::PushL( recurrenceId );
-	CleanupStack::PushL( xRecurrenceId );
-	CleanupStack::PushL( geoId );
+    writeStream.CommitL();
+    oldItem->Compress();
 
-#ifdef __NSML_MORE_DEBUG_FOR_ITEMS__
-
-	DBG_DUMP( ( void* )oldItem->Ptr( 0 ).Ptr(), oldItem->Size(),
-	          _S8( "Old item from database:" ) );
-
-#endif // __NSML_MORE_DEBUG_FOR_ITEMS__
+    CleanupStack::PopAndDestroy( 1 ); 
+    
+    // Get original UID, geoId and Recurrence-ID properties
+    HBufC8* uid = NULL;
+    HBufC8* recurrenceId = NULL;
+    HBufC8* xRecurrenceId = NULL;
+    HBufC8* geoId = NULL;
+    GetPropertiesFromDataL( oldItem, uid, KVersitTokenUID()  );
+    GetPropertiesFromDataL( oldItem, recurrenceId, KNSmlVersitTokenRecurrenceID() );
+    GetPropertiesFromDataL( oldItem, xRecurrenceId, KNSmlVersitTokenXRecurrenceID() );
+    GetPropertiesFromDataL( oldItem, geoId, KNSmlVersitTokenGeoID() );
+    CleanupStack::PushL( uid );
+    CleanupStack::PushL( recurrenceId );
+    CleanupStack::PushL( xRecurrenceId );
+    CleanupStack::PushL( geoId );
 
-   	if ( iDataMod->NeedsMerge() )
-		{
-    	// Merge data
-    	iDataMod->MergeRxL( *iItemData, *oldItem );
-		}
-	
-	// Add original UID and Recurrence-ID to merged data
-	// This first removes UID and Recurrence-ID from merged data
-	// and then adds original ones
-	if ( uid )
-	    {
-	    SetPropertiesToDataL( uid, KVersitTokenUID() );    
-	    }
+    if ( iDataMod->NeedsMerge() )
+        {
+        // Merge data
+        iDataMod->MergeRxL( *iItemData, *oldItem );
+        }
+    
+    // Add original UID and Recurrence-ID to merged data
+    // This first removes UID and Recurrence-ID from merged data
+    // and then adds original ones
+    if ( uid )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: SetPropertiesToDataL :uid"));
+        SetPropertiesToDataL( uid, KVersitTokenUID() );    
+        }
     else
         {
+        delete agendautil;
+        delete calfilename;
+        CleanupStack::PopAndDestroy( 5 ); // xRecurrenceId, recurrenceId,
+                                          // uid, oldItem, geoId
         User::Leave( KErrNotSupported );
         }
-	if ( recurrenceId )
-	    {
-	    SetPropertiesToDataL( recurrenceId, KNSmlVersitTokenRecurrenceID() );    
-	    }
-	if ( xRecurrenceId )
-	    {
-	    SetPropertiesToDataL( xRecurrenceId, KNSmlVersitTokenXRecurrenceID() );    
-	    }
-	if ( geoId )
-	    {
-	    SetPropertiesToDataL( geoId, KNSmlVersitTokenGeoID() );    
-	    }
-
-#ifdef __NSML_MORE_DEBUG_FOR_ITEMS__
-
-	DBG_DUMP( ( void* )iItemData->Ptr( 0 ).Ptr(), iItemData->Size(),
-	          _S8( "New item to database:" ) );
+    if ( recurrenceId )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: SetPropertiesToDataL :recurrenceId"));
+        SetPropertiesToDataL( recurrenceId, KNSmlVersitTokenRecurrenceID() );    
+        }
+    if ( xRecurrenceId )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: SetPropertiesToDataL :xRecurrenceId"));
+        SetPropertiesToDataL( xRecurrenceId, KNSmlVersitTokenXRecurrenceID() );    
+        }
+    if ( geoId )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: SetPropertiesToDataL :geoId"));
+        SetPropertiesToDataL( geoId, KNSmlVersitTokenGeoID() );    
+        }
+    
+    CleanupStack::PopAndDestroy( 5 ); // xRecurrenceId, recurrenceId,
+                                      // uid, oldItem, geoId
+    
+    // Replace item to database
+    RBufReadStream readStream;
+    readStream.Open( *iItemData );
+    readStream.PushL();
 
-#endif // __NSML_MORE_DEBUG_FOR_ITEMS__
-	
-	CleanupStack::PopAndDestroy( 5 ); // xRecurrenceId, recurrenceId,
-	                                  // uid, oldItem, geoId
-    
-	// Replace item to database
-	RBufReadStream readStream;
-	readStream.Open( *iItemData );
-	readStream.PushL();
+    RPointerArray<CCalEntry> rdArray;
+    CleanupStack::PushL( PtrArrCleanupItemRArr ( CCalEntry, &rdArray ) );
 
-	RPointerArray<CCalEntry> rdArray;
-	CleanupStack::PushL( PtrArrCleanupItemRArr ( CCalEntry, &rdArray ) );
-
-	// Import item to database depending on received item entry type
-	if ( iRXEntryType == ENSmlVCal )
+    // Import item to database depending on received item entry type
+    if ( iRXEntryType == ENSmlVCal )
         {
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL: ImportVCalendarL");
-    	iImporter->ImportVCalendarL( readStream, rdArray );
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: ImportVCalendarL"));
+        TRAP( err, agendautil->iImporter->ImportVCalendarL( readStream, rdArray ));
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: ImportVCalendarL error: '%d'"), err);
+        if( err != KErrNone)
+            {
+            User::Leave(err);
+            }
         }
 #ifdef __NSML_USE_ICAL_FEATURE
-	else if ( iRXEntryType == ENSmlICal )
-		{
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL: ImportICalendarL");
-		iImporter->ImportICalendarL( readStream, rdArray );
-		}
+    else if ( iRXEntryType == ENSmlICal )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: ImportICalendarL"));
+        agendautil->iImporter->ImportICalendarL( readStream, rdArray );
+        }
 #endif // __NSML_USE_ICAL_FEATURE
     else
         {
+        delete agendautil;
+        delete calfilename;
         CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL - \
-		           KErrNotSupported: END");
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceItemL - \
+                   KErrNotSupported: END"));
         User::Leave( KErrNotSupported );
         }
 
     // If rdArray is empty or there is multiple items then return error
-	// Multiple items are not supported
-	if ( rdArray.Count() != 1 )
-	    {
-	    CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL - \
-		           Multiple items are not supported: END");
+    // Multiple items are not supported
+    if ( rdArray.Count() != 1 )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: Multiple items are not supported "));
+        delete agendautil;
+        delete calfilename;
+        CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceItemL - \
+                   Multiple items are not supported: END"));
         User::Leave( KErrNotSupported );
-	    }
-	    
-	TInt err( KErrNone );
+        }
+        
+    err = KErrNone;
 
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL: before StoreL");
-    TRAP( err, iInterimUtils->StoreL( *iEntryView, *rdArray[0], ETrue ) );
-    DBG_ARGS(_S("CNSmlAgendaDataStore::DoCommitCreateItemL: after StoreL '%d'"), err );
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: before StoreL"));
+    TRAP( err, iInterimUtils->StoreL( *agendautil->iEntryView, *rdArray[0], ETrue ) );
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateItemL: after StoreL '%d'"), err );
     if ( err )
         {
+        delete agendautil;
+        delete calfilename;
         CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
-		_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL - \
-		           Error at storing item to database: END");
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL - \
+                   Error at storing item to database: END"));
         User::Leave( KErrGeneral );
         }
 
-	CCalEntry::TReplicationStatus  replicationStatus;
-	
-	CCalEntry* replacedEntry = iEntryView->FetchL( iReplaceItemId );
-	if( replacedEntry )
-	{
+    CCalEntry::TReplicationStatus  replicationStatus;
+    
+    CCalEntry* replacedEntry = agendautil->iEntryView->FetchL( iReplaceItemId );
+    if( replacedEntry )
+    {
     CleanupStack::PushL( replacedEntry );
-	
+    
     replicationStatus = replacedEntry->ReplicationStatusL();
-	            
-	if ( CanBeSynchronized( replicationStatus ) )
-		{
-		if ( iChangeFinder )
-			{
-			TNSmlSnapshotItem item( iReplaceItemId );
-			item.SetLastChangedDate(
-			            replacedEntry->LastModifiedDateL().TimeUtcL());
-			item.SetSoftDelete( EFalse );
-			iChangeFinder->ItemUpdatedL( item );
-			}
-		}
-	CleanupStack::PopAndDestroy(); // replacedEntry
-	}
-	
-	CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
-
-	_DBG_FILE("CNSmlAgendaDataStore::DoCommitReplaceItemL: END");
+    
+    // RD_MULTICAL
+    if( !iIsHierarchicalSyncSupported )
+        {
+        iParentItemId = 0;
+        }
+    // RD_MULTICAL
+                
+    if ( CanBeSynchronized( replicationStatus ) )
+        {
+        if ( iChangeFinder )
+            {
+            TNSmlSnapshotItem item( iReplaceItemId + iParentItemId );
+            item.SetLastChangedDate(
+                        replacedEntry->LastModifiedDateL().TimeUtcL());
+            item.SetSoftDelete( EFalse );
+            iChangeFinder->ItemUpdatedL( item );
+            }
+        }
+    CleanupStack::PopAndDestroy(); // replacedEntry
     }
     
+    delete agendautil;
+    delete calfilename;
+	
+    CleanupStack::PopAndDestroy( 2 ); // rdArray, readStream
+    
+	FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceCalItemL: END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::DoCommitCreateFolderItemL
+// Commit Folder item data to database when adding item.
+// -----------------------------------------------------------------------------
+//
+void CNSmlAgendaDataStore::DoCommitCreateFolderItemL()
+    {
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateFolderItemL: BEGIN"));
+    
+    TInt err(KErrNone);
+    RBufReadStream readStream;
+    readStream.Open( *iItemData );
+    readStream.PushL();
+    
+    TRAP(err, *iAddItemId = iAgendaAdapterHandler->CreateFolderL( readStream ));
+    if( err != KErrNone )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateFolderItemL: Error in Create Folder"));
+        CleanupStack::PopAndDestroy( &readStream );
+        User::Leave( err );    
+        }
+   
+    // Add snapshotitem
+    if ( iChangeFinder )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateFolderItemL: item id: '%d'"), *iAddItemId );
+        TNSmlSnapshotItem item( *iAddItemId );
+        TTime time;
+        time.HomeTime();
+        item.SetLastChangedDate( time );
+        item.SetSoftDelete( EFalse );
+        TRAPD( changeFinderError, iChangeFinder->ItemAddedL( item ) );
+        if ( changeFinderError == KErrAlreadyExists )
+            {
+            iChangeFinder->ItemUpdatedL( item );
+            }
+        else
+            {
+            User::LeaveIfError( changeFinderError );    
+            }
+        
+        iCalOffsetArr->AppendL(*iAddItemId);
+            
+        }
+    
+    CleanupStack::PopAndDestroy( &readStream );
+    
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitCreateFolderItemL: END"));
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::DoCommitReplaceFolderItemL
+// Commit Folder item data to database when replacing item.
+// -----------------------------------------------------------------------------
+//
+void CNSmlAgendaDataStore::DoCommitReplaceFolderItemL()
+    {
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceFolderItemL: BEGIN"));
+    
+    TBool syncstatus(ETrue);
+    TInt err(KErrNone);
+    RBufReadStream readStream;
+    readStream.Open( *iItemData );
+    readStream.PushL();
+    
+    TRAP(err, iAgendaAdapterHandler->ReplaceFolderL( iReplaceItemId, readStream, syncstatus ));
+    if(err != KErrNone)
+        {
+        FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceFolderItemL: Error while replacing Folder"));
+        CleanupStack::PopAndDestroy( &readStream );
+        User::Leave(err);
+        }
+   
+    // Update snapshotitem
+    if ( iChangeFinder && syncstatus )
+        {
+        TNSmlSnapshotItem item( iReplaceItemId );
+        TTime time;
+        time.HomeTime();
+        item.SetLastChangedDate(time);
+        item.SetSoftDelete( EFalse );
+        iChangeFinder->ItemUpdatedL( item );
+        }
+        
+    CleanupStack::PopAndDestroy( &readStream );    
+    FLOG(_L("CNSmlAgendaDataStore::DoCommitReplaceFolderItemL: END"));
+    }
 // -----------------------------------------------------------------------------
 // CNSmlAgendaDataStore::GetPropertiesFromDataL
 // Gets property from old item.
@@ -1623,7 +2653,7 @@
                                                    HBufC8*& aValue,
 	                                               const TDesC8& aProperty )
     {
-    _DBG_FILE("CNSmlAgendaDataStore::GetPropertiesFromDataL(): begin");
+    FLOG(_L("CNSmlAgendaDataStore::GetPropertiesFromDataL(): begin"));
     
     // Gemerate property that is searched (Linebreak + property + tokencolon)
     HBufC8* startBuffer = HBufC8::NewLC( KVersitTokenCRLF().Size() +
@@ -1669,7 +2699,7 @@
 	    }
     CleanupStack::PopAndDestroy( startBuffer ); // startBuffer
     
-    _DBG_FILE("CNSmlAgendaDataStore::GetPropertiesFromDataL(): end");
+    FLOG(_L("CNSmlAgendaDataStore::GetPropertiesFromDataL(): end"));
     }
   
 // -----------------------------------------------------------------------------
@@ -1680,7 +2710,7 @@
 void CNSmlAgendaDataStore::SetPropertiesToDataL( HBufC8*& aValue,
 	                                             const TDesC8& aProperty )
     {
-    _DBG_FILE("CNSmlAgendaDataStore::SetPropertiesToDataL(): begin");
+    FLOG(_L("CNSmlAgendaDataStore::SetPropertiesToDataL(): begin"));
     
     // Gemerate property that is searched (Linebreak + property + tokencolon)
     HBufC8* startBuffer = HBufC8::NewLC( KVersitTokenCRLF().Size() +
@@ -1764,7 +2794,719 @@
     
     CleanupStack::PopAndDestroy( 3 ); // endVTodo, endVEvent, startBuffer
     
-    _DBG_FILE("CNSmlAgendaDataStore::SetPropertiesToDataL(): end");
+    FLOG(_L("CNSmlAgendaDataStore::SetPropertiesToDataL(): end"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::GetCalendarEntryIdL
+// Method to retrieve the Id of the Calendar Entry
+// -----------------------------------------------------------------------------
+void CNSmlAgendaDataStore::GetCalendarEntryIdL( TCalLocalUid& aParentId, TCalLocalUid& aCalId ) const
+    {
+    FLOG(_L("CNSmlAgendaDataStore::GetCalendarEntryIdL: BEGIN"));
+    
+    FLOG(_L("CNSmlAgendaDataStore::GetCalendarEntryIdL: parentid: '%d'"), aParentId);
+    FLOG(_L("CNSmlAgendaDataStore::GetCalendarEntryIdL: aCalId: '%d'"), aCalId);
+    
+    TInt uidcalentry = aCalId;
+    
+    if( uidcalentry < iCalOffsetVal )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::GetCalendarEntryIdL: Invalid CalendarId: '%d'"), aCalId);
+        User::Leave( KErrGeneral );
+        }
+    else if( uidcalentry == iCalOffsetVal ||
+             0 == (uidcalentry % iCalOffsetVal) )
+        {
+        aParentId = uidcalentry;
+        }
+    else
+        {
+        while( uidcalentry > iCalOffsetVal )
+            {
+            uidcalentry = uidcalentry - iCalOffsetVal;
+            }    
+        aParentId = aCalId - uidcalentry;
+        aCalId = uidcalentry;
+        }
+    
+    TInt err(KErrNone);
+    TInt index = KErrNotFound;
+    TKeyArrayFix key( 0, ECmpTInt ); // Find key for Ids.
+    
+    err = iCalOffsetArr->Find( aParentId, key, index );
+    
+    if( err != KErrNone )
+        {
+        User::Leave(err);
+        }   
+    FLOG(_L("CNSmlAgendaDataStore::GetCalendarEntryIdL: END"));    
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::DataMimeType
+// Method to determine the MIME type, provided the UID
+// -----------------------------------------------------------------------------
+void CNSmlAgendaDataStore::DataMimeType( TSmlDbItemUid aUid )
+    {
+    FLOG(_L("CNSmlAgendaDataStore::DataMimeType: BEGIN"));    
+    
+    FLOG(_L("CNSmlAgendaDataStore::DataMimeType: LUID '%d'"), aUid );
+    
+    if( iIsHierarchicalSyncSupported )
+        {
+        // Find a match with the list of Offset values available
+        TInt index = KErrNotFound;
+        TInt err = KErrNone;
+        TKeyArrayFix key( 0, ECmpTInt ); // Find key for Ids.
+        
+        err = iCalOffsetArr->Find( aUid, key, index );
+                   
+        // Determine the Data Mime Type
+        if( err == KErrNone )
+            {
+            iDataMimeType = ENSmlFolder;
+            }
+        else
+            {
+            iDataMimeType = ENSmlCalendar;
+            }
+        }
+    else
+        {
+        iDataMimeType = ENSmlCalendar;
+        }
+    
+    FLOG(_L("CNSmlAgendaDataStore::DataMimeType: END, DataMimeType '%d' "), iDataMimeType);    
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::ListAllAgendaPluginAdaptersL
+// Get All the AdapterHandler instance
+// -----------------------------------------------------------------------------
+void CNSmlAgendaDataStore::ListAllAgendaPluginAdaptersL()
+    {
+    FLOG(_L("CNSmlAgendaDataStore::ListAllAgendaPluginAdaptersL BEGIN"));
+    
+    RImplInfoPtrArray adapterInfoArray;        
+    CNSmlAgendaAdapterHandler* adapterInstance(NULL);
+    
+    REComSession::ListImplementationsL( KAgendaAdapterHandlerInterfaceUid, adapterInfoArray );
+    TInt adapterCount = adapterInfoArray.Count();
+    FLOG(_L("adaptercount:'%d'"),adapterCount); 
+    CImplementationInformation* adapterInfo = NULL;
+    
+    for (TInt adapterIndex = 0 ; adapterIndex < adapterCount; adapterIndex++)
+        {
+        adapterInfo = adapterInfoArray[ adapterIndex ];
+        TUid adapterUid = { adapterInfo->ImplementationUid().iUid  };
+        FLOG(_L("CNSmlAgendaDataStore::ListAllAgendaPluginAdaptersL before newl"));
+        adapterInstance = CNSmlAgendaAdapterHandler::NewL(adapterUid); 
+        FLOG(_L("CNSmlAgendaDataStore::ListAllAgendaPluginAdaptersL after newl"));
+        if( adapterInstance )
+            {
+            adapterInstance->iOpaqueData = adapterInfo->OpaqueData().Alloc();
+            iAgendaPluginAdapters.AppendL( adapterInstance );
+            }
+        }
+    adapterInfoArray.ResetAndDestroy();
+    FLOG(_L("CNSmlAgendaDataStore::ListAllAgendaPluginAdaptersL END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::AgendaAdapterHandlerL
+// Get the AdapterHandler instance
+// -----------------------------------------------------------------------------
+void CNSmlAgendaDataStore::AgendaAdapterHandlerL()
+    {
+    FLOG(_L("CNSmlAgendaDataStore::AgendaAdapterHandlerL BEGIN"));
+    
+    // Get the Opaque data / server id from the cenrep
+    TBuf<KBuffLength> serverid;
+    HBufC8* opaquedata;
+    CRepository* rep = CRepository::NewLC( KNsmlDsSessionInfoKey );
+    TInt err = rep->Get(EDSSessionServerId, serverid );
+    FLOG(_L("CNSmlAgendaDataStore:::AgendaAdapterHandlerL():serverid '%S'"), &serverid );
+    User::LeaveIfError(err);
+    CleanupStack::PopAndDestroy(rep);
+    
+    if( 0 == serverid.Length() )
+        {
+        FLOG(_L("CNSmlAgendaDataStore:::AgendaAdapterHandlerL():serverid length is zero"));
+        opaquedata = KNSmlDefaultOpaqueData().AllocL();
+        }
+    else
+        {
+        opaquedata = HBufC8::NewL( serverid.Length() );
+        TPtr8 name( opaquedata->Des() );
+        CnvUtfConverter::ConvertFromUnicodeToUtf8(name , serverid );
+        }
+    iAgendaAdapterHandler = NULL;
+    for( TInt adaptercount = 0; adaptercount < iAgendaPluginAdapters.Count(); adaptercount++ )
+        {
+        if( 0 == opaquedata->Compare(iAgendaPluginAdapters[adaptercount]->iOpaqueData->Des()) )
+            {
+            iAgendaAdapterHandler = iAgendaPluginAdapters[adaptercount];
+            break;
+            }        
+        }
+    
+    delete opaquedata;
+    
+    if( NULL == iAgendaAdapterHandler )
+        {
+        opaquedata = KNSmlDefaultOpaqueData().AllocL();
+        for( TInt adaptercount = 0; adaptercount < iAgendaPluginAdapters.Count(); adaptercount++ )
+            {
+            if( 0 == opaquedata->Compare(iAgendaPluginAdapters[adaptercount]->iOpaqueData->Des()) )
+                {
+                iAgendaAdapterHandler = iAgendaPluginAdapters[adaptercount];
+                break;
+                }        
+            }
+        delete opaquedata;
+        }
+    
+    FLOG(_L("CNSmlAgendaDataStore::AgendaAdapterHandlerL END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::SynchronizableCalEntryIdsL
+// Retrieve the CalendarFile and associated entries ID
+// -----------------------------------------------------------------------------
+void CNSmlAgendaDataStore::SynchronizableCalEntryIdsL( RArray<TCalLocalUid>& aUidArray )
+    {
+    FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL BEGIN"));
+    
+    TInt err(KErrNone);
+    
+    for( TInt calfilecount = 0; calfilecount < iCalOffsetArr->Count(); calfilecount++ )
+        {
+        TUint calfileid = iCalOffsetArr->At(calfilecount);
+        CNSmlAgendaDataStoreUtil* agendautil = NULL;
+        HBufC* calfilename = NULL;
+        
+        TRAP(err, calfilename = iAgendaAdapterHandler->FolderNameL(calfileid) );
+        FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL calfilename: '%S'"), calfilename);
+           
+        if( err!= KErrNone || NULL == calfilename)
+            {
+            FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL Invalid FileName"));
+            User::Leave(KErrGeneral);
+            }
+        FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL Initialize"));
+       
+        agendautil = CNSmlAgendaDataStoreUtil::NewL();
+        if( agendautil )
+            {
+            CleanupStack::PushL(agendautil);
+            TRAP(err, agendautil->InitializeCalAPIsL( calfilename ));
+            CleanupStack::Pop(agendautil);
+            }
+        if ( err || !agendautil )
+            {
+            FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL Initialization failed"));
+            delete calfilename;
+            User::Leave(KErrGeneral);
+            }
+        
+        TCalTime zeroTime;
+        RArray<TCalLocalUid> entryarray;
+        CleanupClosePushL( entryarray );
+       
+        aUidArray.AppendL(calfileid);            
+    
+        zeroTime.SetTimeUtcL( Time::NullTTime() );
+        agendautil->iEntryView->GetIdsModifiedSinceDateL( zeroTime, entryarray );  
+        
+        for( TInt i=0; i<entryarray.Count(); i++)
+            {
+            aUidArray.AppendL(calfileid + entryarray[i]);
+            FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL, Entry ID: '%d'"), (calfileid + entryarray[i]));
+            }    
+        FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL Clean up start"));
+        CleanupStack::PopAndDestroy( &entryarray );
+        delete agendautil;
+        delete calfilename;
+        FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL Cleanup end"));
+        }    
+    FLOG(_L("CNSmlAgendaDataStore::SynchronizableCalEntryIdsL END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::StoreFormatL
+// Providing DataStore access to CNSmlDataProvider Class
+// -----------------------------------------------------------------------------
+CSmlDataStoreFormat* CNSmlAgendaDataStore::StoreFormatL()
+    {
+    return DoOwnStoreFormatL();
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::OpenStoreL
+// Open the Store if present else create one to work upon
+// -----------------------------------------------------------------------------
+void CNSmlAgendaDataStore::OpenStoreL()
+    {
+    FLOG(_L("CNSmlAgendaDataStore::OpenStoreL BEGIN"));
+
+    TInt profileid = NULL;
+    TBuf<KBuffLength> profilename;
+    
+    // Get the ProfileId and ProfileName from the cenrep
+    CRepository* rep = CRepository::NewLC( KNsmlDsSessionInfoKey );
+    TInt err = rep->Get( EDSSessionProfileId, profileid );
+    err = rep->Get( EDSSessionProfileName, profilename );
+    User::LeaveIfError(err);
+    CleanupStack::PopAndDestroy(rep);
+    
+    // Find the CalendarFile having the given ProfileID
+    CDesCArray* calfilearr = new (ELeave) CDesCArrayFlat(1);
+    CleanupStack::PushL(calfilearr);
+    if ( IsCalFileAvailableL( profileid, calfilearr ) )
+        {
+        FLOG(_L("CNSmlAgendaDataStore::OpenStoreL Found the assoicated calfile"));
+        
+        // TODO: Yet to get clarification for enable/disable the notification
+       
+        if ( iOpenedStoreName )
+            {
+            delete iOpenedStoreName;
+            iOpenedStoreName = NULL;
+            }
+        iOpenedStoreName = calfilearr->MdcaPoint(0).AllocL();
+        }
+    else
+        {
+        FLOG(_L("CNSmlAgendaDataStore::OpenStoreL CouldNot Find the Calfile"));
+        
+        // No association found thus creating a CalendarFile
+        HBufC* name = profilename.AllocL();
+        HBufC* calfilename = CreateCalFileL( name, profileid );
+        delete name;
+        
+        if ( iOpenedStoreName )
+            {
+            delete iOpenedStoreName;
+            iOpenedStoreName = NULL;
+            }
+        iOpenedStoreName = calfilename;
+        }
+        
+    CCalSession* calsession = CCalSession::NewL();
+    CleanupStack::PushL(calsession);
+    TRAP( err, calsession->OpenL( iOpenedStoreName->Des() ) );
+    // Disable notifications
+    TRAP_IGNORE( calsession->DisablePubSubNotificationsL() );
+    TRAP_IGNORE( calsession->DisableChangeBroadcast() );        
+    // Get ID of database
+    calsession->FileIdL( iOpenedStoreId );
+    CleanupStack::PopAndDestroy( calsession );    
+      
+    CleanupStack::PopAndDestroy(calfilearr);
+    FLOG(_L("CNSmlAgendaDataStore::OpenStoreL END"));    
     }
-	
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::IsCalFileAvailableL    
+// Check existance of CalFile with the given ProfileID associativity
+// -----------------------------------------------------------------------------
+TBool CNSmlAgendaDataStore::IsCalFileAvailableL( TInt aProfileId, CDesCArray* aCalFileArr )
+    {
+    FLOG(_L("CNSmlAgendaDataStore::IsCalFileAvailable: BEGIN"));   
+    
+    TBool calfilestatus(EFalse);
+    TBuf8<KBuffLength> keyBuff;
+    CCalSession* vCalSession = NULL;
+    CCalSession* vCalSubSession = NULL;   
+    
+    vCalSession = CCalSession::NewL();
+    CleanupStack::PushL(vCalSession);
+    
+    CDesCArray* calfilearr = vCalSession->ListCalFilesL();            
+    CleanupStack::PushL(calfilearr);
+    
+    for(TInt i = 0; i < calfilearr->Count(); i++)
+        {
+        vCalSubSession = CCalSession::NewL(*vCalSession);
+        CleanupStack::PushL(vCalSubSession);
+        vCalSubSession->OpenL(calfilearr->MdcaPoint(i));
+        
+        CCalCalendarInfo* caleninfo = vCalSubSession->CalendarInfoL();
+        CleanupStack::PushL(caleninfo);
+        
+        TInt ProfileId;
+        keyBuff.Zero();
+        keyBuff.AppendNum( EDeviceSyncProfileID );
+        TPckgC<TInt> intBuf(ProfileId);
+        TRAPD(err,intBuf.Set(caleninfo->PropertyValueL(keyBuff)));
+                    
+        if( err != KErrNone )
+            {
+            FLOG(_L("CNSmlAgendaDataStore::IsCalFileAvailable: Error while retrieving CalFile Property"));
+            CleanupStack::PopAndDestroy(caleninfo);   
+            CleanupStack::PopAndDestroy(vCalSubSession);             
+            continue;
+            }
+        
+        ProfileId = intBuf();
+        
+        if(aProfileId == ProfileId)
+            {
+            aCalFileArr->AppendL(calfilearr->MdcaPoint(i));
+            }
+        CleanupStack::PopAndDestroy(caleninfo);    
+        CleanupStack::PopAndDestroy(vCalSubSession); 
+        }
+    
+    if( aCalFileArr->Count() > 0 )
+        {
+        calfilestatus = ETrue;
+        }
+    else
+        {
+        calfilestatus = EFalse;
+        }
+    CleanupStack::PopAndDestroy(calfilearr);     
+    CleanupStack::PopAndDestroy(vCalSession);
+    
+    FLOG(_L("CNSmlAgendaDataStore::IsCalFileAvailable: END"));    
+    return calfilestatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::OpenStoreL
+// Create CalFile with the attributes provided
+// -----------------------------------------------------------------------------
+HBufC* CNSmlAgendaDataStore::CreateCalFileL( HBufC* aProfileName, TInt aProfileId )
+    {
+    FLOG(_L("CNSmlAgendaDataStore::CreateCalFileL: BEGIN"));
+    
+    TBuf8<KBuffLength> keyBuff;
+    TUint calValue = 0;
+    CCalSession* calSession = CCalSession::NewL();
+    CleanupStack::PushL(calSession);
+    CCalCalendarInfo* calinfo = CCalCalendarInfo::NewL();
+    CleanupStack::PushL(calinfo);   
+    
+    //Visibility
+    calinfo->SetEnabled(ETrue);
+    calinfo->SetNameL(aProfileName->Des());
+    // TODO
+    calinfo->SetColor(Math::Random());
+    
+    // Set Meta Data Properties
+    // LUID Meta Property
+    keyBuff.Zero();
+    keyBuff.AppendNum( EFolderLUID );
+    calValue = CCalenMultiCalUtil::GetNextAvailableOffsetL();
+    FLOG(_L("CNSmlAgendaDataStore::CreateCalFileL: nextoffset: '%d'"), calValue);
+    TPckgC<TUint> pckgUidValue( calValue );
+    calinfo->SetPropertyL( keyBuff, pckgUidValue );
+    
+    // Create & Modified Time Meta Property
+    keyBuff.Zero();
+    keyBuff.AppendNum( ECreationTime );
+    TTime time;
+    time.HomeTime();
+    TPckgC<TTime> pckgCreateTimeValue( time );
+    calinfo->SetPropertyL( keyBuff, pckgCreateTimeValue );
+    keyBuff.Zero();
+    keyBuff.AppendNum( EModificationTime );
+    calinfo->SetPropertyL( keyBuff, pckgCreateTimeValue );
+    
+    // Sync Status
+    keyBuff.Zero();
+    keyBuff.AppendNum( ESyncStatus );
+    TBool syncstatus( ETrue );
+    TPckgC<TBool> pckgSyncStatusValue( syncstatus );
+    calinfo->SetPropertyL( keyBuff, pckgSyncStatusValue );
+    
+    // Global UID MetaDataProperty 
+    keyBuff.Zero();
+    keyBuff.AppendNum( EGlobalUUID );
+    HBufC8* guuid = iInterimUtils->CalFileGlobalUidL();
+    TPtr8 guuidPtr = guuid->Des();
+    CleanupStack::PushL( guuid );
+    calinfo->SetPropertyL( keyBuff, guuidPtr );
+    CleanupStack::PopAndDestroy( guuid );
+    
+    // Owner
+    keyBuff.Zero();
+    TInt syncowner = iAgendaAdapterHandler->DeviceSyncOwner(); 
+    keyBuff.AppendNum( EDeviceSyncServiceOwner );
+    TPckgC<TInt> pckgAppUIDValue( syncowner );    
+    calinfo->SetPropertyL( keyBuff, pckgAppUIDValue );
+    
+    // Profile ID Meta Property
+    keyBuff.Zero();
+    keyBuff.AppendNum( EDeviceSyncProfileID );
+    TPckgC<TInt> pckgProfileIdValue( aProfileId );    
+    calinfo->SetPropertyL( keyBuff, pckgProfileIdValue );
+       
+    // Create the CalFile
+    HBufC* calfilename = CCalenMultiCalUtil::GetNextAvailableCalFileL();
+    calSession->CreateCalFileL( calfilename->Des(), *calinfo );
+    CleanupStack::PopAndDestroy(calinfo);
+    CleanupStack::PopAndDestroy(calSession);
+    
+    FLOG(_L("CNSmlAgendaDataStore::CreateCalFileL: END"));
+    
+    return calfilename;    
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::ActiveItemsL
+// Filters out the non-active items from the given array
+// -----------------------------------------------------------------------------
+CNSmlDataItemUidSet* CNSmlAgendaDataStore::ActiveItemsL( CNSmlDataItemUidSet& aUids ) const
+    {
+    FLOG(_L("CNSmlAgendaDataStore::ActiveItemsL: BEGIN"));
+    
+    TInt err(KErrNone);
+    TCalLocalUid uid(0);
+    TCalLocalUid parentid(0);
+    CNSmlDataItemUidSet* tempuids = new ( ELeave ) CNSmlDataItemUidSet();
+    CNSmlDataItemUidSet* inactiveuids = new ( ELeave ) CNSmlDataItemUidSet();
+    for( TInt count =0; count < aUids.ItemCount(); count++ )
+        {
+        parentid = 0;
+        uid = aUids.ItemAt(count);
+        TRAP( err, GetCalendarEntryIdL( parentid, uid ));
+        if ( err && iIsHierarchicalSyncSupported )
+            {
+            FLOG(_L("CNSmlAgendaDataStore::ActiveItemsL: Invalid UID"));
+            delete tempuids;
+            delete inactiveuids;
+            User::Leave( KErrGeneral );
+            }                
+        if( iAgendaAdapterHandler->FolderSyncStatusL( parentid ) )
+            {
+            FLOG(_L("CNSmlAgendaDataStore::ActiveItemsL: ActiveItem: '%d'"), aUids.ItemAt(count));
+            tempuids->AddItem( aUids.ItemAt(count) );
+            }
+        else
+            {
+            FLOG(_L("CNSmlAgendaDataStore::ActiveItemsL: InActiveItem: '%d'"), aUids.ItemAt(count));
+            inactiveuids->AddItem( aUids.ItemAt(count) );
+            }
+        }
+    if( inactiveuids->ItemCount() > 0 )
+        {
+        aUids.Reset();
+        for( TInt count =0; count < tempuids->ItemCount(); count++ )
+            {
+            aUids.AddItem( tempuids->ItemAt(count) );
+            }
+        delete tempuids;
+        FLOG(_L("CNSmlAgendaDataStore::ActiveItemsL: END"));
+        return inactiveuids;
+        }
+    else
+        {
+        delete tempuids;
+        delete inactiveuids;
+        FLOG(_L("CNSmlAgendaDataStore::ActiveItemsL: END"));
+        return NULL;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::ExternalizeCommittedUidL
+// Populate iCommittedUidArr from the Stream
+// -----------------------------------------------------------------------------
+void CNSmlAgendaDataStore::ExternalizeCommittedUidL() const
+    {
+    FLOG(_L("CNSmlAgendaDataStore::ExternalizeCommittedUidL: BEGIN"));
+    
+    TUid uid = {KNSmlAgendaAdapterStreamUid};
+    RWriteStream writeStream;
+    
+    // Open stream for writing
+    iAgendaAdapterLog->iSyncRelationship.OpenWriteStreamLC(writeStream, uid);
+      
+    // Write the snapshot to the stream
+    TInt itemCount = iCommittedUidArr->ItemCount();
+    FLOG(_L("CNSmlAgendaDataStore::ExternalizeCommittedUidL: count '%d'"), itemCount);
+    writeStream.WriteInt32L(itemCount);
+    
+    if( itemCount > 0 )
+        {    
+        for (TInt i = 0; i < itemCount; ++i)
+            {
+            writeStream.WriteInt32L(iCommittedUidArr->ItemAt(i));
+            FLOG(_L("CNSmlAgendaDataStore::ExternalizeCommittedUidL: item '%d'"), iCommittedUidArr->ItemAt(i));
+            }        
+        }
+    writeStream.CommitL();
+    CleanupStack::PopAndDestroy(); // writeStream
+    FLOG(_L("CNSmlAgendaDataStore::ExternalizeCommittedUidL: END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStore::InternalizeCommittedUidL
+// Write the contents of iCommittedUidArr to the Stream
+// -----------------------------------------------------------------------------
+void CNSmlAgendaDataStore::InternalizeCommittedUidL() const
+    {
+    FLOG(_L("CNSmlAgendaDataStore::InternalizeCommittedUidL: BEGIN"));
+  
+    TUid uid = {KNSmlAgendaAdapterStreamUid};        
+    TBool hashistory = iAgendaAdapterLog->iSyncRelationship.IsStreamPresentL(uid);
+    
+    if (hashistory)
+        {
+        FLOG(_L("CNSmlAgendaDataStore::InternalizeCommittedUidL: HasHistory"));
+        
+        // Open stream for reading
+        RReadStream readStream;
+        iAgendaAdapterLog->iSyncRelationship.OpenReadStreamLC(readStream, uid);
+        
+        // Read snapshot from the stream
+        TSmlDbItemUid item;
+        TInt itemCount(readStream.ReadInt32L());
+        FLOG(_L("CNSmlAgendaDataStore::InternalizeCommittedUidL: count '%d'"), itemCount);
+        iCommittedUidArr->Reset();
+        for (TInt i = 0; i < itemCount; ++i)
+            {
+            item = readStream.ReadInt32L();
+            FLOG(_L("CNSmlAgendaDataStore::InternalizeCommittedUidL: item '%d'"), item);
+            iCommittedUidArr->AddItem(item);
+            }        
+        CleanupStack::PopAndDestroy(); // readStream
+        }
+
+    FLOG(_L("CNSmlAgendaDataStore::InternalizeCommittedUidL: END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStoreUtil::CNSmlAgendaDataStoreUtil
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CNSmlAgendaDataStoreUtil::CNSmlAgendaDataStoreUtil() :
+    iCalSession( NULL ),
+    iExporter( NULL ),
+    iImporter( NULL ),
+    iProgressView( NULL ),
+    iEntryView( NULL ),
+    iEntry( NULL ),
+    iFileName( NULL )
+    {
+    FLOG(_L("CNSmlAgendaDataStoreUtil::CNSmlAgendaDataStoreUtil(): BEGIN"));
+    
+    FLOG(_L("CNSmlAgendaDataStoreUtil::CNSmlAgendaDataStoreUtil(): END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStoreUtil::InitializeCalAPIsL
+// Initialize Calendar APIs for database access using the provided name and id
+// -----------------------------------------------------------------------------
+//
+void CNSmlAgendaDataStoreUtil::InitializeCalAPIsL( HBufC* aFileName, TSmlDbItemUid aUid )
+    {
+    FLOG(_L("CNSmlAgendaDataStoreUtil::InitializeCalAPIsL: BEGIN"));
+    
+    iCalSession = CCalSession::NewL();
+    iCalSession->OpenL(aFileName->Des());        
+    iExporter = CCalenExporter::NewL( *iCalSession );
+    iImporter = CCalenImporter::NewL( *iCalSession );
+    iProgressView = CNSmlAgendaProgressview::NewL();
+    iEntryView = CCalEntryView::NewL( *iCalSession, *iProgressView );
+    CActiveScheduler::Start();
+    TInt completedStatus = iProgressView->GetCompletedStatus();
+    if ( completedStatus != KErrNone )
+        {
+        FLOG(_L("CNSmlAgendaDataStoreUtil::ConstructL: ERROR in Progressview"));
+        }
+    if( aUid != NULL )
+        {
+        iEntry = iEntryView->FetchL( aUid );
+        if( NULL == iEntry )
+            {
+            User::Leave( KErrNotFound );
+            }
+        
+        }    
+    FLOG(_L("CNSmlAgendaDataStoreUtil::InitializeCalAPIsL: END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStoreUtil::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlAgendaDataStoreUtil* CNSmlAgendaDataStoreUtil::NewL()
+    {
+    FLOG(_L("CNSmlAgendaDataStoreUtil::NewL: BEGIN"));
+    
+    CNSmlAgendaDataStoreUtil* self = new ( ELeave ) CNSmlAgendaDataStoreUtil();
+    
+    FLOG(_L("CNSmlAgendaDataStoreUtil::NewL: END"));
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaDataStoreUtil::~CNSmlAgendaDataStoreUtil
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlAgendaDataStoreUtil::~CNSmlAgendaDataStoreUtil()
+    {
+    FLOG(_L("CNSmlAgendaDataStoreUtil::~CNSmlAgendaDataStoreUtil(): BEGIN"));
+
+    delete iEntry;
+    delete iEntryView;
+    delete iExporter;
+    delete iImporter;
+    delete iCalSession;
+    delete iProgressView;
+    
+    FLOG(_L("CNSmlAgendaDataStoreUtil::~CNSmlAgendaDataStoreUtil(): END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaAdapterLog::CNSmlAgendaAdapterLog
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CNSmlAgendaAdapterLog::CNSmlAgendaAdapterLog( MSmlSyncRelationship& aSyncRelationship ) :
+    iSyncRelationship( aSyncRelationship )
+    {
+    FLOG(_L("CNSmlAgendaAdapterLog::CNSmlAgendaAdapterLog(): BEGIN"));
+    
+    FLOG(_L("CNSmlAgendaAdapterLog::CNSmlAgendaAdapterLog(): END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaAdapterLog::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlAgendaAdapterLog* CNSmlAgendaAdapterLog::NewL( MSmlSyncRelationship& aSyncRelationship )
+    {
+    FLOG(_L("CNSmlAgendaAdapterLog::NewL: BEGIN"));
+    
+    CNSmlAgendaAdapterLog* self = new ( ELeave ) CNSmlAgendaAdapterLog(aSyncRelationship);
+    
+    FLOG(_L("CNSmlAgendaAdapterLog::NewL: END"));
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlAgendaAdapterLog::~CNSmlAgendaAdapterLog
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlAgendaAdapterLog::~CNSmlAgendaAdapterLog()
+    {
+    FLOG(_L("CNSmlAgendaAdapterLog::~CNSmlAgendaAdapterLog(): BEGIN"));
+    
+    FLOG(_L("CNSmlAgendaAdapterLog::~CNSmlAgendaAdapterLog(): END"));
+    }
+
+   
 //  End of File  
--- a/omads/omadsextensions/adapters/agenda/src/nsmlagendaprogressview.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/agenda/src/nsmlagendaprogressview.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -18,8 +18,9 @@
 
 
 // INCLUDES
-#include "nsmldebug.h"
+#include "nsmlagendadebug.h"
 #include "nsmlagendadatastore.h"
+#include <nsmldebug.h>
 
 // ===================================== MEMBER FUNCTIONS ======================
 // -----------------------------------------------------------------------------
@@ -28,10 +29,10 @@
 // -----------------------------------------------------------------------------
 CNSmlAgendaProgressview* CNSmlAgendaProgressview::NewL()
 	{
-	_DBG_FILE("CNSmlAgendaProgressview::NewL(): BEGIN");
+	FLOG(_L("CNSmlAgendaProgressview::NewL(): BEGIN"));
 	CNSmlAgendaProgressview* self = new (ELeave) CNSmlAgendaProgressview();
 	self->ConstructL();
-	_DBG_FILE("CNSmlAgendaProgressview::NewL(): END");
+	FLOG(_L("CNSmlAgendaProgressview::NewL(): END"));
 	return self;
 	}
 	
@@ -41,9 +42,9 @@
 // -----------------------------------------------------------------------------
 CNSmlAgendaProgressview::~CNSmlAgendaProgressview()
 	{
-	_DBG_FILE("CNSmlAgendaProgressview::~CNSmlAgendaProgressview(): BEGIN");
+	FLOG(_L("CNSmlAgendaProgressview::~CNSmlAgendaProgressview(): BEGIN"));
 	// Nothing to do
-	_DBG_FILE("CNSmlAgendaProgressview::~CNSmlAgendaProgressview(): END");
+	FLOG(_L("CNSmlAgendaProgressview::~CNSmlAgendaProgressview(): END"));
 	}
 
 // -----------------------------------------------------------------------------
@@ -53,8 +54,8 @@
 // -----------------------------------------------------------------------------
 void CNSmlAgendaProgressview::Progress( TInt /*aPercentageCompleted*/ )
 	{
-	_DBG_FILE("CNSmlAgendaProgressview::Progress(): BEGIN");
-	_DBG_FILE("CNSmlAgendaProgressview::Progress(): END");
+	FLOG(_L("CNSmlAgendaProgressview::Progress(): BEGIN"));
+	FLOG(_L("CNSmlAgendaProgressview::Progress(): END"));
 	}
 	
 // -----------------------------------------------------------------------------
@@ -63,12 +64,12 @@
 // -----------------------------------------------------------------------------
 void CNSmlAgendaProgressview::Completed( TInt aError )
 	{
-	_DBG_FILE("CNSmlAgendaProgressview::Completed(): BEGIN");
+	FLOG(_L("CNSmlAgendaProgressview::Completed(): BEGIN"));
 
     iCompletedStatus = aError;
 	CActiveScheduler::Stop();
 
-    _DBG_FILE("CNSmlAgendaProgressview::Completed(): END");
+    FLOG(_L("CNSmlAgendaProgressview::Completed(): END"));
 	}
 
 // -----------------------------------------------------------------------------
@@ -86,8 +87,8 @@
 // -----------------------------------------------------------------------------
 TBool CNSmlAgendaProgressview::NotifyProgress()
 	{
-	_DBG_FILE("CNSmlAgendaProgressview::NotifyProgress(): BEGIN");
-	_DBG_FILE("CNSmlAgendaProgressview::NotifyProgress(): END");
+	FLOG(_L("CNSmlAgendaProgressview::NotifyProgress(): BEGIN"));
+	FLOG(_L("CNSmlAgendaProgressview::NotifyProgress(): END"));
 	return EFalse;
 	}
 
@@ -98,9 +99,9 @@
 CNSmlAgendaProgressview::CNSmlAgendaProgressview() :
 	iCompletedStatus( KErrNotReady )
 	{
-	_DBG_FILE("CNSmlAgendaProgressview::CNSmlAgendaProgressview(): BEGIN");
+	FLOG(_L("CNSmlAgendaProgressview::CNSmlAgendaProgressview(): BEGIN"));
 	// Nothing to do
-	_DBG_FILE("CNSmlAgendaProgressview::CNSmlAgendaProgressview(): END");
+	FLOG(_L("CNSmlAgendaProgressview::CNSmlAgendaProgressview(): END"));
 	}
 	
 // -----------------------------------------------------------------------------
@@ -109,9 +110,9 @@
 // -----------------------------------------------------------------------------
 void CNSmlAgendaProgressview::ConstructL()
     {
-    _DBG_FILE("CNSmlAgendaProgressview::ConstructL(): BEGIN");
+    FLOG(_L("CNSmlAgendaProgressview::ConstructL(): BEGIN"));
     // Nothing to do
-    _DBG_FILE("CNSmlAgendaProgressview::ConstructL(): END");
+    FLOG(_L("CNSmlAgendaProgressview::ConstructL(): END"));
     }
 
 //  End of File  
--- a/omads/omadsextensions/adapters/contacts/src/101F6DD6.rss	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/contacts/src/101F6DD6.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -16,7 +16,7 @@
 */
 
 
-#include<101F6DD6.loc>
+#include<101f6dd6.loc>
 
 #include <registryinfo.rh>
 #include <nsmldsconstants.h>
--- a/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStoreFormat_1_1_2.rss	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStoreFormat_1_1_2.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -562,6 +562,18 @@
 				      SML_DATA_PROPERTY
 					{
 					version=1;
+					display_name="My Card";
+					name="X-SELF";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
 					display_name="SIP protocol";
 					name="X-SIP";
 					data_type="";
--- a/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStoreFormat_1_2.rss	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStoreFormat_1_2.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -419,7 +419,20 @@
 					max_occur=0;
 					params={};
 					},
-				     SML_DATA_PROPERTY
+					
+					SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="My Card";
+					name="X-SELF";
+					data_type="";
+					enum_values={};
+					flags= 0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
 					{
 					version=1;
 					display_name="SIP protocol";
--- a/omads/omadsextensions/dsutils/emailxmlutils/bld/bld.inf	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
-* Copyright (c) 2004 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:  EMail XML Utils build file.
-*
-*/
-
-
-PRJ_MMPFILES
-./nsmlxmlparser.mmp
-
-
--- a/omads/omadsextensions/dsutils/emailxmlutils/bld/def/bwinscwxmlparseru.def	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-EXPORTS
-	??0CNSmlXmlParser@@QAE@XZ @ 1 NONAME ; CNSmlXmlParser::CNSmlXmlParser(void)
-	??0TNSmlFolderAttributeData@@QAE@XZ @ 2 NONAME ; TNSmlFolderAttributeData::TNSmlFolderAttributeData(void)
-	??1CNSmlEmailFileParser@@UAE@XZ @ 3 NONAME ; CNSmlEmailFileParser::~CNSmlEmailFileParser(void)
-	??1CNSmlEmailParser@@UAE@XZ @ 4 NONAME ; CNSmlEmailParser::~CNSmlEmailParser(void)
-	??1CNSmlExtData@@UAE@XZ @ 5 NONAME ; CNSmlExtData::~CNSmlExtData(void)
-	??1CNSmlFolderParser@@UAE@XZ @ 6 NONAME ; CNSmlFolderParser::~CNSmlFolderParser(void)
-	??1CNSmlTruncatedData@@UAE@XZ @ 7 NONAME ; CNSmlTruncatedData::~CNSmlTruncatedData(void)
-	??1CNSmlXmlParser@@UAE@XZ @ 8 NONAME ; CNSmlXmlParser::~CNSmlXmlParser(void)
-	?AddAttachmentL@CNSmlTruncatedData@@QAEXPAVHBufC8@@H0@Z @ 9 NONAME ; void CNSmlTruncatedData::AddAttachmentL(class HBufC8 *, int, class HBufC8 *)
-	?AddBodyL@CNSmlTruncatedData@@QAEXHPAVHBufC8@@@Z @ 10 NONAME ; void CNSmlTruncatedData::AddBodyL(int, class HBufC8 *)
-	?AddExtL@CNSmlEmailParser@@QAEXPAVCNSmlExtData@@@Z @ 11 NONAME ; void CNSmlEmailParser::AddExtL(class CNSmlExtData *)
-	?AddExtL@CNSmlFolderParser@@QAEXPAVCNSmlExtData@@@Z @ 12 NONAME ; void CNSmlFolderParser::AddExtL(class CNSmlExtData *)
-	?AddXValL@CNSmlExtData@@QAEXPAVHBufC8@@@Z @ 13 NONAME ; void CNSmlExtData::AddXValL(class HBufC8 *)
-	?AttributeCount@TNSmlFolderAttributeData@@QBEHXZ @ 14 NONAME ; int TNSmlFolderAttributeData::AttributeCount(void) const
-	?ConvertIntoEntitiesL@CNSmlExtData@@QAEXPBVCNSmlXmlParser@@@Z @ 15 NONAME ; void CNSmlExtData::ConvertIntoEntitiesL(class CNSmlXmlParser const *)
-	?ConvertIntoEntitiesL@CNSmlTruncatedData@@QAEXPBVCNSmlXmlParser@@@Z @ 16 NONAME ; void CNSmlTruncatedData::ConvertIntoEntitiesL(class CNSmlXmlParser const *)
-	?CountXmlSize@CNSmlExtData@@QBEHPBVCNSmlXmlParser@@@Z @ 17 NONAME ; int CNSmlExtData::CountXmlSize(class CNSmlXmlParser const *) const
-	?CountXmlSize@TNSmlFolderAttributeData@@QBEHPBVCNSmlXmlParser@@@Z @ 18 NONAME ; int TNSmlFolderAttributeData::CountXmlSize(class CNSmlXmlParser const *) const
-	?CountXmlSizeL@CNSmlEmailFileParser@@UAEHXZ @ 19 NONAME ; int CNSmlEmailFileParser::CountXmlSizeL(void)
-	?CountXmlSizeL@CNSmlEmailParser@@UAEHXZ @ 20 NONAME ; int CNSmlEmailParser::CountXmlSizeL(void)
-	?CountXmlSizeL@CNSmlFolderParser@@UAEHXZ @ 21 NONAME ; int CNSmlFolderParser::CountXmlSizeL(void)
-	?CountXmlSizeL@CNSmlTruncatedData@@QBEHPBVCNSmlXmlParser@@@Z @ 22 NONAME ; int CNSmlTruncatedData::CountXmlSizeL(class CNSmlXmlParser const *) const
-	?GenerateXml@CNSmlEmailFileParser@@UAE?AW4TNSmlParserGeneratorError@@AAPAVHBufC8@@@Z @ 23 NONAME ; enum TNSmlParserGeneratorError CNSmlEmailFileParser::GenerateXml(class HBufC8 * &)
-	?GenerateXml@CNSmlEmailFileParser@@UAE?AW4TNSmlParserGeneratorError@@AAVRWriteStream@@@Z @ 24 NONAME ; enum TNSmlParserGeneratorError CNSmlEmailFileParser::GenerateXml(class RWriteStream &)
-	?GenerateXml@CNSmlEmailParser@@UAE?AW4TNSmlParserGeneratorError@@AAPAVHBufC8@@@Z @ 25 NONAME ; enum TNSmlParserGeneratorError CNSmlEmailParser::GenerateXml(class HBufC8 * &)
-	?GenerateXml@CNSmlFolderParser@@UAE?AW4TNSmlParserGeneratorError@@AAPAVHBufC8@@@Z @ 26 NONAME ; enum TNSmlParserGeneratorError CNSmlFolderParser::GenerateXml(class HBufC8 * &)
-	?GenerateXml@TNSmlFolderAttributeData@@QBEXAAVTPtr8@@PBVCNSmlXmlParser@@@Z @ 27 NONAME ; void TNSmlFolderAttributeData::GenerateXml(class TPtr8 &, class CNSmlXmlParser const *) const
-	?GenerateXmlL@CNSmlExtData@@QBEXAAVTPtr8@@PBVCNSmlXmlParser@@@Z @ 28 NONAME ; void CNSmlExtData::GenerateXmlL(class TPtr8 &, class CNSmlXmlParser const *) const
-	?GenerateXmlL@CNSmlTruncatedData@@QBEXAAVTPtr8@@PBVCNSmlXmlParser@@@Z @ 29 NONAME ; void CNSmlTruncatedData::GenerateXmlL(class TPtr8 &, class CNSmlXmlParser const *) const
-	?NewL@CNSmlEmailFileParser@@SAPAV1@XZ @ 30 NONAME ; class CNSmlEmailFileParser * CNSmlEmailFileParser::NewL(void)
-	?NewL@CNSmlEmailParser@@SAPAV1@XZ @ 31 NONAME ; class CNSmlEmailParser * CNSmlEmailParser::NewL(void)
-	?NewL@CNSmlExtData@@SAPAV1@XZ @ 32 NONAME ; class CNSmlExtData * CNSmlExtData::NewL(void)
-	?NewL@CNSmlFolderParser@@SAPAV1@XZ @ 33 NONAME ; class CNSmlFolderParser * CNSmlFolderParser::NewL(void)
-	?NewL@CNSmlTruncatedData@@SAPAV1@XZ @ 34 NONAME ; class CNSmlTruncatedData * CNSmlTruncatedData::NewL(void)
-	?NewLC@CNSmlEmailFileParser@@SAPAV1@XZ @ 35 NONAME ; class CNSmlEmailFileParser * CNSmlEmailFileParser::NewLC(void)
-	?NewLC@CNSmlEmailParser@@SAPAV1@XZ @ 36 NONAME ; class CNSmlEmailParser * CNSmlEmailParser::NewLC(void)
-	?NewLC@CNSmlExtData@@SAPAV1@XZ @ 37 NONAME ; class CNSmlExtData * CNSmlExtData::NewLC(void)
-	?NewLC@CNSmlFolderParser@@SAPAV1@XZ @ 38 NONAME ; class CNSmlFolderParser * CNSmlFolderParser::NewLC(void)
-	?NewLC@CNSmlTruncatedData@@SAPAV1@XZ @ 39 NONAME ; class CNSmlTruncatedData * CNSmlTruncatedData::NewLC(void)
-	?ParseXml@CNSmlEmailFileParser@@UAE?AW4TNSmlParserGeneratorError@@AAVRReadStream@@@Z @ 40 NONAME ; enum TNSmlParserGeneratorError CNSmlEmailFileParser::ParseXml(class RReadStream &)
-	?ParseXml@CNSmlEmailFileParser@@UAE?AW4TNSmlParserGeneratorError@@PAVHBufC8@@@Z @ 41 NONAME ; enum TNSmlParserGeneratorError CNSmlEmailFileParser::ParseXml(class HBufC8 *)
-	?ParseXml@CNSmlEmailParser@@UAE?AW4TNSmlParserGeneratorError@@PAVHBufC8@@@Z @ 42 NONAME ; enum TNSmlParserGeneratorError CNSmlEmailParser::ParseXml(class HBufC8 *)
-	?ParseXml@CNSmlFolderParser@@UAE?AW4TNSmlParserGeneratorError@@PAVHBufC8@@@Z @ 43 NONAME ; enum TNSmlParserGeneratorError CNSmlFolderParser::ParseXml(class HBufC8 *)
-
--- a/omads/omadsextensions/dsutils/emailxmlutils/bld/def/eabixmlparseru.def	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-EXPORTS
-	_ZN12CNSmlExtData20ConvertIntoEntitiesLEPK14CNSmlXmlParser @ 1 NONAME
-	_ZN12CNSmlExtData4NewLEv @ 2 NONAME
-	_ZN12CNSmlExtData5NewLCEv @ 3 NONAME
-	_ZN12CNSmlExtData8AddXValLEP6HBufC8 @ 4 NONAME
-	_ZN12CNSmlExtDataD0Ev @ 5 NONAME
-	_ZN12CNSmlExtDataD1Ev @ 6 NONAME
-	_ZN12CNSmlExtDataD2Ev @ 7 NONAME
-	_ZN14CNSmlXmlParserC2Ev @ 8 NONAME
-	_ZN14CNSmlXmlParserD0Ev @ 9 NONAME
-	_ZN14CNSmlXmlParserD1Ev @ 10 NONAME
-	_ZN14CNSmlXmlParserD2Ev @ 11 NONAME
-	_ZN16CNSmlEmailParser11GenerateXmlERP6HBufC8 @ 12 NONAME
-	_ZN16CNSmlEmailParser13CountXmlSizeLEv @ 13 NONAME
-	_ZN16CNSmlEmailParser4NewLEv @ 14 NONAME
-	_ZN16CNSmlEmailParser5NewLCEv @ 15 NONAME
-	_ZN16CNSmlEmailParser7AddExtLEP12CNSmlExtData @ 16 NONAME
-	_ZN16CNSmlEmailParser8ParseXmlEP6HBufC8 @ 17 NONAME
-	_ZN16CNSmlEmailParserD0Ev @ 18 NONAME
-	_ZN16CNSmlEmailParserD1Ev @ 19 NONAME
-	_ZN16CNSmlEmailParserD2Ev @ 20 NONAME
-	_ZN17CNSmlFolderParser11GenerateXmlERP6HBufC8 @ 21 NONAME
-	_ZN17CNSmlFolderParser13CountXmlSizeLEv @ 22 NONAME
-	_ZN17CNSmlFolderParser4NewLEv @ 23 NONAME
-	_ZN17CNSmlFolderParser5NewLCEv @ 24 NONAME
-	_ZN17CNSmlFolderParser7AddExtLEP12CNSmlExtData @ 25 NONAME
-	_ZN17CNSmlFolderParser8ParseXmlEP6HBufC8 @ 26 NONAME
-	_ZN17CNSmlFolderParserD0Ev @ 27 NONAME
-	_ZN17CNSmlFolderParserD1Ev @ 28 NONAME
-	_ZN17CNSmlFolderParserD2Ev @ 29 NONAME
-	_ZN18CNSmlTruncatedData14AddAttachmentLEP6HBufC8iS1_ @ 30 NONAME
-	_ZN18CNSmlTruncatedData20ConvertIntoEntitiesLEPK14CNSmlXmlParser @ 31 NONAME
-	_ZN18CNSmlTruncatedData4NewLEv @ 32 NONAME
-	_ZN18CNSmlTruncatedData5NewLCEv @ 33 NONAME
-	_ZN18CNSmlTruncatedData8AddBodyLEiP6HBufC8 @ 34 NONAME
-	_ZN18CNSmlTruncatedDataD0Ev @ 35 NONAME
-	_ZN18CNSmlTruncatedDataD1Ev @ 36 NONAME
-	_ZN18CNSmlTruncatedDataD2Ev @ 37 NONAME
-	_ZN20CNSmlEmailFileParser11GenerateXmlER12RWriteStream @ 38 NONAME
-	_ZN20CNSmlEmailFileParser11GenerateXmlERP6HBufC8 @ 39 NONAME
-	_ZN20CNSmlEmailFileParser13CountXmlSizeLEv @ 40 NONAME
-	_ZN20CNSmlEmailFileParser4NewLEv @ 41 NONAME
-	_ZN20CNSmlEmailFileParser5NewLCEv @ 42 NONAME
-	_ZN20CNSmlEmailFileParser8ParseXmlEP6HBufC8 @ 43 NONAME
-	_ZN20CNSmlEmailFileParser8ParseXmlER11RReadStream @ 44 NONAME
-	_ZN20CNSmlEmailFileParserD0Ev @ 45 NONAME
-	_ZN20CNSmlEmailFileParserD1Ev @ 46 NONAME
-	_ZN20CNSmlEmailFileParserD2Ev @ 47 NONAME
-	_ZN24TNSmlFolderAttributeDataC1Ev @ 48 NONAME
-	_ZN24TNSmlFolderAttributeDataC2Ev @ 49 NONAME
-	_ZNK12CNSmlExtData12CountXmlSizeEPK14CNSmlXmlParser @ 50 NONAME
-	_ZNK12CNSmlExtData12GenerateXmlLER5TPtr8PK14CNSmlXmlParser @ 51 NONAME
-	_ZNK18CNSmlTruncatedData12GenerateXmlLER5TPtr8PK14CNSmlXmlParser @ 52 NONAME
-	_ZNK18CNSmlTruncatedData13CountXmlSizeLEPK14CNSmlXmlParser @ 53 NONAME
-	_ZNK24TNSmlFolderAttributeData11GenerateXmlER5TPtr8PK14CNSmlXmlParser @ 54 NONAME
-	_ZNK24TNSmlFolderAttributeData12CountXmlSizeEPK14CNSmlXmlParser @ 55 NONAME
-	_ZNK24TNSmlFolderAttributeData14AttributeCountEv @ 56 NONAME
-	_ZTI12CNSmlExtData @ 57 NONAME ; #<TI>#
-	_ZTI14CNSmlXmlParser @ 58 NONAME ; #<TI>#
-	_ZTI16CNSmlEmailParser @ 59 NONAME ; #<TI>#
-	_ZTI17CNSmlFolderParser @ 60 NONAME ; #<TI>#
-	_ZTI18CNSmlTruncatedData @ 61 NONAME ; #<TI>#
-	_ZTI20CNSmlEmailFileParser @ 62 NONAME ; #<TI>#
-	_ZTV12CNSmlExtData @ 63 NONAME ; #<VT>#
-	_ZTV14CNSmlXmlParser @ 64 NONAME ; #<VT>#
-	_ZTV16CNSmlEmailParser @ 65 NONAME ; #<VT>#
-	_ZTV17CNSmlFolderParser @ 66 NONAME ; #<VT>#
-	_ZTV18CNSmlTruncatedData @ 67 NONAME ; #<VT>#
-	_ZTV20CNSmlEmailFileParser @ 68 NONAME ; #<VT>#
-
--- a/omads/omadsextensions/dsutils/emailxmlutils/bld/nsmlxmlparser.mmp	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/*
-* Copyright (c) 2004 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:  EMail XML Parser mmp file
-*
-*/
-
-
-#include "defaultcaps.hrh"
-#include <platform_paths.hrh>
-
-CAPABILITY	CAP_GENERAL_DLL
-VENDORID 	VID_DEFAULT
-TARGET          nsmlxmlparser.dll
-TARGETTYPE      dll
-UID             0x1000008d 0x101F6DE4
-
-#if defined(ARMCC)
-DEFFILE		./def/eabixmlparser
-#elif defined(WINSCW)
-DEFFILE		./def/bwinscwxmlparser
-#elif defined(WINS)
-DEFFILE		./def/bwinsxmlparser
-#else
-DEFFILE		./def/bmarmxmlparser
-#endif
-
-APP_LAYER_SYSTEMINCLUDE
-SYSTEMINCLUDE	../../../adapters/email/mtm/inc
-USERINCLUDE     ../inc
-
-SOURCEPATH      ../src
-SOURCE		nsmlxmlparser.cpp
-SOURCE          NSmlExtData.cpp
-SOURCE          NSmlFolderAttributeData.cpp
-SOURCE          NSmlTruncatedData.cpp
-SOURCE          NSmlEmailParser.cpp
-SOURCE          NSmlEmailFileParser.cpp
-SOURCE          NSmlFolderParser.cpp
-
-LIBRARY         euser.lib estor.lib efsrv.lib
-
--- a/omads/omadsextensions/dsutils/emailxmlutils/inc/nsmlxmlparser.h	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,659 +0,0 @@
-/*
-* Copyright (c) 2004 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:  Email XML parser
-*
-*/
-
-
-// 1.2 Changes: nsmlxmlparser module added
-
-
-#ifndef __NSMLXMLPARSER_H__
-#define __NSMLXMLPARSER_H__
-
-// ------------------------------------------------------------------------------------------------
-// Includes
-// ------------------------------------------------------------------------------------------------
-#include <e32base.h>
-#include <s32strm.h>
-#include "nsmlEmailmtmdefs.h"
-
-
-// ------------------------------------------------------------------------------------------------
-// Defines for binary size optimization
-// ------------------------------------------------------------------------------------------------
-#define __NO_XML_COMMENTS_
-//#define __NO_EMPTY_ELEMENTS_
-
-
-// ------------------------------------------------------------------------------------------------
-// Class forward declarations
-// ------------------------------------------------------------------------------------------------
-class CNSmlXmlParser;
-class CNSmlExtData;
-
-
-// ------------------------------------------------------------------------------------------------
-// Typedefs
-// ------------------------------------------------------------------------------------------------
-// the array used for xval-values
-typedef CArrayPtrFlat<HBufC8> CNSmlXValArray;
-// the array used for extension data
-typedef CArrayPtrFlat<CNSmlExtData> CNSmlExtDataArray;
-// the array used for truncate info attachments data
-typedef RPointerArray<CNSmlAttachmentTruncateInfo> RNSmlAttachArray;
-// the array used for truncate info body data
-typedef RPointerArray<CNSmlBodyTruncateInfo> RNSmlBodyArray;
-
-
-// ------------------------------------------------------------------------------------------------
-// constants
-// ------------------------------------------------------------------------------------------------
-
-// the maximum length of an integer in characters
-const TInt KIntegerMaxLength = 12;
-
-// the length of a datetime in characters
-const TInt KDateTimeLength = 16;
-
-// the length of element start (<) and end (>)
-const TInt KElementStartEndWidth = 2;
-
-// constants used with files
-const TInt KReadDataLength = 512;
-const TUint KFileReadAccess	= EFileRead|EFileShareAny;
-const TUint KFileWriteAccess = EFileWrite|EFileShareExclusive;
-const TInt KMaxEmailItemFileNameLength = 256;
-_LIT(KEmailItemFile, "c:\\system\\temp\\emailitem.txt");
-_LIT(KEmailItemPath, "c:\\system\\temp\\");
-
-const TInt KNSmlEmailItemDrive = EDriveC;
-
-// Whitespace characters
-const TText KWhitespaceEmpty = ' ';
-const TText KWhitespaceLineFeed = '\r';
-const TText KWhitespaceNewLine = '\n';
-const TText KWhitespaceTabular = '\t';
-const TText KWhitespaceLineFeedNewLine = '\r\n';
-
-const TText KCharacterSlash = '/';
-
-// CData
-_LIT8(KCDataStart,		"<![CDATA[");
-_LIT8(KCDataEnd,		"]]>");
-_LIT8(KCDataInnerEnd,	"]]]]>&gt;<![CDATA[");
-
-#ifndef __NO_XML_COMMENTS_
-// Xml comments
-_LIT8(KCommentStart,	"<!--");
-_LIT8(KCommentEnd,		"-->");
-#endif
-
-const TText KElementStart = '<';
-const TText KElementEnd = '>';
-
-// Xml entities
-_LIT8(KEntityLT,	"&lt;");
-_LIT8(KEntityGT,	"&gt;");
-_LIT8(KEntityAMP,	"&amp;");
-_LIT8(KEntityAPOS,	"&apos;");
-_LIT8(KEntityQUOT,	"&quot;");
-
-// special characters
-_LIT8(KLessThan,	"<");
-_LIT8(KGreaterThan,	">");
-_LIT8(KAmpersand,	"&");
-_LIT8(KApostrophe,	"\'");
-_LIT8(KQuotation,	"\"");
-
-// boolean string representations
-_LIT8(KStringTrue,	"true");
-_LIT8(KStringFalse,	"false");
-
-// empty string
-_LIT8(KStringEmpty,	"");
-
-// email spesific elements
-_LIT8(KEmailElement,			"Email");
-_LIT8(KEmailReadElement,		"read");
-_LIT8(KEmailForwardedElement,	"forwarded");
-_LIT8(KEmailRepliedElement,		"replied");
-_LIT8(KEmailReceivedElement,	"received");
-_LIT8(KEmailCreatedElement,		"created");
-_LIT8(KEmailModifiedElement,	"modified");
-_LIT8(KEmailDeletedElement,		"deleted");
-_LIT8(KEmailFlaggedElement,		"flagged");
-_LIT8(KEmailItemElement,		"emailitem");
-
-// truncated info spesific elements
-_LIT8(KTruncatedElement,		"truncated");
-_LIT8(KTruncatedBodyElement,	"body");
-_LIT8(KTruncatedAttachElement,	"attach");
-_LIT8(KTruncatedSizeElement,	"size");
-_LIT8(KTruncatedTypeElement,	"type");
-_LIT8(KTruncatedNameElement,	"name");
-
-// extension spesific elements
-_LIT8(KExtElement,		"Ext");
-_LIT8(KExtXNamElement,	"XNam");
-_LIT8(KExtXValElement,	"XVal");
-
-// folder spesific elements
-_LIT8(KFolderElement,			"Folder");
-_LIT8(KFolderNameElement,		"name");
-_LIT8(KFolderCreatedElement,	"created");
-_LIT8(KFolderModifiedElement,	"modified");
-_LIT8(KFolderAccessedElement,	"accessed");
-_LIT8(KFolderAttributesElement,	"attributes");
-_LIT8(KFolderRoleElement,		"role");
-
-// folder attributes
-_LIT8(KAttributeHiddenElement,		"h");
-_LIT8(KAttributeSystemElement,		"s");
-_LIT8(KAttributeArchivedElement,	"a");
-_LIT8(KAttributeDeleteElement,		"d");
-_LIT8(KAttributeWritableElement,	"w");
-_LIT8(KAttributeReadableElement,	"r");
-_LIT8(KAttributeExecutableElement,	"x");
-
-
-// The error values returned from parser and generator functions
-enum TNSmlParserGeneratorError
-	{
-	EErrorNone,				// no error
-	EOutOfMemory,			// out of memory
-	EMandatoryFieldNotFound,// XNam inside Ext missing
-	EInvalidBooleanValue,	// Invalid value inside boolean elements
-	EInvalidIntegerValue,	// Invalid value inside integer elements
-	EInvalidDatetimeValue,	// Invalid value inside datetime elements
-	EInvalidCDataStructure,	// CDATA error
-	EInvalidXmlError, 		// Xml includes invalid data, i.e. xml generally against dtd
-	EInvalidFilename,		// file was not found or the filename was otherwise erroneous
-	EUnknownError			// Unknown error
-	};
-
-
-// enumeration for boolean values
-enum TNSmlBoolean
-	{
-	EBooleanMissing = 0, // not included in the xml
-	EBooleanTrue,
-	EBooleanFalse
-	};
-
-
-// extension data (found in both email and folder)
-class CNSmlExtData : public CBase
-	{
-public:
-	IMPORT_C static CNSmlExtData* NewL();
-	IMPORT_C static CNSmlExtData* NewLC();
-	IMPORT_C virtual ~CNSmlExtData();
-
-	IMPORT_C void AddXValL( HBufC8* aXVal );
-
-	IMPORT_C void GenerateXmlL( TPtr8& aXml, const CNSmlXmlParser* aParser ) const;
-	IMPORT_C TInt CountXmlSize( const CNSmlXmlParser* aParser ) const;
-	IMPORT_C void ConvertIntoEntitiesL( const CNSmlXmlParser* aParser );
-
-private:
-	CNSmlExtData();
-	void ConstructL();
-
-public:
-	HBufC8* iXNam;
-	CNSmlXValArray* iXVals;
-	};
-
-
-// folder attributes
-struct TNSmlFolderAttributeData
-	{
-	IMPORT_C TNSmlFolderAttributeData();
-
-	/*
-	* Returns the count of attributes that are not EBooleanMissing.
-	*/
-	IMPORT_C TInt AttributeCount() const;
-
-	IMPORT_C void GenerateXml( TPtr8& aXml, const CNSmlXmlParser* aParser ) const;
-	IMPORT_C TInt CountXmlSize( const CNSmlXmlParser* aParser ) const;
-
-	TNSmlBoolean iHidden;
-	TNSmlBoolean iSystem;
-	TNSmlBoolean iArchived;
-	TNSmlBoolean iDelete;
-	TNSmlBoolean iWritable;
-	TNSmlBoolean iReadable;
-	TNSmlBoolean iExecutable;
-	};
-
-
-// truncate info data
-class CNSmlTruncatedData : public CBase
-	{
-public:
-	IMPORT_C static CNSmlTruncatedData* NewL();
-	IMPORT_C static CNSmlTruncatedData* NewLC();
-	IMPORT_C virtual ~CNSmlTruncatedData();
-
-	IMPORT_C void AddAttachmentL(HBufC8* aName, TInt aSize, HBufC8* aType);
-	IMPORT_C void AddBodyL(TInt aSize, HBufC8* aType);
-
-	IMPORT_C void GenerateXmlL( TPtr8& aXml, const CNSmlXmlParser* aParser ) const;
-	IMPORT_C TInt CountXmlSizeL( const CNSmlXmlParser* aParser ) const;
-	IMPORT_C void ConvertIntoEntitiesL( const CNSmlXmlParser* aParser );
-
-private:
-	CNSmlTruncatedData();
-	void ConstructL();
-
-public:
-	RNSmlBodyArray iBodys;
-	RNSmlAttachArray iAttachments;
-	};
-
-
-// Base class for actual parsergenerators. 
-// Implements basic utilities for parsing and generating the xml.
-class CNSmlXmlParser : public CBase  
-	{
-public:
-	/*
-	* The constructor.
-	*/
-	IMPORT_C CNSmlXmlParser();
-
-	/*
-	* The destructor.
-	*/
-	IMPORT_C virtual ~CNSmlXmlParser();
-
-	/*
-	* Parses through the given xml and places the data it contains to 
-	* member variables.	Removes all the comments from the original string.
-	* @param aXml The xml to be parsed.
-	* @return 
-	*/
-	virtual TNSmlParserGeneratorError ParseXml( HBufC8* aXml ) =0;
-
-	/*
-	* Generates xml using the data in member variables of the child class. 
-	* aXml contains the generated xml when method returns successfully. 
-	* Caller should not instantiate 
-	* the buffer, since this method counts the size of the xml and 
-	* instantiates the buffer using the size as its maximum size.
-	* Caller gets the control of the buffer when method returns.
-	* @param aXml A pointer to a buffer, which is instantiated in this 
-	* method and contains the xml when method returns succesfully.
-	* @return 
-	*/
-	virtual TNSmlParserGeneratorError GenerateXml( HBufC8*& aXml ) =0;
-
-	/*
-	* Counts the size of the generated xml, when the xml would be generated 
-	* using the data in child class' member variables.
-	*/
-	virtual TInt CountXmlSizeL() =0;
-
-	/* utility functions */
-
-	void PreProcessL( HBufC8* aXml ) const;
-
-	TPtrC8 BooleanToString( const TNSmlBoolean aValue ) const;
-	TBuf8<KDateTimeLength> DateTimeToStringL( const TTime& aValue ) const;
-	TBuf8<KIntegerMaxLength> IntegerToString( const TInt aValue ) const;
-
-	TNSmlBoolean StringToBooleanL( const TPtrC8& aValue ) const;
-	TInt StringToIntegerL( const TPtrC8& aValue ) const;
-	// Note: Ignores UTC-times (Z-ending) and treats them as local time!
-	TTime StringToTTimeL( TPtrC8& aValue ) const;
-
-	void AppendElement( TPtr8& aPtr, const TDesC8& aElementName, const TDesC8& aValue ) const;
-	void AppendElement( TPtr8& aPtr, const TDesC8& aElementName ) const;
-	void AppendEndElement( TPtr8& aPtr, const TDesC8& aElementName ) const;
-
-	TInt SizeOfElements( const TDesC8& aElementName ) const;
-	TInt SizeOfBoolean( const TNSmlBoolean aValue, const TDesC8& aElementName ) const;
-	TInt SizeOfDatetime( const TDesC8& aElementName ) const;
-	TInt SizeOfInteger( const TDesC8& aElementName ) const;
-	TInt SizeOfString( const HBufC8* aValue, const TDesC8& aElementName ) const;
-
-	TInt EntitiesToCharactersL( HBufC8*& aXml, TInt aStartPos, TInt aEndPos ) const;
-	TInt CharactersToEntitiesL( HBufC8*& aXml, TInt aStartPos, TInt aEndPos ) const;
-
-	TBool IsWhitespace( const TDesC8& aText ) const;
-	void LeaveIfNotWhiteSpaceL( const TDesC8& aText ) const;
-
-	TNSmlParserGeneratorError CheckError( const TInt error ) const;
-
-protected:
-	// parsing methods
-	void ParseL( TPtrC8& aXml );
-	void AddToCompleteL( const TPtrC8 aStr );
-	void ResetBufferL( HBufC8*& aBuf ) const;
-	void AddToBufferL( const TText c, HBufC8*& aBuf ) const;
-
-	virtual void NextElementL( TPtrC8 aElement ) =0;
-	virtual void NextDataL( TPtrC8 aData ) =0;
-
-private:
-	TInt ReplaceL( HBufC8*& aText, const TDesC8& aTarget, const TDesC8& aItem, TInt aStartPos, TInt aEndPos ) const;
-	void CheckDatetimeErrorL( const TInt error ) const;
-
-protected:
-	HBufC8* iBuffer;
-	HBufC8* iCompleteBuffer;
-	};
-
-
-
-// Email parser. Implements the parsing and generating of Email xml.
-class CNSmlEmailParser : public CNSmlXmlParser
-	{
-public:
-	IMPORT_C static CNSmlEmailParser* NewL();
-	IMPORT_C static CNSmlEmailParser* NewLC();
-	IMPORT_C virtual ~CNSmlEmailParser();
-
-	IMPORT_C virtual TNSmlParserGeneratorError ParseXml( HBufC8* aXml );
-	IMPORT_C virtual TNSmlParserGeneratorError GenerateXml( HBufC8*& aXml );
-	IMPORT_C virtual TInt CountXmlSizeL();
-
-	IMPORT_C void AddExtL( CNSmlExtData* aExt );
-
-protected:
-	virtual void NextElementL( TPtrC8 aElement );
-	virtual void NextDataL( TPtrC8 aData );
-
-	virtual void HandleNextEmailItemDataL( TPtrC8 aData );
-	virtual void HandleNextEmailItemStartL() {}; // nothing to do
-	virtual void HandleNextEmailItemEndL() {}; // nothing to do
-
-	void ConvertIntoEntitiesL();
-
-	CNSmlEmailParser();
-	void ConstructL();
-
-protected:
-	
-	// the email elements (states) in the order they appear in DTD
-	enum TNSmlCurrentEmailElement
-		{
-		ENone = 0,
-		EEmail,
-		ERead, 
-		EForwarded,
-		EReplied,
-		EReceived,
-		ECreated,
-		EModified,
-		EDeleted,
-		EFlagged,
-		EEmailItem,
-		ETrunc,
-		ETruncBody,
-		ETruncBodySize,
-		ETruncBodyType,
-		ETruncAttach,
-		ETruncAttachName,
-		ETruncAttachSize,
-		ETruncAttachType, 
-		EExt,
-		EExtXNam,
-		EExtXVal
-		};
-	
-	// struct used in email parsing to know which members are already set
-	struct TNSmlSetEmailValues
-		{
-		TNSmlSetEmailValues();
-		void Reset();
-		
-		TBool iEmail;
-		TBool iRead;
-		TBool iForwarded;
-		TBool iReplied;
-		TBool iDeleted;
-		TBool iFlagged;
-		TBool iReceived;
-		TBool iCreated;
-		TBool iModified;
-		TBool iEmailItem;
-		TBool iTrunc;
-		TBool iTruncBodySize;
-		TBool iTruncBodyType;
-		TBool iTruncAttachSize;
-		TBool iTruncAttachType;
-		TBool iTruncAttachName;
-		TBool iXNam;
-		};
-	
-private:
-	void StartElementStateChangeL( TNSmlCurrentEmailElement aCurrentState, TNSmlCurrentEmailElement aNextState, TBool aIsSet = EFalse );
-	void EndElementStateChangeL( TNSmlCurrentEmailElement aCurrentState, TNSmlCurrentEmailElement aNextState );
-	
-	void GenerateEmailXmlL( HBufC8*& aXml );
-
-public:
-
-	/*
-	* The values of the data below is treated as follows:
-	* When constructing this data from an xml, boolean values 
-	* are EBooleanTrue, when <field>true</field>, EBooleanFalse 
-	* when <field>false</field> OR <field/>, and EBooleanMissing 
-	* when the field is not present in the xml. Datetime values 
-	* are equal to Time::NullTTime when the field is missing (they should 
-	* never be empty). Text values (HBufC8*) are NULL when the field is 
-	* missing, an empty string when <field></field> OR <field/> and the 
-	* actual value between elements if there is data between those 
-	* elements. iExt is never NULL, but when iExt->Count() 
-	* equals to zero, there are no extensions present in the xml.
-	*
-	* These same rules are used when generating xml from 
-	* this data object.
-	*/
-
-	TNSmlBoolean iRead;
-	TNSmlBoolean iForwarded;
-	TNSmlBoolean iReplied;
-	TTime iReceived;
-	TTime iCreated;
-	TTime iModified;
-	HBufC8* iEmailItem;
-	TNSmlBoolean iDeleted;
-	TNSmlBoolean iFlagged;
-	CNSmlTruncatedData* iTruncated;
-	CNSmlExtDataArray* iExt;
-
-protected:
-	TNSmlSetEmailValues iSetValues;
-	TNSmlCurrentEmailElement iCurrentState;
-	TNSmlCurrentEmailElement iLastState;
-
-private:
-
-	TInt iTruncSize;
-	HBufC8* iTruncType;
-	HBufC8* iTruncName;
-	CNSmlExtData* iExtData;
-	};
-
-
-
-// ------------------------------------------------------------------------------------------------
-// Parses and generates the xml using files/streams. If emailitem is present, it is 
-// stored in a file.
-// ------------------------------------------------------------------------------------------------
-class CNSmlEmailFileParser : public CNSmlEmailParser
-	{
-public:
-	IMPORT_C static CNSmlEmailFileParser* NewL();
-	IMPORT_C static CNSmlEmailFileParser* NewLC();
-	IMPORT_C virtual ~CNSmlEmailFileParser();
-
-	IMPORT_C virtual TNSmlParserGeneratorError ParseXml( HBufC8* aXml );
-	IMPORT_C virtual TNSmlParserGeneratorError ParseXml( RReadStream& aRs );
-	IMPORT_C virtual TNSmlParserGeneratorError GenerateXml( HBufC8*& aXml );
-	IMPORT_C virtual TNSmlParserGeneratorError GenerateXml( RWriteStream& aWs );
-	IMPORT_C virtual TInt CountXmlSizeL();
-
-protected:
-	virtual void HandleNextEmailItemDataL( TPtrC8 aData );
-	virtual void HandleNextEmailItemStartL();
-	virtual void HandleNextEmailItemEndL();
-
-private:
-	void ParseFromStreamL( RReadStream& rs );
-	void ParsePieceL( TPtrC8& aXml, TBool aLastPiece = EFalse );
-	TUint RemoveIncompleteL( HBufC8* aPiece, RReadStream& aStream );
-	TUint CheckPiece( const TPtrC8 aEnd ) const;
-	void PreProcessPieceL( HBufC8* aXml );
-
-	void GenerateEmailXmlL( RWriteStream& aWs );
-
-	void ResetParserL();
-	void ResetPreProcessor();
-
-	HBufC* Buf8ToBuf16( const HBufC8* buf8 ) const;
-
-	CNSmlEmailFileParser();
-	void ConstructL();
-
-public:
-
-	TBool iUseEmailItem; // whether or not emailitem should be used in generation
-
-private:
-
-	// xml parsing state
-	TBool iReadingElementName;
-	TBool iReadingCData;
-#ifndef __NO_XML_COMMENTS_
-	TBool iReadingComment;
-#endif
-	TBool iReadingEmailItemData;
-
-	// pre-processing state
-	TInt iCdataStartPos;
-	TInt iCdataEndPos;
-
-	// file handling
-	RFs iRfs;
-	RFileWriteStream iWriteStream;
-	
-	HBufC* iEmailItemFile;
-	TBool iFirstPiece;
-	TBool iCdataFoundFromFirstPiece;
-	};
-
-
-
-
-// Folder parser. Implements parsing and generating of Folder xml.
-class CNSmlFolderParser : public CNSmlXmlParser
-	{
-public:
-	IMPORT_C static CNSmlFolderParser* NewL();
-	IMPORT_C static CNSmlFolderParser* NewLC();
-	IMPORT_C virtual ~CNSmlFolderParser();
-
-	IMPORT_C virtual TNSmlParserGeneratorError ParseXml( HBufC8* aXml );
-	IMPORT_C virtual TNSmlParserGeneratorError GenerateXml( HBufC8*& aXml );
-	IMPORT_C virtual TInt CountXmlSizeL() ;
-
-	IMPORT_C void AddExtL( CNSmlExtData* aExt );
-
-protected:
-	virtual void NextElementL( TPtrC8 aElement );
-	virtual void NextDataL( TPtrC8 aData );
-
-protected:
-	
-	// the folder elements (states) in the order they appear in DTD
-	enum TNSmlCurrentFolderElement
-		{
-		EFolderNone = 0,
-		EFolder,
-		EFolderName, 
-		EFolderCreated,
-		EFolderModified,
-		EFolderAccessed,
-		EAttributes,
-		EAttributesH,
-		EAttributesS,
-		EAttributesA,
-		EAttributesD,
-		EAttributesW,
-		EAttributesR,
-		EAttributesX,
-		EFolderRole,
-		EFolderExt,
-		EFolderExtXNam,
-		EFolderExtXVal
-		};
-	
-	// struct used in folder parsing (which members are already set)
-	struct TNSmlSetFolderValues
-		{
-		TNSmlSetFolderValues();
-		void Reset();
-		
-		TBool iFolder;
-		TBool iName;
-		TBool iCreated;
-		TBool iModified;
-		TBool iAccessed;
-		TBool iAttributes;
-		TBool iAttributesH;
-		TBool iAttributesS;
-		TBool iAttributesA;
-		TBool iAttributesD;
-		TBool iAttributesW;
-		TBool iAttributesR;
-		TBool iAttributesX;
-		TBool iRole;
-		TBool iXNam;
-		};
-	
-private:
-	void StartElementStateChangeL( TNSmlCurrentFolderElement aCurrentState, TNSmlCurrentFolderElement aNextState, TBool aIsSet = EFalse );
-	void EndElementStateChangeL( TNSmlCurrentFolderElement aCurrentState, TNSmlCurrentFolderElement aNextState );
-
-	void GenerateFolderXmlL( HBufC8*& aXml );
-	void ConvertIntoEntitiesL();
-
-	CNSmlFolderParser();
-	void ConstructL();
-
-public:
-	HBufC8* iName;
-	TTime iCreated;
-	TTime iModified;
-	TTime iAccessed;
-	TNSmlFolderAttributeData iAttributes;
-	HBufC8* iRole;
-	CNSmlExtDataArray* iExt;
-
-private:
-	TNSmlCurrentFolderElement iCurrentState;
-	TNSmlCurrentFolderElement iLastState;
-	TNSmlSetFolderValues iSetValues;
-
-	CNSmlExtData* iExtData;
-	};
-
-
-
-#endif // __NSMLXMLPARSER_H__
--- a/omads/omadsextensions/dsutils/emailxmlutils/src/NSmlEmailFileParser.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,814 +0,0 @@
-/*
-* Copyright (c) 2004 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:  Sources
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <s32buf.h>
-#include <s32file.h>
-
-#include "nsmlxmlparser.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlEmailFileParser* CNSmlEmailFileParser::NewL()
-	{
-	CNSmlEmailFileParser* self = CNSmlEmailFileParser::NewLC();
-	CleanupStack::Pop();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlEmailFileParser* CNSmlEmailFileParser::NewLC()
-	{
-	CNSmlEmailFileParser* self = new (ELeave) CNSmlEmailFileParser();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::~CNSmlEmailFileParser
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlEmailFileParser::~CNSmlEmailFileParser()
-	{
-	// close rfs and open streams
-	if ( iWriteStream.Sink() )
-		iWriteStream.Close();
-
-	iRfs.Close();
-	delete iEmailItemFile;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::ParseXml
-// Parses the email xml, that is located in the file whose name is given 
-// as aXml (path and filename)
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlParserGeneratorError CNSmlEmailFileParser::ParseXml( HBufC8* aXml )
-	{
-	if ( !aXml )
-		return EInvalidFilename;
-
-	HBufC* filename = Buf8ToBuf16( aXml );
-	if ( !filename )
-		{
-		return EOutOfMemory;
-		}
-
-	// open the stream and parse
-	TNSmlParserGeneratorError err = EErrorNone;
-	RFileReadStream rs;
-	if ( rs.Open(iRfs, *filename, KFileReadAccess) != KErrNone )
-		{
-		err = EInvalidFilename;
-		}
-	else
-		{
-		err = ParseXml( rs );
-		rs.Close();
-		}
-
-	delete filename;
-
-	return err;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::ParseXml
-// Parses the xml from the given stream, and writes the emailitem - if present - to a temp file
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlParserGeneratorError CNSmlEmailFileParser::ParseXml( RReadStream& aRs )
-	{
-	iSetValues.Reset();
-	iCurrentState = ENone;
-	iLastState = ENone;
-
-	TRAPD(err, ParseFromStreamL( aRs ));
-
-	if( err == EErrorNone && iCurrentState != ENone )
-		return EInvalidXmlError;
-
-	return CheckError(err);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::GenerateXml
-// Generates the xml and writes it to the file whose name is given in aXml (path 
-// and filename).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlParserGeneratorError CNSmlEmailFileParser::GenerateXml( HBufC8*& aXml )
-	{
-	if ( !aXml )
-		return EInvalidFilename;
-
-	HBufC* filename = Buf8ToBuf16( aXml );
-	if ( !filename )
-		{
-		return EOutOfMemory;
-		}
-
-	// open the stream and generate
-	iWriteStream.Replace(iRfs, *filename, KFileWriteAccess);
-	TNSmlParserGeneratorError err = GenerateXml( iWriteStream );
-	iWriteStream.Close();
-
-	delete filename;
-
-	return err;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::GenerateXml
-// Generates the xml and writes it to the given stream.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlParserGeneratorError CNSmlEmailFileParser::GenerateXml( RWriteStream& aWs )
-	{
-	TRAPD( err, GenerateEmailXmlL( aWs ) );
-
-	return CheckError(err);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::GenerateEmailXmlL
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::GenerateEmailXmlL( RWriteStream& aWs )
-	{
-	ConvertIntoEntitiesL();
-
-	// count the size of the xml (does not include emailitem, since it is - if present - in a file)
-	TInt size = CNSmlEmailParser::CountXmlSizeL();
-	if ( iUseEmailItem ) size += 20; // extra for emailitem tags
-
-	// create a buffer for using the size
-	HBufC8* xml = HBufC8::NewLC(size);
-	TPtr8 ptr = xml->Des();
-
-	// append data to buffer
-	AppendElement(ptr, KEmailElement());
-
-	if ( iRead )
-		{
-		AppendElement(ptr, KEmailReadElement(), BooleanToString( iRead ));
-		}
-
-	if ( iForwarded )
-		{
-		AppendElement(ptr, KEmailForwardedElement(), BooleanToString( iForwarded ));
-		}
-
-	if ( iReplied )
-		{
-		AppendElement(ptr, KEmailRepliedElement(), BooleanToString( iReplied ));
-		}
-
-	if (iReceived != Time::NullTTime())
-		{
-		AppendElement(ptr, KEmailReceivedElement(), DateTimeToStringL(iReceived));
-		}
-
-	if (iCreated != Time::NullTTime())
-		{
-		AppendElement(ptr, KEmailCreatedElement(), DateTimeToStringL(iCreated));
-		}
-
-	if (iModified != Time::NullTTime())
-		{
-		AppendElement(ptr, KEmailModifiedElement(), DateTimeToStringL(iModified));
-		}
-
-	if ( iDeleted )
-		{
-		AppendElement(ptr, KEmailDeletedElement(), BooleanToString( iDeleted ));
-		}
-
-	if ( iFlagged )
-		{
-		AppendElement(ptr, KEmailFlaggedElement(), BooleanToString( iFlagged ));
-		}
-
-	// if emailitem should be used in generation, write it to the stream
-	if ( iUseEmailItem )
-		{
-		// append start tag and cdata start
-		AppendElement(ptr, KEmailItemElement());
-		ptr.Append(KCDataStart);
-
-		// open a stream to emailitem
-		RFileReadStream rs;
-		TInt err = rs.Open( iRfs, *iEmailItemFile, KFileReadAccess );
-		if ( err != KErrNone )
-			User::Leave( EInvalidFilename );
-		
-		CleanupClosePushL(rs);
-		
-		// write the buffer to the stream
-		aWs.WriteL(ptr);
-		
-		// write emailitem from stream
-		aWs.WriteL(rs);
-		
-		// close the opened read stream
-		CleanupStack::Pop(); // rs
-
-		// empty the buffer (i.e. set the length to zero)
-		ptr.SetLength(0);
-
-		// append emailitem end tag and cdata inner end
-		ptr.Append(KCDataEnd);
-		AppendEndElement(ptr, KEmailItemElement());
-		}
-
-	// append the rest of the data to the buffer
-	if ( iTruncated )
-		{
-		iTruncated->GenerateXmlL(ptr, this);
-		}
-
-	if ( iExt )
-		{
-		for (TInt i=0; i < iExt->Count(); ++i)
-			{
-			iExt->At(i)->GenerateXmlL(ptr, this);
-			}
-
-		}
-
-	AppendEndElement(ptr, KEmailElement());
-
-	// write the buffer to the stream and commit
-	aWs.WriteL(ptr);
-	aWs.CommitL();
-
-	CleanupStack::PopAndDestroy(); // xml
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::CountXmlSizeL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CNSmlEmailFileParser::CountXmlSizeL()
-	{
-	// counting the size is not essential, since xml is written to a file
-	return KErrNotSupported;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::HandleNextEmailItemDataL
-// Next emailitem data
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::HandleNextEmailItemDataL( TPtrC8 aData )
-	{
-	// write the given piece of data into a file (stream)
-	iWriteStream.WriteL(aData);
-	}
-
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::HandleNextEmailItemStartL
-// Emailitem element starts
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::HandleNextEmailItemStartL()
-	{
-	// open the write stream
-	User::LeaveIfError( iWriteStream.Replace( iRfs, *iEmailItemFile, KFileWriteAccess ) );
-	iReadingEmailItemData = ETrue;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::HandleNextEmailItemEndL
-// Emailitem element ends
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::HandleNextEmailItemEndL()
-	{
-	// close the write stream
-	iWriteStream.Close();
-	iReadingEmailItemData = EFalse;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::ParseFromStreamL
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::ParseFromStreamL( RReadStream& aRs )
-	{
-
-	// reset preprocess variables and parser
-	ResetPreProcessor();
-	ResetParserL();
-
-	// read and process the data piece by piece
-	HBufC8* piece = HBufC8::NewLC(KReadDataLength);
-	TPtr8 ptr = piece->Des();
-	TInt dataSize = aRs.Source()->SizeL();
-
-	TInt pos = 0;
-	iFirstPiece = ETrue;
-	for( pos = KReadDataLength; pos <= dataSize ; pos += KReadDataLength )
-		{
-		// read piece of data from the stream
-		aRs.ReadL(ptr, KReadDataLength);
-
-		// check that there are no incomplete cdata/comment/entity at the end
-		dataSize += RemoveIncompleteL( piece, aRs );
-
-		// pre-process
-		PreProcessPieceL( piece );
-
-		// parsing
-		TPtrC8 temp( *piece );
-		ParsePieceL( temp );
-		
-		iFirstPiece = EFalse;
-		}
-
-	TInt lastPartLength = dataSize - pos + KReadDataLength;
-	aRs.ReadL(ptr, lastPartLength);
-
-	PreProcessPieceL( piece );
-
-	// parsing
-	TPtrC8 temp( *piece );
-	ParsePieceL( temp, ETrue );
-
-	CleanupStack::PopAndDestroy(); // piece
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::ParsePieceL
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::ParsePieceL( TPtrC8& aXml, TBool aLastPiece )
-	{
-
-	// check if last cdata has not ended yet
-	if ( iReadingCData )
-		{
-		TInt endPos = aXml.Find(KCDataEnd);
-		TPtrC8 cdata = _L8("");
-
-		if ( endPos == KErrNotFound && aLastPiece )
-			{
-			User::Leave(EInvalidCDataStructure);
-			}
-		else if ( endPos == KErrNotFound )
-			{
-			// cdata end was not found, read the whole piece as cdata
-			NextDataL( aXml );
-			return;
-			}
-		else 
-			{
-			// add data until cdata end to buffer
-			cdata.Set( aXml.Left( endPos ) );
-			aXml.Set( aXml.Right( aXml.Length() - endPos - KCDataEnd().Length() ) );			
-			iReadingCData = EFalse;
-			}
-
-		AddToCompleteL(cdata);
-		NextDataL(*iCompleteBuffer);
-		ResetBufferL(iCompleteBuffer);
-
-		}
-#ifndef __NO_XML_COMMENTS_
-	else if ( iReadingComment ) // check if last comment has not ended yet
-		{
-		TInt endPos = aXml.Find(KCommentEnd);
-
-		if ( endPos == KErrNotFound && aLastPiece )
-			{ // this is the last piece of data and end of comment has not been found -> error
-			User::Leave(EInvalidXmlError);
-			}
-		else if ( endPos == KErrNotFound )
-			{
-			// end of comment was not found, no need to parse this piece of data
-			return;
-			}
-		else 
-			{
-			// end of cdata was found, jump to that position
-			aXml.Set( aXml.Right( aXml.Length() - endPos - KCommentEnd().Length() ) );
-			iReadingComment = EFalse;
-			}
-		}
-#endif
-
-	// parse through the string
-	TText c;
-
-	for( TInt i=0; i < aXml.Length(); ++i )
-		{
-		c = aXml[i];
-		switch(c)
-			{
-			case KElementStart:
-				// if currently reading element, error
-				if( iReadingElementName )
-					{
-					User::Leave(EInvalidXmlError);
-					}
-
-				if( aXml.Length()-i >= KCDataStart().Length() &&
-					!aXml.Mid(i, KCDataStart().Length()).Compare(KCDataStart()) )
-					{ // cdata
-					aXml.Set( aXml.Right( aXml.Length() - i ) );
-					TInt endPos = aXml.Find(KCDataEnd);
-
-					TPtrC8 cdata = _L8("");
-					if ( endPos == KErrNotFound && aLastPiece )
-						{
-						User::Leave(EInvalidCDataStructure);
-						}
-					else if ( endPos == KErrNotFound )
-						{
-						// cdata end was not found, read all the rest as cdata
-						cdata.Set( aXml.Right( aXml.Length() - KCDataStart().Length() ) );
-						i = aXml.Length(); // move to the end
-						iReadingCData = ETrue;
-						}
-					else 
-						{
-						cdata.Set( aXml.Mid( KCDataStart().Length(), endPos - KCDataStart().Length() ) );
-						aXml.Set( aXml.Right( aXml.Length() - endPos - KCDataEnd().Length() ) );
-
-						i = -1;
-						}
-
-					// add current buffer to complete buffer
-					EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
-					AddToCompleteL(*iBuffer);
-					ResetBufferL(iBuffer);
-					AddToCompleteL(cdata);
-					}
-#ifndef __NO_XML_COMMENTS_
-				else if( aXml.Length()-i >= KCommentStart().Length() &&
-					!aXml.Mid(i, KCommentStart().Length()).Compare(KCommentStart()) )
-					{ // comment
-					aXml.Set( aXml.Right( aXml.Length() - i ) );
-					TInt endPos = aXml.Find(KCommentEnd);
-
-					if ( endPos == KErrNotFound && aLastPiece)
-						{
-						// this is the last piece of data, and end of comment was not found -> error
-						User::Leave(EInvalidXmlError);
-						}
-					else if ( endPos == KErrNotFound )
-						{
-						// the end was not found, no need to parse the rest since it is comment
-						iReadingComment = ETrue;
-						return;
-						}
-					else
-						{
-						// the end of comment was found, move to the end of comment and start parsing 
-						// from there on
-						aXml.Set( aXml.Right( aXml.Length() - endPos - KCommentEnd().Length() ) );
-						}
-
-					i = -1;
-					}
-#endif
-				else 
-					{
-					// send the buffer
-					EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
-					AddToCompleteL(*iBuffer);
-					NextDataL(*iCompleteBuffer);
-					ResetBufferL(iBuffer);
-					ResetBufferL(iCompleteBuffer);
-					iReadingElementName = ETrue;
-					}
-
-				break;
-			case KElementEnd:
-				// stop reading element name
-				if( !iReadingElementName )
-					{
-					User::Leave(EInvalidXmlError);
-					}
-				else 
-					{
-					NextElementL(*iBuffer);
-					ResetBufferL(iBuffer);
-					iReadingElementName = EFalse;
-					}
-				break;
-			default:
-				// add char to buffer
-				AddToBufferL(c, iBuffer);
-				break;
-			}
-		}
-
-	// send the data in the buffer
-	if ( ( iReadingEmailItemData || aLastPiece ) && !iReadingElementName )
-		{
-		EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
-		AddToCompleteL(*iBuffer);
-		NextDataL(*iCompleteBuffer);
-		ResetBufferL(iBuffer);
-		ResetBufferL(iCompleteBuffer);
-		}
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::RemoveIncompleteL
-// Checks if there is incomplete cdata/comment/entity at the end of the given
-// piece. If one is found, it is removed from aPiece and the read mark of the
-// stream is moved backwards the length of the removed item (i.e. the incomplete
-// item will be read to the next piece as a whole).
-// -----------------------------------------------------------------------------
-//
-TUint CNSmlEmailFileParser::RemoveIncompleteL( HBufC8* aPiece, RReadStream& aStream )
-	{
-	// we need to check only the last nine characters
-	TUint removeSize = CheckPiece( aPiece->Right( 9 ) );
-
-	if ( removeSize )
-		{
-		// remove the incomplete item from aPiece
-		TPtr8 ptr = aPiece->Des();
-		ptr.Delete( aPiece->Length() - removeSize, removeSize );
-
-		// move backwards in reading the stream
-		aStream.Source()->SeekL( MStreamBuf::ERead, aStream.Source()->TellL(MStreamBuf::ERead) - removeSize );
-		}
-
-	// no need to loop the rest of aPiece. If xml is not correctly formed,
-	// an error occures later in the parser
-
-	return removeSize;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::CheckPiece
-// -----------------------------------------------------------------------------
-//
-TUint CNSmlEmailFileParser::CheckPiece( const TPtrC8 aEnd ) const
-	{
-	// check that there are no incomplete cdata/comment/entity at the end	
-	// (cdata start, cdata end, cdata inner end, comment start, comment end, entities)
-	// ( <![CDATA[ , ]]> , <!-- , --> , &xxxx; , ]]]]>&gt; , ]]]]&gt;> )
-	// do not change the order
-
-	// possible inner cdata end
-	TInt pos = aEnd.Find( _L8("]]]") );
-	if ( pos != KErrNotFound )
-		{
-		return aEnd.Length() - pos;
-		}
-
-	// beginning part of comment or cdata
-	pos = aEnd.Find( _L8("<!") );
-	if ( pos != KErrNotFound )
-		{
-		return aEnd.Length() - pos;
-		}
-
-	// end of cdata
-	TText lastChar = aEnd[aEnd.Length()-1];
-	TText secondLastChar = aEnd[aEnd.Length()-2];
-	if ( lastChar == ']' && secondLastChar == ']' )
-		{
-		return 2;
-		}
-
-#ifndef __NO_XML_COMMENTS_
-	// comment end
-	if ( lastChar == '-' && secondLastChar == '-' )
-		{
-		return 2;
-		}
-#endif
-
-	// special chars
-	if ( lastChar == '<' || lastChar == ']' || lastChar == '-' )
-		{
-		return 1;
-		}
-
-	// possible entity
-	pos = aEnd.Find( _L8("&") );
-	if ( pos != KErrNotFound )
-		{
-		return aEnd.Length() - pos;
-		}
-
-	return 0;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::PreProcessPieceL
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::PreProcessPieceL( HBufC8* aXml )
-	{
-	// take a modifiable pointer
-	TPtr8 xml = aXml->Des();
-
-	// the string used for searching and moving in the string
-	TPtrC8 searchString(*aXml);
-
-	// the current position in the original string
-	TInt searchStartPos = 0;
-
-	// if start has been found and end has not, try to find end first
-	if ( iCdataEndPos == KErrNotFound && iCdataStartPos != KErrNotFound && iCdataFoundFromFirstPiece )
-		{
-		// we're looking for a cdata end
-		iCdataEndPos = searchString.Find(KCDataEnd);
-
-		// if the end was found, remove it and start looking for a cdata start
-		if ( iCdataEndPos != KErrNotFound )
-			{
-			// remove cdata end
-			xml.Delete(iCdataEndPos, KCDataEnd().Length());
-			searchStartPos = iCdataEndPos;
-			searchString.Set( xml.Right(xml.Length() - searchStartPos) );
-			}
-		else
-			{
-			// end was not found, return
-			return;
-			}
-		}
-	
-	iCdataStartPos = searchString.Find(KCDataStart);
-	
-	// If CDATA is not found from beginning then data is not inside CDATA and then
-	// preprocessing is not needed
-	if ( iCdataStartPos != 0 && iFirstPiece )
-	    {
-	    return;
-	    }
-	else if ( !iFirstPiece && !iCdataFoundFromFirstPiece )
-		{
-		return;
-		}
-	else if ( iCdataStartPos == 0 && iFirstPiece )
-		{
-		iCdataFoundFromFirstPiece = ETrue;	
-		}
-	
-	
-	// while cdata is found
-	while ( iCdataStartPos != KErrNotFound )
-		{
-		iCdataStartPos += searchStartPos;
-		
-		// find an end of cdata before entities are converted
-		iCdataEndPos = searchString.Find(KCDataEnd);
-		
-		// convert entities between search start and cdata start
-		TInt entityChange = EntitiesToCharactersL(aXml, searchStartPos, iCdataStartPos);
-		xml.Set(aXml->Des());
-		iCdataStartPos += entityChange;
-		
-		if ( iCdataEndPos != KErrNotFound )
-			{
-			iCdataEndPos += entityChange;
-			iCdataEndPos += searchStartPos;
-			
-			// if the end is before start -> error
-			if ( iCdataEndPos < iCdataStartPos )
-				User::Leave( EInvalidCDataStructure );
-			
-			// remove cdata end
-			xml.Delete(iCdataEndPos, KCDataEnd().Length());
-			// remove cdata start
-			xml.Delete(iCdataStartPos, KCDataStart().Length());
-			
-			searchStartPos = iCdataEndPos - KCDataStart().Length();
-			searchString.Set( xml.Right(xml.Length() - searchStartPos) );
-			}
-		else
-			{
-			// remove cdata start
-			xml.Delete(iCdataStartPos, KCDataStart().Length());
-			
-			// since there was no end found, return
-			return;
-			}
-		
-		// find a new cdata start that is after the found end
-		iCdataStartPos = searchString.Find(KCDataStart);
-		
-		}
-	
-	if ( iCdataStartPos == KErrNotFound )
-		{
-		EntitiesToCharactersL(aXml, searchStartPos, aXml->Length());
-		}
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::ResetParserL
-// Resets the state of the parser, should be called before starting the parsing.
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::ResetParserL()
-	{
-	ResetBufferL(iBuffer);
-	ResetBufferL(iCompleteBuffer);
-	iReadingElementName = EFalse;
-	iReadingCData = EFalse;
-	iReadingEmailItemData = EFalse;
-	iFirstPiece = EFalse;
-	iCdataFoundFromFirstPiece = EFalse;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::ResetPreProcessor
-// Resets the variables used in preprocessor.
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::ResetPreProcessor()
-	{
-	iCdataStartPos = KErrNotFound;
-	iCdataEndPos = KErrNotFound;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::Buf8ToBuf16
-// -----------------------------------------------------------------------------
-//
-HBufC* CNSmlEmailFileParser::Buf8ToBuf16( const HBufC8* buf8 ) const
-	{
-	HBufC* buf16 = HBufC::New(buf8->Length());
-	if ( buf16 )
-		{
-		TPtr ptr = buf16->Des();
-		ptr.Copy( *buf8 );
-		}
-
-	return buf16;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::CNSmlEmailFileParser
-// Constructor.
-// -----------------------------------------------------------------------------
-//
-CNSmlEmailFileParser::CNSmlEmailFileParser()
-	: iUseEmailItem(ETrue)
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailFileParser::ConstructL
-// Second phase construction.
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailFileParser::ConstructL()
-	{
-	CNSmlEmailParser::ConstructL();
-	User::LeaveIfError( iRfs.Connect() );
-	
-	// create path+filename for emailitem
-    iEmailItemFile = HBufC::NewL( KMaxEmailItemFileNameLength );
-    TPtr file = iEmailItemFile->Des();
-
-	file.Append( KEmailItemFile );
-
-	}
-
-//  End of File
--- a/omads/omadsextensions/dsutils/emailxmlutils/src/NSmlEmailParser.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,793 +0,0 @@
-/*
-* Copyright (c) 2004 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:  Sources
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <s32buf.h>
-#include <s32file.h>
-
-#include "nsmlxmlparser.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlEmailParser* CNSmlEmailParser::NewL()
-	{
-	CNSmlEmailParser* self = CNSmlEmailParser::NewLC();
-	CleanupStack::Pop();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlEmailParser* CNSmlEmailParser::NewLC()
-	{
-	CNSmlEmailParser* self = new (ELeave) CNSmlEmailParser();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::~CNSmlEmailParser
-// Destructor
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlEmailParser::~CNSmlEmailParser()
-	{
-	if( iTruncated )
-		delete iTruncated;
-
-	if( iExt ) 
-		{
-		iExt->ResetAndDestroy();
-		delete iExt;
-		}
-
-	if( iEmailItem ) delete iEmailItem;
-
-	if( iTruncType ) delete iTruncType;
-	if( iTruncName ) delete iTruncName;
-	if( iExtData ) delete iExtData;
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::ParseXml
-// Parses through the given XML and puts the data it contains 
-// to member variables. 
-// Note: The string-values in CNSmlEmailParser are NOT copies, but 
-// references to aXml. The method does not check, if member variables 
-// already contain data, but just writes it (if some of them are already 
-// instantiated dynamically, they should be deleted before this method is called).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlParserGeneratorError CNSmlEmailParser::ParseXml( HBufC8* aXml )
-	{
-
-	// pre-process the data (remove cdata over <Data>)
-	TRAPD( cdataErr, PreProcessL(aXml));
-	if (cdataErr != EErrorNone)
-		return (TNSmlParserGeneratorError)cdataErr;
-
-	// reset state
-	iSetValues.Reset();
-	iCurrentState = ENone;
-	iLastState = ENone;
-	TPtrC8 ptr(*aXml);
-
-	// parse
-	TRAPD(err, ParseL( ptr ));
-
-	// return error, if in wrong state
-	if( err == EErrorNone && iCurrentState != ENone )
-		return EInvalidXmlError;
-
-	return CheckError(err);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::GenerateXml
-// Generates Email-XML using the data in member variables. aXml contains the 
-// generated xml when the function returns successfully. Note: caller should not 
-// instantiate the HBufC8, since this method first counts the size of the xml to
-// be generated and then instatiates the HBufC8 with a correct maximum size. If
-// the given buffer is not NULL, it is destroyed and a new one is instantiated.
-// However, the caller gets the control of the HBufC8 when the function returns.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlParserGeneratorError CNSmlEmailParser::GenerateXml( HBufC8*& aXml ) 
-	{
-
-	TRAPD( err, GenerateEmailXmlL( aXml ) );
-
-	return CheckError(err);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::GenerateEmailXmlL
-// Private method that does the actual email xml generation
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::GenerateEmailXmlL( HBufC8*& aXml )
-	{
-	ConvertIntoEntitiesL();
-
-	// count the size of the xml
-	TInt size = CountXmlSizeL();
-
-	// create buffer for the xml
-
-	if ( aXml )
-		{
-		delete aXml;
-		aXml = NULL;
-		}
-
-	aXml = HBufC8::NewLC(size);
-	TPtr8 ptr = aXml->Des();
-
-	// append data to buffer
-	AppendElement(ptr, KEmailElement());
-
-	if ( iRead )
-		{
-		AppendElement(ptr, KEmailReadElement(), BooleanToString( iRead ));
-		}
-
-	if ( iForwarded )
-		{
-		AppendElement(ptr, KEmailForwardedElement(), BooleanToString( iForwarded ));
-		}
-
-	if ( iReplied )
-		{
-		AppendElement(ptr, KEmailRepliedElement(), BooleanToString( iReplied ));
-		}
-
-	if (iReceived != Time::NullTTime())
-		{
-		AppendElement(ptr, KEmailReceivedElement(), DateTimeToStringL(iReceived));
-		}
-
-	if (iCreated != Time::NullTTime())
-		{
-		AppendElement(ptr, KEmailCreatedElement(), DateTimeToStringL(iCreated));
-		}
-
-	if (iModified != Time::NullTTime())
-		{
-		AppendElement(ptr, KEmailModifiedElement(), DateTimeToStringL(iModified));
-		}
-
-	if ( iDeleted )
-		{
-		AppendElement(ptr, KEmailDeletedElement(), BooleanToString( iDeleted ));
-		}
-
-	if ( iFlagged )
-		{
-		AppendElement(ptr, KEmailFlaggedElement(), BooleanToString( iFlagged ));
-		}
-
-	if ( iEmailItem )
-		{
-		AppendElement(ptr, KEmailItemElement());
-		ptr.Append(KCDataStart);
-		ptr.Append( *iEmailItem );
-		ptr.Append(KCDataEnd);
-		AppendEndElement(ptr, KEmailItemElement());
-		}
-
-	if ( iTruncated )
-		{
-		iTruncated->GenerateXmlL(ptr, this);
-		}
-
-	if ( iExt )
-		{
-		for (TInt i=0; i < iExt->Count(); ++i)
-			{
-			iExt->At(i)->GenerateXmlL(ptr, this);
-			}
-
-		}
-
-
-	AppendEndElement(ptr, KEmailElement());
-
-	CleanupStack::Pop(); // aXml
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::CountXmlSizeL
-// Counts how long the xml string will be if it was generated using 
-// the values currently in member variables.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CNSmlEmailParser::CountXmlSizeL()
-	{
-	TInt size = 0;
-
-	size += KCDataStart().Length() + KCDataEnd().Length();
-	size += SizeOfElements( KEmailElement() );
-
-	if ( iRead )
-		{
-		size += SizeOfBoolean( iRead, KEmailReadElement() );
-		}
-
-	if ( iForwarded )
-		{
-		size += SizeOfBoolean( iForwarded, KEmailForwardedElement() );
-		}
-
-	if ( iReplied )
-		{
-		size += SizeOfBoolean( iReplied, KEmailRepliedElement() );
-		}
-
-	if (iReceived != Time::NullTTime())
-		{
-		size += SizeOfDatetime( KEmailReceivedElement() );
-		}
-
-	if (iCreated != Time::NullTTime())
-		{
-		size += SizeOfDatetime( KEmailCreatedElement() );
-		}
-
-	if (iModified != Time::NullTTime())
-		{
-		size += SizeOfDatetime( KEmailModifiedElement() );
-		}
-
-	if ( iDeleted )
-		{
-		size += SizeOfBoolean( iDeleted, KEmailDeletedElement() );
-		}
-
-	if ( iFlagged )
-		{
-		size += SizeOfBoolean( iFlagged, KEmailFlaggedElement() );
-		}
-
-	if ( iEmailItem )
-		{
-		size += SizeOfString( iEmailItem, KEmailItemElement() );
-		size += KCDataStart().Length() + KCDataInnerEnd().Length();
-		}
-
-	if ( iTruncated )
-		{
-		size += iTruncated->CountXmlSizeL( this );
-		}
-
-	if ( iExt )
-		{
-		for (TInt i=0; i < iExt->Count(); ++i)
-			{
-			size += iExt->At(i)->CountXmlSize( this );
-			}
-		}
-
-	return size;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::AddExtL
-// Adds the given extension to iExt
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlEmailParser::AddExtL( CNSmlExtData* aExt )
-	{
-	iExt->AppendL(aExt);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::NextElementL
-// Base class' ParseL method calls this method, when a new element is found. aElement 
-// is the name of that element (string inside '<' and '>' characters).
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::NextElementL( TPtrC8 aElement )
-	{
-	if (aElement.Length() == 0)
-		User::Leave(EInvalidXmlError);
-
-	TBool startElement = ETrue;
-
-	if(aElement[0] == KCharacterSlash)
-		{
-		// take off the '/' character from the beginning
-		aElement.Set(aElement.Right(aElement.Length()-1));
-		// end element
-		startElement = EFalse;
-		}
-#ifndef __NO_EMPTY_ELEMENTS_
-	else if (aElement[aElement.Length()-1] == KCharacterSlash)
-		{
-		// take off the '/' character from the end
-		aElement.Set(aElement.Left(aElement.Length()-1));
-
-		// empty element == start element, empty data, end element
-		NextElementL( aElement ); // simulates start element
-		NextDataL( _L8("") ); // simulates empty data
-
-		// create the end element
-		HBufC8* end = HBufC8::NewLC(aElement.Length()+1);
-		TPtr8 ptr = end->Des();
-		ptr.Append( _L8("/") );
-		ptr.Append( aElement );
-
-		NextElementL( ptr ); // simulates end element
-
-		CleanupStack::PopAndDestroy(); // end
-
-		return;
-		}
-#endif
-
-	// variables used for state, init to <Email> and not set
-	TNSmlCurrentEmailElement inner = EEmail;
-	TNSmlCurrentEmailElement outer = EEmail;
-	TBool isSet = EFalse;
-
-	// check which element we've got
-	if( aElement == KEmailElement )
-		{
-		outer = ENone;
-		isSet = iSetValues.iEmail;
-		if ( startElement ) iSetValues.iEmail = ETrue;
-		}
-	else if( aElement == KEmailReadElement )
-		{
-		inner = ERead;
-		isSet = iSetValues.iRead;
-		}
-	else if( aElement == KEmailForwardedElement )
-		{
-		inner = EForwarded;
-		isSet = iSetValues.iForwarded;
-		}
-	else if( aElement == KEmailRepliedElement )
-		{
-		inner = EReplied;
-		isSet = iSetValues.iReplied;
-		}
-	else if( aElement == KEmailReceivedElement )
-		{
-		inner = EReceived;
-		isSet = iSetValues.iReceived;
-		}
-	else if( aElement == KEmailCreatedElement )
-		{
-		inner = ECreated;
-		isSet = iSetValues.iCreated;
-		}
-	else if( aElement == KEmailModifiedElement )
-		{
-		inner = EModified;
-		isSet = iSetValues.iModified;
-		}
-	else if( aElement == KEmailDeletedElement )
-		{
-		inner = EDeleted;
-		isSet = iSetValues.iDeleted;
-		}
-	else if( aElement == KEmailFlaggedElement )
-		{
-		inner = EFlagged;
-		isSet = iSetValues.iFlagged;
-		}
-	else if( aElement == KEmailItemElement )
-		{
-		inner = EEmailItem;
-		isSet = iSetValues.iEmailItem;
-		if ( startElement ) 
-			HandleNextEmailItemStartL();
-		else
-			HandleNextEmailItemEndL();
-		}
-	else if( aElement == KTruncatedElement )
-		{
-		inner = ETrunc;
-		isSet = iSetValues.iTrunc;
-
-		if ( startElement )
-			{
-			if ( !iTruncated )
-				iTruncated = CNSmlTruncatedData::NewL();
-			iSetValues.iTrunc = ETrue;
-			}
-		}
-	else if( aElement == KTruncatedBodyElement )
-		{
-		inner = ETruncBody;
-		outer = ETrunc;
-		if ( startElement )
-			{
-			if( iTruncType )
-				{
-				delete iTruncType;
-				iTruncType = NULL;
-				}
-			iTruncSize = KErrNotFound;
-
-			iSetValues.iTruncBodySize = EFalse;
-			iSetValues.iTruncBodyType = EFalse;
-			}
-		else
-			{
-			iTruncated->AddBodyL(iTruncSize, iTruncType);
-			}
-		}
-	else if( aElement == KTruncatedAttachElement )
-		{
-		inner = ETruncAttach;
-		outer = ETrunc;
-		if ( startElement )
-			{
-			if( iTruncType )
-				{
-				delete iTruncType;
-				iTruncType = NULL;
-				}
-			if( iTruncName )
-				{
-				delete iTruncName;
-				iTruncName = NULL;
-				}
-			iTruncSize = KErrNotFound;
-
-			iSetValues.iTruncAttachName = EFalse;
-			iSetValues.iTruncAttachType = EFalse;
-			iSetValues.iTruncAttachSize = EFalse;
-			}
-		else
-			{
-			iTruncated->AddAttachmentL(iTruncName, iTruncSize, iTruncType);
-			}
-		}
-	else if( aElement == KTruncatedSizeElement )
-		{
-		if ( (startElement && iCurrentState == ETruncBody) 
-				|| (!startElement && iCurrentState == ETruncBodySize) )
-			{
-			inner = ETruncBodySize;
-			outer = ETruncBody;
-			isSet = iSetValues.iTruncBodySize;
-			}
-		else if ( (startElement && iCurrentState == ETruncAttach) 
-				|| (!startElement && iCurrentState == ETruncAttachSize) )
-			{
-			inner = ETruncAttachSize;
-			outer = ETruncAttach;
-			isSet = iSetValues.iTruncAttachSize;
-			}
-		else
-			{
-			User::Leave(EInvalidXmlError); // wrong state
-			}
-		}
-	else if( aElement == KTruncatedTypeElement )
-		{
-		if ( (startElement && iCurrentState == ETruncBody) 
-			|| (!startElement && iCurrentState == ETruncBodyType) )
-			{
-			inner = ETruncBodyType;
-			outer = ETruncBody;
-			isSet = iSetValues.iTruncBodyType;
-			}
-		else if ( (startElement && iCurrentState == ETruncAttach)
-				|| (!startElement && iCurrentState == ETruncAttachType) )
-			{
-			inner = ETruncAttachType;
-			outer = ETruncAttach;
-			isSet = iSetValues.iTruncAttachType;
-			}
-		else
-			{
-			User::Leave(EInvalidXmlError); // wrong state
-			}
-		}
-	else if( aElement == KTruncatedNameElement )
-		{
-		inner = ETruncAttachName;
-		outer = ETruncAttach;
-		isSet = iSetValues.iTruncAttachName;
-		}
-	else if( aElement == KExtElement )
-		{
-		inner = EExt;
-		if ( startElement )
-			{
-			if( iExtData )
-				{
-				delete iExtData;
-				iExtData = NULL;
-				}
-			iExtData = CNSmlExtData::NewL();
-			iSetValues.iXNam = EFalse;
-			}
-		else
-			{
-			if( !iSetValues.iXNam ) User::Leave(EMandatoryFieldNotFound); // xnam not set
-			iExt->AppendL(iExtData);
-			iExtData = NULL;
-			}
-		}
-	else if( aElement == KExtXNamElement )
-		{
-		inner = EExtXNam;
-		outer = EExt;
-		isSet = iSetValues.iXNam;
-		}
-	else if( aElement == KExtXValElement )
-		{
-		inner = EExtXVal;
-		outer = EExt;
-		}
-	else
-		{ // unknown element
-		User::Leave(EInvalidXmlError);
-		}
-
-
-	// finally, change state depending on was the element start or end element
-	if ( startElement )
-		{
-		StartElementStateChangeL( outer, inner, isSet );
-		}
-	else
-		{
-		EndElementStateChangeL( inner, outer );
-		}
-
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::NextDataL
-// Base class' ParseL method calls this method, when a data is read from xml, but that 
-// data is not element name (data inside or between elements).
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::NextDataL( TPtrC8 aData )
-	{
-	switch(iCurrentState)
-		{
-		case ENone:
-		case EEmail:
-		case ETrunc:
-		case ETruncBody:
-		case ETruncAttach:
-		case EExt:
-			LeaveIfNotWhiteSpaceL( aData );
-			break;
-		case ERead:
-			iRead = StringToBooleanL(aData);
-			iSetValues.iRead = ETrue;
-			break;
-		case EForwarded:
-			iForwarded = StringToBooleanL(aData);
-			iSetValues.iForwarded = ETrue;
-			break;
-		case EReplied:
-			iReplied = StringToBooleanL(aData);
-			iSetValues.iReplied = ETrue;
-			break;
-		case EDeleted:
-			iDeleted = StringToBooleanL(aData);
-			iSetValues.iDeleted = ETrue;
-			break;
-		case EFlagged:
-			iFlagged = StringToBooleanL(aData);
-			iSetValues.iFlagged = ETrue;
-			break;
-		case EReceived:
-			iReceived = StringToTTimeL(aData);
-			iSetValues.iReceived = ETrue;
-			break;
-		case ECreated:
-			iCreated = StringToTTimeL(aData);
-			iSetValues.iCreated = ETrue;
-			break;
-		case EModified:
-			iModified = StringToTTimeL(aData);
-			iSetValues.iModified = ETrue;
-			break;
-		case EEmailItem:
-			HandleNextEmailItemDataL( aData ); // implementation dependent behavior
-			iSetValues.iEmailItem = ETrue;
-			break;
-		case ETruncBodySize:
-			iTruncSize = StringToIntegerL(aData);
-			iSetValues.iTruncBodySize = ETrue;
-			break;
-		case ETruncBodyType:
-			iTruncType = aData.AllocL();
-			iSetValues.iTruncBodyType = ETrue;
-			break;
-		case ETruncAttachSize:
-			iTruncSize = StringToIntegerL(aData);
-			iSetValues.iTruncAttachSize = ETrue;
-			break;
-		case ETruncAttachName:
-			iTruncName = aData.AllocL();
-			iSetValues.iTruncAttachName = ETrue;
-			break;
-		case ETruncAttachType:
-			iTruncType = aData.AllocL();
-			iSetValues.iTruncAttachType = ETrue;
-			break;
-		case EExtXNam:
-			iExtData->iXNam = aData.AllocL();
-			iSetValues.iXNam = ETrue;
-			break;
-		case EExtXVal:
-			iExtData->AddXValL(aData.AllocL());
-			break;
-		default:
-			User::Leave(EUnknownError); // should never happen
-			break;
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::HandleNextEmailItemDataL
-// Next emailitem data
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::HandleNextEmailItemDataL( TPtrC8 aData )
-	{
-	iEmailItem = aData.AllocL();
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::StartElementStateChangeL
-// Checks that the state change (new start element) is legal (right order of 
-// elements and element not already set) and changes the state.
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::StartElementStateChangeL(TNSmlCurrentEmailElement aCurrentState, 
-											    TNSmlCurrentEmailElement aNextState, 
-											    TBool aIsSet)
-	{
-	if( aIsSet || iCurrentState != aCurrentState || aNextState < iLastState )
-		{
-		User::Leave(EInvalidXmlError);
-		}
-
-	iLastState = iCurrentState;
-	iCurrentState = aNextState;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::EndElementStateChangeL
-// Checks that the state change (new end element) is legal (right order of 
-// elements and element not already set) and changes the state.
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::EndElementStateChangeL(TNSmlCurrentEmailElement aCurrentState, 
-											  TNSmlCurrentEmailElement aNextState )
-	{
-	if( iCurrentState != aCurrentState )
-		{
-		User::Leave(EInvalidXmlError);
-		}
-
-	iLastState = iCurrentState;
-	iCurrentState = aNextState;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::ConvertIntoEntitiesL
-// Converts special characters of this email-dataobject to corresponding 
-// characters. Emailitem needs not to be changed, since it is always 
-// placed inside cdata (when generating xml).
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::ConvertIntoEntitiesL()
-	{
-
-	// truncate info
-	if ( iTruncated )
-		{
-		iTruncated->ConvertIntoEntitiesL(this);
-		}
-
-	// extensions
-	if ( iExt )
-		{
-		for (TInt i=0; i < iExt->Count(); ++i)
-			{
-			iExt->At(i)->ConvertIntoEntitiesL(this);
-			}
-		}
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::CNSmlEmailParser
-// Private constructor
-// -----------------------------------------------------------------------------
-//
-CNSmlEmailParser::CNSmlEmailParser()
-	: iReceived(Time::NullTTime()), iCreated(Time::NullTTime()), iModified(Time::NullTTime()),
-	iTruncSize(KErrNotFound)
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlEmailParser::ConstructL
-// Second phase construction
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::ConstructL()
-	{
-	iExt = new (ELeave) CNSmlExtDataArray(3);
-	}
-
-// -----------------------------------------------------------------------------
-// TNSmlSetEmailValues::TNSmlSetEmailValues
-// -----------------------------------------------------------------------------
-//
-CNSmlEmailParser::TNSmlSetEmailValues::TNSmlSetEmailValues()
-	{
-	Reset();
-	}
-
-
-// -----------------------------------------------------------------------------
-// TNSmlSetEmailValues::Reset
-// -----------------------------------------------------------------------------
-//
-void CNSmlEmailParser::TNSmlSetEmailValues::Reset()
-	{
-	iEmail = EFalse;
-	iRead = EFalse;
-	iForwarded = EFalse;
-	iReplied = EFalse;
-	iDeleted = EFalse;
-	iFlagged = EFalse;
-	iReceived = EFalse;
-	iCreated = EFalse;
-	iModified = EFalse;
-	iEmailItem = EFalse;
-	iTrunc = EFalse;
-	iTruncBodySize = EFalse;
-	iTruncBodyType = EFalse;
-	iXNam = EFalse;
-	iTruncAttachSize = EFalse;
-	iTruncAttachType = EFalse;
-	iTruncAttachName = EFalse;
-	}
-
-//  End of File
--- a/omads/omadsextensions/dsutils/emailxmlutils/src/NSmlExtData.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-/*
-* Copyright (c) 2004 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:  Sources
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <s32buf.h>
-#include <s32file.h>
-
-#include "nsmlxmlparser.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlExtData* CNSmlExtData::NewL()
-	{
-	CNSmlExtData* self = CNSmlExtData::NewLC();
-	CleanupStack::Pop();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlExtData* CNSmlExtData::NewLC()
-	{
-	CNSmlExtData* self = new (ELeave) CNSmlExtData();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::~CNSmlExtData
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlExtData::~CNSmlExtData()
-	{
-	if (iXVals) 
-		{
-		iXVals->ResetAndDestroy();
-		delete iXVals;
-		}
-
-	if (iXNam) delete iXNam;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::AddXValL
-// Adds given buffer to iXVals.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlExtData::AddXValL( HBufC8* aXVal )
-	{
-	iXVals->AppendL(aXVal);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::GenerateXmlL
-// Generates ext data xml using aParser and appends the xml to aXml.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlExtData::GenerateXmlL( TPtr8& aXml, const CNSmlXmlParser* aParser) const
-	{
-	if ( aParser == NULL )
-		return;
-
-	aParser->AppendElement(aXml, KExtElement());
-
-	if( iXNam )
-		{
-		aParser->AppendElement(aXml, KExtXNamElement(), *iXNam);
-		}
-	else
-		User::Leave(EMandatoryFieldNotFound);
-
-	if ( iXVals )
-		{
-		for (TInt i=0; i < iXVals->Count(); ++i)
-			{
-			aParser->AppendElement(aXml, KExtXValElement(), *iXVals->At(i));
-			}
-		}
-
-	aParser->AppendEndElement(aXml, KExtElement());
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::CountXmlSize
-// Counts the size of the ext data xml if it was generated with current 
-// values in member variables.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CNSmlExtData::CountXmlSize( const CNSmlXmlParser* aParser ) const
-	{
-	TInt size = 0;
-	size += aParser->SizeOfElements( KExtElement() );
-
-	if( iXNam )
-		{
-		size += aParser->SizeOfString( iXNam, KExtXNamElement() );
-		}
-
-	if ( iXVals )
-		{
-		for (TInt i=0; i < iXVals->Count(); ++i)
-			{
-			size += aParser->SizeOfString( iXVals->At(i), KExtXValElement() );
-			}
-		}
-
-	return size;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::ConvertIntoEntitiesL
-// Converts special characters in member variables into entities.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlExtData::ConvertIntoEntitiesL( const CNSmlXmlParser* aParser )
-	{
-	if( iXNam )
-		aParser->CharactersToEntitiesL(iXNam, 0, iXNam->Length());
-
-	if( iXVals )
-		{
-		for (TInt i=0; i < iXVals->Count(); ++i)
-			{
-			aParser->CharactersToEntitiesL(iXVals->At(i), 0, iXVals->At(i)->Length());
-			}
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::CNSmlExtData
-// Constructor.
-// -----------------------------------------------------------------------------
-//
-CNSmlExtData::CNSmlExtData()
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlExtData::ConstructL
-// Second phase construction.
-// -----------------------------------------------------------------------------
-//
-void CNSmlExtData::ConstructL()
-	{
-	iXVals = new (ELeave) CNSmlXValArray(3);
-	}
-
-//  End of File
--- a/omads/omadsextensions/dsutils/emailxmlutils/src/NSmlFolderAttributeData.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,158 +0,0 @@
-/*
-* Copyright (c) 2004 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:  Sources
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <s32buf.h>
-#include <s32file.h>
-
-#include "nsmlxmlparser.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// TNSmlFolderAttributeData::TNSmlFolderAttributeData
-// Constructor
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlFolderAttributeData::TNSmlFolderAttributeData()
-: iHidden(EBooleanMissing), iSystem(EBooleanMissing), 
-iArchived(EBooleanMissing), iDelete(EBooleanMissing),
-iWritable(EBooleanMissing), iReadable(EBooleanMissing),
-iExecutable(EBooleanMissing)
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// TNSmlFolderAttributeData::AttributeCount
-// Returns the amount of fields that are not EBooleanMissing
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt TNSmlFolderAttributeData::AttributeCount() const
-	{
-	TInt count = 0;
-
-	if ( iHidden ) count++;
-	if ( iSystem ) count++;
-	if ( iArchived ) count++;
-	if ( iDelete ) count++;
-	if ( iWritable ) count++;
-	if ( iReadable ) count++;
-	if ( iExecutable ) count++;
-
-	return count;
-	}
-
-// -----------------------------------------------------------------------------
-// TNSmlFolderAttributeData::GenerateXml
-// Generates attribute xml
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void TNSmlFolderAttributeData::GenerateXml( TPtr8& aXml, const CNSmlXmlParser* aParser ) const
-	{
-	aParser->AppendElement(aXml, KFolderAttributesElement());
-
-	if ( iHidden )
-		{
-		aParser->AppendElement(aXml, KAttributeHiddenElement(), aParser->BooleanToString( iHidden ));
-		}
-
-	if ( iSystem )
-		{
-		aParser->AppendElement(aXml, KAttributeSystemElement(), aParser->BooleanToString( iSystem ));
-		}
-
-	if ( iArchived )
-		{
-		aParser->AppendElement(aXml, KAttributeArchivedElement(), aParser->BooleanToString( iArchived ));
-		}
-
-	if ( iDelete )
-		{
-		aParser->AppendElement(aXml, KAttributeDeleteElement(), aParser->BooleanToString( iDelete ));
-		}
-
-	if ( iWritable )
-		{
-		aParser->AppendElement(aXml, KAttributeWritableElement(), aParser->BooleanToString( iWritable ));
-		}
-
-	if ( iReadable )
-		{
-		aParser->AppendElement(aXml, KAttributeReadableElement(), aParser->BooleanToString( iReadable ));
-		}
-
-	if ( iExecutable )
-		{
-		aParser->AppendElement(aXml, KAttributeExecutableElement(), aParser->BooleanToString( iExecutable ));
-		}
-
-	aParser->AppendEndElement(aXml, KFolderAttributesElement());
-	}
-
-// -----------------------------------------------------------------------------
-// TNSmlFolderAttributeData::CountXmlSize
-// Coounts the size of the xml if it was generated using the values currently in 
-// member variables
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt TNSmlFolderAttributeData::CountXmlSize( const CNSmlXmlParser* aParser ) const
-	{
-	TInt size = 0;
-	size += aParser->SizeOfElements( KFolderAttributesElement() );
-
-	if ( iHidden )
-		{
-		size += aParser->SizeOfBoolean( iHidden, KAttributeHiddenElement() );
-		}
-
-	if ( iSystem )
-		{
-		size += aParser->SizeOfBoolean( iSystem, KAttributeSystemElement() );
-		}
-
-	if ( iArchived )
-		{
-		size += aParser->SizeOfBoolean( iArchived, KAttributeArchivedElement() );
-		}
-
-	if ( iDelete )
-		{
-		size += aParser->SizeOfBoolean( iDelete, KAttributeDeleteElement() );
-		}
-
-	if ( iWritable )
-		{
-		size += aParser->SizeOfBoolean( iWritable, KAttributeWritableElement() );
-		}
-
-	if ( iReadable )
-		{
-		size += aParser->SizeOfBoolean( iReadable, KAttributeReadableElement() );
-		}
-
-	if ( iExecutable )
-		{
-		size += aParser->SizeOfBoolean( iExecutable, KAttributeExecutableElement() );
-		}
-
-	return size;
-	}
-
-//  End of File
--- a/omads/omadsextensions/dsutils/emailxmlutils/src/NSmlFolderParser.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,631 +0,0 @@
-/*
-* Copyright (c) 2004 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:  Sources
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <s32buf.h>
-#include <s32file.h>
-
-#include "nsmlxmlparser.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlFolderParser* CNSmlFolderParser::NewL()
-	{
-	CNSmlFolderParser* self = CNSmlFolderParser::NewLC();
-	CleanupStack::Pop();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlFolderParser* CNSmlFolderParser::NewLC()
-	{
-	CNSmlFolderParser* self = new (ELeave) CNSmlFolderParser();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::~CNSmlFolderParser
-// Destructor
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlFolderParser::~CNSmlFolderParser()
-	{
-	if(iExt) 
-		{
-		iExt->ResetAndDestroy();
-		delete iExt;
-		}
-
-	if(iName) delete iName;
-	if(iRole) delete iRole;
-
-	if( iExtData ) delete iExtData;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::ParseXml
-// Parses through the given XML and places the data to member variables.
-// Note: The string-values in CNSmlEmailParser are NOT copies, but 
-// references to aXml. The method does not check whether the member variables 
-// already contains data or not, but just writes it (if some of them are already 
-// instantiated dynamically, they should be deleted before this method is called).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlParserGeneratorError CNSmlFolderParser::ParseXml( HBufC8* aXml )
-	{
-
-	TRAPD(cdataErr, PreProcessL(aXml));
-	if (cdataErr != EErrorNone)
-		return (TNSmlParserGeneratorError)cdataErr;
-
-	iSetValues.Reset();
-	iCurrentState = EFolderNone;
-	iLastState = EFolderNone;
-	TPtrC8 ptr(*aXml);
-
-	TRAPD(err, ParseL( ptr ));
-
-	if( err == EErrorNone && iCurrentState != EFolderNone )
-		return EInvalidXmlError;
-
-	return CheckError(err);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::GenerateXml
-// Generates Folder-XML using the values in member variables. aXml contains the 
-// generated xml when the function returns successfully. Note: caller should not 
-// instantiate the HBufC8, since this method first counts the size of the 
-// xml to be generated and then instatiates the HBufC8 with a correct maximum size.
-// If the given buffer is not NULL, it is destroyed and a new one is instantiated.
-// Caller gets the control of the HBufC8 when the function returns.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TNSmlParserGeneratorError CNSmlFolderParser::GenerateXml( HBufC8*& aXml ) 
-	{
-
-	TRAPD( err, ConvertIntoEntitiesL(); // convert special characters into entities
-	
-			GenerateFolderXmlL( aXml ) );
-
-	return CheckError(err);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::GenerateFolderXmlL
-// Private methods that does the actual folder xml generation
-// -----------------------------------------------------------------------------
-//
-void CNSmlFolderParser::GenerateFolderXmlL( HBufC8*& aXml )
-	{
-	// count the size of the xml
-	TInt size = CountXmlSizeL();
-
-	// create buffer for the xml
-
-	if ( aXml )
-		{
-		delete aXml;
-		aXml = NULL;
-		}
-
-	aXml = HBufC8::NewLC(size);
-	TPtr8 ptr = aXml->Des();
-
-	AppendElement(ptr, KFolderElement());
-
-	if ( iName )
-		{
-		AppendElement(ptr, KFolderNameElement(), *iName);
-		}
-
-	if (iCreated != Time::NullTTime())
-		{
-		AppendElement(ptr, KFolderCreatedElement(), DateTimeToStringL(iCreated));
-		}
-
-	if (iModified != Time::NullTTime())
-		{
-		AppendElement(ptr, KFolderModifiedElement(), DateTimeToStringL(iModified));
-		}
-
-	if (iAccessed != Time::NullTTime())
-		{
-		AppendElement(ptr, KFolderAccessedElement(), DateTimeToStringL(iAccessed));
-		}
-
-	if (iAttributes.AttributeCount() > 0)
-		{
-		iAttributes.GenerateXml(ptr, this);
-		}
-
-	if ( iRole )
-		{
-		AppendElement(ptr, KFolderRoleElement(), *iRole);
-		}
-
-	if ( iExt )
-		{
-		for (TInt i=0; i < iExt->Count(); ++i)
-			{
-			iExt->At(i)->GenerateXmlL(ptr, this);
-			}
-
-		}
-
-	AppendEndElement(ptr, KFolderElement());
-
-	CleanupStack::Pop(); // aXml
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::CountXmlSizeL
-// Counts how long the xml string will be if it was generated using 
-// the values currently in member variables.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CNSmlFolderParser::CountXmlSizeL()
-	{
-	TInt size = 0;
-
-	size += SizeOfElements( KFolderElement() );
-	size += KCDataStart().Length() + KCDataEnd().Length();
-
-	if ( iName )
-		{
-		size += SizeOfString( iName, KFolderNameElement() );
-		}
-
-	if (iCreated != Time::NullTTime())
-		{
-		size += SizeOfDatetime( KFolderCreatedElement() );
-		}
-
-	if (iModified != Time::NullTTime())
-		{
-		size += SizeOfDatetime( KFolderModifiedElement() );
-		}
-
-	if (iAccessed != Time::NullTTime())
-		{
-		size += SizeOfDatetime( KFolderAccessedElement() );
-		}
-
-	// attributes, if any present
-	if (iAttributes.AttributeCount() > 0)
-		{
-		size += iAttributes.CountXmlSize( this );
-		}
-
-	if ( iRole )
-		{
-		size += SizeOfString( iRole, KFolderRoleElement() );
-		}
-
-	if ( iExt )
-		{
-		for (TInt i=0; i < iExt->Count(); ++i)
-			{
-			size += iExt->At(i)->CountXmlSize( this );
-			}
-		}
-
-	return size;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::AddExtL
-// Adds the given extension to iExt
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlFolderParser::AddExtL( CNSmlExtData* aExt )
-	{
-	iExt->AppendL(aExt);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::NextElementL
-// Base class' ParseL method calls this method, when a new element is found. aElement 
-// is the name of that element (string inside '<' and '>' characters).
-// -----------------------------------------------------------------------------
-//
-void CNSmlFolderParser::NextElementL( TPtrC8 aElement )
-	{
-	if (aElement.Length() == 0)
-		User::Leave(EInvalidXmlError);
-
-	TBool startElement = ETrue;
-
-	if(aElement[0] == KCharacterSlash)
-		{
-		// end element
-		// remove the '/' character from the beginning
-		aElement.Set( aElement.Right( aElement.Length() - 1 ) );
-		startElement = EFalse;
-		}
-#ifndef __NO_EMPTY_ELEMENTS_
-	else if (aElement[aElement.Length()-1] == KCharacterSlash)
-		{
-		// empty element
-		// remove the '/' character from the end
-		aElement.Set( aElement.Left( aElement.Length() - 1 ) );
-
-		// empty element == start element, empty data, end element
-		NextElementL( aElement ); // simulates start element
-		NextDataL( _L8("") ); // simulates the empty data
-
-		HBufC8* end = HBufC8::NewLC(aElement.Length()+1);
-		TPtr8 ptr = end->Des();
-		ptr.Append( _L8("/") );
-		ptr.Append( aElement );
-
-		NextElementL( ptr ); // simulates end element
-
-		CleanupStack::PopAndDestroy(); // end
-
-		return;
-		}
-#endif
-
-	// variables used for state, init to <Folder> and not set
-	TNSmlCurrentFolderElement inner = EFolder;
-	TNSmlCurrentFolderElement outer = EFolder;
-	TBool isSet = EFalse;
-
-	if( aElement == KFolderElement )
-		{
-		outer = EFolderNone;
-		isSet = iSetValues.iFolder;
-		if ( startElement ) iSetValues.iFolder = ETrue;
-		}
-	else if( aElement == KFolderNameElement )
-		{
-		inner = EFolderName;
-		isSet = iSetValues.iName;
-		}
-	else if( aElement == KFolderCreatedElement )
-		{
-		inner = EFolderCreated;
-		isSet = iSetValues.iCreated;
-		}
-	else if( aElement == KFolderModifiedElement )
-		{
-		inner = EFolderModified;
-		isSet = iSetValues.iModified;
-		}
-	else if( aElement == KFolderAccessedElement )
-		{
-		inner = EFolderAccessed;
-		isSet = iSetValues.iAccessed;
-		}
-	else if( aElement == KFolderAttributesElement )
-		{
-		inner = EAttributes;
-		isSet = iSetValues.iAttributes;
-		if ( startElement) iSetValues.iAttributes = ETrue;
-		}
-	else if( aElement == KAttributeHiddenElement )
-		{
-		inner = EAttributesH;
-		outer = EAttributes;
-		isSet = iSetValues.iAttributesH;
-		}
-	else if( aElement == KAttributeSystemElement )
-		{
-		inner = EAttributesS;
-		outer = EAttributes;
-		isSet = iSetValues.iAttributesS;
-		}
-	else if( aElement == KAttributeArchivedElement )
-		{
-		inner = EAttributesA;
-		outer = EAttributes;
-		isSet = iSetValues.iAttributesA;
-		}
-	else if( aElement == KAttributeDeleteElement )
-		{
-		inner = EAttributesD;
-		outer = EAttributes;
-		isSet = iSetValues.iAttributesD;
-		}
-	else if( aElement == KAttributeWritableElement )
-		{
-		inner = EAttributesW;
-		outer = EAttributes;
-		isSet = iSetValues.iAttributesW;
-		}
-	else if( aElement == KAttributeReadableElement )
-		{
-		inner = EAttributesR;
-		outer = EAttributes;
-		isSet = iSetValues.iAttributesR;
-		}
-	else if( aElement == KAttributeExecutableElement )
-		{
-		inner = EAttributesX;
-		outer = EAttributes;
-		isSet = iSetValues.iAttributesX;
-		}
-	else if( aElement == KFolderRoleElement )
-		{
-		inner = EFolderRole;
-		isSet = iSetValues.iRole;
-		}
-	else if( aElement == KExtElement )
-		{
-		inner = EFolderExt;
-
-		if ( startElement )
-			{
-			if( iExtData )
-				{
-				delete iExtData;
-				iExtData = NULL;
-				}
-			iExtData = CNSmlExtData::NewL();
-			iSetValues.iXNam = EFalse;
-			}
-		else
-			{
-			if( !iSetValues.iXNam ) User::Leave(EMandatoryFieldNotFound); // xnam not set
-			iExt->AppendL(iExtData);
-			iExtData = NULL;
-			}
-		}
-	else if( aElement == KExtXNamElement )
-		{
-		inner = EFolderExtXNam;
-		outer = EFolderExt;
-		isSet = iSetValues.iXNam;
-		}
-	else if( aElement == KExtXValElement )
-		{
-		inner = EFolderExtXVal;
-		outer = EFolderExt;
-		}
-	else
-		{
-		User::Leave(EInvalidXmlError);
-		}
-
-
-	// finally, change state depending on was the element start or end element
-	if ( startElement )
-		{
-		StartElementStateChangeL( outer, inner, isSet );
-		}
-	else
-		{
-		EndElementStateChangeL( inner, outer );
-		}
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::NextDataL
-// Base class' ParseL method calls this method, when a data is read from xml,
-// but that data is not element name (data inside or between elements).
-// -----------------------------------------------------------------------------
-//
-void CNSmlFolderParser::NextDataL( TPtrC8 aData )
-	{
-	switch(iCurrentState)
-		{
-		case EFolderNone:
-		case EFolder:
-		case EAttributes:
-		case EFolderExt:
-			LeaveIfNotWhiteSpaceL( aData );
-			break;
-		case EFolderName:
-			iName = aData.AllocL();
-			iSetValues.iName = ETrue;
-			break;
-		case EFolderCreated:
-			iCreated = StringToTTimeL(aData);
-			iSetValues.iCreated = ETrue;
-			break;
-		case EFolderModified:
-			iModified = StringToTTimeL(aData);
-			iSetValues.iModified = ETrue;
-			break;
-		case EFolderAccessed:
-			iAccessed = StringToTTimeL(aData);
-			iSetValues.iAccessed = ETrue;
-			break;
-		case EAttributesH:
-			iAttributes.iHidden = StringToBooleanL(aData);
-			iSetValues.iAttributesH = ETrue;
-			break;
-		case EAttributesS:
-			iAttributes.iSystem = StringToBooleanL(aData);
-			iSetValues.iAttributesS = ETrue;
-			break;
-		case EAttributesA:
-			iAttributes.iArchived = StringToBooleanL(aData);
-			iSetValues.iAttributesA = ETrue;
-			break;
-		case EAttributesD:
-			iAttributes.iDelete = StringToBooleanL(aData);
-			iSetValues.iAttributesD = ETrue;
-			break;
-		case EAttributesW:
-			iAttributes.iWritable = StringToBooleanL(aData);
-			iSetValues.iAttributesW = ETrue;
-			break;
-		case EAttributesR:
-			iAttributes.iReadable = StringToBooleanL(aData);
-			iSetValues.iAttributesR = ETrue;
-			break;
-		case EAttributesX:
-			iAttributes.iExecutable = StringToBooleanL(aData);
-			iSetValues.iAttributesX = ETrue;
-			break;
-		case EFolderRole:
-			iRole = aData.AllocL();
-			iSetValues.iRole = ETrue;
-			break;
-		case EFolderExtXNam:
-			iExtData->iXNam = aData.AllocL();
-			iSetValues.iXNam = ETrue;
-			break;
-		case EFolderExtXVal:
-			iExtData->AddXValL(aData.AllocL());
-			break;
-		default:
-			User::Leave(EUnknownError); // should never happen
-			break;
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::StartElementStateChangeL
-// Checks that the state change (new start element) is legal (right order of 
-// elements and element not already set) and changes the state.
-// -----------------------------------------------------------------------------
-//
-void CNSmlFolderParser::StartElementStateChangeL(TNSmlCurrentFolderElement aCurrentState, 
-											     TNSmlCurrentFolderElement aNextState, 
-											     TBool aIsSet)
-	{
-	if( aIsSet || iCurrentState != aCurrentState || aNextState < iLastState )
-		{
-		User::Leave(EInvalidXmlError);
-		}
-
-	iLastState = iCurrentState;
-	iCurrentState = aNextState;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::EndElementStateChangeL
-// Checks that the state change (new end element) is legal (right order of 
-// elements and element not already set) and changes the state.
-// -----------------------------------------------------------------------------
-//
-void CNSmlFolderParser::EndElementStateChangeL(TNSmlCurrentFolderElement aCurrentState, 
-											   TNSmlCurrentFolderElement aNextState )
-	{
-	if( iCurrentState != aCurrentState )
-		{
-		User::Leave(EInvalidXmlError);
-		}
-
-	iLastState = iCurrentState;
-	iCurrentState = aNextState;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::ConvertIntoEntitiesL
-// Converts special characters of this email-dataobject to corresponding 
-// characters. 
-// -----------------------------------------------------------------------------
-//
-void CNSmlFolderParser::ConvertIntoEntitiesL()
-	{
-	// name
-	if ( iName )
-		{
-		CharactersToEntitiesL(iName, 0, iName->Length());
-		}
-
-	// role
-	if ( iRole )
-		{
-		CharactersToEntitiesL(iRole, 0, iRole->Length());
-		}
-
-	// extensions
-	if ( iExt )
-		{
-		for (TInt i=0; i < iExt->Count(); ++i)
-			{
-			iExt->At(i)->ConvertIntoEntitiesL(this);
-			}
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::CNSmlFolderParser
-// Constructor
-// -----------------------------------------------------------------------------
-//
-CNSmlFolderParser::CNSmlFolderParser()
-	: iCreated(Time::NullTTime()), iModified(Time::NullTTime()), 
-	iAccessed(Time::NullTTime())
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::ConstructL
-// Second phase construction
-// -----------------------------------------------------------------------------
-//
-void CNSmlFolderParser::ConstructL()
-	{
-	iExt = new (ELeave) CNSmlExtDataArray(3);
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::TNSmlSetFolderValues::TNSmlSetFolderValues
-// -----------------------------------------------------------------------------
-//
-CNSmlFolderParser::TNSmlSetFolderValues::TNSmlSetFolderValues()
-	{
-	Reset();
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlFolderParser::TNSmlSetFolderValues::Reset
-// -----------------------------------------------------------------------------
-//
-void CNSmlFolderParser::TNSmlSetFolderValues::Reset()
-	{
-	iFolder = EFalse;
-	iName = EFalse;
-	iCreated = EFalse;
-	iModified = EFalse;
-	iAccessed = EFalse;
-	iAttributes = EFalse;
-	iAttributesH = EFalse;
-	iAttributesS = EFalse;
-	iAttributesA = EFalse;
-	iAttributesD = EFalse;
-	iAttributesW = EFalse;
-	iAttributesR = EFalse;
-	iAttributesX = EFalse;
-	iXNam = EFalse;
-	iRole = EFalse;
-	}
-
-//  End of File
--- a/omads/omadsextensions/dsutils/emailxmlutils/src/NSmlTruncatedData.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,305 +0,0 @@
-/*
-* Copyright (c) 2004 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:  Sources
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <s32buf.h>
-#include <s32file.h>
-
-#include "nsmlxmlparser.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlTruncatedData* CNSmlTruncatedData::NewL()
-	{
-	CNSmlTruncatedData* self = CNSmlTruncatedData::NewLC();
-	CleanupStack::Pop();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlTruncatedData* CNSmlTruncatedData::NewLC()
-	{
-	CNSmlTruncatedData* self = new (ELeave) CNSmlTruncatedData();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::~CNSmlTruncatedData
-// Destructor
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CNSmlTruncatedData::~CNSmlTruncatedData()
-	{
-	iAttachments.ResetAndDestroy();
-	iAttachments.Close();
-
-	iBodys.ResetAndDestroy();
-	iBodys.Close();
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::AddAttachmentL
-// Adds an attachment to iAttachments. Takes copies of buffers, caller must
-// destroy the original buffers.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlTruncatedData::AddAttachmentL(HBufC8* aName, TInt aSize, HBufC8* aType)
-	{
-	CNSmlAttachmentTruncateInfo* attach = new (ELeave) CNSmlAttachmentTruncateInfo();
-	CleanupStack::PushL(attach);
-
-	attach->SetMembersL(aName, aType, aSize);
-
-	iAttachments.Append(attach);
-
-	CleanupStack::Pop(); // attach
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::AddBodyL
-// Adds a body. Takes copies of buffers, caller must destroy the 
-// original buffers.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlTruncatedData::AddBodyL(TInt aSize, HBufC8* aType)
-	{
-	CNSmlBodyTruncateInfo* body = new (ELeave) CNSmlBodyTruncateInfo();
-	CleanupStack::PushL(body);
-
-	body->SetMembersL(aType, aSize);
-
-	iBodys.Append(body);
-
-	CleanupStack::Pop(); // body
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::GenerateXmlL
-// Generates truncate data xml
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlTruncatedData::GenerateXmlL( TPtr8& aXml, const CNSmlXmlParser* aParser ) const
-	{
-	aParser->AppendElement(aXml, KTruncatedElement());
-	
-	TInt size = 0;
-	HBufC8* type = 0;
-	HBufC8* name = 0;
-
-	for ( TInt j = 0; j < iBodys.Count(); ++j )
-		{
-		iBodys[j]->GetMembersL(type, size);
-
-		aParser->AppendElement(aXml, KTruncatedBodyElement());
-
-		if ( size != KErrNotFound )
-			{
-			aParser->AppendElement(aXml, KTruncatedSizeElement(), aParser->IntegerToString(size));
-			}
-
-		if ( type )
-			{
-			aParser->AppendElement(aXml, KTruncatedTypeElement(), *type);
-			delete type; type = NULL;
-			}
-
-		aParser->AppendEndElement(aXml, KTruncatedBodyElement());
-		}
-
-	for ( TInt i = 0; i < iAttachments.Count(); ++i )
-		{
-		size = 0;
-		type = NULL;
-		name = NULL;
-
-		iAttachments[i]->GetMembersL(name, type, size);
-
-		aParser->AppendElement(aXml, KTruncatedAttachElement());
-
-		if ( name )
-			{
-			aParser->AppendElement(aXml, KTruncatedNameElement(), *name);
-			delete name; name = NULL;
-			}
-
-		if ( size != KErrNotFound )
-			{
-			aParser->AppendElement(aXml, KTruncatedSizeElement(), aParser->IntegerToString(size));
-			}
-
-		if ( type )
-			{
-			aParser->AppendElement(aXml, KTruncatedTypeElement(), *type);
-			delete type; type = NULL;
-			}
-
-		aParser->AppendEndElement(aXml, KTruncatedAttachElement());
-		}
-
-	aParser->AppendEndElement(aXml, KTruncatedElement());
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::CountXmlSizeL
-// Counts the size of truncate data xml if it was generated using current values
-// in member variables.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CNSmlTruncatedData::CountXmlSizeL( const CNSmlXmlParser* aParser ) const
-	{
-	TInt size = 0;
-	size += aParser->SizeOfElements( KTruncatedElement() );
-		
-	for ( TInt j = 0; j < iBodys.Count(); ++j )
-		{
-		TInt bodySize = 0;
-		HBufC8* bodyType = 0;
-		iBodys[j]->GetMembersL(bodyType, bodySize);
-
-		size += aParser->SizeOfElements( KTruncatedBodyElement() );
-
-		if ( bodySize != KErrNotFound )
-			{
-			size += aParser->SizeOfInteger( KTruncatedSizeElement() );
-			}
-
-		if ( bodyType )
-			{
-			size += aParser->SizeOfString( bodyType, KTruncatedTypeElement() );
-			delete bodyType; bodyType = NULL;
-			}
-
-		}
-
-	for ( TInt i = 0; i < iAttachments.Count(); ++i )
-		{
-		TInt attachSize = 0;
-		HBufC8* attachType = 0;
-		HBufC8* attachName = 0;
-		iAttachments[i]->GetMembersL(attachName, attachType, attachSize);
-
-		size += aParser->SizeOfElements( KTruncatedAttachElement() );
-
-		if ( attachName )
-			{
-			size += aParser->SizeOfString( attachName, KTruncatedNameElement() );
-			delete attachName; attachName = NULL;
-			}
-
-		if ( attachSize != KErrNotFound )
-			{
-			size += aParser->SizeOfInteger( KTruncatedSizeElement() );
-			}
-
-		if ( attachType )
-			{
-			size += aParser->SizeOfString( attachType, KTruncatedTypeElement() );
-			delete attachType; attachType = NULL;
-			}
-
-		}
-
-	return size;
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::ConvertIntoEntitiesL
-// Converts special characters in strings into entities.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CNSmlTruncatedData::ConvertIntoEntitiesL( const CNSmlXmlParser* aParser )
-	{
-	TInt size = 0;
-	HBufC8* type = NULL;
-	HBufC8* name = NULL;
-
-	for ( TInt j = 0; j < iBodys.Count(); ++j )
-		{
-		iBodys[j]->GetMembersL(type, size);
-		CleanupStack::PushL(type);
-
-		if( type )
-			aParser->CharactersToEntitiesL(type, 0, type->Length());
-
-		iBodys[j]->SetMembersL(type, size);
-		CleanupStack::Pop(); // type
-		delete type; type = NULL;
-		}
-
-	for ( TInt i = 0; i < iAttachments.Count(); ++i )
-		{
-		iAttachments[i]->GetMembersL(name, type, size);
-		CleanupStack::PushL(type);
-		CleanupStack::PushL(name);
-
-		if( name )
-			{
-			aParser->CharactersToEntitiesL(name, 0, name->Length());
-			}
-		if( type )
-			{
-			aParser->CharactersToEntitiesL(type, 0, type->Length());
-			}
-
-		iAttachments[i]->SetMembersL(name, type, size);
-		CleanupStack::Pop(2); // name, type
-
-		delete name; name = NULL;
-		delete type; type = NULL;
-		}
-
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::CNSmlTruncatedData
-// Private constructor
-// -----------------------------------------------------------------------------
-//
-CNSmlTruncatedData::CNSmlTruncatedData()
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// CNSmlTruncatedData::ConstructL
-// Second phase construction
-// -----------------------------------------------------------------------------
-//
-void CNSmlTruncatedData::ConstructL()
-	{
-	iAttachments.Reset();
-	iBodys.Reset();
-	}
-
-//  End of File
--- a/omads/omadsextensions/dsutils/emailxmlutils/src/nsmlxmlparser.cpp	Mon Nov 23 14:46:41 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,797 +0,0 @@
-/*
-* Copyright (c) 2004 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:  Sources
-*
-*/
-
-
-// 1.2 Changes: nsmlxmlparser module added
-
-// ------------------------------------------------------------------------------------------------
-// Includes
-// ------------------------------------------------------------------------------------------------
-#include <s32buf.h>
-#include <s32file.h>
-#include "nsmlxmlparser.h"
-
-
-// ------------------------------------------------------------------------------------------------
-// 
-// CNSmlXmlParser methods
-// 
-// ------------------------------------------------------------------------------------------------
-
-// ------------------------------------------------------------------------------------------------
-// Constructor
-// ------------------------------------------------------------------------------------------------
-EXPORT_C CNSmlXmlParser::CNSmlXmlParser()
-	{
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Destructor.
-// ------------------------------------------------------------------------------------------------
-EXPORT_C CNSmlXmlParser::~CNSmlXmlParser()
-	{
-	if( iBuffer ) delete iBuffer;
-	if ( iCompleteBuffer ) delete iCompleteBuffer;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Parses the given string for cdata areas and entitys. If a cdata area is 
-// found, the data in it is skipped over. The entities outside cdata are converted 
-// into characters they represent (but only if cdata is found).
-// Note: This method is intended for processing the CDATA used right after <Data>. 
-// I.e. this method removes the cdata-elements used for wrapping the whole xml data 
-// and processes the string so that the inner cdatas used in the xml become valid.
-// THIS METHOD SHOULD BE CALLED RIGHT IN THE BEGINNING OF PARSING IF <Data>-BLOCK 
-// IS WRAPPED WITHIN CDATA.
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::PreProcessL( HBufC8* aXml ) const
-	{
-	// take a modifiable pointer
-	TPtr8 xml = aXml->Des();
-
-	// the string used for searching and moving in the string
-	TPtrC8 searchString(*aXml);
-
-	// the current position in the original string
-	TInt searchStartPos = 0;
-
-	// find the first cdata start
-	TInt cdataStartPos = searchString.Find(KCDataStart);
-	
-	// If CDATA is not found from beginning then data is not inside CDATA and then
-	// preprocessing is not needed
-	if ( cdataStartPos != 0 )
-	    {
-	    return;
-	    }
-
-	TInt cdataEndPos = KErrNotFound;
-
-	// while cdata is found
-	while ( cdataStartPos != KErrNotFound )
-		{
-		cdataStartPos += searchStartPos;
-
-		// find an end of cdata before entities are converted
-		cdataEndPos = searchString.Find(KCDataEnd);
-
-		// convert entities between search start and cdata start
-		TInt entityChange = EntitiesToCharactersL(aXml, searchStartPos, cdataStartPos);
-		xml.Set(aXml->Des());
-		cdataStartPos += entityChange;
-
-		if ( cdataEndPos != KErrNotFound )
-			{
-			cdataEndPos += entityChange;
-			cdataEndPos += searchStartPos;
-
-			// if the end is before start -> error
-			if (cdataEndPos < cdataStartPos)
-				User::Leave( EInvalidCDataStructure );
-				
-			// remove cdata end
-			xml.Delete(cdataEndPos, KCDataEnd().Length());
-			// remove cdata start
-			xml.Delete(cdataStartPos, KCDataStart().Length());
-
-			searchStartPos = cdataEndPos - KCDataStart().Length();
-			searchString.Set( xml.Right(xml.Length() - searchStartPos) );
-			}
-		else 
-			{
-			// the end of cdata was not found or cdata end was before start -> error
-			User::Leave( EInvalidCDataStructure );
-			}
-
-		// find a new cdata start that is after the found end
-		cdataStartPos = searchString.Find(KCDataStart);
-
-		}
-
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Return the TNSmlBoolean-value's string-representation.
-// ------------------------------------------------------------------------------------------------
-TPtrC8 CNSmlXmlParser::BooleanToString( const TNSmlBoolean aValue ) const
-	{
-	TPtrC8 str;
-	switch(aValue)
-		{
-		case EBooleanTrue:
-			{
-			str.Set(KStringTrue);
-			break;
-			}
-		case EBooleanFalse:
-			{
-			str.Set(KStringFalse);
-			break;
-			}
-		default:
-			{
-			str.Set(KStringEmpty);
-			}
-		}
-
-	return str;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the TTime-value's string-representation.
-// ------------------------------------------------------------------------------------------------
-TBuf8<KDateTimeLength> CNSmlXmlParser::DateTimeToStringL( const TTime& aValue ) const
-	{
-	TBuf<KDateTimeLength> str;
-	
-	// aValue is not changed but Z character is added to the end of string.
-	// Messaging uses UTC times and that is reason why time is not changed.
-	aValue.FormatL( str, _L("%F%Y%M%DT%H%T%SZ") );
-
-	// from 16-bit to 8-bit
-	TBuf8<KDateTimeLength> dt;
-	dt.Copy(str);
-
-	return dt;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the integer value's string-representation.
-// ------------------------------------------------------------------------------------------------
-TBuf8<KIntegerMaxLength> CNSmlXmlParser::IntegerToString( const TInt aValue ) const
-	{
-	TBuf8<KIntegerMaxLength> str;
-	str.AppendNum(aValue);
-	return str;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the boolean representation of the string or leaves if error (EInvalidBooleanValue).
-// ------------------------------------------------------------------------------------------------
-TNSmlBoolean CNSmlXmlParser::StringToBooleanL( const TPtrC8& aValue ) const
-	{
-	if( aValue == KStringTrue )
-		return EBooleanTrue;
-	else if( aValue == KStringFalse || aValue == KStringEmpty )
-		return EBooleanFalse;
-	else
-		User::Leave(EInvalidBooleanValue);
-
-	return EBooleanMissing;
-	}
-
-	
-// ------------------------------------------------------------------------------------------------
-// Returns the integer representation of the string or leaves if error (EInvalidIntegerValue).
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::StringToIntegerL( const TPtrC8& aValue ) const
-	{
-	if (aValue.Length() <= 0)
-		return 0;
-
-	// convert the data to an integer
-	TLex8 lex(aValue);
-	TUint uValue = 0;
-	TBool isNegative = EFalse;
-
-	TChar c = lex.Peek();
-
-	// check for a minus or plus sign
-	if ( c == '-' )
-		{
-		isNegative = ETrue;
-		lex.Inc();
-		}
-	else if ( c == '+' )
-		{
-		lex.Inc();
-		}
-
-	TRadix radix = EDecimal;
-	c = lex.Peek();
-
-	if (c == '0') // octal or hex
-		{
-		lex.Get();
-		c = lex.Get();
-		if ( c == 'x' || c == 'X' )
-			{
-			radix = EHex;
-			}
-		else
-			{
-			radix = EOctal;
-			lex.UnGet(); // back up
-			}
-		}
-
-	TInt err = lex.Val(uValue, radix);
-	if ( err != KErrNone )
-		User::Leave(EInvalidIntegerValue);
-
-	TInt value = uValue;
-
-	return isNegative ? value*(-1) : value;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the TTime representation of the string or leaves if error (EInvalidDatetimeValue).
-// UTC times are not supported, i.e. datetimes that have Z-ending are treated as 
-// local times.
-// ------------------------------------------------------------------------------------------------
-TTime CNSmlXmlParser::StringToTTimeL( TPtrC8& aValue ) const
-	{
-	// check that there is data
-	if (aValue.Length() <= 0)
-		User::Leave( EInvalidDatetimeValue );
-
-	// format the data into a TTime
-
-	if (aValue[aValue.Length()-1] == 'Z')
-		{
-		// The datetime is in UTC, which is not supported
-		// no correction done, treat as local time
-		aValue.Set( aValue.Left( aValue.Length()-1 ) );
-		}
-
-	TDateTime datetime(0,(TMonth)0,0,0,0,0,0);
-
-	// read datetime and check errors
-
-	TInt error = KErrNone;
-
-	// read year
-	TPtrC8 str = aValue.Left(4);
-	TLex8 lex(str);
-	TInt value;
-	error = lex.Val(value);
-	CheckDatetimeErrorL( error );
-	error  = datetime.SetYear(value);
-	CheckDatetimeErrorL( error );
-
-	// read month
-	str.Set(aValue.Mid(4, 2));
-	lex.Assign(str);
-	error = lex.Val(value);
-	CheckDatetimeErrorL( error );
-	--value;
-	error = datetime.SetMonth((TMonth)value);
-	CheckDatetimeErrorL( error );
-
-	// read day
-	str.Set(aValue.Mid(6, 2));
-	lex.Assign(str);
-	error = lex.Val(value);
-	CheckDatetimeErrorL( error );
-	--value;
-	error = datetime.SetDay(value);
-	CheckDatetimeErrorL( error );
-
-	// Skip character 'T' and read hour
-	str.Set(aValue.Mid(9, 2));
-	lex.Assign(str);
-	error = lex.Val(value);
-	CheckDatetimeErrorL( error );
-	error = datetime.SetHour(value);
-	CheckDatetimeErrorL( error );
-
-	// minutes
-	str.Set(aValue.Mid(11, 2));
-	lex.Assign(str);
-	error = lex.Val(value);
-	CheckDatetimeErrorL( error );
-	error = datetime.SetMinute(value);
-	CheckDatetimeErrorL( error );
-
-	// seconds
-	str.Set(aValue.Mid(13, 2));
-	lex.Assign(str);
-	error = lex.Val(value);
-	CheckDatetimeErrorL( error );
-	error = datetime.SetSecond(value);
-	CheckDatetimeErrorL( error );
-
-	return TTime(datetime);
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Adds start element, the value and end element to aPtr.
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::AppendElement( TPtr8& aPtr, const TDesC8& aElementName, const TDesC8& aValue ) const
-	{
-	// start element
-	aPtr.Append(KElementStart);
-	aPtr.Append(aElementName);
-	aPtr.Append(KElementEnd);
-
-	// value
-	aPtr.Append(aValue);
-
-	// end element
-	aPtr.Append(KElementStart);
-	aPtr.Append(KCharacterSlash);
-	aPtr.Append(aElementName);
-	aPtr.Append(KElementEnd);
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Forms an element using the given element name and appends it to the given string.
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::AppendElement( TPtr8& aPtr, const TDesC8& aElementName ) const
-	{
-	aPtr.Append(KElementStart);
-	aPtr.Append(aElementName);
-	aPtr.Append(KElementEnd);
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Forms an end element using the given element name and appends it to the given string.
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::AppendEndElement( TPtr8& aPtr, const TDesC8& aElementName ) const
-	{
-	aPtr.Append(KElementStart);
-	aPtr.Append(KCharacterSlash);
-	aPtr.Append(aElementName);
-	aPtr.Append(KElementEnd);
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the total length of start and end tag.
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::SizeOfElements( const TDesC8& aElementName ) const
-	{
-	TInt size = 0;
-
-	// start element plus end element ( 1 = length of '/' char )
-	size += 2*aElementName.Length() + 1;
-	size += 2*KElementStartEndWidth; // '<' and '>'
-
-	return size;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the length of the given boolean element and it's data if it was a string.
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::SizeOfBoolean( const TNSmlBoolean aValue, const TDesC8& aElementName ) const
-	{
-	TInt size = 0;
-	size += SizeOfElements( aElementName );
-	switch ( aValue )
-		{
-		case EBooleanTrue:
-			return size+4; // "true"
-		case EBooleanFalse:
-			return size+5; // "false"
-		default:
-			return 0;
-		}
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the length of the given datetime element and it's data if it was a string.
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::SizeOfDatetime( const TDesC8& aElementName ) const
-	{
-	TInt size = SizeOfElements( aElementName ) + KDateTimeLength;
-	return size;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the maximum length of the given integer element and it's data if it was a string.
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::SizeOfInteger( const TDesC8& aElementName ) const
-	{
-	TInt size = SizeOfElements( aElementName ) + KIntegerMaxLength;
-	return size;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns the length of the given string element and it's data if it was a string.
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::SizeOfString( const HBufC8* aValue, const TDesC8& aElementName ) const
-	{
-	TInt size = SizeOfElements( aElementName ) + aValue->Length();
-	return size;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Finds entities and replaces them with the characters they represent. Returns 
-// an integer indicating the size change in aXml.
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::EntitiesToCharactersL( HBufC8*& aXml, TInt aStartPos, TInt aEndPos ) const
-	{
-	TInt change = 0;
-	TInt changeSum = 0;
-
-	change = ReplaceL(aXml, KEntityLT, KLessThan, aStartPos, aEndPos);
-	changeSum += change;
-	aEndPos += change;
-
-	change = ReplaceL(aXml, KEntityGT, KGreaterThan, aStartPos, aEndPos);
-	changeSum += change;
-	aEndPos += change;
-
-	change = ReplaceL(aXml, KEntityAMP, KAmpersand, aStartPos, aEndPos);
-	changeSum += change;
-	aEndPos += change;
-
-	change = ReplaceL(aXml, KEntityAPOS, KApostrophe, aStartPos, aEndPos);
-	changeSum += change;
-	aEndPos += change;
-
-	change = ReplaceL(aXml, KEntityQUOT, KQuotation, aStartPos, aEndPos);
-	changeSum += change;
-
-	return changeSum;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Finds special characters and replaces them with corresponding entities. Returns 
-// an integer indicating the size change in aXml.
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::CharactersToEntitiesL( HBufC8*& aXml, TInt aStartPos, TInt aEndPos ) const
-	{
-	TInt change = 0;
-	TInt changeSum = 0;
-
-	// Note: this replace has to be the first one, since it changes 
-	// &-characters to &amp;s and all the other replaces generate 
-	// &-characters as they are entities.
-	change = ReplaceL(aXml, KAmpersand, KEntityAMP, aStartPos, aEndPos);
-	changeSum += change;
-	aEndPos += change;
-
-	change = ReplaceL(aXml, KLessThan, KEntityLT, aStartPos, aEndPos);
-	changeSum += change;
-	aEndPos += change;
-
-	change = ReplaceL(aXml, KGreaterThan, KEntityGT, aStartPos, aEndPos);
-	changeSum += change;
-	aEndPos += change;
-
-	change = ReplaceL(aXml, KApostrophe, KEntityAPOS, aStartPos, aEndPos);
-	changeSum += change;
-	aEndPos += change;
-
-	change = ReplaceL(aXml, KQuotation, KEntityQUOT, aStartPos, aEndPos);
-	changeSum += change;
-
-	return changeSum;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Returns ETrue if all the characters in the given text are whitespace 
-// characters, else EFalse.
-// ------------------------------------------------------------------------------------------------
-TBool CNSmlXmlParser::IsWhitespace( const TDesC8& aText ) const
-	{
-	// loop the string character by character
-	TText c;
-	for ( TInt i=0; i < aText.Length(); ++i )
-		{
-		c = aText[i];
-		switch( c )
-			{
-			case KWhitespaceEmpty:
-				break;
-			case KWhitespaceLineFeed:
-				break;
-			case KWhitespaceNewLine:
-				break;
-			case KWhitespaceTabular:
-				break;
-			case KWhitespaceLineFeedNewLine:
-				break;
-			default:
-				return EFalse;
-			}
-		}
-
-	return ETrue;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Leaves with EInvalidXmlError if the given string is not whitespace.
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::LeaveIfNotWhiteSpaceL( const TDesC8& aText ) const
-	{
-	if ( !IsWhitespace( aText ) )
-		{
-		User::Leave( EInvalidXmlError );
-		}
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Maps the given value to TNSmlParserGeneratorError.
-// ------------------------------------------------------------------------------------------------
-TNSmlParserGeneratorError CNSmlXmlParser::CheckError( const TInt error ) const
-	{
-	if ( error == KErrNoMemory )
-		{
-		return EOutOfMemory;
-		}
-	else if ( error < KErrNone )
-		{
-		// some system wide error, should not occur
-		return EUnknownError;
-		}
-	else if ( error != EErrorNone )
-		{
-		return (TNSmlParserGeneratorError)error;
-		}
-
-	return EErrorNone;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Parses the given xml and calls NextDataL and NextElementL methods when finds 
-// data or element. 
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::ParseL( TPtrC8& aXml )
-	{
-
-	ResetBufferL(iBuffer);
-	ResetBufferL(iCompleteBuffer);
-
-	// boolean indicating if reading element name (true) or insides of 
-	// an element (false)
-	TBool readingElementName = EFalse;
-	TText c;
-
-	for( TInt i=0; i < aXml.Length(); ++i )
-		{
-		c = aXml[i];
-		switch(c)
-			{
-			case KElementStart:
-				// if currently reading element, error
-				if( readingElementName )
-					{
-					User::Leave(EInvalidXmlError);
-					}
-
-				if( aXml.Length()-i >= KCDataStart().Length() &&
-					!aXml.Mid(i, KCDataStart().Length()).Compare(KCDataStart()) )
-					{ // cdata
-					aXml.Set( aXml.Right( aXml.Length() - i ) );
-					TInt endPos = aXml.Find(KCDataEnd);
-
-					TPtrC8 cdata = _L8("");
-					if ( endPos == KErrNotFound )
-						{
-						User::Leave(EInvalidCDataStructure);
-						}
-
-					cdata.Set( aXml.Mid( KCDataStart().Length(), endPos - KCDataStart().Length() ) );
-					aXml.Set( aXml.Right( aXml.Length() - endPos - KCDataEnd().Length() ) );
-
-					i = -1;
-
-					// add current buffer to complete buffer
-					EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
-					AddToCompleteL(*iBuffer);
-					ResetBufferL(iBuffer);
-					AddToCompleteL(cdata);
-					}
-#ifndef __NO_XML_COMMENTS_
-				else if( aXml.Length()-i >= KCommentStart().Length() &&
-					!aXml.Mid(i, KCommentStart().Length()).Compare(KCommentStart()) )
-					{ // comment
-					aXml.Set( aXml.Right( aXml.Length() - i ) );
-					TInt endPos = aXml.Find(KCommentEnd);
-
-					if ( endPos != KErrNotFound )
-						{
-						aXml.Set( aXml.Right( aXml.Length() - endPos - KCommentEnd().Length() ) );
-						}
-					else
-						{
-						User::Leave(EInvalidXmlError);
-						}
-
-					i = -1;
-					}
-#endif
-				else 
-					{
-					// send the buffer
-					EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
-					AddToCompleteL(*iBuffer);
-					NextDataL(*iCompleteBuffer);
-					ResetBufferL(iBuffer);
-					ResetBufferL(iCompleteBuffer);
-					readingElementName = ETrue;
-					}
-
-				break;
-			case KElementEnd:
-				// stop reading element name
-				if( !readingElementName )
-					{
-					User::Leave(EInvalidXmlError);
-					}
-				else 
-					{
-					NextElementL(*iBuffer);
-					ResetBufferL(iBuffer);
-					readingElementName = EFalse;
-					}
-				break;
-			default:
-				// add char to buffer
-				AddToBufferL(c, iBuffer);
-				break;
-			}
-		}
-
-	EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
-	AddToCompleteL(*iBuffer);
-	NextDataL(*iCompleteBuffer);
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Adds the given string to iCompleteBuffer
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::AddToCompleteL( const TPtrC8 aStr )
-	{
-	if(!iCompleteBuffer)
-		{
-		iCompleteBuffer = HBufC8::NewL(aStr.Length());
-		}
-
-	TPtr8 ptr = iCompleteBuffer->Des();
-	if( ptr.MaxLength() < iCompleteBuffer->Length()+aStr.Length() )
-		{
-		iCompleteBuffer = iCompleteBuffer->ReAllocL(iCompleteBuffer->Length()+aStr.Length());
-		ptr.Set(iCompleteBuffer->Des());
-		}
-
-	ptr.Append(aStr);
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Deletes the given buffer and initializes it again to length 10
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::ResetBufferL( HBufC8*& aBuf ) const
-	{
-	if( aBuf )
-		{
-		delete aBuf;
-		aBuf = NULL;
-		}
-
-	aBuf = HBufC8::NewL(10);
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// Adds the given char to given buffer
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::AddToBufferL( const TText c, HBufC8*& aBuf ) const
-	{
-	TPtr8 ptr = aBuf->Des();
-	if( ptr.MaxLength() == aBuf->Length()+1 )
-		{
-		aBuf = aBuf->ReAllocL(aBuf->Length()+10);
-		ptr.Set(aBuf->Des());
-		}
-
-	TChar str = c;
-	ptr.Append(str);
-	}
-
-
-
-// ------------------------------------------------------------------------------------------------
-// Replaces all occurances of aTarget in aText with aItem. Returns an integer indicating 
-// the size change in aText. aStartPos and aEndPos indicate the start and end positions 
-// of aText to be parsed (if whole string should be parsed, use 0 and aText.Length()).
-// ------------------------------------------------------------------------------------------------
-TInt CNSmlXmlParser::ReplaceL( HBufC8*& aText, const TDesC8& aTarget, const TDesC8& aItem, TInt aStartPos, TInt aEndPos ) const
-	{
-	TInt change = 0;
-	TInt searchPos = aStartPos;
-	TPtrC8 text = aText->Mid(aStartPos, aEndPos-aStartPos);
-	TInt pos = text.Find(aTarget);
-
-	while ( pos != KErrNotFound )
-		{
-		pos += searchPos;
-
-		TInt currentChange = aItem.Length() - aTarget.Length();
-		change += currentChange;
-		aEndPos += currentChange;
-		searchPos = pos;
-
-		if ( currentChange > 0 )
-			{
-			searchPos += currentChange;
-
-			// check that aText is large enough
-			if ( aText->Des().MaxLength() < aText->Length()+currentChange )
-				{
-				aText = aText->ReAllocL(aText->Length()+currentChange);
-				}
-			}
-
-		// the actual replace
-		aText->Des().Replace(pos, aTarget.Length(), aItem);
-
-		text.Set( aText->Mid(searchPos, aEndPos-searchPos) );
-		pos = text.Find(aTarget);
-		}
-
-	return change;
-	}
-
-
-// ------------------------------------------------------------------------------------------------
-// 
-// ------------------------------------------------------------------------------------------------
-void CNSmlXmlParser::CheckDatetimeErrorL( const TInt error ) const
-	{
-	if ( error != KErrNone )
-		{
-		User::Leave( EInvalidDatetimeValue );
-		}
-	}
-
-//End of File
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/bld/bld.inf	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,19 @@
+/*
+* 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: 
+*
+*/
+
+PRJ_MMPFILES
+nsmldefaultagendahandler.mmp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/bld/def/bwinscwnsmldefaultagendahandleru.DEF	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,4 @@
+EXPORTS
+	?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+	?NewL@CNSmlDefaultAgendaHandlerPlugin@@SAPAV1@XZ @ 2 NONAME ; class CNSmlDefaultAgendaHandlerPlugin * CNSmlDefaultAgendaHandlerPlugin::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/bld/def/eabinsmldefaultagendahandleru.DEF	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,8 @@
+EXPORTS
+	_Z24ImplementationGroupProxyRi @ 1 NONAME
+	_ZN31CNSmlDefaultAgendaHandlerPlugin4NewLEv @ 2 NONAME
+	_ZTI29CNSmlDefaultAgendaHandlerUtil @ 3 NONAME
+	_ZTI31CNSmlDefaultAgendaHandlerPlugin @ 4 NONAME
+	_ZTV29CNSmlDefaultAgendaHandlerUtil @ 5 NONAME
+	_ZTV31CNSmlDefaultAgendaHandlerPlugin @ 6 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/bld/nsmldefaultagendahandler.mmp	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+CAPABILITY      CAP_ECOM_PLUGIN
+VENDORID        VID_DEFAULT
+TARGET          nsmldefaultagendahandler.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x20029F16
+
+START  RESOURCE ../data/nsmldefaultagendahandler.rss
+TARGET           nsmldefaultagendahandler.rsc
+END
+
+START RESOURCE ../data/nsmldefaultagendahandler_1_2.rss
+HEADER
+TARGETPATH	RESOURCE_FILES_DIR
+LANGUAGE_IDS
+END 
+
+SOURCEPATH      ../src
+SOURCE          nsmldefaultagendahandlerutil.cpp
+SOURCE          nsmldefaultagendahandlerplugin.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../loc
+
+SYSTEMINCLUDE /epoc32/include/ecom
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib
+LIBRARY         eCom.lib
+LIBRARY         efsrv.lib 
+LIBRARY         estor.lib
+LIBRARY         flogger.lib
+LIBRARY         bafl.lib
+LIBRARY         charconv.lib 
+LIBRARY         centralrepository.lib
+LIBRARY         eikcore.lib 
+LIBRARY         cone.lib 
+LIBRARY         CommonEngine.lib 
+LIBRARY		    calinterimapi.lib 
+LIBRARY     	calencommonutils.lib
+LIBRARY     	nsmlfolderparser.lib
+LIBRARY 		gdi.lib
+LIBRARY			smlstoreformat.lib
+LIBRARY 		nsmlchangefinder.lib
+
+#if defined(ARMCC)
+DEFFILE		./def/eabinsmldefaultagendahandler.DEF
+#elif defined(WINSCW)
+DEFFILE		./def/bwinscwnsmldefaultagendahandler.DEF
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/data/nsmldefaultagendahandler.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:    
+*
+*/
+
+#include <registryinfo.rh>
+#include "nsmldefaultagendahandler.loc"
+
+RESOURCE REGISTRY_INFO theInfo
+{
+	// UID for the DLL
+	dll_uid = 0x20029F16;
+	
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			
+			// UID of interface that is implemented
+			interface_uid = 0x20029F14;
+			
+			implementations = 
+				{
+				
+				// Info for all implementations					
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x20029F16;
+					version_no         = 1;
+					display_name       = "";
+					default_data       = "";
+					opaque_data        = qtn_nsml_default_agenda_handler_opaque_name; 
+					}
+					
+				};
+			}
+		};
+}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/data/nsmldefaultagendahandler_1_2.rss	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,902 @@
+CHARACTER_SET UTF8/*
+* 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:  Resource data for DS agenda adapter
+*
+*/
+
+
+#include <bldvariant.hrh>
+#include <SmlDataFormat.rh>
+#include <SmlDataFormat.hrh>
+
+RESOURCE SML_DATA_STORE_FORMAT nsml_default_agenda_handler
+	{
+	version=1;
+	display_name="Calendar";
+	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-vcalendar";
+			mime_ver="1.0";
+			properties=
+				{
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Begin";
+					name="BEGIN";
+					data_type="";
+					enum_values={"VCALENDAR","VEVENT","VTODO"};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="End";
+					name="END";
+					data_type="";
+					enum_values={"VCALENDAR","VEVENT","VTODO"};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Version";
+					name="VERSION";	
+					data_type="";
+					enum_values={"1.0"};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Uid";
+					name="UID";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Summary";
+					name="SUMMARY";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Description";
+					name="DESCRIPTION";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Dstart";
+					name="DTSTART";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Dtend";
+					name="DTEND";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Aalarm";
+					name="AALARM";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params= {
+							SML_DATA_PROPERTY_PARAM
+								{
+								version=1;
+								display_name="Alarm type";
+								name="TYPE";
+								data_type="";
+								enum_values={};
+								}
+							};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Class";
+					name="CLASS";
+					data_type="";
+					enum_values={"PUBLIC","PRIVATE","CONFIDENTIAL"};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Location";
+					name="LOCATION";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Last Modified";
+					name="LAST-MODIFIED";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Priority";
+					name="PRIORITY";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Status";
+					name="STATUS";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Rrule";
+					name="RRULE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Completed";
+					name="COMPLETED";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Dcreated";
+					name="DCREATED";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Due";
+					name="DUE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="ExDate";
+					name="EXDATE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Categories";
+					name="CATEGORIES";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Sequence";
+					name="SEQUENCE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+		                SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="TZ";
+					name="TZ";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+         		       SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Daylight";
+					name="DAYLIGHT";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="RDate";
+					name="RDATE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Attendee";
+					name="ATTENDEE";
+					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={"ROLE", "STATUS", "X-CN", "X-ROLE", "X-SENTBY", "X-STATUS"};
+								}
+							};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Recurrence";
+					name="X-RECURRENCE-ID";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Method";
+					name="X-METHOD";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+                		SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Local UID";
+					name="X-SYMBIAN-LUID";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+                		SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Time stamp";
+					name="X-SYMBIAN-DTSTAMP";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="X-Epoc Agenda Entry Type";
+					name="X-EPOCAGENDAENTRYTYPE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="GEO Address";
+					name="GEO";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					}
+				};
+			field_level=0;
+			}
+#ifdef __NSML_USE_ICAL_FEATURE
+			,
+		SML_MIME_FORMAT
+			{
+			version=1;
+			mime_type="text/calendar";
+			mime_ver="2.0";
+			properties=
+				{
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Begin";
+					name="BEGIN";
+					data_type="";
+					enum_values={"VCALENDAR","VEVENT","VTODO","STANDARD","DAYLIGHT","VTIMEZONE","VALARM"};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="End";
+					name="END";
+					data_type="";
+					enum_values={"VCALENDAR","VEVENT","VTODO","STANDARD","DAYLIGHT","VTIMEZONE","VALARM"};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Version";
+					name="VERSION";	
+					data_type="";
+					enum_values={"2.0"};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Uid";
+					name="UID";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Summary";
+					name="SUMMARY";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Description";
+					name="DESCRIPTION";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Dstart";
+					name="DTSTART";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Dtend";
+					name="DTEND";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Aalarm";
+					name="AALARM";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params= {
+							SML_DATA_PROPERTY_PARAM
+								{
+								version=1;
+								display_name="Alarm type";
+								name="TYPE";
+								data_type="";
+								enum_values={};
+								}
+							};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Class";
+					name="CLASS";
+					data_type="";
+					enum_values={"PUBLIC","PRIVATE","CONFIDENTIAL"};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Location";
+					name="LOCATION";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Last Modified";
+					name="LAST-MODIFIED";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Priority";
+					name="PRIORITY";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Status";
+					name="STATUS";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Recurrence-Id";
+					name="RECURRENCE-ID";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Rrule";
+					name="RRULE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Sequence";
+					name="SEQUENCE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Method";
+					name="METHOD";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="ATTENDEE";
+					name="ATTENDEE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Categories";
+					name="CATEGORIES";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Organizer";
+					name="ORGANIZER";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Time stamp";
+					name="DTSTAMP";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Completed";
+					name="COMPLETED";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Created";
+					name="CREATED";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="ExDate";
+					name="EXDATE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="RDate";
+					name="RDATE";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Product ID";
+					name="PRODID";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Timezone ID";
+					name="TZID";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Timezone OFFSET from";
+					name="TZOFFSETFROM";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Timezone OFFSET to";
+					name="TZOFFSETTO";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Alarm action";
+					name="ACTION";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="Alarm trigger";
+					name="TRIGGER";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					},
+				SML_DATA_PROPERTY
+					{
+					version=1;
+					display_name="GEO Address";
+					name="GEO";
+					data_type="";
+					enum_values={};
+					flags=0;
+					max_size=256;
+					max_occur=0;
+					params={};
+					}
+				};
+			field_level=0;
+			}
+#endif // __NSML_USE_ICAL_FEATURE
+		};
+#ifdef __NSML_USE_ICAL_FEATURE
+	mime_format_tx_pref=1;     // Preferred index for tx
+	mime_format_rx_pref=1;     // Preferred index for rx
+#else // __NSML_USE_ICAL_FEATURE
+  mime_format_tx_pref=0;     // Preferred index for tx
+	mime_format_rx_pref=0;     // Preferred index for rx
+#endif // __NSML_USE_ICAL_FEATURE
+	folder_properties={
+	        SML_DATA_PROPERTY
+	                        {
+	                        version = 1;
+	                        display_name = "Name";
+	                        name = "NAME";
+	                        data_type = "text";
+	                        enum_values = {};
+	                        flags = 0;
+	                        max_size = 256;
+	                        max_occur = 1;
+	                        params = {};
+	                        },
+	                SML_DATA_PROPERTY
+	                        {
+	                        version = 1;
+	                        display_name = "Created";
+	                        name = "CREATED";
+	                        data_type = "datetime";
+	                        enum_values = {};
+	                        flags = 0;
+	                        max_size = 256;
+	                        max_occur = 1;
+	                        params = {};
+	                        },
+	                SML_DATA_PROPERTY
+                           {
+                           version = 1;
+                           display_name = "Modified";
+                           name = "MODIFIED";
+                           data_type = "datetime";
+                           enum_values = {};
+                           flags = 0;
+                           max_size = 256;
+                           max_occur = 1;
+                           params = {};
+                           }                  
+	};
+	filter_capabilities={};
+	max_size=0; 	// no limit
+	max_items=0; 	// no limit
+	flags = KSmlDataStore_Hierarchical;        // Hierarchical
+	}
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/inc/nsmldefaultagendahandlerdebug.h	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,62 @@
+/*
+* 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: Debug macros definition and constant declaration 
+*
+*/
+
+
+
+#ifndef NSML_DEFAULTAGENDAHANDLER_DEBUG_H
+#define NSML_DEFAULTAGENDAHANDLER_DEBUG_H
+
+#include <e32svr.h>
+#include <e32std.h>
+#include <f32file.h>
+#include <flogger.h>
+
+_LIT(KLogFile,"DefaultAgendaHandler.txt");
+_LIT(KLogDirFullName,"c:\\logs\\");
+_LIT(KLogDir,"MultiCalDB");
+
+// Declare the FPrint function
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+    }
+
+// ===========================================================================
+#ifdef __WINS__     // File logging for WINS
+// ===========================================================================
+#define FLOG(arg...)   { FPrint(arg); }
+//#define FLOG(a) { RDebug::Print(a);  }
+#define FTRACE(a) { a; }
+// ===========================================================================
+#else               // RDebug logging for target HW
+// ===========================================================================
+//#define FLOG(arg...) { RDebug::Print(arg);  }
+#define FLOG(arg...)   { FPrint(arg); }
+#define FTRACE(a) { a; }
+#endif //__WINS__
+
+// ===========================================================================
+#else // // No loggings --> Reduced binary size
+// ===========================================================================
+#define FLOG(arg...)
+#define FTRACE(a)
+
+#endif // NSML_DEFAULTAGENDAHANDLER_DEBUG_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/inc/nsmldefaultagendahandlerplugin.h	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,118 @@
+/*
+* 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:  
+*
+*/
+ 
+#ifndef C_NSML_DEFAULTAGENDAHANDLER_PLUGIN_H
+#define C_NSML_DEFAULTAGENDAHANDLER_PLUGIN_H
+
+#include <s32mem.h>
+#include <e32def.h>
+#include <nsmlagendaadapterhandler.h>
+#include <data_caging_path_literals.hrh>
+
+// CONSTANTS
+_LIT( KNSmlDefaultAgendaHandlerRsc_1_2,"z:NSMLDEFAULTAGENDAHANDLER_1_2.RSC" );
+const TUid KCRUidNSmlDSApp       = { 0x101F9A1D };
+const TInt KArrayGranularity    = 30;
+
+_LIT8( KNSmlDataObjectCREATED,          "CREATED" );
+_LIT8( KNSmlDataObjectNAME,             "NAME" );
+_LIT8( KNSmlDataObjectMODIFIED,         "MODIFIED" );
+
+struct TNSmlServerSupportsForFolder
+    {
+    TBool iSSName;
+    TBool iSSCreated;
+    TBool iSSModified;
+    };  
+
+// FORWARD DECLARATIONS
+class CNSmlDefaultAgendaHandlerUtil;
+class CCalSession;
+
+/**
+ *  This class represents the Adapter Object plugin
+ *  It is used by ECoM client to initialize calendar notifier
+ *
+ *  @lib nsmloviagendaadapter.lib
+ */
+class CNSmlDefaultAgendaHandlerPlugin: public CNSmlAgendaAdapterHandler
+  	{
+public:
+    /**
+	 * Two phase construction
+	 */
+	IMPORT_C static CNSmlDefaultAgendaHandlerPlugin* NewL();
+	
+    /**
+	 * Destructor
+	 */
+	~CNSmlDefaultAgendaHandlerPlugin();
+
+private:    
+    /**
+	* C++ constructor - not exported;
+	* implicitly called from NewLC()	
+	*/
+	CNSmlDefaultAgendaHandlerPlugin::CNSmlDefaultAgendaHandlerPlugin();	
+	
+	void ConstructL(); 
+	
+	/**
+     * Inherited from CAgendaAdapterHandler
+     *
+     * @param 
+    */
+	void CheckServerSupportForFolder( const CSmlDataStoreFormat& aServerDataStoreFormat );
+	     
+    void FetchFolderL( const TSmlDbItemUid aUid, RBufWriteStream& aStream );
+ 
+    void SynchronizableCalendarIdsL( CArrayFixFlat<TUint>* aFolderUidArray );
+ 
+    TCalLocalUid CreateFolderL( RBufReadStream& aStream );
+ 
+    void ReplaceFolderL( const TCalLocalUid& aUid, RBufReadStream& aStream, TBool& aSyncStatus );   
+ 
+    HBufC* FolderNameL( TSmlDbItemUid aUid );
+ 
+    CSmlDataStoreFormat* StoreFormatL( RStringPool& aStringPool );
+    
+    TInt DeviceSyncOwner();
+    
+    TBool FolderSyncStatusL( TSmlDbItemUid aUid );
+    
+    TBool FolderSyncStatusL( HBufC* aFolderName );
+ 
+    TNSmlSnapshotItem CreateFolderSnapShotItemL( const TCalLocalUid& aUid );      
+    
+public:
+    
+    void SynchronizableCalEntryIdsL( CCalSession* aCalSession, TCalLocalUid aUId, RArray<TCalLocalUid>& aUidArray );
+    
+     
+    CNSmlDefaultAgendaHandlerUtil* CalendarInfoL( TSmlDbItemUid aUid );
+    
+    CNSmlDefaultAgendaHandlerUtil* ParseFolderDataL( RBufReadStream& aStream );
+    
+public:
+                  
+private: 
+    
+    TNSmlServerSupportsForFolder    iServerSupportsForFolder;
+     
+	};
+
+# endif // C_NSML_DEFAULTAGENDAHANDLER_PLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/inc/nsmldefaultagendahandlerutil.h	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,61 @@
+/*
+* 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:    
+*
+*/
+
+#ifndef C_NSML_DEFAULTAGENDAHANDLER_UTIL_H
+#define C_NSML_DEFAULTAGENDAHANDLER_UTIL_H
+
+#include <e32cons.h>
+#include <calcommon.h>
+#include <gdi.h>
+
+/**
+ * 
+ * 
+ *
+ * @lib NSmlDefaultAgendaHandler.lib
+ */
+class CNSmlDefaultAgendaHandlerUtil : public CBase
+  	{
+    public:
+        /**
+        * Two-phased constructor.
+        */
+        static CNSmlDefaultAgendaHandlerUtil* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CNSmlDefaultAgendaHandlerUtil();
+    
+    public: // New Functions
+    
+    private:
+       /**
+       * C++ default constructor.
+       */
+        CNSmlDefaultAgendaHandlerUtil();
+    
+    public: // Data
+        HBufC* iFileName;
+        HBufC* iName;
+        TBool iEnabled;    
+        TBool iSyncStatus;
+        TTime iCreated;
+        TTime iModified;
+	};
+
+#endif // C_NSML_DEFAULTAGENDAHANDLER_UTIL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/loc/nsmldefaultagendahandler.loc	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,24 @@
+/*
+* 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:  loc file for DS agenda adapter
+*
+*/
+
+
+//d:Display name for registry info 
+//l:list_setting_pane_t1
+//
+#define qtn_nsml_default_agenda_handler_opaque_name "Default"
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/src/nsmldefaultagendahandlerplugin.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,794 @@
+/*
+* 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:  
+*
+*/
+
+#include <gdi.h>
+#include <utf.h>
+#include <barsc.h>
+#include <e32std.h>
+#include <bautils.h>
+#include <implementationproxy.h>
+#include <calsession.h>
+#include <calenmulticalutil.h>
+#include <calenmulticaluids.hrh>
+#include <calcalendarinfo.h>
+#include <nsmlfolderparser.h>
+#include <nsmldefaultagendahandler_1_2.rsg>
+#include "nsmldefaultagendahandlerplugin.h"
+#include "nsmldefaultagendahandlerutil.h"
+#include "nsmldefaultagendahandlerdebug.h"
+
+
+
+// CONSTANTS
+const TInt KBuffLength = 128;
+
+// ----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::NewL
+// Two Phase Construction
+// ----------------------------------------------------------------------------
+EXPORT_C CNSmlDefaultAgendaHandlerPlugin* CNSmlDefaultAgendaHandlerPlugin::NewL()
+	{
+	FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::NewL, BEGIN"));
+
+	CNSmlDefaultAgendaHandlerPlugin* self = new ( ELeave ) CNSmlDefaultAgendaHandlerPlugin();	
+	self->ConstructL();
+	
+	FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::NewL, END"));
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::~CNSmlDefaultAgendaHandlerPlugin
+// Destructor
+// ----------------------------------------------------------------------------
+CNSmlDefaultAgendaHandlerPlugin::~CNSmlDefaultAgendaHandlerPlugin()
+	{
+	FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::~CNSmlDefaultAgendaHandlerPlugin, BEGIN"));	 
+  
+	FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::~CNSmlDefaultAgendaHandlerPlugin, END"));
+	}
+
+// ----------------------------------------------------------------------------  
+// C++ constructor - not exported;
+// implicitly called from NewL()
+// ----------------------------------------------------------------------------  
+CNSmlDefaultAgendaHandlerPlugin::CNSmlDefaultAgendaHandlerPlugin() 
+	{
+	FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::CNSmlDefaultAgendaHandlerPlugin, BEGIN"));  
+	FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::CNSmlDefaultAgendaHandlerPlugin, END"));
+	}
+
+// ----------------------------------------------------------------------------  
+// 2nd phase constructor
+// ----------------------------------------------------------------------------       
+void CNSmlDefaultAgendaHandlerPlugin::ConstructL()
+    {
+    FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::ConstructL, BEGIN"));
+    
+    // Initialize server supports for folder
+    iServerSupportsForFolder.iSSName = EFalse;
+    iServerSupportsForFolder.iSSCreated = EFalse;
+    iServerSupportsForFolder.iSSModified = EFalse;
+        
+    FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::ConstructL, END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder
+// Method to check if needed properties are supported by remote server.
+// -----------------------------------------------------------------------------
+void CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder( const CSmlDataStoreFormat& aServerDataStoreFormat )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: BEGIN"));
+        
+    iServerSupportsForFolder.iSSName = EFalse;
+    iServerSupportsForFolder.iSSCreated = EFalse;
+    iServerSupportsForFolder.iSSModified = EFalse;
+    
+    if ( aServerDataStoreFormat.FolderPropertyCount() == 0 )
+        {
+        // Server has no restricition on folder property
+        iServerSupportsForFolder.iSSName = ETrue;
+        iServerSupportsForFolder.iSSCreated = ETrue;
+        iServerSupportsForFolder.iSSModified = ETrue;
+        return;
+        }
+    else
+        {
+        for ( TInt i = 0; 
+                   i < aServerDataStoreFormat.FolderPropertyCount(); 
+                   i++ )
+            {
+            if ( aServerDataStoreFormat.FolderProperty( i ).Field().Name().DesC().Compare( KNSmlDataObjectNAME ) == 0 )
+                {
+                FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: Supports NAME Property"));
+                iServerSupportsForFolder.iSSName = ETrue;
+                }
+            else if ( aServerDataStoreFormat.FolderProperty( i ).Field().Name().DesC().Compare( KNSmlDataObjectCREATED ) == 0 )
+                {
+                FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: Supports CREATED Property"));
+                iServerSupportsForFolder.iSSCreated = ETrue;
+                }
+            else if ( aServerDataStoreFormat.FolderProperty( i ).Field().Name().DesC().Compare( KNSmlDataObjectMODIFIED ) == 0 )
+                {
+                FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: Supports MODIFIED Property"));
+                iServerSupportsForFolder.iSSModified = ETrue;
+                }
+            }
+        }
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: END"));
+    }
+         
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::FetchFolderL
+// Method to read folder item from database.
+// -----------------------------------------------------------------------------
+void CNSmlDefaultAgendaHandlerPlugin::FetchFolderL( const TSmlDbItemUid aUid, RBufWriteStream& aStream )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL: begin"));
+            
+    // Create parser and set properties
+    CNSmlFolderParser* parser = CNSmlFolderParser::NewLC();
+    TNSmlParserGeneratorError parseError = EErrorNone;
+    HBufC8* generatedBuf = NULL;
+    HBufC8* nameBuf = NULL;
+    
+    //Get the Folder Information
+    CNSmlDefaultAgendaHandlerUtil* agendautil = CalendarInfoL(aUid);
+    if( NULL == agendautil )
+        {
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL:Invalid CalendarInfo"));
+        CleanupStack::PopAndDestroy( parser );
+        User::Leave( KErrNotFound );
+        }
+        
+    if ( iServerSupportsForFolder.iSSCreated )
+        {
+        parser->iCreated = agendautil->iCreated;
+        }
+    else
+        {
+        parser->iCreated = Time::NullTTime();
+        }
+    
+    if ( iServerSupportsForFolder.iSSName )
+        {
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL: retrieving name"));
+        nameBuf = HBufC8::NewL( agendautil->iName->Length() );
+        TPtr8 name( nameBuf->Des() );
+        CnvUtfConverter::ConvertFromUnicodeToUtf8(name , agendautil->iName->Des());
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL: name converted"));
+        parser->iName = nameBuf;        
+        }    
+
+    // Generate data and write it to buffer   
+    generatedBuf = HBufC8::NewLC( 1 );
+    generatedBuf->Des() = KNullDesC8;
+    CleanupStack::Pop(); // generatedBuf
+    parseError = parser->GenerateXml( generatedBuf );
+    CleanupStack::PushL( generatedBuf );
+    
+    aStream.WriteL( generatedBuf->Des() );
+    
+    delete agendautil;
+    CleanupStack::PopAndDestroy( generatedBuf ); 
+    CleanupStack::PopAndDestroy( parser );
+    
+    if ( parseError != EErrorNone )
+        {       
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL(): end with leave"));
+        User::Leave( KErrGeneral );
+        }
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL: end"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL
+// Retrieve the CalendarFile ID
+// -----------------------------------------------------------------------------
+void CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL( CArrayFixFlat<TUint>* aFolderUidArray )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL BEGIN"));
+        
+    CCalSession* vCalSession = NULL;
+    CCalSession* vCalSubSession = NULL;   
+    TBuf8<KBuffLength> keyBuff;
+    
+    aFolderUidArray->Reset();
+            
+    vCalSession = CCalSession::NewL();
+    CleanupStack::PushL(vCalSession);
+    
+    CDesCArray* calfilearr = vCalSession->ListCalFilesL();            
+    CleanupStack::PushL(calfilearr);
+    
+    for(TInt i = 0; i < calfilearr->Count(); i++)
+        {
+        TInt err = KErrNone;
+        vCalSubSession = CCalSession::NewL();
+        CleanupStack::PushL(vCalSubSession);
+        vCalSubSession->OpenL(calfilearr->MdcaPoint(i));
+        
+        CCalCalendarInfo* caleninfo = vCalSubSession->CalendarInfoL(); 
+        CleanupStack::PushL(caleninfo);
+        
+        //Get UID value associated with the CalFile
+        keyBuff.Zero();
+        TUint UidVal;
+        keyBuff.AppendNum( EFolderLUID );
+        TPckgC<TUint> pckUidValue(UidVal);
+        TRAP(err,pckUidValue.Set(caleninfo->PropertyValueL( keyBuff )));
+        UidVal = pckUidValue();
+                    
+        if( err != KErrNone )
+            {
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: Error while retrieving CalFile Property: '%d'"), err);
+            }
+        
+        //Get OWNER value associated with the CalFile
+        keyBuff.Zero();
+        TInt SyncServiceOwnerVal;
+        keyBuff.AppendNum( EDeviceSyncServiceOwner );
+        TPckgC<TInt> pckOwnerValue(SyncServiceOwnerVal);
+        TRAP(err,pckOwnerValue.Set(caleninfo->PropertyValueL( keyBuff )));
+        SyncServiceOwnerVal = pckOwnerValue();
+                    
+        if( err == KErrNotFound )
+            {
+            // Set DS Application as owner
+            SyncServiceOwnerVal = KCRUidNSmlDSApp.iUid;
+            TPckgC<TInt> pckOwnerValue(SyncServiceOwnerVal);
+            caleninfo->SetPropertyL( keyBuff, pckOwnerValue );
+            vCalSubSession->SetCalendarInfoL( *caleninfo );
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: Empty Owner LUID '%d'"), UidVal );
+            aFolderUidArray->AppendL(UidVal);
+            }
+        else if( err == KErrNone )
+            {
+            if( KCRUidNSmlDSApp.iUid == SyncServiceOwnerVal )
+                {
+                FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: DS Owner LUID '%d'"), UidVal );
+                aFolderUidArray->AppendL(UidVal);
+                }
+            }
+        else
+            {
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: Error while retrieving Owner Property: '%d'"), err);
+            }
+        CleanupStack::PopAndDestroy(caleninfo);
+        CleanupStack::PopAndDestroy(vCalSubSession); 
+        }
+    CleanupStack::PopAndDestroy(calfilearr);
+    CleanupStack::PopAndDestroy(vCalSession);
+    
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL END"));
+    }
+ 
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL
+// Creates the Folder item with the stream provided 
+// -----------------------------------------------------------------------------
+TCalLocalUid CNSmlDefaultAgendaHandlerPlugin::CreateFolderL( RBufReadStream& aStream )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL BEGIN"));
+   
+    TBuf8<KBuffLength> keyBuff;
+    TUint calValue = 0;
+    CNSmlDefaultAgendaHandlerUtil* agendautil = NULL;
+    CCalCalendarInfo* calinfo = CCalCalendarInfo::NewL();
+    CleanupStack::PushL(calinfo);    
+    
+    // Parse the buffer for the folder data and construct the calendar info   
+    agendautil = ParseFolderDataL( aStream );
+    
+    if( agendautil )
+        {
+        // Visibility
+        calinfo->SetEnabled( agendautil->iEnabled );
+        
+        // LUID Meta Property
+        keyBuff.Zero();
+        keyBuff.AppendNum( EFolderLUID );
+        calValue = CCalenMultiCalUtil::GetNextAvailableOffsetL();
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL: nextoffset: '%d'"), calValue);
+        TPckgC<TUint> pckgUidValue( calValue );
+        calinfo->SetPropertyL( keyBuff, pckgUidValue );      
+      
+        // Create & Modified Time Meta Property
+        keyBuff.Zero();
+        keyBuff.AppendNum( ECreationTime );
+        TTime time;
+        time.HomeTime();
+        TPckgC<TTime> pckgCreateTimeValue( time );
+        calinfo->SetPropertyL( keyBuff, pckgCreateTimeValue );
+        keyBuff.Zero();
+        keyBuff.AppendNum( EModificationTime );
+        calinfo->SetPropertyL( keyBuff, pckgCreateTimeValue );
+        
+        // Sync Status Meta Property
+        keyBuff.Zero();
+        keyBuff.AppendNum( ESyncStatus );
+        TBool syncstatus( ETrue );
+        TPckgC<TBool> pckgSyncStatusValue( syncstatus );
+        calinfo->SetPropertyL( keyBuff, pckgSyncStatusValue );
+        
+        // Add
+        CCalSession* calsession = CCalSession::NewL();
+        TInt err(KErrNone);
+        if( agendautil->iName != NULL )
+            {
+            calinfo->SetNameL( agendautil->iName->Des() );
+            TRAP( err, calsession->CreateCalFileL( agendautil->iName->Des(), *calinfo ) );
+            }
+        else
+            {
+            err = KErrNotFound;
+            }
+        
+        delete calsession;
+        delete agendautil;
+        CleanupStack::PopAndDestroy(calinfo);
+        
+        if( err != KErrNone )
+            {
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL: Error while Creating Calfile"));
+            User::Leave( KErrGeneral );
+            }
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy(calinfo);
+        User::Leave( KErrGeneral );
+        }
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL END"));
+    return calValue;   
+    }
+ 
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL
+// Replaces the Folder item with the ID provided 
+// -----------------------------------------------------------------------------
+void CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderL( const TCalLocalUid& aUid, 
+                                                      RBufReadStream& aStream, TBool& aSyncStatus )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL: BEGIN"));
+    
+    TBuf8<KBuffLength> keyBuff;
+    CNSmlDefaultAgendaHandlerUtil* agendautil = NULL;
+    
+    // Parse the buffer for the folder data and construct the calendar info   
+    agendautil = ParseFolderDataL( aStream );
+    
+    if( agendautil )
+        {
+        //Get the associated Calendar File 
+        CNSmlDefaultAgendaHandlerUtil* updateagendautil = CalendarInfoL( aUid );
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL: After CalendarInfoL '%d'"), updateagendautil);
+        
+        if( NULL == updateagendautil )
+            {
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Invalid Updatable CalendarInfo"));
+            delete agendautil;
+            User::Leave( KErrNotFound );
+            }
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:valid CalendarInfo"));
+        if( updateagendautil->iFileName != NULL )            
+            {            
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:valid name '%S'"), updateagendautil->iFileName);
+            CCalSession* vCalSession = CCalSession::NewL();
+            CleanupStack::PushL(vCalSession);
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Open the session")); 
+            vCalSession->OpenL(updateagendautil->iFileName->Des());          
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Get the Calendar Info")); 
+            CCalCalendarInfo* caleninfo = vCalSession->CalendarInfoL();  
+            CleanupStack::PushL(caleninfo);
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Set the status"));
+            caleninfo->SetEnabled(agendautil->iEnabled);            
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Set the name"));
+            caleninfo->SetNameL(agendautil->iName->Des());
+            
+            // Modified Time Meta Property
+            keyBuff.Zero();
+            keyBuff.AppendNum( EModificationTime );
+            TTime time;
+            time.HomeTime();
+            TPckgC<TTime> pckgCreateTimeValue( time );
+            caleninfo->SetPropertyL( keyBuff, pckgCreateTimeValue );
+            
+            aSyncStatus = updateagendautil->iSyncStatus;
+            
+            // Update
+            vCalSession->SetCalendarInfoL(*caleninfo);
+            
+            CleanupStack::PopAndDestroy(caleninfo);
+            CleanupStack::PopAndDestroy( vCalSession );
+            }
+        else
+            {
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Invalid Updatable CalendarInfo Name"));
+            delete agendautil;
+            delete updateagendautil;
+            User::Leave( KErrNotFound );
+            }
+        }
+    else
+        {
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Invalid Parsed CalendarInfo"));
+        User::Leave( KErrNotFound );
+        }
+    
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL: END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::FolderNameL
+// Returns the FolderName for the given ID
+// -----------------------------------------------------------------------------
+HBufC* CNSmlDefaultAgendaHandlerPlugin::FolderNameL( TSmlDbItemUid aUid )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderNameL: BEGIN"));
+    
+    HBufC* calfilename = NULL;
+    CNSmlDefaultAgendaHandlerUtil* agendautil = CalendarInfoL( aUid );
+    
+    if( agendautil != NULL )
+        {
+        calfilename = agendautil->iFileName->Alloc();
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::foldername: '%S'"), calfilename);
+        }    
+    delete agendautil;
+    
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderNameL: END"));
+    
+    return calfilename;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::StoreFormatL
+// Returns adapters supported store format which is read from Calendar Plug
+// In Adapter own resource file.
+// -----------------------------------------------------------------------------
+CSmlDataStoreFormat* CNSmlDefaultAgendaHandlerPlugin::StoreFormatL( RStringPool& aStringPool )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::StoreFormatL: BEGIN"));
+    
+    TFileName fileName;
+    TParse* parse = new(ELeave) TParse();
+    CleanupStack::PushL( parse );
+    
+    parse->Set( KNSmlDefaultAgendaHandlerRsc_1_2,
+                &KDC_RESOURCE_FILES_DIR, NULL );
+    
+    fileName = parse->FullName();
+    RResourceFile resourceFile;
+    RFs rfs;
+    User::LeaveIfError(rfs.Connect());
+    
+    BaflUtils::NearestLanguageFile( rfs, fileName );
+
+    TRAPD( leavecode, resourceFile.OpenL( rfs,fileName ) );
+    if ( leavecode != 0 )
+        {
+        CleanupStack::PopAndDestroy(); // parse
+        rfs.Close();
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin:::StoreFormatL(): Error END"));
+        User::Leave( leavecode );
+        }
+    
+    CleanupClosePushL( resourceFile );
+    HBufC8* buffer = resourceFile.AllocReadLC( NSML_DEFAULT_AGENDA_HANDLER );
+    TResourceReader reader;
+    reader.SetBuffer( buffer );
+
+    CSmlDataStoreFormat* dsFormat = NULL;
+    dsFormat = CSmlDataStoreFormat::NewLC( aStringPool, reader );
+    CleanupStack::Pop(); // dsFormat
+    CleanupStack::PopAndDestroy( 3 ); // buffer, resourceFile, parse
+    rfs.Close();
+    
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::StoreFormatL: END"));
+    return dsFormat;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::DeviceSyncOwner
+// Returns the DS Application UID
+// -----------------------------------------------------------------------------
+TInt CNSmlDefaultAgendaHandlerPlugin::DeviceSyncOwner()
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::DeviceSyncOwner: BEGIN"));
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::DeviceSyncOwner: '%d' END"), KCRUidNSmlDSApp.iUid );
+    return KCRUidNSmlDSApp.iUid;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL
+// Returns the Sync Status for the given UID
+// -----------------------------------------------------------------------------
+TBool CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL( TSmlDbItemUid aUid )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: BEGIN"));
+    
+    TBool syncstatus( EFalse );
+    CNSmlDefaultAgendaHandlerUtil* agendautil = CalendarInfoL( aUid );        
+    if( agendautil != NULL )
+        {
+        syncstatus = agendautil->iSyncStatus;
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::syncstatus: '%d'"), syncstatus );
+        }    
+    delete agendautil;
+        
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: END"));
+    
+    return syncstatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL
+// Returns the Sync Status for the given FolderName
+// -----------------------------------------------------------------------------
+TBool CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL( HBufC* aFolderName )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: BEGIN"));
+    
+    TBool syncstatus( EFalse );
+    TBuf8<KBuffLength> keyBuff;    
+    CCalSession *calsession = CCalSession::NewL();
+    CleanupStack::PushL(calsession);
+    calsession->OpenL(aFolderName->Des());    
+    CCalCalendarInfo* caleninfo = calsession->CalendarInfoL();
+    CleanupStack::PushL(caleninfo);
+    // Sync Status
+    keyBuff.Zero();
+    keyBuff.AppendNum( ESyncStatus ); 
+    TPckgC<TBool> pckgSyncStatusValue(syncstatus);
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: Get sync status"));
+    TRAPD(err,pckgSyncStatusValue.Set(caleninfo->PropertyValueL( keyBuff )));
+                
+    syncstatus = pckgSyncStatusValue();
+    if( err != KErrNone )
+        {
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: Error while retrieving CalFile SYNC Property"));
+        }
+    CleanupStack::PopAndDestroy(caleninfo);
+    CleanupStack::PopAndDestroy(calsession);
+        
+    
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: END"));
+    
+    return syncstatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL
+// Create the Folder SnapShot Item
+// -----------------------------------------------------------------------------
+TNSmlSnapshotItem CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL( const TCalLocalUid& aUid )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL: BEGIN"));
+    
+    TNSmlSnapshotItem item( 0 );
+    
+    CNSmlDefaultAgendaHandlerUtil* agendautil = CalendarInfoL( aUid );
+    if( NULL == agendautil )
+        {
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL:Invalid CalendarInfo"));
+        return item;
+        }
+    item.SetItemId( aUid );   
+    item.SetLastChangedDate(agendautil->iModified);
+    item.SetSoftDelete(EFalse);
+    delete agendautil; 
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL: END"));
+    
+    return item; 
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL
+// Method to Parse the Folder Data Obtained
+// -----------------------------------------------------------------------------
+CNSmlDefaultAgendaHandlerUtil* CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL( RBufReadStream& aStream )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: BEGIN"));
+        
+    CNSmlDefaultAgendaHandlerUtil* agendautil = CNSmlDefaultAgendaHandlerUtil::NewL();
+    
+    // Create parser and parse data from Buffer
+    CNSmlFolderParser* folderparser = CNSmlFolderParser::NewLC();
+    TParse name;
+         
+    TInt size = aStream.Source()->SizeL();
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: size:'%d'"), size);
+    CBufFlat* buffer = CBufFlat::NewL( 64 );
+    CleanupStack::PushL( buffer );
+    buffer->ResizeL( size );
+    TPtr8 ptr = buffer->Ptr( 0 );
+    aStream.ReadL( ptr, size );
+    HBufC8* dataBuffer = HBufC8::NewLC( buffer->Size() );
+    TPtr8 dataBufferPtr = dataBuffer->Des();
+    buffer->Read( 0, dataBufferPtr, buffer->Size() );
+        
+    TNSmlParserGeneratorError parseError = 
+                                    folderparser->ParseXml( dataBuffer );
+    CleanupStack::PopAndDestroy( 2 ); // dataBuffer, buffer
+    
+    if ( parseError != EErrorNone )
+        {
+        delete agendautil;
+        CleanupStack::PopAndDestroy( ); // folderparser
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: end with leave"));
+        User::Leave( KErrGeneral );
+        return NULL;
+        }
+    
+    // Every folder item must have NAME property. Even replace because this 
+    // Plug In does not support field level update for folders.
+    if ( !folderparser->iName )
+        {
+        delete agendautil;
+        CleanupStack::PopAndDestroy( ); // folderparser
+        FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: end with leave"));
+        User::Leave( KErrArgument );
+        return NULL;
+        }
+    
+    // Create Calendar info
+    agendautil->iName = CnvUtfConverter::ConvertToUnicodeFromUtf8L(folderparser->iName->Des());
+    CleanupStack::PopAndDestroy( ); // folderparser;    
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: END"));
+    return agendautil;
+    }   
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL
+// Retrieve the CalendarFile Info using the aUid value
+// -----------------------------------------------------------------------------
+CNSmlDefaultAgendaHandlerUtil* CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL( TSmlDbItemUid aUid )
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: BEGIN"));   
+        
+    TBuf8<KBuffLength> keyBuff;
+    CNSmlDefaultAgendaHandlerUtil* agendautil = NULL;
+    CCalSession* vCalSession = NULL;
+    CCalSession* vCalSubSession = NULL;   
+    
+    vCalSession = CCalSession::NewL();
+    CleanupStack::PushL(vCalSession);
+    
+    CDesCArray* calfilearr = vCalSession->ListCalFilesL();            
+    CleanupStack::PushL(calfilearr);
+    
+    for(TInt i = 0; i < calfilearr->Count(); i++)
+        {
+        vCalSubSession = CCalSession::NewL(*vCalSession);
+        CleanupStack::PushL(vCalSubSession);
+        vCalSubSession->OpenL(calfilearr->MdcaPoint(i));
+        
+        CCalCalendarInfo* caleninfo = vCalSubSession->CalendarInfoL();
+        CleanupStack::PushL(caleninfo);
+        
+        TUint UidVal;
+        keyBuff.Zero();
+        keyBuff.AppendNum( EFolderLUID );
+        TPckgC<TUint> intBuf(UidVal);
+        TRAPD(err,intBuf.Set(caleninfo->PropertyValueL(keyBuff)));
+                    
+        if( err != KErrNone )
+            {
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Error while retrieving CalFile Property"));
+            CleanupStack::PopAndDestroy(caleninfo); 
+            CleanupStack::PopAndDestroy(vCalSubSession); 
+            CleanupStack::PopAndDestroy(calfilearr); 
+            CleanupStack::PopAndDestroy(vCalSession); 
+            return agendautil;
+            }
+        
+        UidVal = intBuf();
+        
+        if(aUid == UidVal)
+            {
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Found a match"));
+            agendautil = CNSmlDefaultAgendaHandlerUtil::NewL();
+            agendautil->iEnabled  = caleninfo->Enabled();
+            agendautil->iName     = caleninfo->NameL().AllocL();
+            agendautil->iFileName = caleninfo->FileNameL().AllocL();
+            
+            TInt err(KErrNone);
+            
+            // Created Time
+            TTime timeval;
+            keyBuff.Zero();
+            keyBuff.AppendNum( ECreationTime );     
+            TPckgC<TTime> pckgCreateTimeValue( timeval );
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Get Creation date"));
+            TRAP(err,pckgCreateTimeValue.Set(caleninfo->PropertyValueL( keyBuff )));
+                        
+            if( err != KErrNone )
+                {
+                FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Error while retrieving CalFile CREATED Property"));
+                }
+            agendautil->iCreated = pckgCreateTimeValue();
+            
+            // Modified Time
+            keyBuff.Zero();
+            keyBuff.AppendNum( EModificationTime );      
+            TPckgC<TTime> pckgModifyTimeValue( timeval );
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Get Modified date"));
+            TRAP(err,pckgModifyTimeValue.Set(caleninfo->PropertyValueL( keyBuff )));
+                        
+            if( err != KErrNone )
+                {
+                FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Error while retrieving CalFile MODIFIED Property"));
+                }
+            agendautil->iModified = pckgModifyTimeValue();
+            
+            // Sync Status
+            TBool syncstatus;
+            keyBuff.Zero();
+            keyBuff.AppendNum( ESyncStatus ); 
+            TPckgC<TBool> pckgSyncStatusValue(syncstatus);
+            FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL(): Get sync status"));
+            TRAP(err,pckgSyncStatusValue.Set(caleninfo->PropertyValueL( keyBuff )));
+                        
+            if( err != KErrNone )
+                {
+                FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Error while retrieving CalFile SYNC Property"));
+                }
+            agendautil->iSyncStatus = pckgSyncStatusValue();
+            }        
+        CleanupStack::PopAndDestroy(caleninfo);
+        CleanupStack::PopAndDestroy(vCalSubSession); 
+        }  
+    CleanupStack::PopAndDestroy(calfilearr);
+    CleanupStack::PopAndDestroy(vCalSession); 
+    
+    FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: END"));   
+    
+    return agendautil;
+    }
+
+/** 
+ *  Provides a key value pair table, this is used to identify
+ *  the correct construction function for the requested interface.
+ */
+const TImplementationProxy ImplementationTable[] =
+{
+        IMPLEMENTATION_PROXY_ENTRY(0x20029F16, CNSmlDefaultAgendaHandlerPlugin::NewL )
+};
+    
+/** 
+ * Function used to return an instance of the proxy table.+
+ */
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+{
+        aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+        return ImplementationTable;
+}
+
+#ifdef EKA2 
+GLDEF_C TInt E32Dll() 
+#else 
+GLDEF_C TInt E32Dll(TDllReason /*aReason*/) 
+#endif 
+// DLL entry point
+    {
+    return(KErrNone);
+    }
+
+//End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmldefaultagendahandler/src/nsmldefaultagendahandlerutil.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,76 @@
+/*
+* 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:    
+*               
+*
+*/
+
+#include "nsmldefaultagendahandlerutil.h"
+#include "nsmldefaultagendahandlerdebug.h"
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerUtil::CNSmlDefaultAgendaHandlerUtil
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CNSmlDefaultAgendaHandlerUtil::CNSmlDefaultAgendaHandlerUtil()
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerUtil::CNSmlDefaultAgendaHandlerUtil(): BEGIN"));
+    
+    iFileName = NULL;
+    iName = NULL;
+    iEnabled = ETrue;
+    iSyncStatus = ETrue;
+    
+    FLOG(_L("CNSmlDefaultAgendaHandlerUtil::CNSmlDefaultAgendaHandlerUtil(): END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerUtil::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlDefaultAgendaHandlerUtil* CNSmlDefaultAgendaHandlerUtil::NewL()
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerUtil::NewL: BEGIN"));
+    
+    CNSmlDefaultAgendaHandlerUtil* self = new ( ELeave ) CNSmlDefaultAgendaHandlerUtil();
+    
+    FLOG(_L("CNSmlDefaultAgendaHandlerUtil::NewL: END"));
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDefaultAgendaHandlerUtil::~CNSmlDefaultAgendaHandlerUtil
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlDefaultAgendaHandlerUtil::~CNSmlDefaultAgendaHandlerUtil()
+    {
+    FLOG(_L("CNSmlDefaultAgendaHandlerUtil::~CNSmlDefaultAgendaHandlerUtil(): BEGIN"));
+    if(iFileName)
+        {
+        delete iFileName;
+        iFileName = NULL;
+        }
+    if(iName)
+        {
+        delete iName;
+        iName = NULL;
+        }
+    FLOG(_L("CNSmlDefaultAgendaHandlerUtil::~CNSmlDefaultAgendaHandlerUtil(): END"));
+    }
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/bld/bld.inf	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2004 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:  Folder XML Utils build file.
+*
+*/
+
+PRJ_MMPFILES
+./nsmlfolderparser.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/bld/def/bwinscwfolderparseru.def	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,22 @@
+EXPORTS
+	?NewL@CNSmlExtData@@SAPAV1@XZ @ 1 NONAME ; class CNSmlExtData * CNSmlExtData::NewL(void)
+	?NewLC@CNSmlExtData@@SAPAV1@XZ @ 2 NONAME ; class CNSmlExtData * CNSmlExtData::NewLC(void)
+	?AddXValL@CNSmlExtData@@QAEXPAVHBufC8@@@Z @ 3 NONAME ; void CNSmlExtData::AddXValL(class HBufC8 *)
+	?GenerateXmlL@CNSmlExtData@@QBEXAAVTPtr8@@PBVCNSmlXmlParser@@@Z @ 4 NONAME ; void CNSmlExtData::GenerateXmlL(class TPtr8 &, class CNSmlXmlParser const *) const
+	??0CNSmlXmlParser@@QAE@XZ @ 5 NONAME ; CNSmlXmlParser::CNSmlXmlParser(void)
+	?NewLC@CNSmlFolderParser@@SAPAV1@XZ @ 6 NONAME ; class CNSmlFolderParser * CNSmlFolderParser::NewLC(void)
+	?AddExtL@CNSmlFolderParser@@QAEXPAVCNSmlExtData@@@Z @ 7 NONAME ; void CNSmlFolderParser::AddExtL(class CNSmlExtData *)
+	?AttributeCount@TNSmlFolderAttributeData@@QBEHXZ @ 8 NONAME ; int TNSmlFolderAttributeData::AttributeCount(void) const
+	?ConvertIntoEntitiesL@CNSmlExtData@@QAEXPBVCNSmlXmlParser@@@Z @ 9 NONAME ; void CNSmlExtData::ConvertIntoEntitiesL(class CNSmlXmlParser const *)
+	?CountXmlSize@CNSmlExtData@@QBEHPBVCNSmlXmlParser@@@Z @ 10 NONAME ; int CNSmlExtData::CountXmlSize(class CNSmlXmlParser const *) const
+	?CountXmlSizeL@CNSmlFolderParser@@UAEHXZ @ 11 NONAME ; int CNSmlFolderParser::CountXmlSizeL(void)
+	??1CNSmlXmlParser@@UAE@XZ @ 12 NONAME ; CNSmlXmlParser::~CNSmlXmlParser(void)
+	?NewL@CNSmlFolderParser@@SAPAV1@XZ @ 13 NONAME ; class CNSmlFolderParser * CNSmlFolderParser::NewL(void)
+	??1CNSmlFolderParser@@UAE@XZ @ 14 NONAME ; CNSmlFolderParser::~CNSmlFolderParser(void)
+	?CountXmlSize@TNSmlFolderAttributeData@@QBEHPBVCNSmlXmlParser@@@Z @ 15 NONAME ; int TNSmlFolderAttributeData::CountXmlSize(class CNSmlXmlParser const *) const
+	?GenerateXml@CNSmlFolderParser@@UAE?AW4TNSmlParserGeneratorError@@AAPAVHBufC8@@@Z @ 16 NONAME ; enum TNSmlParserGeneratorError CNSmlFolderParser::GenerateXml(class HBufC8 * &)
+	??1CNSmlExtData@@UAE@XZ @ 17 NONAME ; CNSmlExtData::~CNSmlExtData(void)
+	??0TNSmlFolderAttributeData@@QAE@XZ @ 18 NONAME ; TNSmlFolderAttributeData::TNSmlFolderAttributeData(void)
+	?ParseXml@CNSmlFolderParser@@UAE?AW4TNSmlParserGeneratorError@@PAVHBufC8@@@Z @ 19 NONAME ; enum TNSmlParserGeneratorError CNSmlFolderParser::ParseXml(class HBufC8 *)
+	?GenerateXml@TNSmlFolderAttributeData@@QBEXAAVTPtr8@@PBVCNSmlXmlParser@@@Z @ 20 NONAME ; void TNSmlFolderAttributeData::GenerateXml(class TPtr8 &, class CNSmlXmlParser const *) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/bld/def/eabifolderparseru.def	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,35 @@
+EXPORTS
+	_ZN12CNSmlExtData20ConvertIntoEntitiesLEPK14CNSmlXmlParser @ 1 NONAME
+	_ZN12CNSmlExtData4NewLEv @ 2 NONAME
+	_ZN12CNSmlExtData5NewLCEv @ 3 NONAME
+	_ZN12CNSmlExtData8AddXValLEP6HBufC8 @ 4 NONAME
+	_ZN12CNSmlExtDataD0Ev @ 5 NONAME
+	_ZN12CNSmlExtDataD1Ev @ 6 NONAME
+	_ZN12CNSmlExtDataD2Ev @ 7 NONAME
+	_ZN14CNSmlXmlParserC2Ev @ 8 NONAME
+	_ZN14CNSmlXmlParserD0Ev @ 9 NONAME
+	_ZN14CNSmlXmlParserD1Ev @ 10 NONAME
+	_ZN14CNSmlXmlParserD2Ev @ 11 NONAME
+	_ZN17CNSmlFolderParser11GenerateXmlERP6HBufC8 @ 12 NONAME
+	_ZN17CNSmlFolderParser13CountXmlSizeLEv @ 13 NONAME
+	_ZN17CNSmlFolderParser4NewLEv @ 14 NONAME
+	_ZN17CNSmlFolderParser5NewLCEv @ 15 NONAME
+	_ZN17CNSmlFolderParser7AddExtLEP12CNSmlExtData @ 16 NONAME
+	_ZN17CNSmlFolderParser8ParseXmlEP6HBufC8 @ 17 NONAME
+	_ZN17CNSmlFolderParserD0Ev @ 18 NONAME
+	_ZN17CNSmlFolderParserD1Ev @ 19 NONAME
+	_ZN17CNSmlFolderParserD2Ev @ 20 NONAME
+	_ZN24TNSmlFolderAttributeDataC1Ev @ 21 NONAME
+	_ZN24TNSmlFolderAttributeDataC2Ev @ 22 NONAME
+	_ZNK12CNSmlExtData12CountXmlSizeEPK14CNSmlXmlParser @ 23 NONAME
+	_ZNK12CNSmlExtData12GenerateXmlLER5TPtr8PK14CNSmlXmlParser @ 24 NONAME
+	_ZNK24TNSmlFolderAttributeData11GenerateXmlER5TPtr8PK14CNSmlXmlParser @ 25 NONAME
+	_ZNK24TNSmlFolderAttributeData12CountXmlSizeEPK14CNSmlXmlParser @ 26 NONAME
+	_ZNK24TNSmlFolderAttributeData14AttributeCountEv @ 27 NONAME
+	_ZTI12CNSmlExtData @ 28 NONAME
+	_ZTI14CNSmlXmlParser @ 29 NONAME
+	_ZTI17CNSmlFolderParser @ 30 NONAME
+	_ZTV12CNSmlExtData @ 31 NONAME
+	_ZTV14CNSmlXmlParser @ 32 NONAME
+	_ZTV17CNSmlFolderParser @ 33 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/bld/nsmlfolderparser.mmp	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2004 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:  Folder XML Parser mmp file
+*
+*/
+
+
+#include "defaultcaps.hrh"
+#include <platform_paths.hrh>
+
+CAPABILITY	CAP_GENERAL_DLL
+VENDORID 	VID_DEFAULT
+TARGET          nsmlfolderparser.dll
+TARGETTYPE      dll
+UID             0x1000008d 0x20029F12
+
+#if defined(ARMCC)
+DEFFILE		./def/eabifolderparser
+#elif defined(WINSCW)
+DEFFILE		./def/bwinscwfolderparser
+#elif defined(WINS)
+DEFFILE		./def/bwinsfolderparser
+#else
+DEFFILE		./def/bmarmfolderparser
+#endif
+
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      ../src
+USERINCLUDE 	../inc
+SOURCE		    nsmlxmlparser.cpp
+SOURCE          NSmlExtData.cpp
+SOURCE          NSmlFolderAttributeData.cpp
+SOURCE          NSmlFolderParser.cpp
+
+LIBRARY         euser.lib estor.lib efsrv.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/inc/nsmlparserconstants.h	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,117 @@
+/*
+* 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:  Folder parser constants
+*
+*/
+
+
+#ifndef __NSMLPARSERCONSTANTS_H__
+#define __NSMLPARSERCONSTANTS_H__
+
+// ------------------------------------------------------------------------------------------------
+// Defines for binary size optimization
+// ------------------------------------------------------------------------------------------------
+#define __NO_XML_COMMENTS_
+//#define __NO_EMPTY_ELEMENTS_
+
+
+// ------------------------------------------------------------------------------------------------
+// constants
+// ------------------------------------------------------------------------------------------------
+
+// the length of element start (<) and end (>)
+const TInt KElementStartEndWidth = 2;
+
+// constants used with files
+const TInt KReadDataLength = 512;
+const TUint KFileReadAccess	= EFileRead|EFileShareAny;
+const TUint KFileWriteAccess = EFileWrite|EFileShareExclusive;
+
+// Whitespace characters
+const TText KWhitespaceEmpty = ' ';
+const TText KWhitespaceLineFeed = '\r';
+const TText KWhitespaceNewLine = '\n';
+const TText KWhitespaceTabular = '\t';
+const TText KWhitespaceLineFeedNewLine = '\r\n';
+
+const TText KCharacterSlash = '/';
+
+// CData
+_LIT8(KCDataStart,		"<![CDATA[");
+_LIT8(KCDataEnd,		"]]>");
+_LIT8(KCDataInnerEnd,	"]]]]>&gt;<![CDATA[");
+
+#ifndef __NO_XML_COMMENTS_
+// Xml comments
+_LIT8(KCommentStart,	"<!--");
+_LIT8(KCommentEnd,		"-->");
+#endif
+
+const TText KElementStart = '<';
+const TText KElementEnd = '>';
+
+// Xml entities
+_LIT8(KEntityLT,	"&lt;");
+_LIT8(KEntityGT,	"&gt;");
+_LIT8(KEntityAMP,	"&amp;");
+_LIT8(KEntityAPOS,	"&apos;");
+_LIT8(KEntityQUOT,	"&quot;");
+
+// special characters
+_LIT8(KLessThan,	"<");
+_LIT8(KGreaterThan,	">");
+_LIT8(KAmpersand,	"&");
+_LIT8(KApostrophe,	"\'");
+_LIT8(KQuotation,	"\"");
+
+// boolean string representations
+_LIT8(KStringTrue,	"true");
+_LIT8(KStringFalse,	"false");
+
+// empty string
+_LIT8(KStringEmpty,	"");
+
+// truncated info spesific elements
+_LIT8(KTruncatedElement,		"truncated");
+_LIT8(KTruncatedBodyElement,	"body");
+_LIT8(KTruncatedAttachElement,	"attach");
+_LIT8(KTruncatedSizeElement,	"size");
+_LIT8(KTruncatedTypeElement,	"type");
+_LIT8(KTruncatedNameElement,	"name");
+
+// extension spesific elements
+_LIT8(KExtElement,		"Ext");
+_LIT8(KExtXNamElement,	"XNam");
+_LIT8(KExtXValElement,	"XVal");
+
+// folder spesific elements
+_LIT8(KFolderElement,			"Folder");
+_LIT8(KFolderNameElement,		"name");
+_LIT8(KFolderCreatedElement,	"created");
+_LIT8(KFolderModifiedElement,	"modified");
+_LIT8(KFolderAccessedElement,	"accessed");
+_LIT8(KFolderAttributesElement,	"attributes");
+_LIT8(KFolderRoleElement,		"role");
+
+// folder attributes
+_LIT8(KAttributeHiddenElement,		"h");
+_LIT8(KAttributeSystemElement,		"s");
+_LIT8(KAttributeArchivedElement,	"a");
+_LIT8(KAttributeDeleteElement,		"d");
+_LIT8(KAttributeWritableElement,	"w");
+_LIT8(KAttributeReadableElement,	"r");
+_LIT8(KAttributeExecutableElement,	"x");
+
+
+#endif // __NSMLPARSERCONSTANTS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/src/NSmlExtData.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2004 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:  Sources
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <s32buf.h>
+#include <s32file.h>
+
+#include <nsmlfolderparser.h>
+#include "nsmlparserconstants.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNSmlExtData* CNSmlExtData::NewL()
+	{
+	CNSmlExtData* self = CNSmlExtData::NewLC();
+	CleanupStack::Pop();
+
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNSmlExtData* CNSmlExtData::NewLC()
+	{
+	CNSmlExtData* self = new (ELeave) CNSmlExtData();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::~CNSmlExtData
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNSmlExtData::~CNSmlExtData()
+	{
+	if (iXVals) 
+		{
+		iXVals->ResetAndDestroy();
+		delete iXVals;
+		}
+
+	if (iXNam) delete iXNam;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::AddXValL
+// Adds given buffer to iXVals.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CNSmlExtData::AddXValL( HBufC8* aXVal )
+	{
+	iXVals->AppendL(aXVal);
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::GenerateXmlL
+// Generates ext data xml using aParser and appends the xml to aXml.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CNSmlExtData::GenerateXmlL( TPtr8& aXml, const CNSmlXmlParser* aParser) const
+	{
+	if ( aParser == NULL )
+		return;
+
+	aParser->AppendElement(aXml, KExtElement());
+
+	if( iXNam )
+		{
+		aParser->AppendElement(aXml, KExtXNamElement(), *iXNam);
+		}
+	else
+		User::Leave(EMandatoryFieldNotFound);
+
+	if ( iXVals )
+		{
+		for (TInt i=0; i < iXVals->Count(); ++i)
+			{
+			aParser->AppendElement(aXml, KExtXValElement(), *iXVals->At(i));
+			}
+		}
+
+	aParser->AppendEndElement(aXml, KExtElement());
+
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::CountXmlSize
+// Counts the size of the ext data xml if it was generated with current 
+// values in member variables.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CNSmlExtData::CountXmlSize( const CNSmlXmlParser* aParser ) const
+	{
+	TInt size = 0;
+	size += aParser->SizeOfElements( KExtElement() );
+
+	if( iXNam )
+		{
+		size += aParser->SizeOfString( iXNam, KExtXNamElement() );
+		}
+
+	if ( iXVals )
+		{
+		for (TInt i=0; i < iXVals->Count(); ++i)
+			{
+			size += aParser->SizeOfString( iXVals->At(i), KExtXValElement() );
+			}
+		}
+
+	return size;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::ConvertIntoEntitiesL
+// Converts special characters in member variables into entities.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CNSmlExtData::ConvertIntoEntitiesL( const CNSmlXmlParser* aParser )
+	{
+	if( iXNam )
+		aParser->CharactersToEntitiesL(iXNam, 0, iXNam->Length());
+
+	if( iXVals )
+		{
+		for (TInt i=0; i < iXVals->Count(); ++i)
+			{
+			aParser->CharactersToEntitiesL(iXVals->At(i), 0, iXVals->At(i)->Length());
+			}
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::CNSmlExtData
+// Constructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlExtData::CNSmlExtData()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlExtData::ConstructL
+// Second phase construction.
+// -----------------------------------------------------------------------------
+//
+void CNSmlExtData::ConstructL()
+	{
+	iXVals = new (ELeave) CNSmlXValArray(3);
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/src/NSmlFolderAttributeData.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2004 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:  Sources
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <s32buf.h>
+#include <s32file.h>
+
+#include <nsmlfolderparser.h>
+#include "nsmlparserconstants.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TNSmlFolderAttributeData::TNSmlFolderAttributeData
+// Constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TNSmlFolderAttributeData::TNSmlFolderAttributeData()
+: iHidden(EBooleanMissing), iSystem(EBooleanMissing), 
+iArchived(EBooleanMissing), iDelete(EBooleanMissing),
+iWritable(EBooleanMissing), iReadable(EBooleanMissing),
+iExecutable(EBooleanMissing)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// TNSmlFolderAttributeData::AttributeCount
+// Returns the amount of fields that are not EBooleanMissing
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TNSmlFolderAttributeData::AttributeCount() const
+	{
+	TInt count = 0;
+
+	if ( iHidden ) count++;
+	if ( iSystem ) count++;
+	if ( iArchived ) count++;
+	if ( iDelete ) count++;
+	if ( iWritable ) count++;
+	if ( iReadable ) count++;
+	if ( iExecutable ) count++;
+
+	return count;
+	}
+
+// -----------------------------------------------------------------------------
+// TNSmlFolderAttributeData::GenerateXml
+// Generates attribute xml
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TNSmlFolderAttributeData::GenerateXml( TPtr8& aXml, const CNSmlXmlParser* aParser ) const
+	{
+	aParser->AppendElement(aXml, KFolderAttributesElement());
+
+	if ( iHidden )
+		{
+		aParser->AppendElement(aXml, KAttributeHiddenElement(), aParser->BooleanToString( iHidden ));
+		}
+
+	if ( iSystem )
+		{
+		aParser->AppendElement(aXml, KAttributeSystemElement(), aParser->BooleanToString( iSystem ));
+		}
+
+	if ( iArchived )
+		{
+		aParser->AppendElement(aXml, KAttributeArchivedElement(), aParser->BooleanToString( iArchived ));
+		}
+
+	if ( iDelete )
+		{
+		aParser->AppendElement(aXml, KAttributeDeleteElement(), aParser->BooleanToString( iDelete ));
+		}
+
+	if ( iWritable )
+		{
+		aParser->AppendElement(aXml, KAttributeWritableElement(), aParser->BooleanToString( iWritable ));
+		}
+
+	if ( iReadable )
+		{
+		aParser->AppendElement(aXml, KAttributeReadableElement(), aParser->BooleanToString( iReadable ));
+		}
+
+	if ( iExecutable )
+		{
+		aParser->AppendElement(aXml, KAttributeExecutableElement(), aParser->BooleanToString( iExecutable ));
+		}
+
+	aParser->AppendEndElement(aXml, KFolderAttributesElement());
+	}
+
+// -----------------------------------------------------------------------------
+// TNSmlFolderAttributeData::CountXmlSize
+// Coounts the size of the xml if it was generated using the values currently in 
+// member variables
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TNSmlFolderAttributeData::CountXmlSize( const CNSmlXmlParser* aParser ) const
+	{
+	TInt size = 0;
+	size += aParser->SizeOfElements( KFolderAttributesElement() );
+
+	if ( iHidden )
+		{
+		size += aParser->SizeOfBoolean( iHidden, KAttributeHiddenElement() );
+		}
+
+	if ( iSystem )
+		{
+		size += aParser->SizeOfBoolean( iSystem, KAttributeSystemElement() );
+		}
+
+	if ( iArchived )
+		{
+		size += aParser->SizeOfBoolean( iArchived, KAttributeArchivedElement() );
+		}
+
+	if ( iDelete )
+		{
+		size += aParser->SizeOfBoolean( iDelete, KAttributeDeleteElement() );
+		}
+
+	if ( iWritable )
+		{
+		size += aParser->SizeOfBoolean( iWritable, KAttributeWritableElement() );
+		}
+
+	if ( iReadable )
+		{
+		size += aParser->SizeOfBoolean( iReadable, KAttributeReadableElement() );
+		}
+
+	if ( iExecutable )
+		{
+		size += aParser->SizeOfBoolean( iExecutable, KAttributeExecutableElement() );
+		}
+
+	return size;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/src/NSmlFolderParser.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,631 @@
+/*
+* Copyright (c) 2004 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:  Sources
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <s32buf.h>
+#include <s32file.h>
+
+#include <nsmlfolderparser.h>
+#include "nsmlparserconstants.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNSmlFolderParser* CNSmlFolderParser::NewL()
+	{
+	CNSmlFolderParser* self = CNSmlFolderParser::NewLC();
+	CleanupStack::Pop();
+
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNSmlFolderParser* CNSmlFolderParser::NewLC()
+	{
+	CNSmlFolderParser* self = new (ELeave) CNSmlFolderParser();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::~CNSmlFolderParser
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNSmlFolderParser::~CNSmlFolderParser()
+	{
+	if(iExt) 
+		{
+		iExt->ResetAndDestroy();
+		delete iExt;
+		}
+
+	if(iName) delete iName;
+	if(iRole) delete iRole;
+
+	if( iExtData ) delete iExtData;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::ParseXml
+// Parses through the given XML and places the data to member variables.
+// Note: The method does not check whether the member variables 
+// already contains data or not, but just writes it (if some of them are already 
+// instantiated dynamically, they should be deleted before this method is called).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TNSmlParserGeneratorError CNSmlFolderParser::ParseXml( HBufC8* aXml )
+	{
+
+	TRAPD(cdataErr, PreProcessL(aXml));
+	if (cdataErr != EErrorNone)
+		return (TNSmlParserGeneratorError)cdataErr;
+
+	iSetValues.Reset();
+	iCurrentState = EFolderNone;
+	iLastState = EFolderNone;
+	TPtrC8 ptr(*aXml);
+
+	TRAPD(err, ParseL( ptr ));
+
+	if( err == EErrorNone && iCurrentState != EFolderNone )
+		return EInvalidXmlError;
+
+	return CheckError(err);
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::GenerateXml
+// Generates Folder-XML using the values in member variables. aXml contains the 
+// generated xml when the function returns successfully. Note: caller should not 
+// instantiate the HBufC8, since this method first counts the size of the 
+// xml to be generated and then instatiates the HBufC8 with a correct maximum size.
+// If the given buffer is not NULL, it is destroyed and a new one is instantiated.
+// Caller gets the control of the HBufC8 when the function returns.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TNSmlParserGeneratorError CNSmlFolderParser::GenerateXml( HBufC8*& aXml ) 
+	{
+
+	TRAPD( err, ConvertIntoEntitiesL(); // convert special characters into entities
+	
+			GenerateFolderXmlL( aXml ) );
+
+	return CheckError(err);
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::GenerateFolderXmlL
+// Private methods that does the actual folder xml generation
+// -----------------------------------------------------------------------------
+//
+void CNSmlFolderParser::GenerateFolderXmlL( HBufC8*& aXml )
+	{
+	// count the size of the xml
+	TInt size = CountXmlSizeL();
+
+	// create buffer for the xml
+
+	if ( aXml )
+		{
+		delete aXml;
+		aXml = NULL;
+		}
+
+	aXml = HBufC8::NewLC(size);
+	TPtr8 ptr = aXml->Des();
+
+	AppendElement(ptr, KFolderElement());
+
+	if ( iName )
+		{
+		AppendElement(ptr, KFolderNameElement(), *iName);
+		}
+
+	if (iCreated != Time::NullTTime())
+		{
+		AppendElement(ptr, KFolderCreatedElement(), DateTimeToStringL(iCreated));
+		}
+
+	if (iModified != Time::NullTTime())
+		{
+		AppendElement(ptr, KFolderModifiedElement(), DateTimeToStringL(iModified));
+		}
+
+	if (iAccessed != Time::NullTTime())
+		{
+		AppendElement(ptr, KFolderAccessedElement(), DateTimeToStringL(iAccessed));
+		}
+
+	if (iAttributes.AttributeCount() > 0)
+		{
+		iAttributes.GenerateXml(ptr, this);
+		}
+
+	if ( iRole )
+		{
+		AppendElement(ptr, KFolderRoleElement(), *iRole);
+		}
+
+	if ( iExt )
+		{
+		for (TInt i=0; i < iExt->Count(); ++i)
+			{
+			iExt->At(i)->GenerateXmlL(ptr, this);
+			}
+
+		}
+
+	AppendEndElement(ptr, KFolderElement());
+
+	CleanupStack::Pop(); // aXml
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::CountXmlSizeL
+// Counts how long the xml string will be if it was generated using 
+// the values currently in member variables.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CNSmlFolderParser::CountXmlSizeL()
+	{
+	TInt size = 0;
+
+	size += SizeOfElements( KFolderElement() );
+	size += KCDataStart().Length() + KCDataEnd().Length();
+
+	if ( iName )
+		{
+		size += SizeOfString( iName, KFolderNameElement() );
+		}
+
+	if (iCreated != Time::NullTTime())
+		{
+		size += SizeOfDatetime( KFolderCreatedElement() );
+		}
+
+	if (iModified != Time::NullTTime())
+		{
+		size += SizeOfDatetime( KFolderModifiedElement() );
+		}
+
+	if (iAccessed != Time::NullTTime())
+		{
+		size += SizeOfDatetime( KFolderAccessedElement() );
+		}
+
+	// attributes, if any present
+	if (iAttributes.AttributeCount() > 0)
+		{
+		size += iAttributes.CountXmlSize( this );
+		}
+
+	if ( iRole )
+		{
+		size += SizeOfString( iRole, KFolderRoleElement() );
+		}
+
+	if ( iExt )
+		{
+		for (TInt i=0; i < iExt->Count(); ++i)
+			{
+			size += iExt->At(i)->CountXmlSize( this );
+			}
+		}
+
+	return size;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::AddExtL
+// Adds the given extension to iExt
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CNSmlFolderParser::AddExtL( CNSmlExtData* aExt )
+	{
+	iExt->AppendL(aExt);
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::NextElementL
+// Base class' ParseL method calls this method, when a new element is found. aElement 
+// is the name of that element (string inside '<' and '>' characters).
+// -----------------------------------------------------------------------------
+//
+void CNSmlFolderParser::NextElementL( TPtrC8 aElement )
+	{
+	if (aElement.Length() == 0)
+		User::Leave(EInvalidXmlError);
+
+	TBool startElement = ETrue;
+
+	if(aElement[0] == KCharacterSlash)
+		{
+		// end element
+		// remove the '/' character from the beginning
+		aElement.Set( aElement.Right( aElement.Length() - 1 ) );
+		startElement = EFalse;
+		}
+#ifndef __NO_EMPTY_ELEMENTS_
+	else if (aElement[aElement.Length()-1] == KCharacterSlash)
+		{
+		// empty element
+		// remove the '/' character from the end
+		aElement.Set( aElement.Left( aElement.Length() - 1 ) );
+
+		// empty element == start element, empty data, end element
+		NextElementL( aElement ); // simulates start element
+		NextDataL( _L8("") ); // simulates the empty data
+
+		HBufC8* end = HBufC8::NewLC(aElement.Length()+1);
+		TPtr8 ptr = end->Des();
+		ptr.Append( _L8("/") );
+		ptr.Append( aElement );
+
+		NextElementL( ptr ); // simulates end element
+
+		CleanupStack::PopAndDestroy(); // end
+
+		return;
+		}
+#endif
+
+	// variables used for state, init to <Folder> and not set
+	TNSmlCurrentFolderElement inner = EFolder;
+	TNSmlCurrentFolderElement outer = EFolder;
+	TBool isSet = EFalse;
+
+	if( aElement == KFolderElement )
+		{
+		outer = EFolderNone;
+		isSet = iSetValues.iFolder;
+		if ( startElement ) iSetValues.iFolder = ETrue;
+		}
+	else if( aElement == KFolderNameElement )
+		{
+		inner = EFolderName;
+		isSet = iSetValues.iName;
+		}
+	else if( aElement == KFolderCreatedElement )
+		{
+		inner = EFolderCreated;
+		isSet = iSetValues.iCreated;
+		}
+	else if( aElement == KFolderModifiedElement )
+		{
+		inner = EFolderModified;
+		isSet = iSetValues.iModified;
+		}
+	else if( aElement == KFolderAccessedElement )
+		{
+		inner = EFolderAccessed;
+		isSet = iSetValues.iAccessed;
+		}
+	else if( aElement == KFolderAttributesElement )
+		{
+		inner = EAttributes;
+		isSet = iSetValues.iAttributes;
+		if ( startElement) iSetValues.iAttributes = ETrue;
+		}
+	else if( aElement == KAttributeHiddenElement )
+		{
+		inner = EAttributesH;
+		outer = EAttributes;
+		isSet = iSetValues.iAttributesH;
+		}
+	else if( aElement == KAttributeSystemElement )
+		{
+		inner = EAttributesS;
+		outer = EAttributes;
+		isSet = iSetValues.iAttributesS;
+		}
+	else if( aElement == KAttributeArchivedElement )
+		{
+		inner = EAttributesA;
+		outer = EAttributes;
+		isSet = iSetValues.iAttributesA;
+		}
+	else if( aElement == KAttributeDeleteElement )
+		{
+		inner = EAttributesD;
+		outer = EAttributes;
+		isSet = iSetValues.iAttributesD;
+		}
+	else if( aElement == KAttributeWritableElement )
+		{
+		inner = EAttributesW;
+		outer = EAttributes;
+		isSet = iSetValues.iAttributesW;
+		}
+	else if( aElement == KAttributeReadableElement )
+		{
+		inner = EAttributesR;
+		outer = EAttributes;
+		isSet = iSetValues.iAttributesR;
+		}
+	else if( aElement == KAttributeExecutableElement )
+		{
+		inner = EAttributesX;
+		outer = EAttributes;
+		isSet = iSetValues.iAttributesX;
+		}
+	else if( aElement == KFolderRoleElement )
+		{
+		inner = EFolderRole;
+		isSet = iSetValues.iRole;
+		}
+	else if( aElement == KExtElement )
+		{
+		inner = EFolderExt;
+
+		if ( startElement )
+			{
+			if( iExtData )
+				{
+				delete iExtData;
+				iExtData = NULL;
+				}
+			iExtData = CNSmlExtData::NewL();
+			iSetValues.iXNam = EFalse;
+			}
+		else
+			{
+			if( !iSetValues.iXNam ) User::Leave(EMandatoryFieldNotFound); // xnam not set
+			iExt->AppendL(iExtData);
+			iExtData = NULL;
+			}
+		}
+	else if( aElement == KExtXNamElement )
+		{
+		inner = EFolderExtXNam;
+		outer = EFolderExt;
+		isSet = iSetValues.iXNam;
+		}
+	else if( aElement == KExtXValElement )
+		{
+		inner = EFolderExtXVal;
+		outer = EFolderExt;
+		}
+	else
+		{
+		User::Leave(EInvalidXmlError);
+		}
+
+
+	// finally, change state depending on was the element start or end element
+	if ( startElement )
+		{
+		StartElementStateChangeL( outer, inner, isSet );
+		}
+	else
+		{
+		EndElementStateChangeL( inner, outer );
+		}
+
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::NextDataL
+// Base class' ParseL method calls this method, when a data is read from xml,
+// but that data is not element name (data inside or between elements).
+// -----------------------------------------------------------------------------
+//
+void CNSmlFolderParser::NextDataL( TPtrC8 aData )
+	{
+	switch(iCurrentState)
+		{
+		case EFolderNone:
+		case EFolder:
+		case EAttributes:
+		case EFolderExt:
+			LeaveIfNotWhiteSpaceL( aData );
+			break;
+		case EFolderName:
+			iName = aData.AllocL();
+			iSetValues.iName = ETrue;
+			break;
+		case EFolderCreated:
+			iCreated = StringToTTimeL(aData);
+			iSetValues.iCreated = ETrue;
+			break;
+		case EFolderModified:
+			iModified = StringToTTimeL(aData);
+			iSetValues.iModified = ETrue;
+			break;
+		case EFolderAccessed:
+			iAccessed = StringToTTimeL(aData);
+			iSetValues.iAccessed = ETrue;
+			break;
+		case EAttributesH:
+			iAttributes.iHidden = StringToBooleanL(aData);
+			iSetValues.iAttributesH = ETrue;
+			break;
+		case EAttributesS:
+			iAttributes.iSystem = StringToBooleanL(aData);
+			iSetValues.iAttributesS = ETrue;
+			break;
+		case EAttributesA:
+			iAttributes.iArchived = StringToBooleanL(aData);
+			iSetValues.iAttributesA = ETrue;
+			break;
+		case EAttributesD:
+			iAttributes.iDelete = StringToBooleanL(aData);
+			iSetValues.iAttributesD = ETrue;
+			break;
+		case EAttributesW:
+			iAttributes.iWritable = StringToBooleanL(aData);
+			iSetValues.iAttributesW = ETrue;
+			break;
+		case EAttributesR:
+			iAttributes.iReadable = StringToBooleanL(aData);
+			iSetValues.iAttributesR = ETrue;
+			break;
+		case EAttributesX:
+			iAttributes.iExecutable = StringToBooleanL(aData);
+			iSetValues.iAttributesX = ETrue;
+			break;
+		case EFolderRole:
+			iRole = aData.AllocL();
+			iSetValues.iRole = ETrue;
+			break;
+		case EFolderExtXNam:
+			iExtData->iXNam = aData.AllocL();
+			iSetValues.iXNam = ETrue;
+			break;
+		case EFolderExtXVal:
+			iExtData->AddXValL(aData.AllocL());
+			break;
+		default:
+			User::Leave(EUnknownError); // should never happen
+			break;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::StartElementStateChangeL
+// Checks that the state change (new start element) is legal (right order of 
+// elements and element not already set) and changes the state.
+// -----------------------------------------------------------------------------
+//
+void CNSmlFolderParser::StartElementStateChangeL(TNSmlCurrentFolderElement aCurrentState, 
+											     TNSmlCurrentFolderElement aNextState, 
+											     TBool aIsSet)
+	{
+	if( aIsSet || iCurrentState != aCurrentState || aNextState < iLastState )
+		{
+		User::Leave(EInvalidXmlError);
+		}
+
+	iLastState = iCurrentState;
+	iCurrentState = aNextState;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::EndElementStateChangeL
+// Checks that the state change (new end element) is legal (right order of 
+// elements and element not already set) and changes the state.
+// -----------------------------------------------------------------------------
+//
+void CNSmlFolderParser::EndElementStateChangeL(TNSmlCurrentFolderElement aCurrentState, 
+											   TNSmlCurrentFolderElement aNextState )
+	{
+	if( iCurrentState != aCurrentState )
+		{
+		User::Leave(EInvalidXmlError);
+		}
+
+	iLastState = iCurrentState;
+	iCurrentState = aNextState;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::ConvertIntoEntitiesL
+// Converts special characters of this dataobject to corresponding 
+// characters. 
+// -----------------------------------------------------------------------------
+//
+void CNSmlFolderParser::ConvertIntoEntitiesL()
+	{
+	// name
+	if ( iName )
+		{
+		CharactersToEntitiesL(iName, 0, iName->Length());
+		}
+
+	// role
+	if ( iRole )
+		{
+		CharactersToEntitiesL(iRole, 0, iRole->Length());
+		}
+
+	// extensions
+	if ( iExt )
+		{
+		for (TInt i=0; i < iExt->Count(); ++i)
+			{
+			iExt->At(i)->ConvertIntoEntitiesL(this);
+			}
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::CNSmlFolderParser
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CNSmlFolderParser::CNSmlFolderParser()
+	: iCreated(Time::NullTTime()), iModified(Time::NullTTime()), 
+	iAccessed(Time::NullTTime())
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::ConstructL
+// Second phase construction
+// -----------------------------------------------------------------------------
+//
+void CNSmlFolderParser::ConstructL()
+	{
+	iExt = new (ELeave) CNSmlExtDataArray(3);
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::TNSmlSetFolderValues::TNSmlSetFolderValues
+// -----------------------------------------------------------------------------
+//
+CNSmlFolderParser::TNSmlSetFolderValues::TNSmlSetFolderValues()
+	{
+	Reset();
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlFolderParser::TNSmlSetFolderValues::Reset
+// -----------------------------------------------------------------------------
+//
+void CNSmlFolderParser::TNSmlSetFolderValues::Reset()
+	{
+	iFolder = EFalse;
+	iName = EFalse;
+	iCreated = EFalse;
+	iModified = EFalse;
+	iAccessed = EFalse;
+	iAttributes = EFalse;
+	iAttributesH = EFalse;
+	iAttributesS = EFalse;
+	iAttributesA = EFalse;
+	iAttributesD = EFalse;
+	iAttributesW = EFalse;
+	iAttributesR = EFalse;
+	iAttributesX = EFalse;
+	iXNam = EFalse;
+	iRole = EFalse;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/dsutils/nsmlfolderutils/src/nsmlxmlparser.cpp	Thu Dec 17 08:39:39 2009 +0200
@@ -0,0 +1,798 @@
+/*
+* Copyright (c) 2004 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:  Sources
+*
+*/
+
+
+// 1.2 Changes: nsmlxmlparser module added
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <s32buf.h>
+#include <s32file.h>
+#include <nsmlfolderparser.h>
+#include "nsmlparserconstants.h"
+
+
+// ------------------------------------------------------------------------------------------------
+// 
+// CNSmlXmlParser methods
+// 
+// ------------------------------------------------------------------------------------------------
+
+// ------------------------------------------------------------------------------------------------
+// Constructor
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CNSmlXmlParser::CNSmlXmlParser()
+	{
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Destructor.
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CNSmlXmlParser::~CNSmlXmlParser()
+	{
+	if( iBuffer ) delete iBuffer;
+	if ( iCompleteBuffer ) delete iCompleteBuffer;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Parses the given string for cdata areas and entitys. If a cdata area is 
+// found, the data in it is skipped over. The entities outside cdata are converted 
+// into characters they represent (but only if cdata is found).
+// Note: This method is intended for processing the CDATA used right after <Data>. 
+// I.e. this method removes the cdata-elements used for wrapping the whole xml data 
+// and processes the string so that the inner cdatas used in the xml become valid.
+// THIS METHOD SHOULD BE CALLED RIGHT IN THE BEGINNING OF PARSING IF <Data>-BLOCK 
+// IS WRAPPED WITHIN CDATA.
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::PreProcessL( HBufC8* aXml ) const
+	{
+	// take a modifiable pointer
+	TPtr8 xml = aXml->Des();
+
+	// the string used for searching and moving in the string
+	TPtrC8 searchString(*aXml);
+
+	// the current position in the original string
+	TInt searchStartPos = 0;
+
+	// find the first cdata start
+	TInt cdataStartPos = searchString.Find(KCDataStart);
+	
+	// If CDATA is not found from beginning then data is not inside CDATA and then
+	// preprocessing is not needed
+	if ( cdataStartPos != 0 )
+	    {
+	    return;
+	    }
+
+	TInt cdataEndPos = KErrNotFound;
+
+	// while cdata is found
+	while ( cdataStartPos != KErrNotFound )
+		{
+		cdataStartPos += searchStartPos;
+
+		// find an end of cdata before entities are converted
+		cdataEndPos = searchString.Find(KCDataEnd);
+
+		// convert entities between search start and cdata start
+		TInt entityChange = EntitiesToCharactersL(aXml, searchStartPos, cdataStartPos);
+		xml.Set(aXml->Des());
+		cdataStartPos += entityChange;
+
+		if ( cdataEndPos != KErrNotFound )
+			{
+			cdataEndPos += entityChange;
+			cdataEndPos += searchStartPos;
+
+			// if the end is before start -> error
+			if (cdataEndPos < cdataStartPos)
+				User::Leave( EInvalidCDataStructure );
+				
+			// remove cdata end
+			xml.Delete(cdataEndPos, KCDataEnd().Length());
+			// remove cdata start
+			xml.Delete(cdataStartPos, KCDataStart().Length());
+
+			searchStartPos = cdataEndPos - KCDataStart().Length();
+			searchString.Set( xml.Right(xml.Length() - searchStartPos) );
+			}
+		else 
+			{
+			// the end of cdata was not found or cdata end was before start -> error
+			User::Leave( EInvalidCDataStructure );
+			}
+
+		// find a new cdata start that is after the found end
+		cdataStartPos = searchString.Find(KCDataStart);
+
+		}
+
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Return the TNSmlBoolean-value's string-representation.
+// ------------------------------------------------------------------------------------------------
+TPtrC8 CNSmlXmlParser::BooleanToString( const TNSmlBoolean aValue ) const
+	{
+	TPtrC8 str;
+	switch(aValue)
+		{
+		case EBooleanTrue:
+			{
+			str.Set(KStringTrue);
+			break;
+			}
+		case EBooleanFalse:
+			{
+			str.Set(KStringFalse);
+			break;
+			}
+		default:
+			{
+			str.Set(KStringEmpty);
+			}
+		}
+
+	return str;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the TTime-value's string-representation.
+// ------------------------------------------------------------------------------------------------
+TBuf8<KDateTimeLength> CNSmlXmlParser::DateTimeToStringL( const TTime& aValue ) const
+	{
+	TBuf<KDateTimeLength> str;
+	
+	// aValue is not changed but Z character is added to the end of string.
+	// Messaging uses UTC times and that is reason why time is not changed.
+	aValue.FormatL( str, _L("%F%Y%M%DT%H%T%SZ") );
+
+	// from 16-bit to 8-bit
+	TBuf8<KDateTimeLength> dt;
+	dt.Copy(str);
+
+	return dt;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the integer value's string-representation.
+// ------------------------------------------------------------------------------------------------
+TBuf8<KIntegerMaxLength> CNSmlXmlParser::IntegerToString( const TInt aValue ) const
+	{
+	TBuf8<KIntegerMaxLength> str;
+	str.AppendNum(aValue);
+	return str;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the boolean representation of the string or leaves if error (EInvalidBooleanValue).
+// ------------------------------------------------------------------------------------------------
+TNSmlBoolean CNSmlXmlParser::StringToBooleanL( const TPtrC8& aValue ) const
+	{
+	if( aValue == KStringTrue )
+		return EBooleanTrue;
+	else if( aValue == KStringFalse || aValue == KStringEmpty )
+		return EBooleanFalse;
+	else
+		User::Leave(EInvalidBooleanValue);
+
+	return EBooleanMissing;
+	}
+
+	
+// ------------------------------------------------------------------------------------------------
+// Returns the integer representation of the string or leaves if error (EInvalidIntegerValue).
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::StringToIntegerL( const TPtrC8& aValue ) const
+	{
+	if (aValue.Length() <= 0)
+		return 0;
+
+	// convert the data to an integer
+	TLex8 lex(aValue);
+	TUint uValue = 0;
+	TBool isNegative = EFalse;
+
+	TChar c = lex.Peek();
+
+	// check for a minus or plus sign
+	if ( c == '-' )
+		{
+		isNegative = ETrue;
+		lex.Inc();
+		}
+	else if ( c == '+' )
+		{
+		lex.Inc();
+		}
+
+	TRadix radix = EDecimal;
+	c = lex.Peek();
+
+	if (c == '0') // octal or hex
+		{
+		lex.Get();
+		c = lex.Get();
+		if ( c == 'x' || c == 'X' )
+			{
+			radix = EHex;
+			}
+		else
+			{
+			radix = EOctal;
+			lex.UnGet(); // back up
+			}
+		}
+
+	TInt err = lex.Val(uValue, radix);
+	if ( err != KErrNone )
+		User::Leave(EInvalidIntegerValue);
+
+	TInt value = uValue;
+
+	return isNegative ? value*(-1) : value;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the TTime representation of the string or leaves if error (EInvalidDatetimeValue).
+// UTC times are not supported, i.e. datetimes that have Z-ending are treated as 
+// local times.
+// ------------------------------------------------------------------------------------------------
+TTime CNSmlXmlParser::StringToTTimeL( TPtrC8& aValue ) const
+	{
+	// check that there is data
+	if (aValue.Length() <= 0)
+		User::Leave( EInvalidDatetimeValue );
+
+	// format the data into a TTime
+
+	if (aValue[aValue.Length()-1] == 'Z')
+		{
+		// The datetime is in UTC, which is not supported
+		// no correction done, treat as local time
+		aValue.Set( aValue.Left( aValue.Length()-1 ) );
+		}
+
+	TDateTime datetime(0,(TMonth)0,0,0,0,0,0);
+
+	// read datetime and check errors
+
+	TInt error = KErrNone;
+
+	// read year
+	TPtrC8 str = aValue.Left(4);
+	TLex8 lex(str);
+	TInt value;
+	error = lex.Val(value);
+	CheckDatetimeErrorL( error );
+	error  = datetime.SetYear(value);
+	CheckDatetimeErrorL( error );
+
+	// read month
+	str.Set(aValue.Mid(4, 2));
+	lex.Assign(str);
+	error = lex.Val(value);
+	CheckDatetimeErrorL( error );
+	--value;
+	error = datetime.SetMonth((TMonth)value);
+	CheckDatetimeErrorL( error );
+
+	// read day
+	str.Set(aValue.Mid(6, 2));
+	lex.Assign(str);
+	error = lex.Val(value);
+	CheckDatetimeErrorL( error );
+	--value;
+	error = datetime.SetDay(value);
+	CheckDatetimeErrorL( error );
+
+	// Skip character 'T' and read hour
+	str.Set(aValue.Mid(9, 2));
+	lex.Assign(str);
+	error = lex.Val(value);
+	CheckDatetimeErrorL( error );
+	error = datetime.SetHour(value);
+	CheckDatetimeErrorL( error );
+
+	// minutes
+	str.Set(aValue.Mid(11, 2));
+	lex.Assign(str);
+	error = lex.Val(value);
+	CheckDatetimeErrorL( error );
+	error = datetime.SetMinute(value);
+	CheckDatetimeErrorL( error );
+
+	// seconds
+	str.Set(aValue.Mid(13, 2));
+	lex.Assign(str);
+	error = lex.Val(value);
+	CheckDatetimeErrorL( error );
+	error = datetime.SetSecond(value);
+	CheckDatetimeErrorL( error );
+
+	return TTime(datetime);
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Adds start element, the value and end element to aPtr.
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::AppendElement( TPtr8& aPtr, const TDesC8& aElementName, const TDesC8& aValue ) const
+	{
+	// start element
+	aPtr.Append(KElementStart);
+	aPtr.Append(aElementName);
+	aPtr.Append(KElementEnd);
+
+	// value
+	aPtr.Append(aValue);
+
+	// end element
+	aPtr.Append(KElementStart);
+	aPtr.Append(KCharacterSlash);
+	aPtr.Append(aElementName);
+	aPtr.Append(KElementEnd);
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Forms an element using the given element name and appends it to the given string.
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::AppendElement( TPtr8& aPtr, const TDesC8& aElementName ) const
+	{
+	aPtr.Append(KElementStart);
+	aPtr.Append(aElementName);
+	aPtr.Append(KElementEnd);
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Forms an end element using the given element name and appends it to the given string.
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::AppendEndElement( TPtr8& aPtr, const TDesC8& aElementName ) const
+	{
+	aPtr.Append(KElementStart);
+	aPtr.Append(KCharacterSlash);
+	aPtr.Append(aElementName);
+	aPtr.Append(KElementEnd);
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the total length of start and end tag.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::SizeOfElements( const TDesC8& aElementName ) const
+	{
+	TInt size = 0;
+
+	// start element plus end element ( 1 = length of '/' char )
+	size += 2*aElementName.Length() + 1;
+	size += 2*KElementStartEndWidth; // '<' and '>'
+
+	return size;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the length of the given boolean element and it's data if it was a string.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::SizeOfBoolean( const TNSmlBoolean aValue, const TDesC8& aElementName ) const
+	{
+	TInt size = 0;
+	size += SizeOfElements( aElementName );
+	switch ( aValue )
+		{
+		case EBooleanTrue:
+			return size+4; // "true"
+		case EBooleanFalse:
+			return size+5; // "false"
+		default:
+			return 0;
+		}
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the length of the given datetime element and it's data if it was a string.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::SizeOfDatetime( const TDesC8& aElementName ) const
+	{
+	TInt size = SizeOfElements( aElementName ) + KDateTimeLength;
+	return size;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the maximum length of the given integer element and it's data if it was a string.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::SizeOfInteger( const TDesC8& aElementName ) const
+	{
+	TInt size = SizeOfElements( aElementName ) + KIntegerMaxLength;
+	return size;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns the length of the given string element and it's data if it was a string.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::SizeOfString( const HBufC8* aValue, const TDesC8& aElementName ) const
+	{
+	TInt size = SizeOfElements( aElementName ) + aValue->Length();
+	return size;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Finds entities and replaces them with the characters they represent. Returns 
+// an integer indicating the size change in aXml.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::EntitiesToCharactersL( HBufC8*& aXml, TInt aStartPos, TInt aEndPos ) const
+	{
+	TInt change = 0;
+	TInt changeSum = 0;
+
+	change = ReplaceL(aXml, KEntityLT, KLessThan, aStartPos, aEndPos);
+	changeSum += change;
+	aEndPos += change;
+
+	change = ReplaceL(aXml, KEntityGT, KGreaterThan, aStartPos, aEndPos);
+	changeSum += change;
+	aEndPos += change;
+
+	change = ReplaceL(aXml, KEntityAMP, KAmpersand, aStartPos, aEndPos);
+	changeSum += change;
+	aEndPos += change;
+
+	change = ReplaceL(aXml, KEntityAPOS, KApostrophe, aStartPos, aEndPos);
+	changeSum += change;
+	aEndPos += change;
+
+	change = ReplaceL(aXml, KEntityQUOT, KQuotation, aStartPos, aEndPos);
+	changeSum += change;
+
+	return changeSum;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Finds special characters and replaces them with corresponding entities. Returns 
+// an integer indicating the size change in aXml.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::CharactersToEntitiesL( HBufC8*& aXml, TInt aStartPos, TInt aEndPos ) const
+	{
+	TInt change = 0;
+	TInt changeSum = 0;
+
+	// Note: this replace has to be the first one, since it changes 
+	// &-characters to &amp;s and all the other replaces generate 
+	// &-characters as they are entities.
+	change = ReplaceL(aXml, KAmpersand, KEntityAMP, aStartPos, aEndPos);
+	changeSum += change;
+	aEndPos += change;
+
+	change = ReplaceL(aXml, KLessThan, KEntityLT, aStartPos, aEndPos);
+	changeSum += change;
+	aEndPos += change;
+
+	change = ReplaceL(aXml, KGreaterThan, KEntityGT, aStartPos, aEndPos);
+	changeSum += change;
+	aEndPos += change;
+
+	change = ReplaceL(aXml, KApostrophe, KEntityAPOS, aStartPos, aEndPos);
+	changeSum += change;
+	aEndPos += change;
+
+	change = ReplaceL(aXml, KQuotation, KEntityQUOT, aStartPos, aEndPos);
+	changeSum += change;
+
+	return changeSum;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Returns ETrue if all the characters in the given text are whitespace 
+// characters, else EFalse.
+// ------------------------------------------------------------------------------------------------
+TBool CNSmlXmlParser::IsWhitespace( const TDesC8& aText ) const
+	{
+	// loop the string character by character
+	TText c;
+	for ( TInt i=0; i < aText.Length(); ++i )
+		{
+		c = aText[i];
+		switch( c )
+			{
+			case KWhitespaceEmpty:
+				break;
+			case KWhitespaceLineFeed:
+				break;
+			case KWhitespaceNewLine:
+				break;
+			case KWhitespaceTabular:
+				break;
+			case KWhitespaceLineFeedNewLine:
+				break;
+			default:
+				return EFalse;
+			}
+		}
+
+	return ETrue;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Leaves with EInvalidXmlError if the given string is not whitespace.
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::LeaveIfNotWhiteSpaceL( const TDesC8& aText ) const
+	{
+	if ( !IsWhitespace( aText ) )
+		{
+		User::Leave( EInvalidXmlError );
+		}
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Maps the given value to TNSmlParserGeneratorError.
+// ------------------------------------------------------------------------------------------------
+TNSmlParserGeneratorError CNSmlXmlParser::CheckError( const TInt error ) const
+	{
+	if ( error == KErrNoMemory )
+		{
+		return EOutOfMemory;
+		}
+	else if ( error < KErrNone )
+		{
+		// some system wide error, should not occur
+		return EUnknownError;
+		}
+	else if ( error != EErrorNone )
+		{
+		return (TNSmlParserGeneratorError)error;
+		}
+
+	return EErrorNone;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Parses the given xml and calls NextDataL and NextElementL methods when finds 
+// data or element. 
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::ParseL( TPtrC8& aXml )
+	{
+
+	ResetBufferL(iBuffer);
+	ResetBufferL(iCompleteBuffer);
+
+	// boolean indicating if reading element name (true) or insides of 
+	// an element (false)
+	TBool readingElementName = EFalse;
+	TText c;
+
+	for( TInt i=0; i < aXml.Length(); ++i )
+		{
+		c = aXml[i];
+		switch(c)
+			{
+			case KElementStart:
+				// if currently reading element, error
+				if( readingElementName )
+					{
+					User::Leave(EInvalidXmlError);
+					}
+
+				if( aXml.Length()-i >= KCDataStart().Length() &&
+					!aXml.Mid(i, KCDataStart().Length()).Compare(KCDataStart()) )
+					{ // cdata
+					aXml.Set( aXml.Right( aXml.Length() - i ) );
+					TInt endPos = aXml.Find(KCDataEnd);
+
+					TPtrC8 cdata = _L8("");
+					if ( endPos == KErrNotFound )
+						{
+						User::Leave(EInvalidCDataStructure);
+						}
+
+					cdata.Set( aXml.Mid( KCDataStart().Length(), endPos - KCDataStart().Length() ) );
+					aXml.Set( aXml.Right( aXml.Length() - endPos - KCDataEnd().Length() ) );
+
+					i = -1;
+
+					// add current buffer to complete buffer
+					EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
+					AddToCompleteL(*iBuffer);
+					ResetBufferL(iBuffer);
+					AddToCompleteL(cdata);
+					}
+#ifndef __NO_XML_COMMENTS_
+				else if( aXml.Length()-i >= KCommentStart().Length() &&
+					!aXml.Mid(i, KCommentStart().Length()).Compare(KCommentStart()) )
+					{ // comment
+					aXml.Set( aXml.Right( aXml.Length() - i ) );
+					TInt endPos = aXml.Find(KCommentEnd);
+
+					if ( endPos != KErrNotFound )
+						{
+						aXml.Set( aXml.Right( aXml.Length() - endPos - KCommentEnd().Length() ) );
+						}
+					else
+						{
+						User::Leave(EInvalidXmlError);
+						}
+
+					i = -1;
+					}
+#endif
+				else 
+					{
+					// send the buffer
+					EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
+					AddToCompleteL(*iBuffer);
+					NextDataL(*iCompleteBuffer);
+					ResetBufferL(iBuffer);
+					ResetBufferL(iCompleteBuffer);
+					readingElementName = ETrue;
+					}
+
+				break;
+			case KElementEnd:
+				// stop reading element name
+				if( !readingElementName )
+					{
+					User::Leave(EInvalidXmlError);
+					}
+				else 
+					{
+					NextElementL(*iBuffer);
+					ResetBufferL(iBuffer);
+					readingElementName = EFalse;
+					}
+				break;
+			default:
+				// add char to buffer
+				AddToBufferL(c, iBuffer);
+				break;
+			}
+		}
+
+	EntitiesToCharactersL( iBuffer, 0, iBuffer->Length() );
+	AddToCompleteL(*iBuffer);
+	NextDataL(*iCompleteBuffer);
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Adds the given string to iCompleteBuffer
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::AddToCompleteL( const TPtrC8 aStr )
+	{
+	if(!iCompleteBuffer)
+		{
+		iCompleteBuffer = HBufC8::NewL(aStr.Length());
+		}
+
+	TPtr8 ptr = iCompleteBuffer->Des();
+	if( ptr.MaxLength() < iCompleteBuffer->Length()+aStr.Length() )
+		{
+		iCompleteBuffer = iCompleteBuffer->ReAllocL(iCompleteBuffer->Length()+aStr.Length());
+		ptr.Set(iCompleteBuffer->Des());
+		}
+
+	ptr.Append(aStr);
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Deletes the given buffer and initializes it again to length 10
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::ResetBufferL( HBufC8*& aBuf ) const
+	{
+	if( aBuf )
+		{
+		delete aBuf;
+		aBuf = NULL;
+		}
+
+	aBuf = HBufC8::NewL(10);
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// Adds the given char to given buffer
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::AddToBufferL( const TText c, HBufC8*& aBuf ) const
+	{
+	TPtr8 ptr = aBuf->Des();
+	if( ptr.MaxLength() == aBuf->Length()+1 )
+		{
+		aBuf = aBuf->ReAllocL(aBuf->Length()+10);
+		ptr.Set(aBuf->Des());
+		}
+
+	TChar str = c;
+	ptr.Append(str);
+	}
+
+
+
+// ------------------------------------------------------------------------------------------------
+// Replaces all occurances of aTarget in aText with aItem. Returns an integer indicating 
+// the size change in aText. aStartPos and aEndPos indicate the start and end positions 
+// of aText to be parsed (if whole string should be parsed, use 0 and aText.Length()).
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlXmlParser::ReplaceL( HBufC8*& aText, const TDesC8& aTarget, const TDesC8& aItem, TInt aStartPos, TInt aEndPos ) const
+	{
+	TInt change = 0;
+	TInt searchPos = aStartPos;
+	TPtrC8 text = aText->Mid(aStartPos, aEndPos-aStartPos);
+	TInt pos = text.Find(aTarget);
+
+	while ( pos != KErrNotFound )
+		{
+		pos += searchPos;
+
+		TInt currentChange = aItem.Length() - aTarget.Length();
+		change += currentChange;
+		aEndPos += currentChange;
+		searchPos = pos;
+
+		if ( currentChange > 0 )
+			{
+			searchPos += currentChange;
+
+			// check that aText is large enough
+			if ( aText->Des().MaxLength() < aText->Length()+currentChange )
+				{
+				aText = aText->ReAllocL(aText->Length()+currentChange);
+				}
+			}
+
+		// the actual replace
+		aText->Des().Replace(pos, aTarget.Length(), aItem);
+
+		text.Set( aText->Mid(searchPos, aEndPos-searchPos) );
+		pos = text.Find(aTarget);
+		}
+
+	return change;
+	}
+
+
+// ------------------------------------------------------------------------------------------------
+// 
+// ------------------------------------------------------------------------------------------------
+void CNSmlXmlParser::CheckDatetimeErrorL( const TInt error ) const
+	{
+	if ( error != KErrNone )
+		{
+		User::Leave( EInvalidDatetimeValue );
+		}
+	}
+
+//End of File
+
--- a/omads/omadsextensions/group/bld.inf	Mon Nov 23 14:46:41 2009 +0200
+++ b/omads/omadsextensions/group/bld.inf	Thu Dec 17 08:39:39 2009 +0200
@@ -17,6 +17,8 @@
 
 
 #include "../dsutils/cgiscriptutils/bld/bld.inf"
+#include "../dsutils/nsmlfolderutils/bld/bld.inf"
+#include "../dsutils/nsmldefaultagendahandler/bld/bld.inf"
 #include "../datamod/bld/bld.inf"
 #include "../adapters/bld/bld.inf"