contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdatamanager.h
changeset 0 79c6a41cd166
child 14 15e4dd19031c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdatamanager.h	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2008 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:  Used by sessions for handling data related requests
+ *
+*/
+
+
+#ifndef C_CPDATA_MANAGER_H
+#define C_CPDATA_MANAGER_H
+
+#include <e32base.h>
+#include "cpstorage.h"
+
+// FORWARD DECLARATIONS
+#ifdef CONTENT_PUBLISHER_DEBUG
+class CCPDebug;
+#endif
+class CLiwMap;
+class CCPLiwMap;
+class CCpStorage;
+class CCPServerSession;
+class CCPNotificationHandler;
+class TLiwVariant;
+
+/**
+ *  Content publisher data manager.
+ *
+ *  Used to add, modify and remove data and actions.
+ *  @since S60 v5.0
+ */
+class CCPDataManager : public CBase, MCPChangeNotifier
+    {
+public:
+    // exported
+
+    /**
+     * C++ destructor
+     */
+    ~CCPDataManager();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CCPDataManager* NewL( TBool aTBool = EFalse );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CCPDataManager* NewLC( TBool aTBool = EFalse );
+
+    /**
+     * Add a new data to database
+     *
+     * @param aData Data to be added.
+     * @return Id of a newly created data item
+     */
+    TUint AddDataL( CCPLiwMap& aMap );
+
+    /**
+     * Data is not added to database. Only notification is send to observers.
+     *
+     * @param aData Data to be added.
+     * @return Id of a newly created data item
+     */
+    void AddNonPersistentDataL( const CCPLiwMap* aMap );
+
+    /**
+     * Fetches data from database
+     * @param aInParamList filter and sorting criteria
+     * @param aOutParamList results
+     */
+    void GetListL( const CCPLiwMap& aMa, CLiwGenericParamList& aOutParamList );
+    /**
+     * Fetches action from database
+     * @param aInParamList filter and sorting criteria
+     * @param aOutParamList results
+     * @param aNotificationList change info list (for notifications)
+     * @return KErrNotFound if data was not found
+     */
+    TInt GetActionL( const CCPLiwMap& aMa,
+        CLiwGenericParamList& aOutParamList, 
+        CLiwDefaultList* aNotificationList = NULL );
+
+    /**
+     * Fetches all activated publishers 
+     * @param aInParamList filter and sorting criteria
+     * @param aOutParamList results
+     */
+    void GetActivePublishersL( CLiwGenericParamList* aResultList );
+
+    /**
+     * Removes data from database
+     * @param aInParamList filter criteria
+     */
+    void RemoveDataL( const CCPLiwMap& aMa );
+
+    /**
+     * Adds observer to database
+     * @param new observer
+     */
+    void AddObserverL( CCPNotificationHandler* aNotificationHandler );
+
+    /**
+     * Removes observer from database
+     * @param aNotificationHandler observer to remove
+     */
+    void RemoveObserver( CCPNotificationHandler* aNotificationHandler );
+
+    // from MCPChangeNotifier
+    /**
+     * @param Map containing change information
+     * @return 
+     */
+    void HandleChangeL( CLiwDefaultList* aListOfMaps );
+
+    /**
+     * Close database 
+     * @return 
+     */
+    void CloseDatabase();
+    /**
+     * Open database 
+     * @return 
+     */
+    void OpenDatabaseL();
+
+private:
+    // methods
+
+    /**
+     * Standard C++ constructor.
+     */
+    CCPDataManager();
+
+    /**
+     * Standard 2nd phase constructor.
+     */
+    void ConstructL( TBool aTBool );
+
+    /**
+     * Fetches action bound to provided trigger.
+     *
+     * @param aOutParamList of all actions
+     * @param aMap for found action
+     * @param aTrigger
+     */
+    void ExtractTriggerL( CLiwGenericParamList& aOutParamList,
+        const CLiwDefaultMap* aMap, const TDesC8& aTrigger );
+    /**
+     * Sends notifications to observers stored in iNotificationsArray
+     *
+     * @param List of change information
+     * @param index od data item
+     */
+    void SendNotificationL( CLiwDefaultList* aListOfMaps, TInt aIndex );
+
+    /**
+     * Exctracts action from input parameters
+     *
+     * @param aParam for data
+     * @param aAction for action
+     */
+    void ExtractActionL( const TLiwGenericParam* aParam, RBuf8& aAction );
+    
+    /**
+     * Fills aOutParamList with parameters for action.
+     *
+     * @param aOutParamList parsed list of items
+     * @param aParamList list of items from data base
+     * @param aActionTrigger action trigger
+     */
+    void FillActionParamListL(
+    		CLiwGenericParamList & aOutParamList, 
+    		const TLiwGenericParam* aParam,
+			RBuf8 & aActionTrigger);
+
+     /**
+     * Creates map for GetList request - publisher, content_type
+     * and content_id are copied from aMap to returned map
+     * @param aMap - input map
+     * @return input map for GetList request
+     */
+    CCPLiwMap* CreateMapForGetlistLC( const CCPLiwMap& aMap );
+
+
+     /**
+     * Gets Flag for specified item from DB and returns activate
+     * info
+     * @param aMap - input map
+     * @return activate flag
+     */
+    TBool GetActivateInfoL( const CCPLiwMap* aMap );
+    
+    /**
+    * Builds change info list based on query result to database
+    * @param aMap - map containing parameters needed to build change info list
+    * @param aParam - param from getlist result 
+    * @param aChangeInfoList - output list containing change info list sent
+    * as notification
+    */
+    void BuildChangeInfoL( 
+    		const CCPLiwMap* aMap, 
+    		const TLiwGenericParam* aParam,	
+    		CLiwDefaultList* aChangeInfoList );
+    /**
+    * Builds change info list when query to database returned nothing
+    * @param aMap - map containing parameters needed to build change info list
+    * @param aChangeInfoList - output list containing change info list sent
+    * as notification
+    */
+    void BuildDefaultChangeInfoL( 
+    		const CCPLiwMap* aMap, 
+    		CLiwDefaultList* aChangeInfoList );
+    /**
+    * Builds change info list when query to database returned nothing
+    * @param aMap - map containing parameters needed to build change info list
+    * @param aChangeInfoList - output list containing change info list sent
+    * as notification
+    */
+    void BuildChangeInfoForAddL(
+            const CCPLiwMap* aMap,
+            CLiwDefaultList* aChangeInfoList );
+
+    /**
+    * Copies variant from in to out map if entry with provided key exists
+    * @param aKey a key
+    * @param aInMap input map
+    * @param aOutMap output map
+    */    
+    void CopyVariantL(const TDesC8& aKey, const CLiwMap* aInMap, 
+    		CLiwDefaultMap* aOutMap );
+
+    /**
+    * Copies variant from in map for key KActionTrigger to out map with key KActionTrigger16 
+    * and formated type(from TDesC8 to TDesC) 
+    * @param aInMap input map
+    * @param aOutMap output map
+    */    
+    void CopyActionTrigger16L( const CLiwMap* aInMap, 
+    		CLiwDefaultMap* aOutMap );
+
+private:
+    // data
+
+    /*
+     * Storage database
+     * Own.
+     */
+    CCpStorage* iStorage;
+
+    /*
+     * Array of registered notification handlers.
+     * Own.
+     */
+    RPointerArray<CCPNotificationHandler> iNotificationsArray;
+
+#ifdef CONTENT_PUBLISHER_DEBUG
+    CCPDebug* iDebug;
+#endif
+    };
+
+#endif // C_CPDATA_MANAGER_H
+// end of file