--- /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;
+ }