diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdnodedbmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdnodedbmanager.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,306 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Contains CNcdNodeDbManager class +* +*/ + + +#ifndef NCD_NODE_DB_MANAGER_H +#define NCD_NODE_DB_MANAGER_H + + +#include +#include +#include +#include + +#include "ncdstoragedataitem.h" +#include "ncdnodeclassids.h" +#include "ncddatabaseitems.h" + +class MNcdStorageManager; +class MNcdStorage; +class CNcdNodeIdentifier; + +/** + * CNodeDbManager provides functions manage + * node db information. Functions to read, write and remove + * data are provided. + */ +class CNcdNodeDbManager : public CBase + { + +public: + + /** + * NewL + * + * @return CNcdNodeDbManager* Pointer to the created object + * of this class. + */ + static CNcdNodeDbManager* NewL( + MNcdStorageManager& aStorageManager ); + + /** + * NewLC + * + * @return CNcdNodeDbManager* Pointer to the created object + * of this class. + */ + static CNcdNodeDbManager* NewLC( + MNcdStorageManager& aStorageManager ); + + + /** + * Destructor + * + * Deletes the nodes from the node cache. + */ + virtual ~CNcdNodeDbManager(); + + +public: // Node db manager configuration functions + + /** + * Adds the given identifier to the list of nodes that are never removed from DB. + * + * @param aIdentifier The node identifier. + */ + void AddDoNotRemoveNodeIdentifierL( const CNcdNodeIdentifier& aNodeIdentifier ); + + /** + * Adds the given identifiers to the list of nodes that are never removed from DB. + * + * @param aIdentifiers The node identifiers. + */ + void AddDoNotRemoveNodeIdentifiersL( + const RPointerArray& aNodeIdentifiers ); + + /** + * Removes the given identifier from the list of nodes that are never removed from DB. + * + * @param aIdentifier The node identifier. + */ + void RemoveDoNotRemoveNodeIdentifier( const CNcdNodeIdentifier& aNodeIdentifier ); + +public: // Database info functions + + /** + * @param aClientUid The uid of the client whose storage is + * examined. + * @param aSkipNamespaces The sizes of these namespaces are ignored when + * the total size is calculated. Ownership is not transferred. + * @return TInt the size in bytes of the whole storage + * of the specified client. + */ + TInt StorageSizeL( const TUid& aClientUid, + const MDesCArray& aSkipNamespaces ); + + +public: // Database read functions + + /** + * Reads binary data from the database + * @param aIdentifier Contains id information that is + * used to read right info from db. + * @param aClassType Type of the data. + * @return HBufC8* Data from db. + */ + HBufC8* ReadDataFromDatabaseL( + const CNcdNodeIdentifier& aIdentifier, + const NcdNodeClassIds::TNcdNodeClassType aClassType ); + + /** + * @see CNcdNodeDbManager::ReadDataFromDatabaseL + */ + HBufC8* ReadDataFromDatabaseLC( + const CNcdNodeIdentifier& aIdentifier, + const NcdNodeClassIds::TNcdNodeClassType aClassType ); + + + /** + * This function is used to start the database action + * that will get the data for some object from the + * storage database. + * After the data has been found from the storage, + * InternalizeL function of the given data item is called. + * + * @param aIdentifier Contains id information that is + * used to read right info from db. + * @param aDataItem InternalizeL of this object is called + * when the data is read from db. + * @param aClassType Type of the data. + */ + void StartStorageLoadActionL( + const CNcdNodeIdentifier& aIdentifier, + MNcdStorageDataItem& aDataItem, + const NcdNodeClassIds::TNcdNodeClassType aClassType ); + + + /** + * This function will return the array about the identifiers found from + * the database. Parameters provide ways to limit what identifiers + * should be included in return array. + * + * @note Identifiers are included into the array only once. So, if + * multiple db items with different types are having same identifier, + * the identifier will be added to target array only once. + * + * @param RPointerArray Array that will contain + * identifiers of the database items. Ownership of the identifiers + * are transmitted for the user of the array. + * @param aClientUid Identifies the client whose data is searched. + * @param aSkipNamespaces This array contains the namespaces whose + * data should not be returned. + * @param aAcceptClassType This array contains the class types that + * are accepted for the items. The items of the class types + * that are not included in this array will not be included into + * the return array. + */ + void GetAllClientItemIdentifiersL( + RPointerArray& aItemIdentifiers, + const TUid& aClientUid, + const MDesCArray& aSkipNamespaces, + const RArray& aAcceptClassTypes ); + + +public: // Database write functions + + /** + * This function is used to start the database action + * that will save the data of the data item into the db. + * The ExternalizeL function of the data item is called. + * So, the item may insert its data into the given stream. + * + * @param aIdentifier Contains id information that is + * used to read right info from db. + * @param aDataItem ExternalizeL of this object is called + * when the data is written into db. + * @param aClassType Type of the data. + */ + void SaveDataIntoDatabaseL( + const CNcdNodeIdentifier& aIdentifier, + MNcdStorageDataItem& aDataItem, + const NcdNodeClassIds::TNcdNodeClassType aClassType ); + + +public: // Database remove functions + + /** + * Removes certain data row from the db table according + * to the given values that are used as the key values. + * + * @param aIdentifier The identifier that contains key values. + * @param aClassType The class type tells the general type of the data + * that should be removed. + */ + void RemoveDataFromDatabaseL( + const CNcdNodeIdentifier& aIdentifier, + const NcdNodeClassIds::TNcdNodeClassType aClassType ); + + /** + * Removes certain data rows from the db table according + * to the given values that are used as the key values. + * This works like the function above, but commits the + * removal operation rarely. This should speed + * up the removal process. + * + * @see CNcdNodeDbManager::RemoveDataFromDatabaseL + * + * @param aIdentifiers The identifier array that contains key values. + * Ownership is not tranferred. + * @param aClassTypes The class type array tells the general types of the data + * that should be removed. Ownership is not transferred. + */ + void RemoveDataFromDatabaseL( + const RPointerArray& aIdentifiers, + const RArray& aClassTypes, + TBool aCompact = ETrue ); + + + /** + * Removes everything except identifiers that are in the do not remove list + * + * @param aNodeIdentifier Used to get the correct storage + */ + void RemoveDataFromDatabaseL( + const CNcdNodeIdentifier& aNodeIdentifier, + const RArray& aDoNotRemoveItems ); + + + /** + * Clears client's storage + * + * @note All of client's files and databases are + * deleted except the ones that are having namespaces + * defined in the skip array. + * + * @param aClientUid Client's uid identifier + * @param aSkipNamespaces Array contains the descriptors of + * namespaces that should not be cleared. Ownership is not + * transferred. + */ + void ClearClientL( const TUid& aClientUid, + const MDesCArray& aSkipNamespaces ); + + +protected: + + /** + * Constructor + */ + CNcdNodeDbManager( MNcdStorageManager& aStorageManager ); + + /** + * ConstructL + */ + virtual void ConstructL(); + + + /** + * Returns an old storage or creates a new one if necessary. + * Storage will contain the information of the certain client + * that has been identifier by its UID. + * + * @param aIdentifier Identifies what storage is wanted. + * @return MNcdStorage& Storage matching the identifier info. + * @exception KErrArgument if aIdentifier contains empty fields. + * In other error situations, system wide error code. + */ + MNcdStorage& StorageL( const CNcdNodeIdentifier& aIdentifier ) const; + + + TInt RemoveDataFromNamespaceL( + const RPointerArray& aDoNotRemoveIds, + TInt aIndex, + TInt aEnd ); + + +private: + + // Prevent if not implemented + CNcdNodeDbManager( const CNcdNodeDbManager& aObject ); + CNcdNodeDbManager& operator =( const CNcdNodeDbManager& aObject ); + + +private: // data + + // Storage manager is used to load and to save data from + // databases. + MNcdStorageManager& iStorageManager; + + }; + + +#endif // NCD_NODE_DB_MANAGER_H