os/persistentdata/loggingservices/eventlogger/LogServ/src/LogServOperationFactory.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// LOGSERVOPERATIONFACTORY.H
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
#include "LogServOperationFactory.h"
sl@0
    19
sl@0
    20
// User includes
sl@0
    21
#include "logservpanic.h"
sl@0
    22
#include "LogServOperations.h"
sl@0
    23
#include "LogServView.h"
sl@0
    24
sl@0
    25
sl@0
    26
/////////////////////////////////////////////////////////////////////////////////////////
sl@0
    27
// -----> LogServFactory (source)
sl@0
    28
/////////////////////////////////////////////////////////////////////////////////////////
sl@0
    29
sl@0
    30
CLogServOperationBase* LogServFactory::NewOperationL(const TLogClientServerData& aCliServData, 
sl@0
    31
                                                     MLogServTaskInterface& aTaskInterface, 
sl@0
    32
                                                     MLogServOperationManager& aOperationManager, 
sl@0
    33
                                                     const RMessage2& aMessage, 
sl@0
    34
                                                     CLogPackage& aLogPackage, 
sl@0
    35
                                                     TLogServSessionId aSessionId)
sl@0
    36
	{
sl@0
    37
	// The operations are all owned by the operation queue/manager as soon
sl@0
    38
	// as they are contructed (since they are all members of a queue).
sl@0
    39
	switch(aCliServData.iOperationType)
sl@0
    40
		{
sl@0
    41
	case ELogOperationEventAdd:		// security checked in CLogAddEvent::StartL
sl@0
    42
		return new(ELeave) CLogServOpEventAdd(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    43
												   aCliServData, aSessionId);
sl@0
    44
	case ELogOperationEventGet:		// security checked in CLogGetEvent::DoRunL
sl@0
    45
		return new(ELeave) CLogServOpEventGet(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    46
												   aCliServData, aSessionId);
sl@0
    47
	case ELogOperationEventChange:	// security checked in CLogChangeEvent::DoChangeL
sl@0
    48
		return new(ELeave) CLogServOpEventChange(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    49
													  aCliServData, aSessionId);
sl@0
    50
	case ELogOperationEventDelete:	// security checked in CLogDeleteEvent::DoRunL
sl@0
    51
		return new(ELeave) CLogServOpEventDelete(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    52
													  aCliServData, aSessionId);
sl@0
    53
	case ELogOperationTypeAdd:
sl@0
    54
		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
sl@0
    55
			{
sl@0
    56
			return new(ELeave) CLogServOpTypeAdd(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    57
													  aCliServData, aSessionId);
sl@0
    58
			}
sl@0
    59
		break;
sl@0
    60
	case ELogOperationTypeGet:		// no security check
sl@0
    61
		return new(ELeave) CLogServOpTypeGet(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    62
												  aCliServData, aSessionId);
sl@0
    63
	case ELogOperationTypeChange:
sl@0
    64
		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
sl@0
    65
			{
sl@0
    66
			return new(ELeave) CLogServOpTypeChange(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    67
														 aCliServData, aSessionId);
sl@0
    68
			}
sl@0
    69
		break;
sl@0
    70
	case ELogOperationTypeDelete:
sl@0
    71
		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
sl@0
    72
			{
sl@0
    73
			return new(ELeave) CLogServOpTypeDelete(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    74
														 aCliServData, aSessionId);
sl@0
    75
			}
sl@0
    76
		break;
sl@0
    77
	case ELogOperationClearLog:
sl@0
    78
		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
sl@0
    79
			{
sl@0
    80
			return new(ELeave) CLogServOpClearLog(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    81
													   aCliServData, aSessionId);
sl@0
    82
			}
sl@0
    83
		break;
sl@0
    84
	case ELogOperationClearRecent:
sl@0
    85
		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
sl@0
    86
			{
sl@0
    87
			return new(ELeave) CLogServOpClearRecent(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    88
														  aCliServData, aSessionId);
sl@0
    89
			}
sl@0
    90
		break;
sl@0
    91
	case ELogOperationConfigGet:	// no security check
sl@0
    92
		return new(ELeave) CLogServOpConfigGet(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    93
													aCliServData, aSessionId);
sl@0
    94
	case ELogOperationConfigChange:
sl@0
    95
		if(aMessage.HasCapability(ECapabilityWriteDeviceData))
sl@0
    96
			{
sl@0
    97
			return new(ELeave) CLogServOpConfigChange(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
    98
														   aCliServData, aSessionId);
sl@0
    99
			}
sl@0
   100
		break;
sl@0
   101
	case ELogOperationMaintain:		// no security check
sl@0
   102
		return new(ELeave) CLogServOpMaintenance(aTaskInterface, aOperationManager, aMessage, aLogPackage,
sl@0
   103
													  aCliServData, aSessionId);
sl@0
   104
	default:
sl@0
   105
		::PanicClientL(aMessage, ELogServFactoryUnrecognizedOperationType);
sl@0
   106
		break;
sl@0
   107
		}
sl@0
   108
sl@0
   109
	// clients who don't have the required capability need to be informed.
sl@0
   110
	User::Leave(KErrPermissionDenied);
sl@0
   111
	return NULL;
sl@0
   112
	}
sl@0
   113
sl@0
   114
CLogServOperationBase* LogServFactory::NewViewOperationL(const TLogClientServerData& aCliServData, 
sl@0
   115
                                                         MLogServTaskInterface& aTaskInterface, 
sl@0
   116
                                                         MLogServOperationManager& aOperationManager, 
sl@0
   117
                                                         const RMessage2& aMessage, 
sl@0
   118
                                                         CLogPackage& aLogPackage, 
sl@0
   119
                                                         TLogServSessionId aSessionId, 
sl@0
   120
                                                         CLogServViewBase& aView)
sl@0
   121
	{
sl@0
   122
	// The operations are all owned by the operation queue/manager as soon
sl@0
   123
	// as they are contructed (since they are all members of a queue).
sl@0
   124
	switch(aCliServData.iOperationType)
sl@0
   125
		{
sl@0
   126
	case ELogOperationViewSetup:
sl@0
   127
		return new(ELeave) CLogServOpViewSetup(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
sl@0
   128
											   aCliServData, aSessionId);
sl@0
   129
	case ELogOperationViewRemoveEvent:
sl@0
   130
		return new(ELeave) CLogServOpViewEventRemove(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
sl@0
   131
													 aCliServData, aSessionId);
sl@0
   132
	case ELogOperationViewClearDuplicates:
sl@0
   133
		return new(ELeave) CLogServOpViewClearDuplicates(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
sl@0
   134
														 aCliServData, aSessionId);
sl@0
   135
	case ELogOperationViewSetFlags:
sl@0
   136
		return new(ELeave) CLogServOpViewSetFlags(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
sl@0
   137
												  aCliServData, aSessionId);
sl@0
   138
	case ELogOperationViewWindowFetch:
sl@0
   139
		return new(ELeave) CLogServOpViewWindowFetcher(aTaskInterface, aOperationManager, aMessage, aLogPackage, aView,
sl@0
   140
													   aCliServData, aSessionId);
sl@0
   141
	default:
sl@0
   142
		::PanicClientL(aMessage, ELogServFactoryUnrecognizedOperationType2);
sl@0
   143
		break;
sl@0
   144
		}
sl@0
   145
	return NULL;
sl@0
   146
	}
sl@0
   147
sl@0
   148
CLogServViewBase* LogServFactory::NewViewL(TLogViewType aType, 
sl@0
   149
                                           TLogViewId aId, 
sl@0
   150
                                           MLogServDatabaseTransactionInterface& aDatabase, 
sl@0
   151
                                           MLogServBackupInterface& aBackupInterface, 
sl@0
   152
                                           CLogPackage& aPackage, 
sl@0
   153
                                           const RMessage2& aMessage)
sl@0
   154
	{
sl@0
   155
	switch(aType)
sl@0
   156
		{
sl@0
   157
	case ELogViewTypeEvent:
sl@0
   158
		return CLogServViewEvent::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage);
sl@0
   159
	case ELogViewTypeRecent:
sl@0
   160
		return CLogServViewRecent::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage);
sl@0
   161
	case ELogViewTypeDuplicate:
sl@0
   162
		return CLogServViewDuplicate::NewL(aDatabase, aBackupInterface, aPackage, aId, aMessage);
sl@0
   163
	default:
sl@0
   164
		::PanicClientL(aMessage, ELogServFactoryUnrecognizedViewType);
sl@0
   165
		break;
sl@0
   166
		}
sl@0
   167
	return NULL;
sl@0
   168
	}