contentpublishingsrv/contentpublishingutils/contentpublishingmap/inc/cpliwmap.h
changeset 0 79c6a41cd166
child 12 502e5d91ad42
equal deleted inserted replaced
-1:000000000000 0:79c6a41cd166
       
     1 /*
       
     2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   CCPLiwMap - class used in Content Publisher
       
    15  *
       
    16 */
       
    17 
       
    18 #ifndef C_CPLIWIDSMAP_H
       
    19 #define C_CPLIWIDSMAP_H
       
    20 
       
    21 #include <liwvariant.h>
       
    22 #include <sqldb.h>
       
    23 #include "cpglobals.h"
       
    24 
       
    25 class RDesReadStream;
       
    26 class CCPSecurityPolicy;
       
    27 
       
    28 // CLASS DECLARATION
       
    29 /**
       
    30  *  Base Map class for Publisher Registry and Content
       
    31  *
       
    32  *  @lib cputils.dll
       
    33  *  @since S60 v5.0
       
    34  */
       
    35 class CCPLiwMap : public CLiwMap
       
    36     {
       
    37 
       
    38 protected:
       
    39     
       
    40     /**
       
    41      * Enum defining the properties of filter.
       
    42      */
       
    43     enum TCPProperties
       
    44         {
       
    45         EPublisher = 1,
       
    46         EContentType = 2,
       
    47         EContentId = 4,
       
    48         EFlag = 8,
       
    49         };
       
    50 
       
    51     /**
       
    52      * Enum defining the sort ordering.
       
    53      */    
       
    54 	enum TCPSortOrder
       
    55         {
       
    56         ECPRecent = 1, // 0001
       
    57         ECPPublisher  = 2, // 0010
       
    58         ECPContent = 4, // 0100 
       
    59         ECPContentId = 8 // 1000 
       
    60         };   
       
    61 
       
    62 public:
       
    63 
       
    64     friend class CCpStorageEngine;
       
    65 
       
    66     /**
       
    67      * Two-phased constructor.
       
    68      */    
       
    69     IMPORT_C static CCPLiwMap* NewL( RDesReadStream& aStream );
       
    70 
       
    71     /**
       
    72      * Two-phased constructor.
       
    73      */    
       
    74     IMPORT_C static CCPLiwMap* NewL( const CLiwGenericParamList& aList );
       
    75 
       
    76     /**
       
    77      * Used by client to serialize this object 
       
    78      *
       
    79      * @return object serialized to binary
       
    80      */
       
    81     IMPORT_C HBufC8* PackForServerLC() const;
       
    82     
       
    83     /**
       
    84      * Reset map
       
    85      */
       
    86     IMPORT_C void Reset( ) const;
       
    87     
       
    88     /**
       
    89      * Leaves when Add data operation is not possible due
       
    90      * to missing of some parameter
       
    91      */
       
    92     virtual void IsValidForAddL( ) const;
       
    93 
       
    94     /**
       
    95      * Leaves when Execute Action operation is not possible due
       
    96      * to missing of some parameter
       
    97      */
       
    98     IMPORT_C void IsValidForActionL( ) const;
       
    99     
       
   100     /**
       
   101      * Leaves when RequestNotification operation is not possible due
       
   102      * to missing of some parameter
       
   103      */
       
   104     IMPORT_C void IsValidForNotificationL( ) const;
       
   105     
       
   106     /**
       
   107      * Fetches value for property(key) from internal map
       
   108      *
       
   109      * @param aProperty name of the property ( key ) 
       
   110      * @param aResult target descriptor for fetching operation
       
   111      * @return ETrue is property found or EFalse if not
       
   112      */
       
   113     IMPORT_C TBool GetPropertyL( const TDesC8& aProperty,
       
   114              RBuf& aResult ) const;
       
   115 
       
   116     /**
       
   117      * Fetches value for property(key) from internal map
       
   118      *
       
   119      * @param aProperty name of the property ( key ) 
       
   120      * @param aResult target binary for fetching operation
       
   121      * @return ETrue is property found or EFalse if not
       
   122      */
       
   123     IMPORT_C TBool GetPropertyL( const TDesC8& aProperty,
       
   124             RBuf8& aResult ) const;
       
   125     
       
   126     /**
       
   127      * Fetches value for property(key) from internal map
       
   128      *
       
   129      * @param aProperty name of the property ( key ) 
       
   130      * @param aResult target integer for fetching operation
       
   131      * @return ETrue is property found or EFalse if not
       
   132      */
       
   133     IMPORT_C TBool GetProperty( const TDesC8& aProperty,
       
   134     		TInt32& aResult ) const;
       
   135 
       
   136     
       
   137     /**
       
   138      * Setter for security policy 
       
   139      *
       
   140      * @param aPolicy security policy
       
   141      */
       
   142     IMPORT_C void SetSecurityL( const RMessage2& aMessage );
       
   143     
       
   144     /**
       
   145      * Destructor.
       
   146      */
       
   147     virtual ~CCPLiwMap();
       
   148 
       
   149     /**
       
   150      * Check if IDs are valid for Delete operation
       
   151      */
       
   152     virtual void IsValidForDeleteL() const =0;
       
   153     
       
   154     /**
       
   155      * Check if IDs are valid for GetList operation
       
   156      */
       
   157     virtual void IsValidForGetListL() const =0;    
       
   158 
       
   159 	/**
       
   160      *
       
   161      * @return ETrue if supported, EFalse if not
       
   162      */
       
   163 	virtual TBool ActivateActionSupport( ) const = 0;
       
   164 
       
   165 	/**
       
   166      *
       
   167      * @return ETrue if activate flag is set, EFalse if not
       
   168      */
       
   169 	virtual TBool GetActivateInfo( ) const = 0;
       
   170 
       
   171 	
       
   172 public:
       
   173 
       
   174     // from base class CLiwMap
       
   175     /**
       
   176      * Inserts a key-value pair element to the map collection. If
       
   177      * the specified key already exists, it will be removed from
       
   178      * the collection and the new key-value pair will be added to the
       
   179      * map.
       
   180      *  
       
   181      * @param aKey the key to be stored
       
   182      * @param aValue the value associated with the key to be stored
       
   183      */
       
   184     void InsertL( const TDesC8& aKey, const TLiwVariant& aValue );
       
   185 
       
   186     /**
       
   187      * Finds a value stored in the map collection based on the key.
       
   188      *  
       
   189      * @param aKey the key to be searched
       
   190      * @param aFndValue the value associated with the found key
       
   191      * @return false if there is no key stored; true otherwise
       
   192      */
       
   193     TBool FindL( const TDesC8& aKey, TLiwVariant& aValue ) const;
       
   194 
       
   195     /**
       
   196      * Returns the number of key-value pair stored in the map collection.
       
   197      *  
       
   198      * @return the number of key-value pair stored in the map collection
       
   199      */
       
   200     TInt Count() const;
       
   201 
       
   202     /**
       
   203      * Returns the key stored at a specified index. 
       
   204      *  
       
   205      * @param aIndex the index of the key to be found
       
   206      * @param aFndKey the key found at the passed index
       
   207      *
       
   208      * @return true if a key-value entry is found at the passed index;
       
   209      * false otherwise
       
   210      */
       
   211     TBool AtL( TInt aIndex, TDes8& aFndKey ) const;
       
   212 
       
   213     /**
       
   214      * Removes a key from the map collection.
       
   215      *  
       
   216      * @param aKey the key to be removed from the map
       
   217      */
       
   218     void Remove( const TDesC8& aKey );
       
   219 
       
   220     /**
       
   221      * Returns the size of the collection. The size is 
       
   222      * calculated based on the total numer of key-value elements
       
   223      * and the size of each pair in the collection
       
   224      *  
       
   225      * @return the size of the collection
       
   226      */
       
   227     TInt Size() const;
       
   228 
       
   229     /**
       
   230      * The container managed data values can be serialized to an output
       
   231      * stream. 
       
   232      * 
       
   233      * @param aOutputStream the output stream to which the data will be streamed
       
   234      */
       
   235     void ExternalizeL( RWriteStream& aOutputStream ) const;
       
   236 
       
   237 protected:
       
   238 
       
   239     /**
       
   240      * Adds to database current content
       
   241      *  
       
   242      * @param aSqlDb handle to database
       
   243      * @param aNotificationList list of notifications to fill in when 
       
   244      *        something was actually changed in dataabse
       
   245      *
       
   246      * @return id of added entry
       
   247      */
       
   248     virtual TInt32 AddL( RSqlDatabase aSqlDb,
       
   249         CLiwDefaultList* aNotificationList = 0 ) const= 0;
       
   250 
       
   251     /**
       
   252      * Fetches entries from database
       
   253      *  
       
   254      * @param aSqlDb handle to database
       
   255      * @param aList target list for enntries
       
   256      * @param aItemsToDelete ids of entries for removal - 
       
   257      *        they were found to be expired
       
   258      *
       
   259      * @return number of fetched entries
       
   260      */
       
   261     virtual TUint GetListL( RSqlDatabase aSqlDb, CLiwGenericParamList* aList,
       
   262         RArray<TInt32>& aItemsToDelete ) const = 0;
       
   263 
       
   264     /**
       
   265      * Removes entries from database
       
   266      *  
       
   267      * @param aSqlDb handle to database
       
   268      * @param aNotificationList list of notifications to fill in when 
       
   269      *        something was actually changed in dataabse
       
   270      */
       
   271     virtual void RemoveL( RSqlDatabase aSqlDb,
       
   272         CLiwDefaultList* aNotificationList = 0 ) const = 0;
       
   273 
       
   274     /**
       
   275      * Saves results from query to SQLite Server
       
   276      *  
       
   277      * @param aStmt handle to SQL statement
       
   278      * @param aList target list for enntries
       
   279      * @param aItemsToDelete ids of entries for removal - 
       
   280      *        they were found to be expired
       
   281      */
       
   282     virtual void SaveQueryResultsL( RSqlStatement& aStmt,
       
   283         CLiwGenericParamList& aList, RArray<TInt32>& aItemsToDelete ) const = 0;
       
   284 
       
   285     /**
       
   286      * Updates entry in database
       
   287      *  
       
   288      * @param aSqlDb handle to database
       
   289      * @param aNotificationList list of notifications to fill in when 
       
   290      *        something was actually changed in dataabse
       
   291      */
       
   292     virtual void UpdateL( RSqlDatabase aSqlDb, TInt32 aId,
       
   293         CLiwDefaultList* aNotificationList = 0 ) const = 0;
       
   294 
       
   295     /**
       
   296      * Performs actuall add operation
       
   297      *  
       
   298      * @param aSqlDb handle to database
       
   299      * @param aNotificationList list of notifications to fill in when 
       
   300      *        something was actually changed in dataabse
       
   301      *
       
   302      * @return id of added entry
       
   303      */
       
   304     virtual TInt32 AddToDbL( RSqlDatabase aSqlDb,
       
   305         CLiwDefaultList* aNotificationList = 0 ) const = 0;
       
   306 
       
   307     /**
       
   308      * Checks if operation value is proper
       
   309      *  
       
   310      * @param aValue contains operation value
       
   311      */    
       
   312     void IsProperOperationL( const TLiwVariant& aValue ) const;
       
   313     
       
   314     
       
   315     /**
       
   316      * Appends GetList filter as strings to SQL query according to aFilter
       
   317      *  
       
   318      * @param aQuery SQL query
       
   319      * @param aFilter as enum
       
   320      *
       
   321      */
       
   322     void AppendGetListFilterL( RBuf& aQuery, TUint& aFilter ) const;
       
   323     
       
   324     /**
       
   325      * Appends Remove filter as strings to SQL query according to aFilter
       
   326      *  
       
   327      * @param aQuery SQL query
       
   328      * @param aFilter as enum
       
   329      *
       
   330      */
       
   331     void AppendRemoveFilterL( RBuf& aQuery, TUint& aFilter ) const;
       
   332     
       
   333     
       
   334     /**
       
   335      * Appends filter as strings to SQL query according to aFilter
       
   336      *  
       
   337      * @param aQuery SQL query
       
   338      * @param aFilter as enum
       
   339      *
       
   340      */
       
   341     virtual void AppendFilterL( RBuf& aQuery, TUint& aFilter ) const;
       
   342 
       
   343     /**
       
   344      * Prepares SQL query for Add operation
       
   345      *
       
   346      * @param aSqlDb handle to database  
       
   347      * @param aStmt handle to SQL statement
       
   348      * @param aQuery SQL query
       
   349      *
       
   350      */
       
   351     virtual void PrepareStmtforAddL( RSqlDatabase aSqlDb,
       
   352         RSqlStatement& aStmt, const TDesC& aQuery ) const;
       
   353     /**
       
   354      * Appends sorting criteria as strings to SQL query according to aSort
       
   355      *
       
   356      * @param aQuery SQL query
       
   357      * @param aSort sort filter as TInt
       
   358      *
       
   359      */
       
   360     virtual void AppendSortL( RBuf& aQuery, 
       
   361         const TCPSortOrder& aSort ) const = 0;
       
   362 
       
   363     /**
       
   364       * Fills change info map with proper values
       
   365       *aStmt
       
   366       * @param aStmt handle to SQL statement
       
   367       * @param aChangeInfoMap map that will be filed
       
   368       *
       
   369       */
       
   370     virtual void FillChangeInfoMapL( RSqlStatement& aStmt, 
       
   371 			CLiwDefaultMap* aMap ) const;
       
   372 
       
   373 protected:
       
   374 
       
   375     /**
       
   376      * Sets all parameters according to provided list
       
   377      * @param aItemMap map with parameters
       
   378      */
       
   379     void SetL( const CLiwGenericParamList& aInParamList );
       
   380 
       
   381     /**
       
   382      * Check Get properties
       
   383      *
       
   384      * @return logical sum of TCPProperties of the object
       
   385      */
       
   386     TUint GetFilterL() const;
       
   387 
       
   388     /**
       
   389      * Check and return sort order
       
   390      *
       
   391      * @return Sort Criteria
       
   392      */
       
   393     TCPSortOrder GetSortL() const;
       
   394 
       
   395     /**
       
   396      * Check if Publisher name is set
       
   397      *
       
   398      * @return ETrue if Publisher name was set, EFalse if not
       
   399      */
       
   400     TBool IsPublisherNameL() const;
       
   401 
       
   402     /**
       
   403      * Check if ContentType is set
       
   404      *
       
   405      * @return ETrue if ContentType was set, EFalse if not
       
   406      */
       
   407     TBool IsContentTypeL() const;
       
   408 
       
   409     /**
       
   410      * Check if ContentId is set
       
   411      *
       
   412      * @return ETrue if ContentId was set, EFalse if not
       
   413      */
       
   414     TBool IsContentIdL() const;
       
   415 
       
   416     /**
       
   417      * Check if ActionTrigger is set
       
   418      *
       
   419      * @return ETrue if ActionTrigger was set, EFalse if not
       
   420      */
       
   421     TBool IsTriggerL( ) const;
       
   422 
       
   423     /**
       
   424      * Check if Flag is present
       
   425      *
       
   426      * @return ETrue if ContentId was set, EFalse if not
       
   427      */
       
   428     TBool IsFlag( ) const;
       
   429     	
       
   430     /**
       
   431      * Checks if Id property is present in internal map
       
   432      *
       
   433      */
       
   434     TBool IsId() const;
       
   435 
       
   436     /**
       
   437      * Checks if property(key) is present in internal map 
       
   438      *
       
   439      */
       
   440     TBool PropertyExists( const TDesC8& aProperty ) const;
       
   441 
       
   442     
       
   443     /**
       
   444      * Fetches entries from database
       
   445      *  
       
   446      * @param aSqlDb handle to database
       
   447      * @param aQuery aQuery SQL query
       
   448      * @param aList target list for enntries
       
   449      * @param aItemsToDelete ids of entries for removal - 
       
   450      *        they were found to be expired
       
   451      *
       
   452      * @return number of fetched entries
       
   453      */
       
   454     TUint GetListL( RSqlDatabase aSqlDb, const TDesC& aQuery,
       
   455         CLiwGenericParamList* aList, RArray<TInt32>& aItemsToDelete ) const;
       
   456 
       
   457     /**
       
   458      * Removes entries from database
       
   459      *  
       
   460      * @param aSqlDb handle to database
       
   461      * @param aQuery SQL query
       
   462      * 
       
   463      */
       
   464     void RemoveL( RSqlDatabase aSqlDb, const TDesC& aQuery ) const;
       
   465 
       
   466     /**
       
   467      * Fetches Ids (Publisher, ContentType, ContentId) from database
       
   468      * 
       
   469      * @param aId id entry in database
       
   470      * @param aQuery SQL query
       
   471      * @param aMap map to insert Ids
       
   472      * @param aSqlDb handle to database  
       
   473      * 
       
   474      */
       
   475     void FetchIdsL( TInt32 aId, const TDesC& aQuery, CLiwDefaultMap* aMap,
       
   476         RSqlDatabase aSqlDb ) const;
       
   477 
       
   478     /**
       
   479      * Fetches Id from database
       
   480      * 
       
   481      * @param aSqlDb handle to database
       
   482      * @param aQuery SQL query
       
   483      * @param aId id entry from database
       
   484      * 
       
   485      */
       
   486     void FetchIdL( RSqlDatabase aSqlDb,
       
   487         const TDesC& aQuery, TInt32& aId ) const;
       
   488 
       
   489     /**
       
   490      * Gets Ids (Id, Publisher, ContentType, ContentId) 
       
   491      *      of removed entries from database
       
   492      *  
       
   493      * @param aSqlDb handle to database
       
   494      * @param aQuery SQL query
       
   495      * @param aList List with ids
       
   496      * 
       
   497      */
       
   498     void GetIdsOfRemovedEntriesL( RSqlDatabase aSqlDb, const TDesC& aQuery,
       
   499         CLiwDefaultList* aList ) const;
       
   500 
       
   501     /**
       
   502      * Saves Ids (Id, Publisher, ContentType, ContentId) from database
       
   503      * 
       
   504      * @param aSqlDb handle to database
       
   505      * @param aList List with ids
       
   506      * 
       
   507      */
       
   508     void SaveQueryResultsIdsL( RSqlStatement& aStmt,
       
   509         CLiwDefaultList* aList ) const;    
       
   510 
       
   511     /**
       
   512      * Contructs SQL query to select entry
       
   513      * @param aQuery SQL query
       
   514      * 
       
   515      */
       
   516     void ConstructSelectIdL( RBuf& aQuery ) const;
       
   517 
       
   518     /**
       
   519      * Contructs SQL query to select entries for GetList
       
   520      * @param aQuery SQL query
       
   521      * 
       
   522      */
       
   523     void ConstructGetListSelectL( RBuf& aQuery, TBool aGet = ETrue ) const;
       
   524 
       
   525     /**
       
   526      * Contructs SQL query to select entries for Remove
       
   527      * @param aQuery SQL query
       
   528      * 
       
   529      */
       
   530     void ConstructRemoveSelectL( RBuf& aQuery, TBool aGet = ETrue ) const;
       
   531     
       
   532     /**
       
   533      * Binds value to query
       
   534      * @param aQuery SQL query
       
   535      * @param aSqlDb handle to database
       
   536      * 
       
   537      */
       
   538     void BindValueL( const RBuf& aQuery, RSqlStatement& aStmt ) const;
       
   539 
       
   540     /**
       
   541      * Checks if GetList for all items should be done
       
   542      * @param aFilter flag describing which ids are set
       
   543      * @return ETrue if getlist for all items shold be done, EFalse if not
       
   544      */
       
   545     TBool IsGetListAllL( TUint aFilter ) const;
       
   546     
       
   547     /**
       
   548      * Removes attributes with "All" value from map
       
   549      * @param aFilter filter bit will be reset if any attribute == "all"
       
   550      */    
       
   551     void RemoveAllAttributeL( TUint& aFilter ) const;
       
   552     
       
   553     /**
       
   554      * Leaves if publisher, content type od content_id is not descriptor type. 
       
   555      */    
       
   556     void CheckIdentifiersL() const;
       
   557     
       
   558     /**
       
   559      * Leaves if aParameterIndex is negative-error value 
       
   560      * or in case of binding error. 
       
   561      */    
       
   562     void BindTextL(RSqlStatement& aStmt, TInt aParameterIndex,
       
   563         const TDesC& aParameterText) const;
       
   564     
       
   565     /**
       
   566      * Leaves if aParameterIndex is negative-error value 
       
   567      * or in case of binding error. 
       
   568      */ 
       
   569     void BindBinaryL(RSqlStatement& aStmt, TInt aParameterIndex,
       
   570         const TDesC8& aParameterText) const;
       
   571     
       
   572     /**
       
   573      * Leaves if aParameterIndex is negative-error value 
       
   574      * or in case of binding error. 
       
   575      */ 
       
   576     void BindInt64L(RSqlStatement& aStmt, TInt aParameterIndex,
       
   577         TInt64 aParameterValue) const;
       
   578 
       
   579     /**
       
   580      * Leaves if aParameterIndex is negative-error value 
       
   581      * or in case of binding error. 
       
   582      */ 
       
   583     void BindIntL(RSqlStatement& aStmt, TInt aParameterIndex,
       
   584         TInt aParameterValue) const;
       
   585     
       
   586     /**
       
   587      * Leaves if column index return value is negative.
       
   588      * @return result of RSqlStatement::ColumnIndex
       
   589      */ 
       
   590     TInt ColumnIndexL( RSqlStatement& aStmt, const TDesC& aColumnName )	const;
       
   591 protected:
       
   592 
       
   593     /**
       
   594      * C++ default constructor.
       
   595      */     
       
   596     CCPLiwMap();
       
   597 
       
   598     /**
       
   599      * Perform the second phase construction of a CCPLiwMap object.
       
   600      */       
       
   601     void ConstructL();
       
   602 
       
   603 protected:
       
   604     // data
       
   605 
       
   606     /*
       
   607      * The underlying generic parameter list
       
   608      * Own.
       
   609      */
       
   610     CLiwGenericParamList* iMap;
       
   611     
       
   612     /*
       
   613      * Class used for security 
       
   614      *Own.
       
   615      */
       
   616     const CCPSecurityPolicy* iPolicy;
       
   617 
       
   618     };
       
   619 
       
   620 #endif // C_CPLIWIDSMAP_H