// 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 <ssm/ssmconditionalcallback.h>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_MERGECSsmCommandBase::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_MERGETUint16 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(); }#endifTInt 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; }