sysstatemgmt/systemstatemgr/cmd/src/ssmcommandbase.cpp
changeset 0 4e1aa6a622a0
--- /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 <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_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;
+	}