diff -r 000000000000 -r 4e949f03ecc5 locationtriggering/ltcontainer/inc/lbtdbtriggersmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationtriggering/ltcontainer/inc/lbtdbtriggersmanager.h Wed Nov 03 23:28:39 2010 +0530 @@ -0,0 +1,382 @@ +/* +* Copyright (c) 2006 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: This header file describes the class that handles the storage +* of triggers in database. +* +*/ + + +#ifndef C_LBTCONTAINER_DBTRIGGERS_MANAGER_H +#define C_LBTCONTAINER_DBTRIGGERS_MANAGER_H + +// system includes +#include +#include + +// user includes +#include "lbttriggerstoreinterface.h" + +// forward declaration +class CLbtDbOperationAO; +class MLbtTriggerStoreObserver; +class CLbtContainerFilterBase; + +/** + * This class provides an abstraction to store and retrieve triggers + * from a symbian database. + * + * It internally utilizes the database client side API to store and + * retrieve information from the database. It also contians a cache + * mechanism to provide for faster access to the information from the + * database. + */ +NONSHARABLE_CLASS( CLbtDbTriggersManager ) : public CActive, + public MLbtTriggerStore + { + enum TDbOperation + { + EDbOpNone = 0, + EDbOpCreateTrigger, + EDbOpGetTriggers, + EDbOpListTriggers, + EDbOpUpdateTrigger, + EDbOpUpdateTriggersState, + EDbOpUpdateTriggersValidity, + EDbOpUpdateTriggers, + EDbOpDeleteTriggers + }; + + enum TOperationState + { + EOpStateNone, + EOpStateQuery, + EOpStateIterating, + EOpCompaction + }; + +public: + /** + * The Symbian 2 phase constructor. + * This method creates a new instance of CLbtDbTriggersManager + * + * @return An instance of this class + */ + static CLbtDbTriggersManager* NewL( ); + + /** + * Destructor. + */ + virtual ~CLbtDbTriggersManager(); + + /** + * This method signals the completion of an asynchronous SQL Query + * Operation on the database + * @return any symbian error code. + */ + void DbSqlOperationCompletedL(TInt error); + + /** + * This method signals the completion of an asynchronous + * Operation on the database like database compaction or recovery. + * @return any symbian error code. + */ + void DbIncrementalOperationCompleted(TInt error); + + /** + * This method returns the list of triggers modified for a given operation + * @param[out] aIdArray Contains the list of triggers modified for a given operation. + */ + void TriggersModified(RArray& aArray); + + TInt GetCountOfEnabledAndValidTriggers(); + +protected: // from base class MLbtTriggerStore + + TTriggerTypeMask SupportedTriggerTypes(); + + void CreateTriggerL( CLbtContainerTriggerEntry &aEntry, + TRequestStatus& aStatus ); + + void GetTriggersL( RArray& aTriggerIds, + RPointerArray& aTriggers, + TLbtSecurityPolicy& aSecurityPolicy, + TRequestStatus &aStatus ); + void ListTriggersL( CLbtContainerListOptions* aFilter, + RPointerArray& aTriggers, + TLbtSecurityPolicy& aSecurityPolicy, + TRequestStatus &aStatus); + + void UpdateTriggerL( CLbtContainerTriggerEntry& aEntry, + TLbtTriggerDataMask aDataMask, + TLbtTriggerAttributeFieldsMask aAttrMask, + TLbtSecurityPolicy& aSecurityPolicy, + TRequestStatus& aStatus ); + + void UpdateTriggersStateL( CLbtTriggerEntry::TLbtTriggerState aState, + CLbtContainerUpdateFilter* aFilter, + TLbtFireOnUpdate aFireOnUpdate, + TLbtSecurityPolicy& aSecurityPolicy, + TRequestStatus& aStatus); + + void UpdateTriggersValidityL( TLbtTriggerDynamicInfo::TLbtTriggerValidity aValidity, + RArray& aTriggerIds, + TLbtSecurityPolicy& aSecurityPolicy, + TRequestStatus& aStatus); + + void UpdateTriggerFiredStateL( RArray& aTriggerIds, + TBool aFireBool, + TRequestStatus& aStatus ); + + void DeleteTriggersL( CLbtContainerUpdateFilter* /*aFilter*/, + TLbtSecurityPolicy& aSecurityPolicy, + TRequestStatus& /*aStatus*/ ); + + TBool IsStoreBusy(); + + void SetStoreChangeObserver(MLbtTriggerStoreObserver* aObserver); + TInt CancelCurrentOperation(); + +private: // From CActive + void RunL(); + TInt RunError(TInt aError); + void DoCancel(); + +private: // Other private functions + CLbtContainerTriggerEntry* RetrieveTriggerEntryFromDbL( RDbView& aMainView ); + void DeleteTriggerL(TLbtTriggerId aTriggerId); + void AppendTriggerInfo(CLbtContainerTriggerEntry* aEntry); + void SetTimeTillCompaction(TTime aTime); + void RemoveTriggerConditionFromDb( TLbtTriggerId aTriggerId, + CLbtGeoAreaBase::TGeoAreaType aAreaType ); + void AddGeoCellIntoDbL( CLbtTriggerEntry* aTriggerEntry ); + void AddGeoCircleIntoDbL( CLbtTriggerEntry* aTriggerEntry ); + void AddGeoHybridIntoDbL( CLbtTriggerEntry* aTriggerEntry ); + void SelfComplete(); + +private: // All active asynch operation handlers + /** + * Handles trigger creation async event + */ + void HandleTriggerCreationEventL(); + void HandleTriggersDeletionEventL(); + void HandleListTriggersEventL(); + void HandleTriggerStateUpdationEventL(); + void HandleTriggerUpdationEventL(); + void HandleGetTriggersEventL(); + +private: + /** + * C++ constructor + */ + CLbtDbTriggersManager(); + + /** + * Symbian 2nd phase of construction + */ + void ConstructL(); + + /** + * C++ Copy Constructor + * The private copy constructor prevents the usage of copy constructors + * with this class. + */ + CLbtDbTriggersManager(const CLbtDbTriggersManager& aDbTriggersManager); + + /** + * Overload equality operator + * The private overload of the equality operator prevents the usage of + * equality operator with this class. + */ + CLbtDbTriggersManager& operator =( + const CLbtDbTriggersManager& aDbTriggersManager); + + /** + * Create the Table in the Database + */ + void CreateTablesInDbL(); + + /** + * Helper method to create a trigger entry in the Db View + */ + void CreateTriggerInViewL(); + + void ProcessListTriggers( CLbtContainerTriggerEntry* aEntry, + TLbtTriggerAttributeFieldsMask aAttrMask, + TLbtTriggerDynamicInfoFieldsMask aDynInfoMask, + TLbtTriggerDataMask aDataMask ); + + /** + * Checks if the DB requires compaction and does the compaction + */ + void CompactDbIfRequiredL(); + + /** + * + */ + void CompleteClientRequest( TInt aError ); + + /** + * + */ + void ResetCurrentStates(); + + /** + * Prepares view for list operation. The view is prepared + * such that all the tuples required for the list operation + * is prepared + */ + void PrepareViewForListingL( RDbView& aView ); + + /** + * Prepare view for the common db such that only the tuples that + * match the trigger ids supplied are present in the view. + */ + void PrepareViewForTriggersL( const RArray& aTriggerIds, RDbView& aView ); + + /** + * + */ + TInt AsyncPrepareViewForTriggers( const RArray& aTriggerIds, RDbView& aView ); + + /** + * Prepares the main view for creation of a trigger + */ + TInt AsyncPrepareViewOfCommonTable(); + + /** + * Checks if the filter supplied matches the type of triggers stored in + * the database + * + * @return ETrue if the filter matches for DB, EFalse otherwise + */ + TBool IsFilterForDBTriggersL( CLbtTriggerFilterBase* aFilter ); + + /** + * Creates Cell triggers table in DB + */ + void CreateCellTriggersTableL( ); + + /** + * Creates Co-ordinate triggers table in DB + */ + void CreateCoordinateTriggersTableL(); + + /** + * Creates triggers common attribute table in DB + */ + void CreateCommonTriggerAttributesTableL(); + /** + * Creates triggers common attribute table in DB + */ + void CreateHybridTriggersTableL(); + +private: + // File Server Client Side handle + RFs iFs; + + // The Database Handle + RDbNamedDatabase iDb; + + // The operation executioner + CLbtDbOperationAO* iDbOperation; + + // SQL query to be executed + HBufC* iSqlQuery; + + /** The current operation being executed */ + TDbOperation iCurrentOperation; + + // The state of the current operation being handled + TOperationState iOperationState; + + /** + * The Database view which provides the interface to execute + * the db operations + */ + RDbView iView; + + /** + * The trigger entry on which the create trigger operation is performed. + * This object is not owned by container and should NOT BE deleted by + * container + */ + CLbtContainerTriggerEntry* iEntry; + + /** The status variable used for a create trigger request */ + TRequestStatus* iClientReqStatus; + + /** + * Pointer to CLbtContainerListOptions used in List Triggers operation + * This is a reference parameter and is valid only when the + * List Triggers operation is being executed. + * Db Triggers Manager should NEVER DELETE this member variable. + */ + CLbtContainerListOptions* iFilter; + + /** + * Owned by container + */ + CLbtContainerFilterBase* iFilterBase; + + /** + * + */ + TLbtSecurityPolicy iClientSecurityPolicy; + + /** + * Pointer to array of CLbtContainerTriggerEntry. + * This is a reference to the array which is filled up + * with the triggers to be returned to CLbtContainer class. + * This object should not NEVER BE deleted by container + */ + RPointerArray* iTriggers; + + // Array to hold of list of trigger ids modified by an operation + RArray iIdArray; + + // Count of enabled and valid trigger in the db + TInt iCountOfEnabledAndValidTrigger; + + // The time which can be provided untill compaction can proceed + TTime iTimeTillCompaction; + + // Refernce to trigger store observer + MLbtTriggerStoreObserver* iObserver; + + // Flag to check if the db has been opened successfully + TBool iIsDbOpened; + + //It is used to store new state of the trigger to be modified. + // It is used in RunL to do the actual modification + CLbtTriggerEntry::TLbtTriggerState iState; + + //It is used to store new fireonupdate flag of the trigger to be modified. + // It is used in RunL to do the actual modification. + TLbtFireOnUpdate iFireOnUpdate; + + // It is used to store datamask of trigger to be modified. + // It is used in RunL to do the actual modification of trigger. + TLbtTriggerDataMask iDataMask; + + // It is used to store attrmask of trigger to be modified. + // It is used in RunL to do the actual modification. + TLbtTriggerAttributeFieldsMask iAttrMask; + + // It is used to store id of triggers to be retrived. + // It is used in RunL to do the actual modification. + RArray* iTriggerIds; + }; + + +#endif // C_LBTCONTAINER_DBTRIGGERS_MANAGER_H