omads/omadsextensions/adapters/bookmark/inc/bookmarkdatastore.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 20:08:41 +0200
changeset 3 c2b8a5ae6ed5
parent 0 dab8a81a92de
child 8 ad0f53516d84
permissions -rw-r--r--
Revision: 201001 Kit: 201003

/*
* Copyright (c) 2005-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:  Part of SyncML Data Synchronization Plug In Adapter
*
*/


#ifndef __BOOKMARKDATASTORE_H__
#define __BOOKMARKDATASTORE_H__

#include <SmlDataProvider.h>
#include <favouritesdb.h>
#include <nsmlchangefinder.h>

#include <FeedsServerClient.h>
#include <feedsserverfolderitem.h>

class CNSmlDataItemUidSet;
class CFavouritesItem;
class CBookmarkConversionUtil;
class RFeedsServer;
class CChangeFinder;
class TSnapshotItem;

class CBookmarkDataStore : public CSmlDataStore,
                           public MFolderItemObserver,
                           public MFeedsServerObserver
	{
private:

	CBookmarkDataStore();
	~CBookmarkDataStore();	
	
public:

	static CBookmarkDataStore* NewL();
	static CBookmarkDataStore* NewLC();
	void ConstructL();	
	
	// Transactions (optional)
	void DoBeginTransactionL();
	void DoCommitTransactionL(TRequestStatus& aStatus);
	void DoRevertTransaction(TRequestStatus& aStatus);

	// Batching (optional)
	void DoBeginBatchL();
	void DoCommitBatchL(RArray<TInt>& aResultArray, TRequestStatus& aStatus);
	void DoCancelBatch();

	// Opens data store asynchronously	
	void DoOpenL(const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus);
	// Cancels current asynchronous request
	void DoCancelRequest();
	// Returns the name of open database, empty if OpenL hasn't been called
	const TDesC& DoStoreName() const;
	// Sets remote server data format
	void DoSetRemoteStoreFormatL(const CSmlDataStoreFormat& aServerDataStoreFormat);
	// Sets the remote server maximum object size
	void DoSetRemoteMaxObjectSize(TInt aServerMaxObjectSize);
	// Returns maximum object size, reported by remote server
	TInt DoMaxObjectSize() const;

	// Opens item for reading
	void DoOpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize,
	    TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus);
	// Initializes new item to data store
	void DoCreateItemL(TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent,
	    const TDesC8& aMimeType, const TDesC8& aMimeVer, TRequestStatus& aStatus);
	// Initializes replace of item in data store
	void DoReplaceItemL(TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent,
	    TBool aFieldChange, TRequestStatus& aStatus);
	// Reads data from opened item
	void DoReadItemL(TDes8& aBuffer);
	// Writes data to created or replaced item
	void DoWriteItemL(const TDesC8& aData);
	// Commits the created or replaced item to database
	void DoCommitItemL(TRequestStatus& aStatus);
	// Closes the opened item
	void DoCloseItem();
	// Moves item in the database
	void DoMoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent, TRequestStatus& aStatus);
	// Deletes item from the database
	void DoDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
	// Soft deletes item (if supported by plugin adapter), can be equal to DoDeleteItemL
	void DoSoftDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus);
	// Deletes all items from the database
	void DoDeleteAllItemsL(TRequestStatus& aStatus);

	// Returns, whether data store has history info. EFalse means slow sync
	TBool DoHasSyncHistory() const;
	// Returns ids of items, which are added after previous synchronization
	const MSmlDataItemUidSet& DoAddedItems() const;
	// Returns ids of items, which are deleted after previous synchronization
	const MSmlDataItemUidSet& DoDeletedItems() const;
	// Returns ids of items, which are soft-deleted after previous synchronization
	const MSmlDataItemUidSet& DoSoftDeletedItems() const;
	// Returns ids of items, which are modified after previous synchronization
	const MSmlDataItemUidSet& DoModifiedItems() const;
	// Returns ids of items, which are moved after previous synchronization
	const MSmlDataItemUidSet& DoMovedItems() const;
	// Resets change information of items (makes all items new from DS point of view)
	void DoResetChangeInfoL(TRequestStatus& aStatus);
	// Commits the changes, that are sent into the remote server
	void DoCommitChangeInfoL(TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems);
	// Commits the changes, that are sent into the remote server
	void DoCommitChangeInfoL(TRequestStatus& aStatus);
	
private: // From MFolderItemObserver
	void FolderItemRequestCompleted(TInt aStatus, CRequestHandler::TRequestHandlerType);
	void FolderItemChanged() {};
private: // From MFeedsServerObserver
    void UpdateAllProgress(TInt, TInt ) {};
    void SettingsChanged( TInt ) {};
private:  // From MConnectionObserver
    virtual void NetworkConnectionNeededL(TInt* /*aConnectionPtr*/, TInt& /*aSockSvrHandle*/,
        TBool& /*aNewConn*/, TApBearerType& /*aBearerType*/){};
private:
    void DoFolderItemRequestCompletedL( TInt aStatus );
    void CreateRssItemL( TInt aRssParentUid, const TDesC& aName, const TDesC& aUrl, TBool aIsFolder );
    void ReplaceRssItemL( TInt aRssItemUid, const TDesC& aNewName, const TDesC& aNewUrl );
    void RssItemCreatedL();
    void RssItemReplacedL( TBool& aMoveNeeded );
    void RegisterSnapshotL();
    void RegisterToSnapshotL( CArrayFixSeg<TSnapshotItem>* aSnapshot, TInt aFolderUid );
    void RegisterRssFeedsToSnapshotL( CArrayFixSeg<TSnapshotItem>* aSnapshot,
        const CFolderItem& folder );
    void AssignString( TDes8& aDestination, const TDesC8& aSource );

	// Data store states
    enum TState
        {
        EClosed = 0,
        EOpenAndWaiting,
        EBookmarkOpen,
        EBookmarkCreating,
        EBookmarkUpdating,
        EBookmarkUpdatedAndMoving,
        EBookmarkMoving,
        EBookmarkDeleting,
        EBookmarkDeletingAll
        }; 	
        
    TState iCurrentState;    

    RFs                 iRfs;
	RFavouritesSession 	iSession;
	RFavouritesDb 		iDb;
	TBool				iDataBaseOpened;
    
	RFeedsServer        iFeedsServer;
	RFolderItem	    	iRootFolder;
	
	TRequestStatus*  iCallerStatus;

    /**
	* Key that is used in sorting snapshot.
	*/
    const TKeyArrayFix iKey;
    
    /**
	* Change finder, used to determine db modifications.
	*/
    CChangeFinder* iChangeFinder;

    /**
	* Bookmark item converter, used to convert xml and vBookmark data.
	*/
	CBookmarkConversionUtil* iConverter;
	
	TInt* iCurrentItem;
	TInt iReplaceItem;
	TSnapshotItem* iMovedItem;
	
	CBufFlat* iDataBuffer;
	TInt iWriterPosition;
	TInt iReaderPosition;
	
	TBool iHasHistory;
	
	CNSmlDataItemUidSet* iNewItems;
    CNSmlDataItemUidSet* iDeletedItems;
    CNSmlDataItemUidSet* iSoftDeletedItems;
    CNSmlDataItemUidSet* iUpdatedItems;
    CNSmlDataItemUidSet* iMovedItems;
    
    CFavouritesItem::TType iMimeType;
    TInt	    iParentFolder;
    TFileName   iNewItemName;
    
    CFavouritesItem* iItemToBeReplaced;
		
	};

#endif