devicediagnosticsfw/diagframework/inc/diagpluginexecplanimpl.h
branchRCL_3
changeset 61 b183ec05bd8c
parent 59 13d7c31c74e0
child 62 19bba8228ff0
--- a/devicediagnosticsfw/diagframework/inc/diagpluginexecplanimpl.h	Thu Aug 19 10:44:50 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,463 +0,0 @@
-/*
-* Copyright (c) 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:  Class declaration for CDiagPluginExecPlanImpl
-*
-*/
-
-
-#ifndef DIAGPLUGINEXECPLANIMPL_H
-#define DIAGPLUGINEXECPLANIMPL_H
-
-// SYSTEM INCLUDE FILES
-#include <e32base.h>                    // CBase
-#include <DiagPluginExecPlan.h>         // MDiagPluginExecPlan
-#include <DiagResultsDatabaseItem.h>    // CDiagResultsDatabaseItem::TResult
-
-// USER INCLUDE FILES
-#include "diagexecplanentryimpl.h"      // TDiagPluginExecPlanImpl::TType
-
-// FORWARD DECLARATION
-class MDiagPlugin;
-class MDiagSuitePlugin;
-class MDiagEngineCommon;
-class CDiagPluginPool;
-class RDiagResultsDatabaseRecord;
-class TDiagEngineConfig;
-struct TTransitionStackEntry;
-
-template <class T, TBool StackOwnsEntry>
-class CStack;
-
-/**
-*  Diagnostics Plugin Execution Plan
-*
-*  This class provides interface to access execution plan.
-*  It also provides interface to modify execution plan.
-*  A cursor to currently executing item is also maintained.
-*
-* @since S60 v5.0
-*
-*/
-NONSHARABLE_CLASS( CDiagPluginExecPlanImpl ) : public CActive,
-                                               public MDiagPluginExecPlan
-    {
-public: 
-    /**
-    * Two-phase constructor
-    *
-    * @param aEngine - Reference to diagnostics engine.
-    * @param aEngineConfig - Engine configuration information.
-    * @param aEntryObserver - Reference to entry observer.
-    * @return new instance of CDiagPluginExecPlanImpl
-    */
-    static CDiagPluginExecPlanImpl* NewL( MDiagEngineCommon& aEngine,
-                                          const TDiagEngineConfig& aEngineConfig,
-                                          MDiagExecPlanEntryImplObserver& aEntryObserver );
-
-    /**
-    * Destructor.
-    */
-    virtual ~CDiagPluginExecPlanImpl();
-
-public:     // New API
-    /**
-    * Initialize execution plan
-    *
-    * @param aStatus - Request status to set when plan creatation is completed.
-    * @param aBatch - list of plug-ins to execute
-    */
-    void InitializeL( TRequestStatus& aStatus, 
-                      const RPointerArray< MDiagPlugin >& aBatch );
-
-    /**
-    * Initialize execution plan from db.
-    *   This will read current data from results database and reconstruct
-    *   the execution plan.
-    *
-    *   This should be used to continue an incomplete session.
-    *
-    * @param aStatus - Request status to set when plan creatation is completed.
-    */
-    void InitializeL( TRequestStatus& aStatus );
-
-    /**
-    * Access an item in plan. 
-    *
-    * @param aIndex    - index 
-    * @return Reference to plan entry at given index.
-    */
-    CDiagExecPlanEntryImpl& operator[]( TInt aIndex );      //lint !e1411  This is proper overload
-
-    /**
-    * Get current execution plan item.
-    *
-    * @return Reference to currently executing plan item.
-    */
-    CDiagExecPlanEntryImpl& CurrentExecutionItem();         //lint !e1411  This is proper overload
-
-    /**
-    * Reset execution cursor
-    * 
-    * Resets execution cursor to the beginning.
-    */
-    void ResetExecutionCursor();
-
-    /**
-    * Moves execution cursor to next item.
-    *
-    * @return ETrue if cursor is updated.
-    *         EFalse if cursor is already at last item.
-    */
-    TInt MoveCursorToNext();
-
-private:     // from CActive
-    /**
-    * Handle Active Object completion event.
-    * @see CActive::RunL()
-    */
-    virtual void RunL();
-
-    /**
-    * Cancel outstanding request
-    * @see CActive::RunL()
-    */
-    virtual void DoCancel();
-
-    /**
-    * Handle errors
-    * @see CActive::RunError()
-    */
-    virtual TInt RunError( TInt aError );
-
-public:     // from MDiagPluginExecPlan
-    /**
-    * Access an item in plan.
-    *   @see MDiagPluginExecPlan::operator[]
-    */
-    virtual const MDiagExecPlanEntry& operator[]( TInt aIndex ) const;
-
-    /**
-    * Get current execution plan item.
-    *   @see MDiagPluginExecPlan::CurrentExecutionItem
-    */
-    virtual const MDiagExecPlanEntry& CurrentExecutionItem() const;
-
-    /**
-    * Returns index of execution cursor. 
-    *   @see MDiagPluginExecPlan::CurrentIndex
-    */
-    virtual TInt CurrentIndex() const;
-
-    /**
-    * Returns total number of items in the plan.
-    *   @see MDiagPluginExecPlan::Count
-    */
-    virtual TInt Count() const;
-
-    /**
-    * Get current test index.
-    *
-    *   @see MDiagPluginExecPlan::CurrentTestIndex
-    */
-    virtual TInt CurrentTestIndex( TBool aIncludeDependency ) const;
-
-    /**
-    * Get total test count.
-    *
-    *   @see MDiagPluginExecPlan::TestCount
-    */
-    virtual TInt TestCount( TBool aIncludeDependency ) const;
-
-    /**
-    * Check if this is the last test being executed.
-    *
-    *   @see MDiagPluginExecPlan::IsLastTest
-    */
-    virtual TBool IsLastTest() const;
-
-    /**
-    * Check if this is the last plug-in being executed.
-    *
-    *   @see MDiagPluginExecPlan::IsLastPlugin
-    */
-    virtual TBool IsLastPlugin() const;
-
-    /**
-    * Returns the plug-in index that plan is resuming from.
-    *
-    *   @see MDiagPluginExecPlan::ResumeIndex
-    */
-    virtual TInt ResumeIndex() const;
-
-private: // private data types
-    /**
-    * State
-    */
-    enum TState
-        {
-        EStateIdle  = 0,
-        EStateExpandDependencyAndSuites,
-        EStateRemoveEmptySuites,
-        EStateInsertSuiteTransitions,
-        EStateStoreToDb,
-        EStatePlanCreated
-        };
-
-private: // private functions
-    /**
-    * C++ Constructor
-    * @param aEngine - reference to engine.
-    * @param aEngineConfig - reference to engine configuration information.
-    * @param aEntryObserver - Reference to observer for each plug-in
-    */
-    CDiagPluginExecPlanImpl( MDiagEngineCommon& aEngine,
-                             const TDiagEngineConfig& aEngineConfig,
-                             MDiagExecPlanEntryImplObserver& aEntryObserver );
-
-    /**
-    * Symbian 2nd phase constructor
-    */
-    void ConstructL();
-
-    /**
-    * Change state
-    *   @param aState - new state.
-    */    
-    void ChangeState( TState aState );
-
-    /**
-    * Plan creation phase 1. Expand dependencies
-    *
-    * @return ETrue if any changes are made to the plan.
-    */
-    TBool ExpandDependenciesL();
-
-    /**
-    * Plan creation phase 2. Expand suites to plug-ins
-    *
-    * @return ETrure if any changes are made to the plan
-    */
-    TBool ExpandSuitesL();
-
-    /**
-    * Plan creation phase 3. Remove empty suites. Delete plan entries that
-    * just has prepare and finalize without any tests in between.
-    *
-    */
-    void RemoveEmptySuites();
-
-    /**
-    * Plan creation phase 4. Insert suite transition based on parent
-    *
-    */
-    void InsertSuiteTransitionsL();
-
-    /**
-    * Store next test plan item to database. Part of STEP_6.
-    *
-    */
-    void StoreNextTestPluginToDbL();
-    
-    /**
-    * Plan creation step 7. Prepend items from last session to new plan.
-    */
-    void PrependExecutedItemsL();
-
-    /**
-    * Report result to client.
-    * 
-    * @param aErr - Result to report back to engine. KErrNone if successful.
-    *   
-    */
-    void ReportResult( TInt aErr );
-
-    /**
-    * Insert plugin
-    *
-    * This function will attempt to add a plugin into plan. 
-    * If item already exists in the plan prior to the given index, it will
-    * not add a new item. 
-    * If item exists after the given index, and the item is a dependent item, it will
-    * move it up in the plan, so that it will be executed earlier.
-    * If item exists after the given index, and the item is not a dependent item, 
-    * it will create a duplicate entry, to make sure that client specified order
-    * is not changed.
-    *
-    * @param aPlugin - Plugin to insert
-    * @param aAsDependent - whether new item is to satify dependency or not.
-    * @param aAt - index to insert the dependent item to.
-    * @return ETrue if plan is updated. EFalse if no changes to plan is made.
-    */
-    TBool InsertPluginL( MDiagPlugin& aPlugin,
-                         TBool aAsDependent, 
-                         TInt aAt );
-
-    /**
-    * Utility function to create a default execution plan entry
-    *   For test plug-ins, it will create an entry with EQueueToRun as status.
-    *   For suite plug-ins, it will create an entry with ETypeSuiteUnexpanded as type.
-    *
-    * @param aPlugin - Plugin to create default entry for. Either test or suite plug-in.
-    * @param aAsDependency - Whether the entry should be created as dependency or not.
-    *
-    * @return New execution plan entry. Ownership is transferred.
-    */
-    CDiagExecPlanEntryImpl* CreateDefaultPlanEntryLC(
-            MDiagPlugin& aPlugin,
-            TBool aAsDependency ) const;
-
-    /**
-    * Utility function to add root suite if it does not alredy exists 
-    * in the plan. 
-    * 
-    * NOTE: This should be called only from InsertSuiteTransitionsL()
-    */
-    void AddRootSuiteIfMissingL();
-
-    /**
-    * Utility function to push new transition into stack.
-    *
-    * NOTE: This should be called only from InsertSuiteTransitionsL()
-    *
-    * @param aStack - Stack to push new transition to.
-    * @Param aHeadIndex - index in execution plan to head entry.
-    */
-    void PushNewLevelL( CStack<TTransitionStackEntry, ETrue>& aStack, TInt aHeadIndex );
-
-    /**
-    * Utility function to pop a level from stack. This will remove top entry
-    *
-    * NOTE: This should be called only from InsertSuiteTransitionsL()
-    *
-    * @param aStack - Stack to pop the head item from.
-    */
-    void PopLevel( CStack<TTransitionStackEntry, ETrue>& aStack );
-
-    /**
-    * Utility function to check if given level exists in stack
-    *
-    * NOTE: This should be called only from InsertSuiteTransitionsL()
-    *
-    * @param aStack - Stack to check levels in.
-    * @param aLevelUid - Uid of leven to check in stack.
-    * 
-    * @return ETrue if item exists in stack. EFalse if not found.
-    */
-    TBool IsLevelInStack( CStack<TTransitionStackEntry, ETrue>& aStack, TUid aLevelUid ) const;
-
-    /**
-    * Utility function to check if there is more of items of the same parent
-    * exists in the plan.
-    *
-    * NOTE: This should be called only from InsertSuiteTransitionsL()
-    * 
-    * @param aParentUid - Uid of suite to search for.
-    * @param aIndex - Index to execution plan to start searching for.
-    * @return ETrue if given suite is still needed.
-    *   EFalse otherwise.
-    */
-    TBool IsThisSuiteNeededAfterThisIndex( TUid aSuiteUid, TInt aIndex ) const;
-
-    /**
-    * Utility function to add a SuitePrepare entry into plan.
-    *
-    * NOTE: This should be called only from InsertSuiteTransitionsL()
-    *
-    * @param aLevelUid - Uid of suite to add in plan.
-    * @param aAt - Index in plan to add new prepare entry to.
-    */
-    void AddSuitePrepareL( TUid aLevelUid, TInt aAt );
-
-    /**
-    * Utility function to add a SuiteFinalize entry into plan.
-    *
-    * NOTE: This should be called only from InsertSuiteTransitionsL()
-    *
-    * @param aPrepareIndex - location in plan where prepare is at. Some information
-    *   from prepare item will be copied to finalize.
-    * @param aAt - Index in execution plan to add finalize entry to.
-    */
-    void AddSuiteFinalizeL( TInt aPrepareIndex, TInt aAt );
-    
-    /**
-    * Log plan information to debug log. This function does nothing in release build.
-    */
-    void LogPlanL() const;
-
-    /**
-    * Debug function that validate that entries are written to db correctly.
-    * This function does nothing in release build.
-    */
-    void LogPlanInRecordL() const;
-
-private: // data
-
-    /**
-    * iPlan - holds plan entries
-    * Individual entries are owned by the array.
-    */
-    RPointerArray<CDiagExecPlanEntryImpl> iPlan;
-
-    /**
-    * iExecutedEntries  - Items that are already executed in the
-    * previous session.
-    * Individual entries are owned by the array.
-    */
-    RPointerArray<CDiagExecPlanEntryImpl> iExecutedEntries;
-
-    /**
-    * iExecutionCursor - currently executing item.
-    */
-    TInt iExecutionCursor;
-
-    /**
-    * iResumeIndex - Index which session is being resumed from.
-    */
-    TInt iResumeIndex;
-
-    /**
-    * iEngine - Reference to diag engine.
-    */
-    MDiagEngineCommon& iEngine;
-
-    /**
-    * iEngineConfig - Enine configuration information.
-    */
-    const TDiagEngineConfig& iEngineConfig;
-
-    /**
-    * iPlanEntryObserver - Plan entry observer. Passed to each plan entry
-    *    when it is created.
-    */
-    MDiagExecPlanEntryImplObserver& iPlanEntryObserver;
-
-    /**
-    * iClientStatus - TRequestStatus of the client. Used to notify
-    * completion and error.
-    * Ownership - Does not own.
-    */
-    TRequestStatus* iClientStatus;
-
-    /**
-    * iState - state of the execution plan creation.
-    *   @see TState
-    */
-    TState iState;
-    };
-
-#endif // DIAGPLUGINEXECPLANIMPL_H
-
-
-// End of File
-