--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/eventlogger/LogServ/inc/LogServView.h Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,282 @@
+// 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:
+//
+
+#ifndef __LOGSERVVIEW_H__
+#define __LOGSERVVIEW_H__
+
+#include <logcli.h>
+#include "LOGQUERY.H"
+#include "LogCliServShared.h"
+#include "LogServBackupObserver.h"
+#include "LogServDatabaseChangeObserver.h"
+#include "LogServDatabaseTransactionInterface.h"
+
+// Classes referenced
+class CLogPackage;
+class CLogServViewLockObserver;
+class CLogServViewChangeManager;
+class MLogServDatabaseTransactionInterface;
+class MLogServBackupInterface;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////// CLogServViewBase /////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+Base class for the view that the LogEng server can create.
+Implements MLogServBackupObserver and MLogServDatabaseChangeObserver interfaces.
+
+@see MLogServBackupObserver
+@see MLogServDatabaseChangeObserver
+@internalComponent
+*/
+class CLogServViewBase : public CBase, public MLogServBackupObserver, public MLogServDatabaseChangeObserver
+ {
+public:
+ ~CLogServViewBase();
+ void RequestChangeNotifications(const RMessage2& aMessage);
+ void RequestChangeNotificationsCancel();
+ void RequestLockStatusChanges(const RMessage2& aMessage);
+ void RequestLockStatusChangesCancel();
+ void RequestChangesL(const RMessage2& aMessage);
+ void SetupL(const RMessage2& aMessage, TLogFilterConstructionType aFilterType);
+ virtual TPtrC GetQueryStringL(const RMessage2& aMessage, TLogFilterConstructionType aFilterType)=0;
+ virtual void RemoveL(const RMessage2& aMessage);
+ virtual void ClearDuplicatesL(const RMessage2& aMessage);
+ virtual void SetFlagsL(const RMessage2& aMessage);
+ inline TLogViewId ViewId() const;
+ TInt Count() const;
+ TLogId At(TInt aIndex) const;
+ inline TBool ViewIsReady() const;
+
+protected:
+ CLogServViewBase(MLogServDatabaseTransactionInterface& aDatabase,
+ MLogServBackupInterface& aBackupInterface,
+ CLogPackage& aPackage,
+ TLogViewType aType,
+ TLogViewId aViewId,
+ const RMessage2& aMessage);
+
+ void ConstructL();
+ static void DestroyList(TAny *aPtr);
+
+private: // FROM MLogServDatabaseChangeObserver
+ void DCOHandleChangeEventsL(const CLogChangeDefinition& aChanges);
+ // FROM MLogServBackupObserver
+ void BOHandleEventL(TLogServBackupEvent aEvent);
+
+ void InitializeColumnsL(RDbRowSet& aRowSet);
+ inline TInt ClientSideCursorPosition() const;
+ //
+ void ResetViewContentsL(RDbRowSet& aRowSet);
+ void PrepareViewContentsL(const TDesC& aSQL);
+ TInt RebuildViewContentsIfNecessary();
+ void DoHandleChangeEventsL(const CLogChangeDefinition& aChanges);
+ void RebuildViewL();
+ TBool IsAllowed(TEventOp aEventOp, TUint8 aEventTypeIndex);
+
+protected:
+ MLogServDatabaseTransactionInterface& iDatabase;
+ CLogPackage& iPackage;
+
+private:
+ MLogServBackupInterface& iBackupInterface;
+ TLogViewType iType;//The type of view that this object represents
+ TLogViewId iViewId;//The id of this view
+ RArray<TLogId> iViewContents;//An array which contains the log ids of all the items in this view
+ TBool iViewContentsReady;
+ HBufC* iSql;//The SQL filter/condition which is used to build this view
+ TBool iRebuildViewContents;//A flag to indicate that we need to rebuild the view because handling a change notification failed (e.g due to OOM).
+ CLogServViewLockObserver* iLockChangeObserver;//Manages lock change events
+ CLogServViewChangeManager* iChangeManager;//Manages change events for this view
+ const RMessage2& iMessage;//Passed in the constructor by the LogServOperationFactory - used to check security
+ /**
+ Data structure for storage of cached security information
+ @internalComponent
+ */
+ struct SStandardTypeSecurity
+ {
+ TUid eventType;
+ TBool readAccess;
+ TBool writeAccess;
+ };
+ RArray<SStandardTypeSecurity> iStandardTypeSecurityCache;
+ static TDbColNo iIdColNo;
+ static TDbColNo iTypeColNo;
+ static TDbColNo iFlagColNo[KLogFlagsCount];
+
+ };
+
+/**
+Returns the id of this view
+*/
+inline TLogViewId CLogServViewBase::ViewId() const
+ {
+ return iViewId;
+ }
+
+/**
+Is the view ready?
+*/
+inline TBool CLogServViewBase::ViewIsReady() const
+ {
+ return (iViewContentsReady && iSql);
+ }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////// CLogServViewLockObserver ////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+Implements MLogServBackupObserver interface.
+An instance of this class is data member of CLogServViewBase.
+It is used every time when the client side requests notification regarding the view status.
+The view status changes to "locked" during the backup/restore operations.
+
+@see CLogServViewBase
+@see MLogServBackupObserver
+@internalComponent
+*/
+class CLogServViewLockObserver : public CBase, public MLogServBackupObserver
+ {
+public:
+ static CLogServViewLockObserver* NewL(MLogServBackupInterface& aBackupInterface);
+ ~CLogServViewLockObserver();
+ void RequestLockStatusChanges(const RMessage2& aMessage);
+ void RequestLockStatusChangesCancel();
+
+private:
+ CLogServViewLockObserver(MLogServBackupInterface& aBackupInterface);
+ void ConstructL();
+ // FROM MLogServBackupObserver
+ void BOHandleEventL(TLogServBackupEvent aEvent);
+
+ inline TBool HaveLockStatusChangePointer() const;
+ void CompleteLockStatusChangeMessage(TInt aCompletionCode);
+
+private:
+ MLogServBackupInterface& iBackupInterface;
+ RArray<TLogViewLockStatus> iLockEvents;//Holds state changes when the client isn't able to receive them immediately.
+ RMessagePtr2 iLockStatusChangeMessage;//Completed when the view is locked/unlocked
+
+ };
+
+inline TBool CLogServViewLockObserver::HaveLockStatusChangePointer() const
+ {
+ return (iLockStatusChangeMessage != RMessagePtr2());
+ }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////// CLogServViewEvent ///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+CLogServViewBase derived class.
+
+@see CLogServViewBase
+@internalComponent
+*/
+class CLogServViewEvent : public CLogServViewBase
+ {
+public:
+ static CLogServViewEvent* NewL(MLogServDatabaseTransactionInterface& aDatabase,
+ MLogServBackupInterface& aBackupInterface,
+ CLogPackage& aPackage,
+ TLogViewId aViewId,
+ const RMessage2& aMessage);
+
+ TPtrC GetQueryStringL(const RMessage2& aMessage, TLogFilterConstructionType aFilterType);
+ //
+private:
+ CLogServViewEvent(MLogServDatabaseTransactionInterface& aDatabase,
+ MLogServBackupInterface& aBackupInterface,
+ CLogPackage& aPackage,
+ TLogViewId aViewId,
+ const RMessage2& aMessage);
+ };
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////// CLogServViewRecent //////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+CLogServViewBase derived class.
+
+@see CLogServViewBase
+@internalComponent
+*/
+class CLogServViewRecent : public CLogServViewBase
+ {
+public:
+ static CLogServViewRecent* NewL(MLogServDatabaseTransactionInterface& aDatabase,
+ MLogServBackupInterface& aBackupInterface,
+ CLogPackage& aPackage,
+ TLogViewId aViewId,
+ const RMessage2& aMessage);
+
+ TPtrC GetQueryStringL(const RMessage2& aMessage, TLogFilterConstructionType aFilterType);
+ void RemoveL(const RMessage2& aMessage);
+ void ClearDuplicatesL(const RMessage2& aMessage);
+ //
+
+ //
+private:
+ CLogServViewRecent(MLogServDatabaseTransactionInterface& aDatabase, MLogServBackupInterface& aBackupInterface, CLogPackage& aPackage, TLogViewId aViewId, const RMessage2& aMessage);
+ void InitializeColumns2L(RDbRowSet& aRowSet);
+ //
+private:
+ TLogRecentList iRecentList;
+
+ static TDbColNo iIdColNo;
+ static TDbColNo iRecentColNo;
+ static TDbColNo iDuplicateColNo;
+
+ };
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////// CLogServViewDuplicate ///////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+CLogServViewBase derived class.
+
+@see CLogServViewBase
+@internalComponent
+*/
+class CLogServViewDuplicate : public CLogServViewBase
+ {
+public:
+ static CLogServViewDuplicate* NewL(MLogServDatabaseTransactionInterface& aDatabase,
+ MLogServBackupInterface& aBackupInterface,
+ CLogPackage& aPackage,
+ TLogViewId aViewId,
+ const RMessage2& aMessage);
+
+ TPtrC GetQueryStringL(const RMessage2& aMessage, TLogFilterConstructionType aFilterType);
+ void RemoveL(const RMessage2& aMessage);
+ //
+private:
+ CLogServViewDuplicate(MLogServDatabaseTransactionInterface& aDatabase,
+ MLogServBackupInterface& aBackupInterface,
+ CLogPackage& aPackage,
+ TLogViewId aViewId,
+ const RMessage2& aMessage);
+ //
+private:
+ TLogId iSourceId;
+ };
+
+#endif