devicediagnosticsfw/diagresultsdb/server/inc/diagresultsdbstore.h
branchRCL_3
changeset 61 b183ec05bd8c
parent 59 13d7c31c74e0
child 62 19bba8228ff0
--- a/devicediagnosticsfw/diagresultsdb/server/inc/diagresultsdbstore.h	Thu Aug 19 10:44:50 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,453 +0,0 @@
-/*
-* Copyright (c) 2007-2007 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:  Permanent File Store for diagnostics test records.
-*  libraries   : 
-*
-*/
-
-
-#ifndef DIAGRESULTSDBSTORE_H
-#define DIAGRESULTSDBSTORE_H
-
-//System includes
-#include <s32file.h> //CPermanentFileStore
-#include <f32file.h> //Rfs, RFile
-#include <e32base.h>
-
-class CDiagResultsDatabaseItem;
-class CDiagResultsDbTestRecord;
-class CDiagResultsDbTestRecordHandle;
-class TDiagResultsDatabaseTestRecordInfo;
-class CDiagResultsDbRecordEngineParam;
-
-/**
-* An interface that must be implemented in order to call
-* ExistingRecordsAsyncL that is an asynchronous method.
-*
-* @since S60 v5.0
-**/
-class MRecordLoadingObserver
-    {
-public:
-    /**
-    * Returns an array of test records. Contains all test records from a 
-    * single database file.
-    *
-    * @param aError Indicates if there were any errors.
-    * @param aArray An array of test records. Ownership is transferred.
-    **/
-    virtual void ExistingRecordsL( TInt aError, 
-                       RPointerArray<CDiagResultsDbTestRecord>* aArray ) = 0;
-   
-    };
-    
-/**
-* An interface that must be implemented in order to call CompleteRecordAsyncL.
-*
-* @since S60 v5.0
-**/    
-class MRecordCompletionObserver
-    {
-public:
-
-    /**
-    * This is called when test record is completed.
-    *
-    * @param aError Symbian error code or KErrNone.
-    **/
-    virtual void CompletedRecordL( TInt aError ) = 0;
-    };    
-
-/**
-* Permanent file store class that manipulates results database file.
-* Database files are saved under server's private directory. 
-* For example epoc32\WINSCW\C\private\10282cd9\ in WINSCW.
-* Provides functions to load, save, compact and cleanup data.
-*
-* Files have format [UID].dat e.g. [21234563].dat
-*
-* Stream Ids of the test record handle are stored into the root stream.
-* Handles contain the stream ids to the test results.
-*
-* Implementation uses 3 kinds of streams:
-* 1) root stream 
-* 2) Test record handle stream
-* 3) Test result stream
-* 4) Last results buffer (buffer for overflowing test results)
-*
-* In order to retrieve a test result, we must first know which record
-* is needed and then ask from the handle where test result is. 
-* Of course we can browse all test records, because root stream
-* contains stream ids into test record handles.
-*
-* @since S60 v5.0
-**/
-class CDiagResultsDbStore : public CActive
-	{
-public:
-
-    /**
-    * Destructor
-    **/
-	~CDiagResultsDbStore();
-	
-	/**
-	* NewL.
-	*
-	* @param aUid UID of the database file. This class manipulates only one 
-	*             database file at a time. If multiple database files needs
-	*             to be open, use another instance.
-	* @return New object.
-	**/
-	static CDiagResultsDbStore* NewL( TUid aUid );
-    static CDiagResultsDbStore* NewLC( TUid aUid );
-	
-	/**
-	* Create and return a new record. Ownership is transferred.
-	*
-	* @return a new test record.
-	**/
-    CDiagResultsDbTestRecordHandle* CreateNewRecordL( 
-                             CDiagResultsDbRecordEngineParam* aEngineParam );
-    
-    /**
-    * Write test record into the database.
-    *
-    * @param aHandle The test record to be written into the database.
-    * @return KErrNone or symbian error code.                        
-    **/
-    TInt CompleteRecord( CDiagResultsDbTestRecordHandle& aHandle );
-               
-    /**
-    * Write one test item into the DB.
-    *
-    * @param aCommit Indicates should we commit the store.
-    * @param aHandle Handle that is updated to contain the item.
-    * @param aTestItem An item to be added.
-    *
-    * @return Symbian error code or KErrNone.
-    **/                         
-    TInt CompleteTestResult( TBool aCommit, 
-                             CDiagResultsDbTestRecordHandle& aHandle, 
-                             CDiagResultsDatabaseItem& aTestItem );                         
-                                                                                                           
-    /**
-    * Search database for a test record handle.
-    * Handle does not contain test results directly. It only contains
-    * stream ids to the test results and general record info.
-    *
-    * @param aUid test record is searched based on the uid.
-    * @return The found test record or NULL.
-    **/
-    CDiagResultsDbTestRecordHandle* OpenExistingHandleL( TUid aUid );
-    
-    
-    /**
-    * Search database for a test record.
-    *
-    * @param aUid test record is searched based on the uid.
-    * @param aReadOnly indicates should we allow writing.
-    * @return The found test record or NULL.
-    */
-    CDiagResultsDbTestRecord* OpenExistingRecordL( TUid aUid, 
-                                                   TBool aReadOnly );
-    
-    /**
-    * Opens a single database item. 
-    * @param aId Stream id that represents the item.
-    *
-    * @return The found item or NULL.
-    **/
-    CDiagResultsDatabaseItem* OpenExistingTestResultL( TStreamId aId );
-       
-    /**
-    * Returns all record infos. Client is responsible for deleting the array.
-    *
-    * @return Record info array.
-    **/
-    RArray<TDiagResultsDatabaseTestRecordInfo>* ExistingRecordInfosL();
-    
-    /**
-    * Retrieve all test records from the database asynchronously.
-    *
-    * @param aObserver Observer is notified after test records have 
-    *                  been loaded.
-    **/
-    void ExistingRecordsAsyncL( MRecordLoadingObserver& aObserver );
-    
-
-        
-    /**
-    * Open last results buffer. It contains the test results that would have
-    * been otherwise deleted. These are needed when all last results are
-    * retrieved. Use with CleanUpDatabaseUseLastResultsBufferL.
-    *
-    * @return Test record. 
-    **/
-    CDiagResultsDbTestRecord* OpenExistingLastResultsBufferL(); 
-    
-    /**
-    * Compacts database to have only necessary information. This should be 
-    * done as often as necessary after writing. Compacting should not be
-    * done after reading!
-    * However note that this operation could take a long time. 
-    **/
-    void CompactDatabase();
-    
-	/**
-	 * Cleanup database. Used deletion algorithm is taken from the
-	 * Central Repository.
-	 *
-	 * @param aCommit ETrue commits the store.
-	 **/ 	   
-	void CleanUpDatabaseL( TBool aCommit );
-    
-    /**
-    * Read available test record handle uids.
-    *
-    * @param aUids Contains available test record handle uids.
-    **/
-    void RecordUidsL( RArray<TUid>& aUids );
-    
-protected: //From CActive
-    
-    /**
-    * Called from CActive::Cancel.
-    **/
-    virtual void DoCancel();
-
-    /**
-    * Asynchronous service function.
-    **/
-    virtual void RunL();
-    
-    /**
-    * Called if error happens in RunL.
-    **/
-    virtual TInt RunError(TInt aError);
-    
-private:     
-    
-	/**
-	 * Cleanup database to have only certain amount of test records 
-	 * inside per each database file.
-	 *
-	 * @param aCommit ETrue commits the store.
-	 **/ 	   
-	void CleanUpDatabaseNoLastResultsL( TBool aCommit );
-       
- 	/**
- 	 * Cleanup database and move some of the test results into the
- 	 * last results buffer. This function guarantees that the DB
- 	 * keeps last results. CleanUpDatabase does not do that.    
- 	 *
- 	 * @param aCommit ETrue commits the store. 
- 	 **/ 
- 	void CleanUpDatabaseUseLastResultsBufferL( TBool aCommit );
-
-    /**
-    * Read all stream ids from the root stream.
-    * 
-    * @param aIds StreamId array.
-    **/    
-    void ReadRootStreamL( RArray<TStreamId>& aIds );
-        
-    /**
-    * Create empty root stream.
-    *
-    * @param aStore Root stream is created into this store.
-    **/
-    void CreateEmptyRootStreamL( CPermanentFileStore& aStore );
-    
-    /**
-    * Replace root stream with an array.
-    *
-    * @param aArray Array that replaces any existing root stream.
-    **/
-    void ReplaceRootStreamL( RArray<TStreamId>& aArray );
-    
-    /**
-    * Write test record into the database file.
-    *
-    * @param aCompletedRecord is the record closed/completed or not.
-    * @param aCommit Commit the store or not.
-    * @param aTestRecord The test record to be written into the file.
-    **/
-    void DoCompleteRecordL( CDiagResultsDbTestRecordHandle& aHandle );
-                        
-    /**
-    * Complete test result i.e. write it into the store.
-    * @param aHandle Handle to be written.
-    * @param aTestItem Contains test results that are written into the store.
-    **/                            
-    void DoCompleteTestResultL( TBool aCommit, 
-                                CDiagResultsDbTestRecordHandle& aHandle, 
-                                CDiagResultsDatabaseItem& aTestItem );                            
-                                   
-    
-    /**
-    * Constructor.
-    * 
-    * @param aDbUid Database file uid.
-    **/
-    CDiagResultsDbStore( TUid aDbUid );
-    
-    /**
-    * ConstructL.
-    **/
-    void ConstructL();
-    
-    /**
-    * Complete own request is needed in some cases because this class uses 
-    * CActive to partition tasks into smaller pieces. This function completes
-    * TRequestStatus so that the RunL is called.
-    **/
-    void CompleteOwnRequest();
-    
-    //State of this class. These are used only in asynchronous methods.
-    enum EState
-        {
-        ENotRunning,
-        EGetRootStream,
-        EGetRecord,
-        ERecordsReady,
-        };
-    
-    enum EDeletionAlgorithm
-        {
-        EMaxRecordCountAlgorithm,
-        ELastResultsAlgorithm,
-        };
-     
-     /**
-     * Write handle into the store. Handle knows where test results are.
-     * @param aHandle The handle that is written into the store.
-     **/   
-     void WriteHandleIntoDbL( CDiagResultsDbTestRecordHandle& aHandle );
-     
-     
-     /**
-     * Append one ID into the root stream.
-     * @param aId ID to be added.
-     **/
-     void AppendRootStreamL( TStreamId& aId );
-     
-          
-     /**
-     * Deletes the oldest handle from the store.
-     *
-     * @param aIds Root stream.
-     **/
-     void DeleteOldestHandleL( RArray<TStreamId>& aIds );
-             
-     /**
-     * Delete handle and its test results.
-     *
-     * @param aIndex Index of the handle in the root stream.
-     * @param aIds Root stream.
-     * 
-     **/             
-     void DeleteHandleL( TInt aIndex, RArray<TStreamId>& aIds );
-     
-     /**
-     * Create last results buffer. It can be used to store test results
-     * that would be deleted otherwise. 
-     **/
-     void CreateLastResultsBufferStreamL();
-     
-     /**
-     * Open test record handle and its test results.
-     *
-     * @param aId Handle root stream ID.
-     * @param aRecord Returned test record.
-     * @param aHandle Returned test record handle.
-     **/
-     void OpenExistingRecordAndHandleL( TStreamId aId, 
-                                        CDiagResultsDbTestRecord*& aRecord,
-                                        CDiagResultsDbTestRecordHandle*& aHandle );
-
-    /**
-    * Check last results buffer and add test results into it if needed.
-    *
-    * @param aIds Root stream.
-    **/                                        
-     ///@@@KSR: changes for Codescanner error val = High 
-     //void CheckOverflowingTestResults( RArray<TStreamId>& aIds );
-     void CheckOverflowingTestResultsL( RArray<TStreamId>& aIds );
-
-    /**
-     * Return maximum file size defined in the Central Repository.
-     * This can be used to prevent a DB file from using too much disk space.
-     * 
-     * @return Maximum file size in bytes.
-     **/
-    TInt GetMaximumFileSizeL();
-    
-    /**
-     * Return the deletion algorithm defined in the central repository.
-     * 
-     * @return The type of the deletion algorithm.
-     **/
-    TInt GetDeletionAlgorithmL();
-    
-    /**
-     * Get maximum file size from the central repository and check the file size.
-     * 
-     * @param aRfs Opened file server session.
-     * @param aFileName File name of the DB file.
-     * @param aFileSize Size of the DB file in bytes.
-     **/
-    void CheckMaximumFileSizeLimitL( RFs& aRfs, 
-			  						 const TDesC& aFileName,
-			  						 TInt aFileSize );
-
-private: // Data
-
-    // Store that is owned by this class. Performs many file manipulation operations.
-	CPermanentFileStore* iStore;  
-    
-    // File DB uid. [UID].dat
-    TUid iDbUid;
-
-    // File server session
-    RFs iRfs;
-    
-    // The database file.
-    RFile iFile;
-    
-    // Loading observer to be notified async.
-    MRecordLoadingObserver* iLoadingObserver;
-    
-    // Completion observer (notified async).
-    MRecordCompletionObserver* iCompletionObserver;
-    
-    // Pointer to test record arrays. Used in async methods.
-    RPointerArray<CDiagResultsDbTestRecord>* iRecordArray;
-    
-    // Contains available record ids. Used in async methods.
-    RArray<TStreamId>* iRecordIds;
-    
-    // Used in async methods to remember what record was loaded.
-    TInt iRecordNumber;
-    
-    // Contains the test record to be completed (Used only in async methods).
-    CDiagResultsDbTestRecord* iTestRecord;
-    
-    // State of the asynchronous operation.
-    EState iState;
-    
-    EDeletionAlgorithm iDeletionAlgorithm;
-	};
-
-#endif // DIAGRESULTSDBSTORE_H