loggingservices/eventlogger/LogServ/src/LogServOperationFactory.cpp
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/eventlogger/LogServ/src/LogServOperationFactory.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,168 @@
+// Copyright (c) 2002-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:
+// LOGSERVOPERATIONFACTORY.H
+// 
+//
+
+#include "LogServOperationFactory.h"
+
+// User includes
+#include "logservpanic.h"
+#include "LogServOperations.h"
+#include "LogServView.h"
+
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// -----> LogServFactory (source)
+/////////////////////////////////////////////////////////////////////////////////////////
+
+CLogServOperationBase* LogServFactory::NewOperationL(const TLogClientServerData& aCliServData, 
+                                                     MLogServTaskInterface& aTaskInterface, 
+                                                     MLogServOperationManager& aOperationManager, 
+                                                     const RMessage2& aMessage, 
+                                                     CLogPackage& aLogPackage, 
+                                                     TLogServSessionId aSessionId)
+	{
+	// The operations are all owned by the operation queue/manager as soon
+	// as they are contructed (since they are all members of a queue).
+	switch(aCliServData.iOperationType)
+		{
+	case ELogOperationEventAdd:		// security checked in CLogAddEvent::StartL
+		return new(ELeave) CLogServOpEventAdd(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+												   aCliServData, aSessionId);
+	case ELogOperationEventGet:		// security checked in CLogGetEvent::DoRunL
+		return new(ELeave) CLogServOpEventGet(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+												   aCliServData, aSessionId);
+	case ELogOperationEventChange:	// security checked in CLogChangeEvent::DoChangeL
+		return new(ELeave) CLogServOpEventChange(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+													  aCliServData, aSessionId);
+	case ELogOperationEventDelete:	// security checked in CLogDeleteEvent::DoRunL
+		return new(ELeave) CLogServOpEventDelete(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+													  aCliServData, aSessionId);
+	case ELogOperationTypeAdd:
+		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
+			{
+			return new(ELeave) CLogServOpTypeAdd(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+													  aCliServData, aSessionId);
+			}
+		break;
+	case ELogOperationTypeGet:		// no security check
+		return new(ELeave) CLogServOpTypeGet(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+												  aCliServData, aSessionId);
+	case ELogOperationTypeChange:
+		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
+			{
+			return new(ELeave) CLogServOpTypeChange(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+														 aCliServData, aSessionId);
+			}
+		break;
+	case ELogOperationTypeDelete:
+		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
+			{
+			return new(ELeave) CLogServOpTypeDelete(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+														 aCliServData, aSessionId);
+			}
+		break;
+	case ELogOperationClearLog:
+		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
+			{
+			return new(ELeave) CLogServOpClearLog(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+													   aCliServData, aSessionId);
+			}
+		break;
+	case ELogOperationClearRecent:
+		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
+			{
+			return new(ELeave) CLogServOpClearRecent(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+														  aCliServData, aSessionId);
+			}
+		break;
+	case ELogOperationConfigGet:	// no security check
+		return new(ELeave) CLogServOpConfigGet(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+													aCliServData, aSessionId);
+	case ELogOperationConfigChange:
+		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
+			{
+			return new(ELeave) CLogServOpConfigChange(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+														   aCliServData, aSessionId);
+			}
+		break;
+	case ELogOperationMaintain:		// no security check
+		return new(ELeave) CLogServOpMaintenance(aTaskInterface, aOperationManager, aMessage, aLogPackage,
+													  aCliServData, aSessionId);
+	default:
+		::PanicClientL(aMessage, ELogServFactoryUnrecognizedOperationType);
+		break;
+		}
+
+	// clients who don't have the required capability need to be informed.
+	User::Leave(KErrPermissionDenied);
+	return NULL;
+	}
+
+CLogServOperationBase* LogServFactory::NewViewOperationL(const TLogClientServerData& aCliServData, 
+                                                         MLogServTaskInterface& aTaskInterface, 
+                                                         MLogServOperationManager& aOperationManager, 
+                                                         const RMessage2& aMessage, 
+                                                         CLogPackage& aLogPackage, 
+                                                         TLogServSessionId aSessionId, 
+                                                         CLogServViewBase& aView)
+	{
+	// The operations are all owned by the operation queue/manager as soon
+	// as they are contructed (since they are all members of a queue).
+	switch(aCliServData.iOperationType)
+		{
+	case ELogOperationViewSetup:
+		return new(ELeave) CLogServOpViewSetup(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
+											   aCliServData, aSessionId);
+	case ELogOperationViewRemoveEvent:
+		return new(ELeave) CLogServOpViewEventRemove(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
+													 aCliServData, aSessionId);
+	case ELogOperationViewClearDuplicates:
+		return new(ELeave) CLogServOpViewClearDuplicates(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
+														 aCliServData, aSessionId);
+	case ELogOperationViewSetFlags:
+		return new(ELeave) CLogServOpViewSetFlags(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
+												  aCliServData, aSessionId);
+	case ELogOperationViewWindowFetch:
+		return new(ELeave) CLogServOpViewWindowFetcher(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
+													   aCliServData, aSessionId);
+	default:
+		::PanicClientL(aMessage, ELogServFactoryUnrecognizedOperationType2);
+		break;
+		}
+	return NULL;
+	}
+
+CLogServViewBase* LogServFactory::NewViewL(TLogViewType aType, 
+                                           TLogViewId aId, 
+                                           MLogServDatabaseTransactionInterface& aDatabase, 
+                                           MLogServBackupInterface& aBackupInterface, 
+                                           CLogPackage& aPackage, 
+                                           const RMessage2& aMessage)
+	{
+	switch(aType)
+		{
+	case ELogViewTypeEvent:
+		return CLogServViewEvent::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage);
+	case ELogViewTypeRecent:
+		return CLogServViewRecent::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage);
+	case ELogViewTypeDuplicate:
+		return CLogServViewDuplicate::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage);
+	default:
+		::PanicClientL(aMessage, ELogServFactoryUnrecognizedViewType);
+		break;
+		}
+	return NULL;
+	}