omads/omadsextensions/adapters/contactsgroup/inc/contactsgrpdatastore.h
author hgs
Tue, 13 Jul 2010 03:39:25 +0530
changeset 40 b63e67867dcd
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Part of ContactGroup DS adapter
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef __CONTACTSGRPDATASTORE_H__
hgs
parents:
diff changeset
    20
#define __CONTACTSGRPDATASTORE_H__
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <SmlDataProvider.h>
hgs
parents:
diff changeset
    23
#include <f32file.h>
hgs
parents:
diff changeset
    24
#include <cntdef.h>
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
class CNSmlDataItemUidSet;
hgs
parents:
diff changeset
    27
class CContactsGrpConverter;
hgs
parents:
diff changeset
    28
class CChangeFinder;
hgs
parents:
diff changeset
    29
class TSnapshotItem;
hgs
parents:
diff changeset
    30
class CContactDatabase;
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
class CContactsGrpDataStore : public CSmlDataStore
hgs
parents:
diff changeset
    33
	{
hgs
parents:
diff changeset
    34
private:
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
	CContactsGrpDataStore();
hgs
parents:
diff changeset
    37
	~CContactsGrpDataStore();	
hgs
parents:
diff changeset
    38
	
hgs
parents:
diff changeset
    39
public:
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
	static CContactsGrpDataStore* NewL();
hgs
parents:
diff changeset
    42
	static CContactsGrpDataStore* NewLC();
hgs
parents:
diff changeset
    43
	void ConstructL();	
hgs
parents:
diff changeset
    44
	
hgs
parents:
diff changeset
    45
	// Transactions (optional)
hgs
parents:
diff changeset
    46
	void DoBeginTransactionL();
hgs
parents:
diff changeset
    47
	void DoCommitTransactionL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    48
	void DoRevertTransaction(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
	// Batching (optional)
hgs
parents:
diff changeset
    51
	void DoBeginBatchL();
hgs
parents:
diff changeset
    52
	void DoCommitBatchL(RArray<TInt>& aResultArray, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    53
	void DoCancelBatch();
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
	// Opens data store asynchronously	
hgs
parents:
diff changeset
    56
	void DoOpenL(const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    57
	// Cancels current asynchronous request
hgs
parents:
diff changeset
    58
	void DoCancelRequest();
hgs
parents:
diff changeset
    59
	// Returns the name of open database, empty if OpenL hasn't been called
hgs
parents:
diff changeset
    60
	const TDesC& DoStoreName() const;
hgs
parents:
diff changeset
    61
	// Sets remote server data format
hgs
parents:
diff changeset
    62
	void DoSetRemoteStoreFormatL(const CSmlDataStoreFormat& aServerDataStoreFormat);
hgs
parents:
diff changeset
    63
	// Sets the remote server maximum object size
hgs
parents:
diff changeset
    64
	void DoSetRemoteMaxObjectSize(TInt aServerMaxObjectSize);
hgs
parents:
diff changeset
    65
	// Returns maximum object size, reported by remote server
hgs
parents:
diff changeset
    66
	TInt DoMaxObjectSize() const;
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
	// Opens item for reading
hgs
parents:
diff changeset
    69
	void DoOpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize,
hgs
parents:
diff changeset
    70
	    TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    71
	// Initializes new item to data store
hgs
parents:
diff changeset
    72
	void DoCreateItemL(TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent,
hgs
parents:
diff changeset
    73
	    const TDesC8& aMimeType, const TDesC8& aMimeVer, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    74
	// Initializes replace of item in data store
hgs
parents:
diff changeset
    75
	void DoReplaceItemL(TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent,
hgs
parents:
diff changeset
    76
	    TBool aFieldChange, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    77
	// Reads data from opened item
hgs
parents:
diff changeset
    78
	void DoReadItemL(TDes8& aBuffer);
hgs
parents:
diff changeset
    79
	// Writes data to created or replaced item
hgs
parents:
diff changeset
    80
	void DoWriteItemL(const TDesC8& aData);
hgs
parents:
diff changeset
    81
	// Commits the created or replaced item to database
hgs
parents:
diff changeset
    82
	void DoCommitItemL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    83
	// Closes the opened item
hgs
parents:
diff changeset
    84
	void DoCloseItem();
hgs
parents:
diff changeset
    85
	// Moves item in the database
hgs
parents:
diff changeset
    86
	void DoMoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    87
	// Deletes item from the database
hgs
parents:
diff changeset
    88
	void DoDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    89
	// Soft deletes item (if supported by plugin adapter), can be equal to DoDeleteItemL
hgs
parents:
diff changeset
    90
	void DoSoftDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
hgs
parents:
diff changeset
    91
	// Deletes all items from the database
hgs
parents:
diff changeset
    92
	void DoDeleteAllItemsL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
	// Returns, whether data store has history info. EFalse means slow sync
hgs
parents:
diff changeset
    95
	TBool DoHasSyncHistory() const;
hgs
parents:
diff changeset
    96
	// Returns ids of items, which are added after previous synchronization
hgs
parents:
diff changeset
    97
	const MSmlDataItemUidSet& DoAddedItems() const;
hgs
parents:
diff changeset
    98
	// Returns ids of items, which are deleted after previous synchronization
hgs
parents:
diff changeset
    99
	const MSmlDataItemUidSet& DoDeletedItems() const;
hgs
parents:
diff changeset
   100
	// Returns ids of items, which are soft-deleted after previous synchronization
hgs
parents:
diff changeset
   101
	const MSmlDataItemUidSet& DoSoftDeletedItems() const;
hgs
parents:
diff changeset
   102
	// Returns ids of items, which are modified after previous synchronization
hgs
parents:
diff changeset
   103
	const MSmlDataItemUidSet& DoModifiedItems() const;
hgs
parents:
diff changeset
   104
	// Returns ids of items, which are moved after previous synchronization
hgs
parents:
diff changeset
   105
	const MSmlDataItemUidSet& DoMovedItems() const;
hgs
parents:
diff changeset
   106
	// Resets change information of items (makes all items new from DS point of view)
hgs
parents:
diff changeset
   107
	void DoResetChangeInfoL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
   108
	// Commits the changes, that are sent into the remote server
hgs
parents:
diff changeset
   109
	void DoCommitChangeInfoL(TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems);
hgs
parents:
diff changeset
   110
	// Commits the changes, that are sent into the remote server
hgs
parents:
diff changeset
   111
	void DoCommitChangeInfoL(TRequestStatus& aStatus);
hgs
parents:
diff changeset
   112
	
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
private:
hgs
parents:
diff changeset
   115
    TContactItemId CreateNewGroupL( const TDesC& aLabel,
hgs
parents:
diff changeset
   116
            const CContactIdArray& aContactArray/*, const TDesC& aRingtone*/ );
hgs
parents:
diff changeset
   117
    
hgs
parents:
diff changeset
   118
    void ReplaceGroupL( TContactItemId aGroupId, const TDesC& aLabel,
hgs
parents:
diff changeset
   119
            const CContactIdArray& aContactArray/*, const TDesC& aRingtone*/ );
hgs
parents:
diff changeset
   120
    
hgs
parents:
diff changeset
   121
    // Create and save snapshot from items on database
hgs
parents:
diff changeset
   122
    void RegisterSnapshotL();
hgs
parents:
diff changeset
   123
    
hgs
parents:
diff changeset
   124
    void AssignString( TDes8& aDestination, const TDesC8& aSource );
hgs
parents:
diff changeset
   125
    
hgs
parents:
diff changeset
   126
    // Updates contacts last modified time.
hgs
parents:
diff changeset
   127
    void UpdateContactLastMod( TContactItemId aContactId, const TTime& aLastModified );
hgs
parents:
diff changeset
   128
    
hgs
parents:
diff changeset
   129
    // Checks does group name already exists.
hgs
parents:
diff changeset
   130
    TBool GroupNameExistsL( const TDesC& aLabel );
hgs
parents:
diff changeset
   131
    
hgs
parents:
diff changeset
   132
    // Data store states
hgs
parents:
diff changeset
   133
    enum TState
hgs
parents:
diff changeset
   134
        {
hgs
parents:
diff changeset
   135
        EClosed = 0,
hgs
parents:
diff changeset
   136
        EOpenAndWaiting,
hgs
parents:
diff changeset
   137
        EContactGrpOpening,
hgs
parents:
diff changeset
   138
        EContactGrpCreating,
hgs
parents:
diff changeset
   139
        EContactGrpUpdating
hgs
parents:
diff changeset
   140
        }; 	
hgs
parents:
diff changeset
   141
        
hgs
parents:
diff changeset
   142
    TState iCurrentState;    
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
    RFs                 iFs;
hgs
parents:
diff changeset
   145
	
hgs
parents:
diff changeset
   146
	CContactDatabase*   iContactsDb;
hgs
parents:
diff changeset
   147
	
hgs
parents:
diff changeset
   148
	TRequestStatus*     iCallerStatus;
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
    /**
hgs
parents:
diff changeset
   151
	* Key that is used in sorting snapshot.
hgs
parents:
diff changeset
   152
	*/
hgs
parents:
diff changeset
   153
    const TKeyArrayFix  iKey;
hgs
parents:
diff changeset
   154
    
hgs
parents:
diff changeset
   155
    /**
hgs
parents:
diff changeset
   156
	* Change finder, used to determine db modifications.
hgs
parents:
diff changeset
   157
	*/
hgs
parents:
diff changeset
   158
    CChangeFinder*      iChangeFinder;
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
    /**
hgs
parents:
diff changeset
   161
	* VCard item converter
hgs
parents:
diff changeset
   162
	*/
hgs
parents:
diff changeset
   163
    CContactsGrpConverter* iConverter;
hgs
parents:
diff changeset
   164
	
hgs
parents:
diff changeset
   165
    TSmlDbItemUid* iCurrentItem;
hgs
parents:
diff changeset
   166
    TSmlDbItemUid  iItemToBeReplaced;
hgs
parents:
diff changeset
   167
	
hgs
parents:
diff changeset
   168
	CBufFlat*  iDataBuffer;
hgs
parents:
diff changeset
   169
	TInt       iWriterPosition;
hgs
parents:
diff changeset
   170
	TInt       iReaderPosition;
hgs
parents:
diff changeset
   171
	
hgs
parents:
diff changeset
   172
	TBool      iHasHistory;
hgs
parents:
diff changeset
   173
	
hgs
parents:
diff changeset
   174
	CNSmlDataItemUidSet* iNewItems;
hgs
parents:
diff changeset
   175
    CNSmlDataItemUidSet* iDeletedItems;
hgs
parents:
diff changeset
   176
    CNSmlDataItemUidSet* iUpdatedItems;
hgs
parents:
diff changeset
   177
    CNSmlDataItemUidSet* iEmptyList;
hgs
parents:
diff changeset
   178
	};
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
#endif // __CONTACTSGRPDATASTORE_H__