cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_engine.cpp
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_engine.cpp	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,232 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 "keytool_engine.h"
+#include "keytool_controller.h"
+#include "keytool_commands.h"
+
+#include <keytool.rsg>
+
+
+/*static*/ CKeyToolEngine* CKeyToolEngine::NewLC(CKeyToolController* aController)
+	{
+	CKeyToolEngine* self = new (ELeave) CKeyToolEngine(aController);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+	
+/* static */ CKeyToolEngine* CKeyToolEngine::NewL(CKeyToolController* aController)
+	{
+	CKeyToolEngine* self = CKeyToolEngine::NewLC(aController);
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+CKeyToolEngine::CKeyToolEngine(CKeyToolController* aController) : CActive(EPriorityNormal)
+	{
+	iCurrentAction = EIdle;
+	iController = aController;
+	iInitialized = EFalse;
+	}
+	
+CKeyToolEngine::~CKeyToolEngine()
+	{
+	Cancel();	
+	delete iHandler;	
+	delete iKeyStore;		
+	iFs.Close();
+	if (iActiveStarted)
+		{
+		delete iScheduler;
+		}	
+	iInitialized = EFalse;
+	}
+	
+void CKeyToolEngine::ConstructL()
+	{
+	iActiveStarted = EFalse;
+	iScheduler = CActiveScheduler::Current();
+	if (!iScheduler)
+		{
+		iActiveStarted =  ETrue;
+		iScheduler = new(ELeave) CActiveScheduler;
+		CActiveScheduler::Install(iScheduler);	
+		}
+	
+	User::LeaveIfError(iFs.Connect());
+	
+	iKeyStore = CUnifiedKeyStore::NewL(iFs);
+	
+	CActiveScheduler::Add(this);	
+	}
+
+void CKeyToolEngine::RunL()
+	{
+	if (iStatus.Int() != KErrNone)
+		{
+		User::Leave(iStatus.Int());
+		}
+		
+	switch (iState)
+		{
+		case EInitialise:
+			{
+			iInitialized = ETrue;
+			iHandler->DoCommandL(*iKeyStore, iParam);		
+			iState = EDone;
+			}
+			break;
+		case EDone:
+			{
+			}
+			break;
+		default:
+			{
+			User::Panic(_L("Keytool Engine - Illegal state"), 0);
+			}
+		}
+	}
+	
+TInt CKeyToolEngine::RunError(TInt aError)
+	{	
+	CActiveScheduler::Stop();	
+	
+	switch (iCurrentAction)
+		{
+		case EList:
+			{
+			TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_LIST, aError));				
+			}
+			break;
+		case EImport:
+			{
+			TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_IMPORT, aError));				
+			}
+			break;
+		default:
+			{
+			TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_UNKNOWN, aError));				
+			}
+		}	
+	return KErrNone;
+	}
+
+	
+void CKeyToolEngine::DoCancel()
+	{
+	CActiveScheduler::Stop();
+	}
+
+
+//\\//\\//\\//\\////\\//\\//\\//\\////\\//\\//\\//\\//
+//\\//\\//\\//\\// Business methods //\\//\\//\\//\\//
+//\\//\\//\\//\\////\\//\\//\\//\\////\\//\\//\\//\\//
+	
+void CKeyToolEngine::InitializeL()
+	{
+	if (!iInitialized)
+		{
+		iState = EInitialise;
+		iKeyStore->Initialize(iStatus);	
+		SetActive();		
+		}
+	else 
+		{
+		iHandler->DoCommandL(*iKeyStore, iParam);		
+		iState = EDone;		
+		}
+	}
+
+	
+void CKeyToolEngine::ListL(CKeyToolParameters* aParam)
+	{ 
+	Cancel();
+	iParam = aParam;
+	iCurrentAction = EList;
+	delete iHandler;
+	iHandler = NULL;
+	iHandler = CKeytoolList::NewL(iController);	
+	InitializeL();
+	}
+	
+void CKeyToolEngine::ImportL(CKeyToolParameters* aParam)
+	{ 
+	Cancel();
+	
+	if (!aParam->iDefault)
+		{
+		iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_KEYFILE);				
+		User::Leave(KErrArgument);
+		}	
+
+	iParam = aParam;
+	iCurrentAction = EImport;
+	delete iHandler; // Reentrant call
+	iHandler = NULL;
+	iHandler = CKeytoolImport::NewL(iController);	
+	InitializeL();
+	}
+
+void CKeyToolEngine::RemoveL(CKeyToolParameters* aParam)
+	{ 
+	Cancel();
+	
+	if (!aParam->iDefault)
+		{
+		iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_REMOVE);				
+		User::Leave(KErrArgument);
+		}
+
+	iParam = aParam;
+	iCurrentAction = ERemove;
+	iHandler = CKeytoolRemove::NewL(iController);	
+	InitializeL();
+	}
+
+	
+void CKeyToolEngine::DisplayUsageL(CKeyToolParameters* aParam)
+	{
+	iHandler = CKeytoolUsage::NewL(iController);	
+	iHandler->DoCommandL(*iKeyStore, aParam);
+	}
+
+void CKeyToolEngine::ListStoresL(CKeyToolParameters* aParam)
+	{ 
+	Cancel();
+	iParam = aParam;
+	iCurrentAction = EList;
+	iHandler = CKeyToolListStores::NewL(iController);	
+	InitializeL();
+	}
+
+void CKeyToolEngine::SetPolicyL(CKeyToolParameters* aParam)
+	{ 
+	Cancel();
+	
+	if (!aParam->iDefault)
+		{
+		iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_SUSERFAIL);				
+		User::Leave(KErrArgument);
+		}
+
+	iParam = aParam;
+	iCurrentAction = ESetPolicy;
+	iHandler = CKeytoolSetPolicy::NewL(iController);	
+	InitializeL();
+	}