--- /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, "]]]]>><![CDATA[");
-
-#ifndef __NO_XML_COMMENTS_
-// Xml comments
-_LIT8(KCommentStart, "<!--");
-_LIT8(KCommentEnd, "-->");
-#endif
-
-const TText KElementStart = '<';
-const TText KElementEnd = '>';
-
-// Xml entities
-_LIT8(KEntityLT, "<");
-_LIT8(KEntityGT, ">");
-_LIT8(KEntityAMP, "&");
-_LIT8(KEntityAPOS, "'");
-_LIT8(KEntityQUOT, """);
-
-// 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; , ]]]]>> , ]]]]>> )
- // 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 &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, "]]]]>><![CDATA[");
+
+#ifndef __NO_XML_COMMENTS_
+// Xml comments
+_LIT8(KCommentStart, "<!--");
+_LIT8(KCommentEnd, "-->");
+#endif
+
+const TText KElementStart = '<';
+const TText KElementEnd = '>';
+
+// Xml entities
+_LIT8(KEntityLT, "<");
+_LIT8(KEntityGT, ">");
+_LIT8(KEntityAMP, "&");
+_LIT8(KEntityAPOS, "'");
+_LIT8(KEntityQUOT, """);
+
+// 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 &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"