sl@0: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // LOGSERVOPERATIONFACTORY.H sl@0: // sl@0: // sl@0: sl@0: #include "LogServOperationFactory.h" sl@0: sl@0: // User includes sl@0: #include "logservpanic.h" sl@0: #include "LogServOperations.h" sl@0: #include "LogServView.h" sl@0: sl@0: sl@0: ///////////////////////////////////////////////////////////////////////////////////////// sl@0: // -----> LogServFactory (source) sl@0: ///////////////////////////////////////////////////////////////////////////////////////// sl@0: sl@0: CLogServOperationBase* LogServFactory::NewOperationL(const TLogClientServerData& aCliServData, sl@0: MLogServTaskInterface& aTaskInterface, sl@0: MLogServOperationManager& aOperationManager, sl@0: const RMessage2& aMessage, sl@0: CLogPackage& aLogPackage, sl@0: TLogServSessionId aSessionId) sl@0: { sl@0: // The operations are all owned by the operation queue/manager as soon sl@0: // as they are contructed (since they are all members of a queue). sl@0: switch(aCliServData.iOperationType) sl@0: { sl@0: case ELogOperationEventAdd: // security checked in CLogAddEvent::StartL sl@0: return new(ELeave) CLogServOpEventAdd(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationEventGet: // security checked in CLogGetEvent::DoRunL sl@0: return new(ELeave) CLogServOpEventGet(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationEventChange: // security checked in CLogChangeEvent::DoChangeL sl@0: return new(ELeave) CLogServOpEventChange(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationEventDelete: // security checked in CLogDeleteEvent::DoRunL sl@0: return new(ELeave) CLogServOpEventDelete(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationTypeAdd: sl@0: if(aMessage.HasCapability(ECapabilityWriteDeviceData)) sl@0: { sl@0: return new(ELeave) CLogServOpTypeAdd(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: } sl@0: break; sl@0: case ELogOperationTypeGet: // no security check sl@0: return new(ELeave) CLogServOpTypeGet(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationTypeChange: sl@0: if(aMessage.HasCapability(ECapabilityWriteDeviceData)) sl@0: { sl@0: return new(ELeave) CLogServOpTypeChange(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: } sl@0: break; sl@0: case ELogOperationTypeDelete: sl@0: if(aMessage.HasCapability(ECapabilityWriteDeviceData)) sl@0: { sl@0: return new(ELeave) CLogServOpTypeDelete(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: } sl@0: break; sl@0: case ELogOperationClearLog: sl@0: if(aMessage.HasCapability(ECapabilityWriteDeviceData)) sl@0: { sl@0: return new(ELeave) CLogServOpClearLog(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: } sl@0: break; sl@0: case ELogOperationClearRecent: sl@0: if(aMessage.HasCapability(ECapabilityWriteDeviceData)) sl@0: { sl@0: return new(ELeave) CLogServOpClearRecent(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: } sl@0: break; sl@0: case ELogOperationConfigGet: // no security check sl@0: return new(ELeave) CLogServOpConfigGet(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationConfigChange: sl@0: if(aMessage.HasCapability(ECapabilityWriteDeviceData)) sl@0: { sl@0: return new(ELeave) CLogServOpConfigChange(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: } sl@0: break; sl@0: case ELogOperationMaintain: // no security check sl@0: return new(ELeave) CLogServOpMaintenance(aTaskInterface, aOperationManager, aMessage, aLogPackage, sl@0: aCliServData, aSessionId); sl@0: default: sl@0: ::PanicClientL(aMessage, ELogServFactoryUnrecognizedOperationType); sl@0: break; sl@0: } sl@0: sl@0: // clients who don't have the required capability need to be informed. sl@0: User::Leave(KErrPermissionDenied); sl@0: return NULL; sl@0: } sl@0: sl@0: CLogServOperationBase* LogServFactory::NewViewOperationL(const TLogClientServerData& aCliServData, sl@0: MLogServTaskInterface& aTaskInterface, sl@0: MLogServOperationManager& aOperationManager, sl@0: const RMessage2& aMessage, sl@0: CLogPackage& aLogPackage, sl@0: TLogServSessionId aSessionId, sl@0: CLogServViewBase& aView) sl@0: { sl@0: // The operations are all owned by the operation queue/manager as soon sl@0: // as they are contructed (since they are all members of a queue). sl@0: switch(aCliServData.iOperationType) sl@0: { sl@0: case ELogOperationViewSetup: sl@0: return new(ELeave) CLogServOpViewSetup(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationViewRemoveEvent: sl@0: return new(ELeave) CLogServOpViewEventRemove(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationViewClearDuplicates: sl@0: return new(ELeave) CLogServOpViewClearDuplicates(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationViewSetFlags: sl@0: return new(ELeave) CLogServOpViewSetFlags(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView, sl@0: aCliServData, aSessionId); sl@0: case ELogOperationViewWindowFetch: sl@0: return new(ELeave) CLogServOpViewWindowFetcher(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView, sl@0: aCliServData, aSessionId); sl@0: default: sl@0: ::PanicClientL(aMessage, ELogServFactoryUnrecognizedOperationType2); sl@0: break; sl@0: } sl@0: return NULL; sl@0: } sl@0: sl@0: CLogServViewBase* LogServFactory::NewViewL(TLogViewType aType, sl@0: TLogViewId aId, sl@0: MLogServDatabaseTransactionInterface& aDatabase, sl@0: MLogServBackupInterface& aBackupInterface, sl@0: CLogPackage& aPackage, sl@0: const RMessage2& aMessage) sl@0: { sl@0: switch(aType) sl@0: { sl@0: case ELogViewTypeEvent: sl@0: return CLogServViewEvent::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage); sl@0: case ELogViewTypeRecent: sl@0: return CLogServViewRecent::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage); sl@0: case ELogViewTypeDuplicate: sl@0: return CLogServViewDuplicate::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage); sl@0: default: sl@0: ::PanicClientL(aMessage, ELogServFactoryUnrecognizedViewType); sl@0: break; sl@0: } sl@0: return NULL; sl@0: }