devicediagnosticsfw/diagframework/inc/diagexecplanentryimpltest.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 09:07:52 +0200
changeset 0 b497e44ab2fc
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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 CDiagExecPlanEntryImplTest
*
*/


#ifndef DIAGEXECPLANENTRYIMPLTEST_H
#define DIAGEXECPLANENTRYIMPLTEST_H

// SYSTEM INCLUDE FILES
#include <DiagResultsDatabaseItem.h>    // CDiagResultsDatabaseItem::TResult
#include <DiagTestObserver.h>           // MDiagTestObserver
#include <DiagTestPlugin.h>             // MDiagTestPlugin::TStopReason

// USER INCLUDE FILES
#include "diagexecplanentryimpl.h"      // CDiagExecPlanEntryImpl

// FORWARD DECLARATION
class MDiagTestPlugin;

/**
* Diagnostics Plug-in Execution Plan Entry Implementation for test plugin
*
* This class implements CDiagExecPlanEntryImplTest. It is meant to be private
*   to Diagnostics Framework and not exported.
*
* @since S60 v5.0
*
*/
NONSHARABLE_CLASS( CDiagExecPlanEntryImplTest ): public CDiagExecPlanEntryImpl,
                                                 public MDiagTestObserver
    {
public: // Public constructors and destructors
    /**
    * Symbian two-phased constructor
    *
    * @param aEngine - Diagnostics Engine
    * @param aEngineConig - Engine configuration.
    * @param aObserver - Execution plan entry observer.
    * @param aPlugin - Test plug-in that this plan entry represents.
    * @param aAsDependency - Whether this item is being executed as dependency or not.
    * @param aResult - Initial result. 
    *
    * @return a new instance of CDiagExecPlanEntryImplTest
    */
    static CDiagExecPlanEntryImplTest* NewL( MDiagEngineCommon& aEngine,
                                             const TDiagEngineConfig& aEngineConfig,
                                             MDiagExecPlanEntryImplObserver& aObserver,
                                             MDiagTestPlugin& aPlugin,
                                             TBool aAsDependency,
                                             CDiagResultsDatabaseItem::TResult aResult );

    /**
    * Symbian two-phased constructor.
    * This will put an entry in cleanup stack.
    *
    * @param aEngine - Diagnostics Engine
    * @param aEngineConig - Engine configuration.
    * @param aObserver - Execution plan entry observer.
    * @param aPlugin - Test plug-in that this plan entry represents.
    * @param aAsDependency - Whether this item is being executed as dependency or not.
    * @param aResult - Initial result. 
    *
    * @return a new instance of CDiagExecPlanEntryImplTest
    */
    static CDiagExecPlanEntryImplTest* NewLC( MDiagEngineCommon& aEngine,
                                              const TDiagEngineConfig& aEngineConfig,
                                              MDiagExecPlanEntryImplObserver& aObserver,
                                              MDiagTestPlugin& aPlugin,
                                              TBool aAsDependency,
                                              CDiagResultsDatabaseItem::TResult aResult );

    /**
    * C++ destructor
    */
    virtual ~CDiagExecPlanEntryImplTest();

public:     // new public api
    /**
    * Get test result
    *   @return Test result enum.
    */
    CDiagResultsDatabaseItem::TResult Result() const;

    /**
    * Set test result
    *   @param aResult - Test result.
    */
    void SetResult( CDiagResultsDatabaseItem::TResult aResult );

    /**
    * Get result database item. If cached value is available, it will use
    * cached value. Otherwise, it will retrieve from database.
    *   @return Test result item from database. Ownership is transferred.
    */
    CDiagResultsDatabaseItem* GetLastTestResultL();

    /**
    * Get test plugin associated.
    * @return a reference to test plug-in that this entry represents.
    */
    MDiagTestPlugin& TestPlugin();

private:    // from CActive
    /*
    * @see CActive::RunL
    */
    virtual void RunL();

    /*
    * @see CActive::DoCancel
    */
    virtual void DoCancel();

    /*
    * @see CActive::RunError
    */
    virtual TInt RunError( TInt aError );

private:    // from CDiagExecPlanEntryImpl
    /**
    * @see CDiagExecPlanEntryImpl::ExecuteL
    */
    virtual void ExecuteL();

    /**
    * @see CDiagExecPlanEntryImpl::StopExecutionByWatchdogL
    */
    virtual void StopExecutionByWatchdogL();

    /**
    * @see CDiagExecPlanEntryImpl::DoStopExecutionByClientL
    */
    virtual void DoStopExecutionByClientL( MDiagEngineCommon::TCancelMode aCancelMode );

    /**
    * @see CDiagExecPlanEntryImpl::SuspendL
    */
    virtual void SuspendL();

    /**
    * @see CDiagExecPlanEntryImpl::ResumeL
    */
    virtual void ResumeL();

private:    // from MDiagTestObserver
    /**
    * Notify engine of test plug-in execution progress.
    * @see MDiagTestObserver::TestProgressL
    */
    virtual void TestProgressL( const MDiagTestPlugin& aSender, 
                                TUint aCurrentStep );

    /**
    * Notify engine of test plug-in execution completion.
    * @see MDiagTestObserver::TestExecutionCompletedL
    */
    virtual void TestExecutionCompletedL( const MDiagTestPlugin& aSender, 
                                          CDiagResultsDatabaseItem* aTestResult );
    
    
private:    // Private methods
    /**
    * c++ constructor.
    *
    * @param aEngine - Diagnostics Engine
    * @param aEngineConig - Engine configuration.
    * @param aObserver - Execution plan entry observer.
    * @param aPlugin - Test plug-in that this plan entry represents.
    * @param aAsDependency - Whether this item is being executed as dependency or not.
    * @param aResult - Initial result. 
    */
    CDiagExecPlanEntryImplTest( MDiagEngineCommon& aEngine,
                                const TDiagEngineConfig& aEngineConfig,
                                MDiagExecPlanEntryImplObserver& aObserver,
                                MDiagTestPlugin& aPlugin,
                                TBool aAsDependency,
                                CDiagResultsDatabaseItem::TResult aResult );
    
    /**
    * Starts executing test.
    */
    void DoExecuteTestPluginL();

    /**
    * Stop test plugin
    */
    CDiagResultsDatabaseItem* StopTestPluginL( MDiagTestPlugin::TStopReason aReason );

    /**
    * Handler function for initial delay timer expiration.
    */
    static TInt HandleDelayTimerExpiredL( TAny* aData );

    /**
    * Stop initial delay timer.
    */
    void StopInitDelayTimer();

    /**
    * Stop all active requests and timers.
    */
    void StopAll();

    /**
    * Stops test execution, but test result is not reported.
    */
    void StopExecutionAndIgnoreResultL();

    /**
    * Get human readable name for test result. This is meant for debugging
    * purpose only. In non-debug build, it will return empty string.
    */
    static const TDesC& TestResultString( CDiagResultsDatabaseItem::TResult aResult );


private:    // private data
    /**
    * Test result
    */
    CDiagResultsDatabaseItem::TResult iResult;

    /**
    * Plugin test initial delay timer.
    * Ownership - this
    */
    CPeriodic* iInitDelayTimer;

    /**
    * Cached test result. This stores test result temporarily, so that database access
    * could be avoided. Currently, cache will remain only for one request after
    * test is completed.
    * Ownership - this
    */
    CDiagResultsDatabaseItem* iCachedResult;

    };

#endif // DIAGEXECPLANENTRYIMPLTEST_H

// End of File