diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdfavoritemanagerimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdfavoritemanagerimpl.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,322 @@ +/* +* 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 CNcdFavoriteManager class +* +*/ + + +#ifndef NCDFAVORITEMANAGER_H +#define NCDFAVORITEMANAGER_H + +#include "catalogscommunicable.h" +#include "ncdstoragedataitem.h" + +class CNcdNodeManager; +class CNcdNodeIdentifier; +class RWriteStream; +class MNcdStorageManager; +class CNcdNodeDisclaimer; +class CNcdGeneralManager; + +/** + * CNcdFavoriteManager manages the list of favorite nodes. + */ +class CNcdFavoriteManager : public CCatalogsCommunicable +{ +public: + /** + * NewL + * + */ + static CNcdFavoriteManager* NewL( CNcdGeneralManager& aGeneralManager ); + + + /** + * NewLC + * + */ + static CNcdFavoriteManager* NewLC( CNcdGeneralManager& aGeneralManager ); + + /** + * Destructor + */ + virtual ~CNcdFavoriteManager(); + + /** + * Returns the number of clients whose favorite identifiers has been loaded to + * ram cache. + */ + TInt ClientCount() const; + + /** + * Returns a client uid by the given index. + * + * @param aClientIndex The index. + * @return The client uid. + * @leave KErrNotFound If the given index is out of range. + */ + TUid ClientL( TInt aClientIndex ) const; + + /** + * Returns the client's favorite nodes. + * + * @param aClientUid The client uid. + * @return The favorite nodes. + * @leave System wide error code. + */ + const RPointerArray& FavoriteNodesL( + const TUid& aClientUid ); + + /** + * Tells whether the given node is a favorite node. + * + * @param aNodeIdentifier The node identifier. + * @return ETrue if the node is a favorite node, otherwise false. + */ + TBool IsFavorite( const CNcdNodeIdentifier& aNodeIdentifier ) const; + + + /** + * Removes client's favorites from database + */ + void RemoveFavoritesL( const TUid& aClientUid ); + +public: // from CCatalogsCommunicable + + /** + * @see CCatalogsCommunicable::ReceiveMessage + */ + virtual void ReceiveMessage( + MCatalogsBaseMessage* aMessage, + TInt aFunctionNumber ); + + /** + * @see CCatalogsCommunicable::CounterPartLost + */ + virtual void CounterPartLost( + const MCatalogsSession& aSession ); + +protected: + + class CNcdClientFavorites; + class CNcdTemporaryFavorites; + + CNcdFavoriteManager( CNcdGeneralManager& aGeneralManager ); + + void ConstructL(); + + /** + * Called from ReceiveMessage if favorite is added. + */ + void AddFavoriteRequestL( MCatalogsBaseMessage& aMessage ); + + /** + * Called from ReceiveMessage if favorite is removed. + */ + void RemoveFavoriteRequestL( MCatalogsBaseMessage& aMessage ); + + /** + * Called from ReceiveMessage if disclaimer need to be added or removed. + */ + void SetDisclaimerRequestL( MCatalogsBaseMessage& aMessage ); + + /** + * Called from ReceiveMessage if disclaimer handle is requested. + */ + void DisclaimerHandleRequestL( MCatalogsBaseMessage& aMessage ); + + /** + * Called from ReceiveMessage if proxy object wants to release the server side + * object. + */ + void ReleaseRequest( MCatalogsBaseMessage& aMessage ); + + /** + * Called from ReceiveMessage if proxy object wants to internalize its state + * from server side. + */ + void InternalizeRequestL( MCatalogsBaseMessage& aMessage ); + + /** + * Adds the given favorite node. + * + * @param aNodeIdentifier The identifier. + */ + void AddFavoriteL( CNcdNodeIdentifier* aNodeIdentifier ); + + /** + * Adds the given favorite node temporarily. The node is removed from + * favorites when the given session is closed. + * + * If the node is favorite node already, nothing is done. + * + * @param aNodeIdentifier The identifier. + * @param aSession The session. + */ + void AddTemporaryFavoriteL( + CNcdNodeIdentifier* aNodeIdentifier, + MCatalogsSession& aSession ); + + /** + * Removes the given favorite node. + * + * @param aNodeIdentifier The identifier. + */ + void RemoveFavoriteL( CNcdNodeIdentifier* aNodeIdentifier ); + + /** + * Removes the temporary favorites of the given session. + * + * @param aSession The session. + */ + void RemoveTemporaryFavoritesL( MCatalogsSession& aSession ); + + /** + * Externalizes the favorite identifiers of the given client to the given stream. + * + * @param aStream The stream. + * @param aClientUid The client uid. + */ + void ExternalizeIdentifiersL( RWriteStream& aStream, const TUid& aClientUid ); + + /** + * Finds the favorite node set of the given client. + * + * @param aClientUid The client uid. + * @return Index of the set in iFavorites member variable or KErrNone if the + * client does not exist. + */ + TInt FindClientFavorites( const TUid& aClientUid ) const; + + /** + * Returns the temporary favorites of the given session. The given + * object is created if there is no existing CNcdTemporaryFavorites object + * for the given session. + * + * @param aSession The session. + * @return The temporary favorites of the session. + */ + CNcdTemporaryFavorites& TemporaryFavoritesL( MCatalogsSession& aSession ); + + /** + * Tells whether the given session has temporary favorites. + * + * @param aSession The session. + * @return ETrue if there are temporary favorites, otherwise false. + */ + TBool HasTemporaryFavorites( MCatalogsSession& aSession ) const; + + /** + * Loads the client's favorite identifiers from database. If the database + * does not contain any favorite identifiers, creates an empty identifier set + * for the client to iFavorites member variable. + * + * @param aClientUid The client uid. + */ + void DbLoadFavoritesL( const TUid& aClientUid ); + + /** + * Saves the given client's favorite identifiers to the database. + * + * @param aFavorites The favorites to save. + */ + void DbSaveFavoritesL( CNcdClientFavorites& aFavorites ); + + +private: + + /** + * CNcdClientFavorites object encapsulates the favorite identifiers of one + * client. + */ + class CNcdClientFavorites : public CBase, + public MNcdStorageDataItem + { + public: + static CNcdClientFavorites* NewLC( const TUid& aClientUid ); + ~CNcdClientFavorites(); + + TUid ClientUid() const; + void AddFavoriteL( CNcdNodeIdentifier* aNodeIdentifier ); + void RemoveFavorite( const CNcdNodeIdentifier& aNodeIdentifier ); + void RemoveFavorites(); + void SetDisclaimerL( + const CNcdNodeIdentifier& aNodeIdentifier, + const CNcdNodeDisclaimer& aDisclaimer ); + void RemoveDisclaimer( const CNcdNodeIdentifier& aNodeIdentifier ); + CNcdNodeDisclaimer* Disclaimer( + const CNcdNodeIdentifier& aNodeIdentifier ) const; + + TBool HasFavorite( const CNcdNodeIdentifier& aNodeIdentifier ) const; + + const RPointerArray& Identifiers() const; + void ExternalizeIdentifiersL( RWriteStream& aStream ) const; + + public: // from MNcdStorageDataItem + + /* + * @see MNcdStorageDataItem::ExternalizeL + */ + virtual void ExternalizeL( RWriteStream& aStream ); + + /* + * @see MNcdStorageDataItem::InternalizeL + */ + virtual void InternalizeL( RReadStream& aStream ); + + protected: + CNcdClientFavorites( const TUid& aClientUid ); + void CloseDisclaimers(); + + private: + + // Node identifiers. + RPointerArray iIdentifiers; + // Node disclaimers. A disclaimer at index 'i' is disclaimer of the node at + // the same index. + RPointerArray iDisclaimers; + + // Client uid. + TUid iClientUid; + }; + + + class CNcdTemporaryFavorites : public CBase + { + public: // public functions + CNcdTemporaryFavorites( MCatalogsSession& aSession ); + ~CNcdTemporaryFavorites(); + + + public: // member variables + MCatalogsSession& iSession; + RPointerArray iFavoriteIdentifiers; + }; + + CNcdGeneralManager& iGeneralManager; + + // Node manager. + CNcdNodeManager& iNodeManager; + + // Favorite nodes of all the clients. + RPointerArray iFavorites; + + // Temp favorite mappings. + RPointerArray iTempFavorites; + + // Storage manager. + MNcdStorageManager& iStorageManager; +}; + +#endif