devicediagnostics/devdiagapp/inc/devdiagexecutionresults.h
changeset 0 3ce708148e4d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devicediagnostics/devdiagapp/inc/devdiagexecutionresults.h	Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,516 @@
+/*
+* 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:  This is the declaration of the execution results class used
+*                by the Device Diagnostics Application to present a common interface
+*                for results information to the application.
+*
+*/
+
+
+#ifndef DEVDIAGEXECUTIONRESULTS_H
+#define DEVDIAGEXECUTIONRESULTS_H
+
+// System Include Files
+#include <e32base.h>                // CBase
+#include <e32cmn.h>                 // RPointerArray, TUid
+
+// Forward Declarations
+class MDiagEngineCommon;
+class MDiagPlugin;
+class MPDResultsObserver;
+class CDiagResultsDatabaseItem;
+class CDiagPluginPool;
+class RDiagResultsDatabase;
+
+/**
+ *  Device Diagnostics Execution Results Class.
+ *  This class presents a common interface to the application for results from
+ *  both live test runs as well as from the results database.
+ *
+ *  @lib diagresultsdatabase.lib
+ *  @lib diagframework.lib
+ */
+class CDevDiagExecResults : public CBase
+    {
+
+public: // Nested Classes
+
+    /**
+     *  Device Diagnostics Execution Results Information Class.
+     *  This class provides a common interface to individual results
+     *  information from either live execution or the results database.
+     */
+    class CResult : public CBase
+        {
+
+    public: // New Functions
+
+        /**
+         * Two-phased constructor.
+         *
+         * @param aPlugin The plugin that this result corresponds to.
+         * @return A pointer to the newly-created instance of CResult.
+         */
+        static CResult* NewL( const MDiagPlugin& aPlugin );
+
+        /**
+         * Two-phased constructor.
+         *
+         * @param aPlugin The plugin that this result corresponds to.
+         * @return A pointer to the newly-created instance of CResult.
+         */
+        static CResult* NewLC( const MDiagPlugin& aPlugin );
+
+        /**
+         * Destructor.
+         */
+        virtual ~CResult();
+
+        /**
+         * Returns the pointer to the test result.  This may be NULL if the
+         * item is a suite or has not been run yet.  The client must not
+         * delete this pointer.
+         *
+         * @return A pointer to the test result for this item, or NULL.
+         */
+        const CDiagResultsDatabaseItem* Result() const;
+
+        /**
+         * Returns a reference to the plugin that corresponds to this item.
+         *
+         * @return A reference to the plugin that corresponds to this item.
+         */
+        const MDiagPlugin& Plugin() const;
+
+        /**
+         * Returns the execution status (error value) for this plugin.  This
+         * will only contain meaningful data for live test executions.
+         *
+         * @return The execution status (error value) for this plugin
+         */
+        TInt ExecStatus() const;
+
+        /**
+         * Returns the current execution step for this plugin.  This will only
+         * contain meaningful data for live test executions.
+         *
+         * @return The current execution step for this plugin.
+         */
+        TUint CurrentStep() const;
+
+        /**
+         * Returns the total number of execution steps for this plugin.
+         *
+         * @return The total number of execution steps for this plugin.
+         */
+        TUint TotalSteps() const;
+
+        /**
+         * Sets the result information for this plugin.  Ownership of the
+         * result is transferred.  If the result was previously set, it will
+         * be deleted and replaced with the new data.
+         *
+         * @param aResult The test result.
+         * @param aError The execution status error value.
+         */
+        void SetResult( CDiagResultsDatabaseItem* aResult, TInt aError );
+
+        /**
+         * Sets the test progress information.
+         *
+         * @param aCurrentStep The current execution step for this plugin.
+         * @param aCurrentStep The total number of execution steps for this
+         *                     plugin.
+         */
+        void SetProgress( TUint aCurrentStep, TUint aTotalSteps );
+
+
+    private: // New Functions
+
+        /**
+         * Default constructor.
+         *
+         * @param aPlugin The plugin that this result corresponds to.
+         */
+        CResult( const MDiagPlugin& aPlugin );
+
+        /**
+         * Two-phased constructor.
+         */
+        void ConstructL();
+
+
+    private: // Data
+
+        /**
+         * The test results information.
+         * Own.
+         */
+        CDiagResultsDatabaseItem* iResult;
+
+        /**
+         * A reference to the plugin that this result corresponds to.
+         */
+        const MDiagPlugin& iPlugin;
+
+        /**
+         * The test execution status (error value).
+         */
+        TInt iExecStatus;
+
+        /**
+         * The current step in the execution of this plugin.
+         */
+        TUint iCurrentStep;
+
+        /**
+         * The total number of steps in the execution of this plugin.
+         */
+        TUint iTotalSteps;
+
+        };
+
+
+public: // New Functions
+
+    /**
+     * Two-phased constructor.  This creates an execution results object by
+     * loading test results from the Results Database (logged results).
+     *
+     * @param aRecordId The unique record identifier from the results database
+     *                  for this set of results.
+     * @param aPluginPool A reference to the plugin pool, which is used for
+     *                    getting plugin information.
+     * @param aDbSession A reference to an open session with the results
+     *                   database server.
+     * @return A pointer to the newly-created instance of CDevDiagExecResults.
+     */
+    static CDevDiagExecResults* NewL( TUid aRecordId,
+                                      CDiagPluginPool& aPluginPool,
+                                      RDiagResultsDatabase& aDbSession );
+
+    /**
+     * Two-phased constructor.  This creates an execution results object by
+     * getting test results from live execution.  The results objects are
+     * created from the diagnostics engine's execution plan, and updated as
+     * tests complete.
+     *
+     * @param aRecordId The unique record identifier from the results database
+     *                  for this set of results.
+     * @param aPluginPool A reference to the plugin pool, which is used for
+     *                    getting plugin information.
+     * @param aDbSession A reference to an open session with the results
+     *                   database server.
+     * @param aExecutedUid The uid of the plugin that was executed to produce
+     *                     these test results.
+     * @param aDiagEngine A pointer to the diagnostics engine, which is only
+     *                    used to get the execution plan during live test
+     *                    runs.
+     * @return A pointer to the newly-created instance of CDevDiagExecResults.
+     */
+    static CDevDiagExecResults* NewL( TUid aRecordId,
+                                      CDiagPluginPool& aPluginPool,
+                                      RDiagResultsDatabase& aDbSession,
+                                      TUid aExecutedUid,
+                                      MDiagEngineCommon* aDiagEngine );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CDevDiagExecResults();
+
+    /**
+     * This function is used to set the result for the current execution plan
+     * index.  It is only valid for live test executions.  Ownership of the
+     * result is transferred.  If called multiple times for the same plugin,
+     * each suqsequent call deletes and overwrites the previous result data.
+     *
+     * @param aResult The test result.
+     * @param aStatus The execution status error value.
+     */
+    void AddEntryL( CDiagResultsDatabaseItem* aResult, TInt aStatus );
+
+    /**
+     * Sets the test progress information for the current execution plan
+     * index.
+     *
+     * @param aCurrentStep The current execution step for this plugin.
+     * @param aCurrentStep The total number of execution steps for this
+     *                     plugin.
+     */
+    void SetProgressL( TUint aCurrentStep, TUint aTotalSteps );
+
+    /**
+     * Retrieves the CResult reference at the specified index.
+     *
+     * @param aIndex The index of the result to retrieve.
+     * @return A reference to the CResult object at the index.
+     */
+    CResult& operator[] ( TInt aIndex );
+    const CResult& operator[] ( TInt aIndex ) const;
+
+    /**
+     * Retrieves the CResult reference at the current index.  For live
+     * execution runs, this is determined from the test execution plan.  For
+     * logged results, this is always the last item.
+     *
+     * @return A reference to the CResult object.
+     */
+    CResult& CurrentItemL();
+    const CResult& CurrentItemL() const;
+
+    /**
+     * Returns the number of result items.
+     *
+     * @return The number of result items.
+     */
+    TInt Count() const;
+
+    /**
+     * Returns the index of the current result item.  For live execution runs,
+     * this is determined from the test execution plan.  For logged results,
+     * this is always the last item.
+     *
+     * @return The index of the current execution item.
+     */
+    TUint CurrentIndexL() const;
+
+    /**
+     * Checks if the diagnostics engine has finished the last test.
+     *
+     * @return ETrue if the last test has finished and the diagnostics engine
+     *         is cleaning up.
+     */
+    TBool LastTestFinishedL() const;
+
+    /**
+     * Returns whether or not the item specified by the argument is (or was)
+     * executed as a dependency test.
+     *
+     * @param aIndex The index of the item to check for dependency execution.
+     * @return ETrue if the item is (or was) a dependency, EFalse otherwise.
+     */
+    TBool IsDependencyL( TInt aIndex ) const;
+
+    /**
+     * Returns whether or not the results are from a completed test record.
+     *
+     * @return ETrue if the results are from a completed test record, EFalse
+     *         otherwise.
+     */
+    TBool IsRecordCompleted() const;
+
+    /**
+     * Finalizes live execution results so that they may not be updated.
+     *
+     * @param aTestingComplete Indicates if all tests in the record were
+     *                         executed.
+     */
+    void Finalize( TBool aTestingComplete );
+
+    /**
+     * Returns the total number of steps for all items in the execution
+     * results.
+     *
+     * @return The total number of steps for all items in the execution
+     *         results.
+     */
+    TInt TotalExecutionSteps() const;
+
+    /**
+     * Returns the current execution step based on all items in the execution
+     * results.
+     *
+     * @return The current execution step based on all items in the execution
+     *         results.
+     */
+    TInt CurrentExecutionStep() const;
+
+    /**
+     * Returns a reference to the plugin that the engine was asked to execute.
+     * The engine must be executing plugins for this to be valid.
+     *
+     * @return A reference to the plugin that the engine was asked to execute.
+     */
+    const MDiagPlugin& ExecutedPluginL() const;
+
+    /**
+     * Returns whether or not the execution is for a single plugin.
+     *
+     * @return ETrue if the execution is for a single plugin.
+     */
+    TBool SinglePluginExecutionL() const;
+
+    /**
+     * Returns the number of failed tests in this set of results.
+     *
+     * @return The number of failed tests in this set of results.
+     */
+    TInt FailedResultsCount() const;
+    
+    /**
+     * Returns the number of passed tests in this set of results.
+     *
+     * @return The number of passed tests in this set of results.
+     */
+    TInt PassedResultsCount() const;
+
+    /**
+     * Returns whether or not the execution plan's resume index has been
+     * reached.  This value indicates if the diagnostics engine is still
+     * updating the application with cached test results.
+     *
+     * @return ETrue if the execution plan's resume index has been reached.
+     */
+    TBool ResumeIndexReachedL() const;
+
+    /**
+     * Returns the UID of the record associated with this set of results.
+     *
+     * @return The UID of the record associated with this set of results.
+     */
+    const TUid& RecordId() const;
+    
+// ADO & Platformization Changes   
+    const CDiagResultsDatabaseItem* GetSinglepluginExecutionResult() const;
+
+
+private: // Data Types
+
+    /**  Enum to indicate what type of results data this object contains. */
+    enum TResultsType
+        {
+        ETypeExecution,
+        ETypeLog
+        };
+
+
+private: // New Functions
+
+    /**
+     * Default constructor.
+     *
+     * @param aRecordId The unique record identifier from the results database
+     *                  for this set of results.
+     * @param aPluginPool A reference to the plugin pool, which is used for
+     *                    getting plugin information.
+     * @param aExecutedUid The uid of the plugin that was executed to produce
+     *                     these test results.  This is ignored for logged
+     *                     test results.
+     * @param aDiagEngine A pointer to the diagnostics engine, which is only
+     *                    used to get the execution plan during live test
+     *                    runs.  This must be NULL for logged test results.
+     */
+    CDevDiagExecResults( TUid aRecordId,
+                         CDiagPluginPool& aPluginPool,
+                         RDiagResultsDatabase& aDbSession,
+                         TUid aExecutedUid = KNullUid,
+                         MDiagEngineCommon* aDiagEngine = NULL );
+
+    /**
+     * Two-phased constructor.
+     */
+    void ConstructL();
+
+
+private: // Data
+
+    /**
+     * The type of results data contained by this object.
+     */
+    TResultsType iType;
+
+    /**
+     * The array of results data.
+     */
+    RPointerArray< CResult > iResults;
+
+    /**
+     * The results database UID that corresponds to this test record.
+     */
+    TUid iRecordId;
+
+    /**
+     * The plugin pool, used to get information about test plugins.
+     */
+    CDiagPluginPool& iPluginPool;
+
+    /**
+     * A reference to an open database session.  This object does not close
+     * the database session; it may only use it and create subsessions.
+     */
+    RDiagResultsDatabase& iDbSession;
+
+    /**
+     * A pointer to the diagnostics engine, used only to get the execution
+     * plan for live test exections.
+     * Not own.
+     */
+    MDiagEngineCommon* iDiagEngine;
+
+    /**
+     * The total number of test steps in the entire execution.
+     */
+    TInt iTotalSteps;
+
+    /**
+     * The total number of test steps in the entire execution.
+     */
+    TInt iCompletedSteps;
+
+    /**
+     * The test step that the currently-executing plugin is on.  This is not
+     * combined with "iCompletedSteps" because plugins may be suspended and
+     * restarted before they finally complete.
+     */
+    TInt iCurrentPluginStep;
+
+    /**
+     * The UID of the plugin executed to produce these results.  This is
+     * obtained from the test record during construction.
+     */
+    TUid iExecutedPlugin;
+
+    /**
+     * The status of the record that corresponds to these test results.  A
+     * record is fully completed only when all tests in it have been executed,
+     * or the user decides not to resume it after suspending it.  This data is
+     * obtained from the Finalize() function for live executions and from the
+     * database for logged results.
+     */
+    TBool iCompleted;
+
+    /**
+     * The number of failed tests in these test results.  This data is
+     * obtained from the AddEntryL() function for live executions and from the
+     * database for logged results.
+     */
+    TInt iFailedCount;
+    
+    /**
+      * The number of passed tests in these test results.  This data is
+      * obtained from the AddEntryL() function for live executions and from the
+      * database for logged results.
+      */
+     TInt iPassedCount;
+
+    /**
+     * The index value of the last test plugin in the results array.  This is
+     * used to check if the last test has finished.
+     */
+    TInt iLastTestIndex;
+
+    };
+
+#endif // PDEXECUTIONRESULTS_H