diff -r 13d7c31c74e0 -r b183ec05bd8c devicediagnosticsfw/diagframework/src/diagexecplanentryimplsuite.cpp --- a/devicediagnosticsfw/diagframework/src/diagexecplanentryimplsuite.cpp Thu Aug 19 10:44:50 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,419 +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 definition of CDiagExecPlanEntryImplSuite -* -*/ - - -// CLASS DECLARATION -#include "diagexecplanentryimplsuite.h" - -// SYSTEM INCLUDE FILES -#include // MDiagPlugin -#include // MDiagSuitePlugin -#include // LOGSTRING -#include // TDiagSuiteExecParam - -// USER INCLUDE FILES -#include "diagframework.pan" // Panics -#include "diagexecplanentryimplobserver.h" // MDiagExecPlanEntryImplObserver - -// DATA - -// MACROS - -// LOCAL DATA TYPES - - -// ======== LOCAL FUNCTIONS ======== - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CDiagExecPlanEntryImplSuite::NewL -// --------------------------------------------------------------------------- -// -CDiagExecPlanEntryImplSuite* CDiagExecPlanEntryImplSuite::NewL( - MDiagEngineCommon& aEngine, - const TDiagEngineConfig& aEngineConfig, - MDiagExecPlanEntryImplObserver& aObserver, - MDiagSuitePlugin& aPlugin, - TBool aAsDependency, - CDiagExecPlanEntryImpl::TType aType ) - { - CDiagExecPlanEntryImplSuite* self = NewLC( aEngine, - aEngineConfig, - aObserver, - aPlugin, - aAsDependency, - aType ); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CDiagExecPlanEntryImplSuite::NewLC -// --------------------------------------------------------------------------- -// -CDiagExecPlanEntryImplSuite* CDiagExecPlanEntryImplSuite::NewLC( - MDiagEngineCommon& aEngine, - const TDiagEngineConfig& aEngineConfig, - MDiagExecPlanEntryImplObserver& aObserver, - MDiagSuitePlugin& aPlugin, - TBool aAsDependency, - CDiagExecPlanEntryImpl::TType aType ) - { - CDiagExecPlanEntryImplSuite* self = - new ( ELeave ) CDiagExecPlanEntryImplSuite ( aEngine, - aEngineConfig, - aObserver, - aPlugin, - aAsDependency, - aType ); - CleanupStack::PushL( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// CDiagExecPlanEntryImplSuite::CDiagExecPlanEntryImplSuite -// --------------------------------------------------------------------------- -// -CDiagExecPlanEntryImplSuite::CDiagExecPlanEntryImplSuite( - MDiagEngineCommon& aEngine, - const TDiagEngineConfig& aEngineConfig, - MDiagExecPlanEntryImplObserver& aObserver, - MDiagSuitePlugin& aPlugin, - TBool aAsDependency, - CDiagExecPlanEntryImpl::TType aType ) - : CDiagExecPlanEntryImpl( - aEngine, - aEngineConfig, - aObserver, - aPlugin, - aAsDependency, - aType ) - { - } - -// --------------------------------------------------------------------------- -// CDiagExecPlanEntryImplSuite::~CDiagExecPlanEntryImplSuite -// --------------------------------------------------------------------------- -// -CDiagExecPlanEntryImplSuite::~CDiagExecPlanEntryImplSuite() - { - Cancel(); - - if ( CDiagExecPlanEntryImpl::State() == EStateRunning ) - { - TRAP_IGNORE( SuitePlugin().ExecutionStopL( MDiagSuitePlugin::ESkip ) ) - } - } - -// --------------------------------------------------------------------------- -// CDiagExecPlanEntryImplSuite::SuitePlugin -// --------------------------------------------------------------------------- -// -MDiagSuitePlugin& CDiagExecPlanEntryImplSuite::SuitePlugin() - { - // It is safe to typecast here, since CDiagExecPlanEntryImplSuite::NewL - // accepts only MDiagSuitePlugin&. - return static_cast< MDiagSuitePlugin& >( Plugin() ); - } - -// --------------------------------------------------------------------------- -// From CDiagExecPlanEntryImpl -// CDiagExecPlanEntryImplSuite::ExecuteL -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::ExecuteL() - { - #ifdef _DEBUG - HBufC* pluginName = Plugin().GetPluginNameL( - MDiagPlugin::ENameLayoutListSingle ); - - LOGSTRING4( "---- SUITE BEGIN ---- [ 0x%08x %S / %s ] ---- SUITE BEGIN ---- {", - Plugin().Uid().iUid, - pluginName, - ( Type() == ETypeSuitePrepare ) ? L"PREPARE" : L"FINALIZE" ) - - delete pluginName; - pluginName = NULL; - #endif // _DEBUG - - __ASSERT_DEBUG( State() == EStateQueued, - Panic( EDiagFrameworkCorruptStateMachine ) ); - - ResetWatchdog( EDiagEngineWatchdogTypeAutomatic ); - ChangeStateL( EStateRunning ); - - // Notify observer that progress is 0 of 1 since suite does not have progress. - Observer().ExecPlanEntryProgressL( *this, 0, 1 ); - - TDiagSuiteExecParam* execParam = new ( ELeave ) TDiagSuiteExecParam( *this, Engine() ); - if ( Type() == CDiagExecPlanEntryImpl::ETypeSuitePrepare ) - { - SuitePlugin().PrepareChildrenExecutionL( execParam, // owership change - Engine().IsDependencyDisabled(), - AsDependency() ); - } - else - { - SuitePlugin().FinalizeChildrenExecutionL( execParam, // owership change - Engine().IsDependencyDisabled(), - AsDependency() ); - } - - execParam = NULL; //lint !e423 execParam ownership changed. - } - -// --------------------------------------------------------------------------- -// From CDiagExecPlanEntryImpl -// CDiagExecPlanEntryImplSuite::StopExecutionByWatchdogL -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::StopExecutionByWatchdogL() - { - StopSuitePluginL( MDiagSuitePlugin::EWatchdog ); - } - -// --------------------------------------------------------------------------- -// From CDiagExecPlanEntryImpl -// CDiagExecPlanEntryImplSuite::StopExecutionByClientL -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::DoStopExecutionByClientL( - MDiagEngineCommon::TCancelMode aCancelMode ) - { - MDiagSuitePlugin::TStopReason stopReason; - - switch ( aCancelMode ) - { - case MDiagEngineCommon::ECancelAll: - stopReason = MDiagSuitePlugin::ECancelAll; - break; - - case MDiagEngineCommon::ESkip: - stopReason = MDiagSuitePlugin::ESkip; - break; - - default: - __ASSERT_DEBUG( 0, Panic( EDiagFrameworkInternal ) ); - stopReason = MDiagSuitePlugin::ESkip; - break; - } - - StopSuitePluginL( stopReason ); - } - -// --------------------------------------------------------------------------- -// CDiagExecPlanEntryImplSuite::StopSuitePluginL -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::StopSuitePluginL( - MDiagSuitePlugin::TStopReason aStopReason ) - { - LOGSTRING3( "CDiagExecPlanEntryImplSuite::StopSuitePluginL(): " - L"Calling plugin uid = 0x%08x SuitePlugin::ExecutionStopL( %d )", - Plugin().Uid().iUid, - aStopReason ) - - Cancel(); - - switch ( State() ) - { - case EStateQueued: // fall through - case EStateInitDelay: // fall through - case EStateStopped: // fall through - case EStateSuspended: // fall through - case EStateCompleted: - LOGSTRING3( "CDiagExecPlanEntryImplSuite::DoStopSuitePluginL(): " - L"Plugin 0x%08x = %d. Do nothing.", - Plugin().Uid().iUid, - State() ) - break; - - case EStateRunning: - LOGSTRING2( "CDiagExecPlanEntryImplSuite::DoStopSuitePluginL(): " - L"Plugin 0x%08x was in ERunning or ESuspended. Call Stop", - Plugin().Uid().iUid ) - SuitePlugin().ExecutionStopL( aStopReason ); - break; - - default: - LOGSTRING3( "CDiagExecPlanEntryImplSuite::DoStopSuitePluginL(): " - L"Plugin 0x%08x = INVALID STATE! %d", - Plugin().Uid().iUid, - State() ) - __ASSERT_DEBUG( 0, Panic( EDiagFrameworkCorruptStateMachine ) ); - break; - } - - // Notify observer as if plug-in itself would have done. - ContinueExecutionL( SuitePlugin() ); - } - -// --------------------------------------------------------------------------- -// CDiagExecPlanEntryImplSuite::SuspendL -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::SuspendL() - { - Cancel(); - - switch ( State() ) - { - case EStateQueued: // fall through - case EStateInitDelay: // fall through - LOGSTRING3( "CDiagExecPlanEntryImplSuite::SuspendL(): " - L"Plugin 0x%08x = %d. Reset to Queued state", - Plugin().Uid().iUid, - State() ) - // force reset the execution state to queued so that - // it will be restarted - ChangeStateL( EStateQueued ); - break; - - case EStateRunning: - LOGSTRING2( "CDiagExecPlanEntryImplSuite::SuspendL(): " - L"Plugin 0x%08x was in ERunning. Calling Stop", - Plugin().Uid().iUid ) - - // Suites do not have suspend. Stop with cancel as reason. - SuitePlugin().ExecutionStopL( MDiagSuitePlugin::ESkip ); - // force reset the plugin execution to queued so that - // it will be restarted - ChangeStateL( EStateQueued ); - break; - - case EStateStopped: - LOGSTRING2( "CDiagExecPlanEntryImplSuite::SuspendL(): " - L"Plugin 0x%08x = Stopped.", - Plugin().Uid().iUid ) - // plug-in is already stopped. - ChangeStateL( EStateSuspended ); - break; - - case EStateSuspended: - LOGSTRING2( "CDiagExecPlanEntryImplSuite::SuspendL(): " - L"Plugin 0x%08x = Suspended.", - Plugin().Uid().iUid ) - // already suspneded. nothing to do. - break; - - case EStateCompleted: - LOGSTRING2( "CDiagExecPlanEntryImplSuite::SuspendL(): " - L"Plugin 0x%08x was already in completed state. No change", - Plugin().Uid().iUid ) - break; - - default: - LOGSTRING3( "CDiagExecPlanEntryImplSuite::SuspendL(): " - L"Plugin 0x%08x = INVALID STATE! %d", - Plugin().Uid().iUid, - State() ) - __ASSERT_DEBUG( 0, Panic( EDiagFrameworkCorruptStateMachine ) ); - break; - } - - // Postcondition. Check acceptble states. - __ASSERT_DEBUG( State() == EStateQueued || - State() == EStateSuspended || - State() == EStateCompleted, - Panic( EDiagFrameworkCorruptStateMachine ) ); - } - -// --------------------------------------------------------------------------- -// CDiagExecPlanEntryImplSuite::ResumeL -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::ResumeL() - { - LOGSTRING3( "CDiagExecPlanEntryImplTest::ResumeL(): " - L"Plugin 0x%08x, State = %d", Plugin().Uid().iUid, State() ) - - __ASSERT_DEBUG( State() == EStateQueued || - State() == EStateSuspended, - Panic( EDiagFrameworkCorruptStateMachine ) ); - - if ( State() == EStateQueued ) - { - ExecuteL(); - } - else - { - ContinueExecutionL( SuitePlugin() ); - } - } - -// --------------------------------------------------------------------------- -// From MDiagSuiteObserver -// CDiagExecPlanEntryImplSuite::ContinueExecutionL -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::ContinueExecutionL( const MDiagSuitePlugin& aSender ) - { - __ASSERT_ALWAYS( aSender.Uid() == Plugin().Uid(), Panic( EDiagFrameworkPlugin ) ); - - // Need to do an empty request complete since by default, suite plug-ins - // do nothing in prepare/finalize steps and just call ContinueExecutionL. - // Doing empty request complete ensures that Plug-in call back does not - // directly call application TestExecutionCompletedL() method. - - ChangeStateL( EStateStopped ); - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - } - -// --------------------------------------------------------------------------- -// From CActive -// CDiagExecPlanEntryImplSuite::RunL -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::RunL() - { - ChangeStateL( EStateCompleted ); - - #ifdef _DEBUG - HBufC* pluginName = Plugin().GetPluginNameL( - MDiagPlugin::ENameLayoutListSingle ); - - LOGSTRING4( "} ---- SUITE END ---- [ 0x%08x %S / %s ] ---- SUITE END ----", - Plugin().Uid().iUid, - pluginName, - ( Type() == ETypeSuitePrepare ) ? L"PREPARE" : L"FINALIZE" ) - - delete pluginName; - pluginName = NULL; - #endif // _DEBUG - - Observer().ExecPlanEntryExecutedL( *this ); - } - - -// --------------------------------------------------------------------------- -// From CActive -// CDiagExecPlanEntryImplSuite::DoCancel -// --------------------------------------------------------------------------- -// -void CDiagExecPlanEntryImplSuite::DoCancel() - { - // nothing to do - } - - -// End of File -