homesync/contentmanager/cmserver/cmfillmanager/inc/cmfmfillrulefilleddatamngr.h
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homesync/contentmanager/cmserver/cmfillmanager/inc/cmfmfillrulefilleddatamngr.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,648 @@
+/*
+* 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:  Fill rule and filled data managing
+*  Version     : %version: tr1ido#8 % << Don't touch!
+*
+*/
+
+
+
+#ifndef __CMFMFILLLIST_H
+#define __CMFMFILLLIST_H
+
+#include <e32base.h>
+#include <f32file.h>
+#include "cmcommontypes.h"
+#include "cmcommon.h"
+#include "cmfmcommon.h"
+
+// Forward declarations
+class MCmSqlMain;
+class CCmDmMain;
+class CCmFillRule;
+class CCmFillListItem;
+class CCmFillRuleContainer;
+class CCmSqlPropertyItem;
+class CCmSqlPropertyContainer;
+class CCmFmAo;
+class MCmFmFillRuleObserver;
+class CCmSqlPropertyCollector;
+             
+ /**
+  *  Class processes selected fill rules. Uses Database Manager and 
+  *  Sqlite wrapper API to retrieve wanted metadata. Fill service is 
+  *  started using processed metadata items. 
+  *
+  *  @lib cmfillmanager.lib
+  *
+  *  @since S60 5.1
+  */
+NONSHARABLE_CLASS( CCmFmFillRuleFilledDataMngr ): public CActive
+    {
+
+private: // enumerations
+
+    // Metadata processing states
+    enum TCmFmMetadaProcessingState
+        {
+        ECmFmIdle            = 0,
+        ECmFmLoadingMetadata,
+        ECmFmLoadingPropertys,
+        ECmFmDeletingMetadata,
+        ECmFmLoadingProfileIds
+        };         
+            
+public:
+       
+    /**
+     * Two-phased constructor.
+     *
+     * @since S60 5.1
+     * @param aObserver, observer for metadata processing
+     * @param aDBMngr, database manager
+     * @param aItems, items pointers array
+     * @return  pointer to CCmFmFillRuleFilledDataMngr class
+     */
+    static CCmFmFillRuleFilledDataMngr* NewL(
+        MCmFmFillRuleObserver* aObserver, CCmDmMain* aDBMngr,
+        RPointerArray<CCmFillListItem>& aItems );
+    
+    /**
+     * Two-phased constructor.
+     *
+     * @since S60 5.1
+     * @param aObserver, observer for metadata processing
+     * @param aDBMngr, database manager
+     * @param aItems, items pointers array
+     * @return  pointer to CCmFmFillRuleFilledDataMngr class
+     */
+    static CCmFmFillRuleFilledDataMngr* NewLC(
+        MCmFmFillRuleObserver* aObserver, CCmDmMain* aDBMngr,
+        RPointerArray<CCmFillListItem>& aItems );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CCmFmFillRuleFilledDataMngr();
+
+public: 
+
+    /**
+     * Notified when asyncronous operation is completed
+     *
+     * @since S60 5.1
+     * @param aStatus, completion status
+     * @return None
+     */ 
+    void OperationCompletedL( TInt aStatus );
+
+   /**
+     * Loads profile ids from database
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */ 
+    void LoadProfileIdsL();
+        
+    /**
+     * Starting fill rule pre-processing
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void PreprocessListsL();
+    
+    /**
+     * Starting fill rule processing
+     *
+     * @since S60 5.1
+     * @param aFillListName, name of the list
+     * @return None
+     */    
+    void PreProcessListL( const TDesC8& aFillListName );
+    
+    /**
+     * Provides metadata column item list
+     *
+     * @since S60 5.1
+     * @param aType, metadata field identifier
+     * @param aMedia, media type identifier
+     * @param aPropertys, property container reference
+     * @return  None
+     */
+    void GetColItemsL( TCmMetadataField aType, 
+        TCmMediaType aMedia, CCmSqlPropertyContainer& aPropertys );   
+
+    /**
+     * Provides metadata items list
+     *
+     * @since S60 5.1
+     * @param aPropertys, property collector reference
+     * @return  None
+     */    
+    void GetMetadataItemsL( CCmSqlPropertyCollector& aPropertys );
+    
+    /**
+     * Update fill list item priorities and reference values
+     *
+     * @since S60 5.1
+     * @param None
+     * @return  None
+     */
+    void UpdatePriorities();
+
+    /**
+     * Do update fill list item reference ids
+     *
+     * @since S60 5.1
+     * @param None
+     * @return  None
+     */
+    void DoUpdateReferenceIdsL();
+
+    /**
+     * Delete metadata from unselected servers
+     *
+     * @since S60 5.1
+     * @param None
+     * @return  None
+     */ 
+    void DeleteMetadataL();
+                
+    /**
+     * Sets memory card quota to wrapper
+     *
+     * @since S60 5.1
+     * @param aQuota, fill quota
+     * @return  None
+     */    
+    void SetMemoryCardQuota( TInt64 aQuota );
+    
+    /**
+     * Canceling operations
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void CancelOperation();
+    
+    /**
+     * Updating transfer history
+     *
+     * @since S60 5.1
+     * @param aInterval, used time
+     * @param aDataAmount, amount of transferred data
+     * @param aServerId, server from where data transferred
+     * @return  None
+     */
+    void UpdateTransferHistoryData( TInt64 aInterval,
+                                    TInt64 aDataAmount,
+                                    TUint8 aServerId );
+
+    /**
+     * Loads wanted items from the db
+     *
+     * @since S60 5.1
+     * @param None
+     * @return  None
+     */                            
+    void GetFillItemsL();
+
+    /**
+     * Loads to be deleted items from the db
+     *
+     * @since S60 5.1
+     * @param aArray, array of to be deleted items
+     * @return  None
+     */        
+    void GetToBeDeletedL( RPointerArray<CCmFillListItem>& aArray );
+
+    /**
+     * Updates listed items into db
+     *
+     * @since S60 5.1
+     * @param aCancel, if this opration is called by cancel harvest
+     * @return  None
+     */       
+    void UpdateFillItems( TBool aCancel = EFalse );
+
+    /**
+     * Updates listed items into db
+     *
+     * @since S60 5.1     
+     * @param aArray, array of to be deleted items
+     * @return  None
+     */        
+    void UpdateToBeDeleted( RPointerArray<CCmFillListItem>& aArray );
+
+    /**
+     * Loads right Uuid 
+     *
+     * @since S60 5.1
+     * @param aUuid, contains uuid on return
+     * @param aId, id of the wanted uuid
+     * @return error code
+     */        
+    TInt GetUuidL( HBufC8*& aUuid, TUint8 aId );
+    
+   /**
+     * Resets allocated data
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */     
+    void ResetData();
+        
+   /**
+     * Calculating transfer history time
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */        
+    void CalculateAvgTransferTimeL();
+    
+   /**
+     * Publishes transfer history time estimate
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void SendAvgTransferTime();
+    
+    /**
+     * Returns media servers db id
+     *
+     * @since S60 5.1
+     * @param aUuid, media server's uuids
+     * @return database id
+     */     
+    TInt64 GetMediaServerIdL( const TDesC8& aUuid );            
+                                    
+private:
+
+    /**
+     * Do update fill list item priorities
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void DoUpdatePrioritiesL();
+        
+    /**
+     * Loading all selected fill rules
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */        
+    void LoadSelectedFillRulesL();
+
+    /**
+     * Loading all fill rules
+     *
+     * @since S60 5.1
+     * @param None
+     * @return Fill rule container
+     */ 
+    CCmFillRuleContainer* LoadAllFillRulesL();
+    
+    /**
+     * Loads defined fill list
+     *
+     * @since S60 5.1
+     * @param aFillListName, name of the list
+     * @return None
+     */        
+    void LoadRuleL( const TDesC8& aFillListName );
+    
+    /**
+     * Updates fill list item priorities up to date
+     *
+     * @since S60 5.1
+     * @param aContainer, container containing all rules
+     * @return None
+     */     
+    TInt UpdateListItemPriorities( CCmFillRuleContainer* aContainer );
+            
+    /**
+     * Initializing metadata find
+     *
+     * @since S60 5.1
+     * @param aFillRule, fill list
+     * @return None
+     */                        
+    void LoadMetadataL( CCmFillRule* aFillRule );
+    
+    /**
+     * Processing possible fill file list duplicates 
+     * and adds reference values if needed
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */        
+    void ProcessReferenceValuesL();
+
+    /**
+     * Processes possible fill file list duplicates 
+     * and adds reference values if needed
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */        
+    void DoProcessReferenceValuesL();
+    
+    /**
+     * Processing possible fill file list duplicates,
+     * removes duplicates appeared in new sql query
+     * If same item is twice in item list, 
+     * new item is removed
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void ProcessDuplicates();
+    
+    /**
+     * Selects fill list files which are with defined rule id
+     *
+     * @since S60 5.1
+     * @param aList, list to be filled
+     * @param aId, fill list id
+     * @return None
+     */        
+    void SelectFillListFiles( RArray<TInt>& aList, TUint8 aId );
+    
+    /**
+     * Updates status values of the fill list files
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void ProcessFileStatusValuesL();
+    
+     /**
+     * Updatas the fill file's ids.
+     *
+     * @since S60 5.1
+     * @param aDelIds,array to store files's id 
+     * @param aIndex, Index of fill items
+     * @param aRealCount, count of fill items
+     * @param aRealSize, size of fill items
+     * @return None
+     */ 
+     void ProcessFileSizeAndCount( RArray<TInt>& aDelIds, TInt aIndex, 
+                            TInt64& aRealCount, TInt64& aRealSize );
+
+    /**
+     * Loads all fill file items
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void LoadAllFillItemsL();
+    
+    /**
+     * Delete duplicated fill items and adjust array
+     *
+     * @since S60 5.1
+     * @param aIndex, Index array of fill items
+     */     
+	void DoDeleteProcess( TInt aIndex );
+
+   /**
+     * Defines unsupported dlna profile ids
+     *
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */ 
+    void DefineAndSetDlnaProfileIdFiltersL();   
+
+   /**
+     * Completes request
+     *
+     * @since S60 5.1
+     * @param aStatus, defined id for the completing 
+     * @return None
+     */     
+    void CompleteRequest( TCmFmFillRuleProcessing aStatus );
+ 
+    /**
+     * Starts asyncronous operartion observer
+     * i.e. creates active object
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void StartObserverL();
+
+    /**
+     * Creates metadata cache wrapper
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */    
+    void CreateWrapperL();
+    
+    /**
+     * Deletes metadata cache wrapper
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */ 
+    void DeleteWrapper();     
+
+    /**
+     * Processes fill lists
+     * @since S60 5.1
+     * @param None
+     * @return None
+     */ 
+    void CheckFillListsL();
+    
+    /**
+     * Deletes hash codes
+     * @since S60 5.2
+     * @param None
+     * @return None
+     */ 
+    void DeleteHashCodesL();
+    
+protected: 
+
+// Functions from base class CActive
+
+    /**
+     * From CActive
+     * See base class definition
+     */
+    void RunL();
+
+    /**
+     * From CActive
+     * See base class definition
+     */
+    void DoCancel();
+
+    /**
+     * From CActive
+     * See base class definition
+     */
+    virtual TInt RunError(TInt aError);
+        
+private:
+
+    /**
+     * Performs the first phase of two phase construction.
+     *
+     * @since S60 5.1
+     * @param aObserver, Fill list observer
+     * @param aDBMngr, database manager
+     * @param aItems, array of list items
+     */
+    CCmFmFillRuleFilledDataMngr( MCmFmFillRuleObserver* aObserver, 
+        CCmDmMain* aDBMngr, RPointerArray<CCmFillListItem>& aItems );
+
+    /**
+     * Performs the second phase construction.
+     */
+    void ConstructL();
+    
+
+private:
+
+    /**
+     * Metadata cache wrapper
+     */
+    MCmSqlMain* iWrapper;                           // owned
+    
+    /**
+     * Active object in use of sql wrapper
+     */
+    CCmFmAo* iAo;                                   // owned
+    
+    /**
+     * Pointer to observer class
+     */
+    MCmFmFillRuleObserver* iObserver;               // not owned
+    
+    /**
+     * Pointer to database manager
+     */
+    CCmDmMain* iDBManager;                          // not owned
+    
+    /**
+     * All fill list items
+     */
+    RPointerArray<CCmFillListItem>& iItems;         // not owned
+
+    /**
+     * fill list items for updating to DB
+     */
+    RPointerArray<CCmFillListItem> iUpdateItems;    //owned
+    
+    /**
+     * Property values loaded from the cache
+     */
+    RPointerArray<CCmSqlPropertyItem> iPropertys;   // owned
+    
+    /**
+     * Property container referencing got from client
+     */
+    CCmSqlPropertyContainer* iPropertyContainer;    // not owned
+
+    /**
+     * Property container referencing got from client
+     */
+    CCmSqlPropertyCollector* iPropertyCollector;    // not owned           
+        
+    /**
+     * Rule array
+     */
+    RPointerArray<CCmFillRule> iRuleArray;
+    
+    /**
+     * Item ids on the list
+     */    
+    RArray<TInt> iFileIds;
+    
+    /**
+     * State of the metadata processing
+     */ 
+    TCmFmMetadaProcessingState iProcessingState;
+    
+    /**
+     * Count of new metadata items
+     */ 
+    TInt iNewItemCount;
+    
+    /**
+     * Count of all metadata items
+     */
+    TInt iAllItemCount;
+    
+    /**
+     * Start time of list processing
+     */
+    TTime iQueryStart;
+    /**
+     * End time of list processing
+     */    
+    TTime iQueryFinished;
+    
+    /**
+     * Total transfer time estimate
+     */
+    TCmProgressInfo iTransferInfo;
+    
+    /**
+     * Container for fill lists
+     */
+    CCmFillRuleContainer* iContainer;               // owned
+
+    /**
+     * Server list whose metadata will be deleted
+     */    
+    RArray<TInt> iMetadataServersToBeDeleted;
+    
+    /**
+     * Profile filters
+     */    
+    RArray<TInt64> iFilteredProfiles;
+    
+    /**
+     * File Server session
+     */
+    RFs iFs;
+    
+    /**
+     * Old item ids on the list
+     */    
+    RArray<TInt> iOldIds;
+   
+    };
+
+#endif //  __CMFMFILLLIST_H