diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatemgr/cmd/src/ssmcommandbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstatemgr/cmd/src/ssmcommandbase.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,172 @@ +// Copyright (c) 2007-2009 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: +// + +#include "ssmcommandbase.h" +#include "ssmpanic.h" +#include "ssmdebug.h" + +#include + +CSsmCommandBase::CSsmCommandBase() + :CActive(EPriorityStandard), iSeverity(ECmdIgnoreFailure) +#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE + , iPriority(KDefaultCommandPriority) +#endif + { + CActiveScheduler::Add(this); + } + +CSsmCommandBase::CSsmCommandBase(TCmdErrorSeverity aSeverity) + : CActive(EPriorityStandard), iSeverity(aSeverity) +#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE + , iPriority (KDefaultCommandPriority) +#endif + { + CActiveScheduler::Add(this); + } + +#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE +CSsmCommandBase::CSsmCommandBase(TCmdErrorSeverity aSeverity, const TUint16 aPriority) + : CActive(EPriorityStandard), iSeverity(aSeverity), iPriority(aPriority) + { + CActiveScheduler::Add(this); + } +#endif + +/** +*/ +CSsmCommandBase::~CSsmCommandBase() + { +#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE + iCmdResourceFileName.Close(); +#endif + } + +void CSsmCommandBase::SetUtilProvider(CSsmCommandUtilProvider& aUtilProvider) + { + iUtilProvider = &aUtilProvider; + } + +TBool CSsmCommandBase::IsDeferred() const + { + return EFalse; + } + +TSsmExecutionBehaviour CSsmCommandBase::ExecutionBehaviour() const + { + return ESsmWaitForSignal; + } + +TCmdErrorSeverity CSsmCommandBase::Severity() const + { + return iSeverity; + } + +#ifdef SYMBIAN_SSM_FLEXIBLE_MERGE +TUint16 CSsmCommandBase::Priority() const + { + return iPriority; + } + +void CSsmCommandBase::SetCommandResourceFileNameL(const TDesC& aFileName) + { + if (iCmdResourceFileName.MaxLength() < aFileName.Length()) + { + iCmdResourceFileName.ReAllocL(aFileName.Length()); + } + iCmdResourceFileName.Copy(aFileName); + } + +const TDesC& CSsmCommandBase::GetCommandResourceFileName() const + { + return iCmdResourceFileName; + } + +TInt CSsmCommandBase::GetCommandResourceFileNameLength() const + { + return iCmdResourceFileName.Length(); + } +#endif + +TInt CSsmCommandBase::CompletionStatus() const + { + __ASSERT_ALWAYS(0, PanicNow(KPanicSsmCommand, EIllegalMethodCallInClass)); + return KErrNotSupported; + } + +void CSsmCommandBase::RegisterCompletionObserver(TRequestStatus& /*aStatus*/) + { + __ASSERT_ALWAYS(0, PanicNow(KPanicSsmCommand, EIllegalMethodCallInClass)); + } + +void CSsmCommandBase::RegisterCompletionObserverCancel() + { + __ASSERT_ALWAYS(0, PanicNow(KPanicSsmCommand, EIllegalMethodCallInClass)); + } + +void CSsmCommandBase::CompleteExecuteRequest(TInt aReason) + { + if (iExecuteRequest && (iExecuteRequest->Int() == KRequestPending)) + { + DEBUGVERBOSE3A("Severity %d Errorcode %d", Severity(), aReason); + if (Severity()==ECmdIgnoreFailure && aReason!=KErrCancel) + { + aReason = KErrNone; + } + CompleteRequest(*iExecuteRequest, aReason); + } + iExecuteRequest = NULL; + } + +void CSsmCommandBase::CompleteRequest(TRequestStatus& aStatus, TInt aReason) + { + DEBUGPRINT2A("Completing command with errorcode %d", aReason); + TRequestStatus* status = &aStatus; + User::RequestComplete(status, aReason); + } + +TBool CSsmCommandBase::EvaluateCondition(MSsmConditionalCallback* aCallback, CResourceFile* aResourceFile) + { + if(aCallback && aResourceFile && iConditionalResourceId) + { + // All the information is available to perform a condition evaluation + TBool response = ETrue; + TRAPD(err, response = aCallback->ConditionalCommandAllowedL(*aResourceFile, iConditionalResourceId)); + if(err != KErrNone) + { + // Failed to get any response information, so don't execute this command + response = EFalse; + } + return response; + } + // Otherwise return true as conditional information has not been specified + // If the conditional information isn't set then a command defaults to being + // unconditional so therefore should always return ETrue in that situation. + // + // If no callback is provided or if no resource file is specified then + // this command has not been created from a resource file so therefore + // all commands are treated as unconditional, so again ETrue is returned. + return ETrue; + } + +void CSsmCommandBase::SetConditionalInformation(TInt aConditionalInformation) + { + iConditionalResourceId = aConditionalInformation; + } + +TInt CSsmCommandBase::ConditionalInformation() const + { + return iConditionalResourceId; + }