locationtriggering/ltcontainer/inc/lbtramtriggersmanager.h
author hgs
Wed, 03 Nov 2010 23:28:39 +0530
changeset 56 4e949f03ecc5
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  This header file describes the class that handles the storage
hgs
parents:
diff changeset
    15
*                of triggers in RAM Structures.
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#ifndef C_LBTCONTAINER_RAMTRIGGERS_MANAGER_H
hgs
parents:
diff changeset
    21
#define C_LBTCONTAINER_RAMTRIGGERS_MANAGER_H
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
// system includes
hgs
parents:
diff changeset
    24
#include <e32base.h>
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
// user includes
hgs
parents:
diff changeset
    27
#include "lbttriggerstoreinterface.h"
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
class CLbtRamTriggerIdTree;
hgs
parents:
diff changeset
    30
class MLbtTriggerStoreObserver;
hgs
parents:
diff changeset
    31
class CLbtContainerFilterBase;
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
/**
hgs
parents:
diff changeset
    34
 *  This class provides an abstraction to store and retrieve triggers
hgs
parents:
diff changeset
    35
 *  from RAM Structures.
hgs
parents:
diff changeset
    36
 *
hgs
parents:
diff changeset
    37
 *  It internally utilizes RAM memory and stores the trigger information
hgs
parents:
diff changeset
    38
 *  in a efficient data structure.
hgs
parents:
diff changeset
    39
 */
hgs
parents:
diff changeset
    40
NONSHARABLE_CLASS( CLbtRamTriggersManager ) : public CActive,
hgs
parents:
diff changeset
    41
                                              public MLbtTriggerStore
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
public:
hgs
parents:
diff changeset
    44
    enum TOperation
hgs
parents:
diff changeset
    45
        {
hgs
parents:
diff changeset
    46
        EOperationNone,
hgs
parents:
diff changeset
    47
        EOperationCreate,
hgs
parents:
diff changeset
    48
        EOperationUpdateTrigger,
hgs
parents:
diff changeset
    49
        EOperationDelete,
hgs
parents:
diff changeset
    50
        EOperationUpdatingState,
hgs
parents:
diff changeset
    51
        EOperationListing,
hgs
parents:
diff changeset
    52
        EOperationGetTriggers
hgs
parents:
diff changeset
    53
        };
hgs
parents:
diff changeset
    54
    
hgs
parents:
diff changeset
    55
    /**
hgs
parents:
diff changeset
    56
     * The Symbian 2 phase constructor.
hgs
parents:
diff changeset
    57
     * This method creates a new instance of CLbtRamTriggersManager
hgs
parents:
diff changeset
    58
     *
hgs
parents:
diff changeset
    59
     * @return An instance of this class
hgs
parents:
diff changeset
    60
     */
hgs
parents:
diff changeset
    61
    static CLbtRamTriggersManager* NewL( );
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    /**
hgs
parents:
diff changeset
    64
     * Destructor.
hgs
parents:
diff changeset
    65
     */
hgs
parents:
diff changeset
    66
    virtual ~CLbtRamTriggersManager();
hgs
parents:
diff changeset
    67
    
hgs
parents:
diff changeset
    68
     /**
hgs
parents:
diff changeset
    69
     * This method returns the list of triggers modified for a given operation
hgs
parents:
diff changeset
    70
     * @param[out] aIdArray Contains the list of triggers modified for a given operation. 
hgs
parents:
diff changeset
    71
     */
hgs
parents:
diff changeset
    72
     void TriggersModified(RArray<TLbtTriggerModifiedInfo>& aArray);
hgs
parents:
diff changeset
    73
     
hgs
parents:
diff changeset
    74
	 TInt GetCountOfEnabledAndValidTriggers();
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
protected: // from base class MLbtTriggerStore
hgs
parents:
diff changeset
    77
    /**
hgs
parents:
diff changeset
    78
     * This method returns the types of triggers that are supported in this
hgs
parents:
diff changeset
    79
     * trigger store.
hgs
parents:
diff changeset
    80
     *
hgs
parents:
diff changeset
    81
     * @return a bitmask of the types of triggers supported by a trigger 
hgs
parents:
diff changeset
    82
     * store.
hgs
parents:
diff changeset
    83
     */
hgs
parents:
diff changeset
    84
    virtual TTriggerTypeMask SupportedTriggerTypes();
hgs
parents:
diff changeset
    85
    
hgs
parents:
diff changeset
    86
    void CreateTriggerL( CLbtContainerTriggerEntry &aEntry,
hgs
parents:
diff changeset
    87
                    			 TRequestStatus& aStatus);
hgs
parents:
diff changeset
    88
                    			 
hgs
parents:
diff changeset
    89
	void GetTriggersL( RArray<TLbtTriggerId>& aTriggerIds,
hgs
parents:
diff changeset
    90
				       RPointerArray<CLbtContainerTriggerEntry>& aTriggers, 
hgs
parents:
diff changeset
    91
				       TLbtSecurityPolicy& aSecurityPolicy,
hgs
parents:
diff changeset
    92
				       TRequestStatus &aStatus );
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    void ListTriggersL( CLbtContainerListOptions* aFilter,
hgs
parents:
diff changeset
    95
						RPointerArray<CLbtContainerTriggerEntry>& aTriggers,
hgs
parents:
diff changeset
    96
						TLbtSecurityPolicy& aSecurityPolicy,
hgs
parents:
diff changeset
    97
						TRequestStatus &aStatus );
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
    void FilterByAreaL( CLbtContainerListOptions* aFilter,
hgs
parents:
diff changeset
   100
    					RPointerArray<CLbtContainerTriggerEntry>& aTriggers,
hgs
parents:
diff changeset
   101
    					TLbtSecurityPolicy& aSecurityPolicy );
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    void FilterByAttributeL( CLbtContainerListOptions* aFilter,
hgs
parents:
diff changeset
   104
    						 RPointerArray<CLbtContainerTriggerEntry>& aTriggers,
hgs
parents:
diff changeset
   105
    						 TLbtSecurityPolicy& aSecurityPolicy );
hgs
parents:
diff changeset
   106
   
hgs
parents:
diff changeset
   107
    
hgs
parents:
diff changeset
   108
    void UpdateTriggerL( CLbtContainerTriggerEntry& aEntry,
hgs
parents:
diff changeset
   109
						 TLbtTriggerDataMask aDataMask,
hgs
parents:
diff changeset
   110
						 TLbtTriggerAttributeFieldsMask aAttrMask,
hgs
parents:
diff changeset
   111
						 TLbtSecurityPolicy& aSecurityPolicy,
hgs
parents:
diff changeset
   112
						 TRequestStatus& aStatus);    
hgs
parents:
diff changeset
   113
    
hgs
parents:
diff changeset
   114
    void UpdateTriggersStateL( CLbtTriggerEntry::TLbtTriggerState aState,
hgs
parents:
diff changeset
   115
			                   CLbtContainerUpdateFilter* aFilter,
hgs
parents:
diff changeset
   116
			                   TLbtFireOnUpdate aFireOnUpdate,
hgs
parents:
diff changeset
   117
			                   TLbtSecurityPolicy& aSecurityPolicy,
hgs
parents:
diff changeset
   118
			                   TRequestStatus& aStatus);
hgs
parents:
diff changeset
   119
                    
hgs
parents:
diff changeset
   120
    void UpdateTriggersValidityL( TLbtTriggerDynamicInfo::TLbtTriggerValidity aValidity,
hgs
parents:
diff changeset
   121
			                      RArray<TLbtTriggerId>& aTriggerIds,
hgs
parents:
diff changeset
   122
			                      TLbtSecurityPolicy& aSecurityPolicy,
hgs
parents:
diff changeset
   123
			                      TRequestStatus& aStatus );
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
	void UpdateTriggerFiredStateL( RArray<TLbtTriggerId>& aTriggerIds,
hgs
parents:
diff changeset
   126
								   TBool aFireBool,
hgs
parents:
diff changeset
   127
			                       TRequestStatus& aStatus );
hgs
parents:
diff changeset
   128
    
hgs
parents:
diff changeset
   129
    void DeleteTriggersL( CLbtContainerUpdateFilter* aFilter,
hgs
parents:
diff changeset
   130
						  TLbtSecurityPolicy& aSecurityPolicy,
hgs
parents:
diff changeset
   131
						  TRequestStatus& aStatus );            
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
    void DeleteTriggerL(TLbtTriggerId aTriggerId);
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    void FilterCompositeL( CLbtContainerListOptions* aFilter,
hgs
parents:
diff changeset
   136
    					   RPointerArray<CLbtContainerTriggerEntry>& aTriggers,
hgs
parents:
diff changeset
   137
    					   TLbtSecurityPolicy& aSecurityPolicy );
hgs
parents:
diff changeset
   138
    
hgs
parents:
diff changeset
   139
    void SetTimeTillCompaction(TTime /*aTime*/);
hgs
parents:
diff changeset
   140
    
hgs
parents:
diff changeset
   141
    /**
hgs
parents:
diff changeset
   142
	 * Used to check if the trigger store is busy
hgs
parents:
diff changeset
   143
	 *
hgs
parents:
diff changeset
   144
	 * @return ETrue if the store is busy EFalse otherwise
hgs
parents:
diff changeset
   145
	 */
hgs
parents:
diff changeset
   146
    TBool IsStoreBusy();
hgs
parents:
diff changeset
   147
    
hgs
parents:
diff changeset
   148
    void SetStoreChangeObserver(MLbtTriggerStoreObserver* aObserver);
hgs
parents:
diff changeset
   149
    
hgs
parents:
diff changeset
   150
    TInt CancelCurrentOperation();
hgs
parents:
diff changeset
   151
 
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
private:
hgs
parents:
diff changeset
   154
    void AppendTriggerInfo(CLbtContainerTriggerEntry* aEntry);
hgs
parents:
diff changeset
   155
    
hgs
parents:
diff changeset
   156
    void SelfComplete();
hgs
parents:
diff changeset
   157
    
hgs
parents:
diff changeset
   158
    void CompleteClientRequest(TInt aError);
hgs
parents:
diff changeset
   159
    
hgs
parents:
diff changeset
   160
    void HandleUpdateTriggerEventL();
hgs
parents:
diff changeset
   161
    
hgs
parents:
diff changeset
   162
    void HandleListTriggerEventL();
hgs
parents:
diff changeset
   163
    
hgs
parents:
diff changeset
   164
    void HandleDeleteTriggersEventL();
hgs
parents:
diff changeset
   165
    
hgs
parents:
diff changeset
   166
    void HandleUpdateTriggersStateEventL();
hgs
parents:
diff changeset
   167
    
hgs
parents:
diff changeset
   168
    void HandleGetTriggersEventL();
hgs
parents:
diff changeset
   169
    
hgs
parents:
diff changeset
   170
private: // From CActive
hgs
parents:
diff changeset
   171
    void RunL();
hgs
parents:
diff changeset
   172
    TInt RunError(TInt aError);
hgs
parents:
diff changeset
   173
    void DoCancel();    
hgs
parents:
diff changeset
   174
    
hgs
parents:
diff changeset
   175
private:
hgs
parents:
diff changeset
   176
    /**
hgs
parents:
diff changeset
   177
     * C++ constructor
hgs
parents:
diff changeset
   178
     */
hgs
parents:
diff changeset
   179
    CLbtRamTriggersManager();
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
    /**
hgs
parents:
diff changeset
   182
     * Symbian 2nd phase of construction
hgs
parents:
diff changeset
   183
     */
hgs
parents:
diff changeset
   184
    void ConstructL();
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
    /**
hgs
parents:
diff changeset
   187
     * C++ Copy Constructor
hgs
parents:
diff changeset
   188
     * The private copy constructor prevents the usage of copy constructors
hgs
parents:
diff changeset
   189
     * with this class.
hgs
parents:
diff changeset
   190
     */
hgs
parents:
diff changeset
   191
    CLbtRamTriggersManager(const CLbtRamTriggersManager& aRamTriggersManager);
hgs
parents:
diff changeset
   192
    
hgs
parents:
diff changeset
   193
    /**
hgs
parents:
diff changeset
   194
     * Overload equality operator
hgs
parents:
diff changeset
   195
     * The private overload of the equality operator prevents the usage of
hgs
parents:
diff changeset
   196
     * equality operator with this class.
hgs
parents:
diff changeset
   197
     */
hgs
parents:
diff changeset
   198
    CLbtRamTriggersManager& operator =(const CLbtRamTriggersManager& aRamTriggersManager);
hgs
parents:
diff changeset
   199
    
hgs
parents:
diff changeset
   200
    CLbtRamTriggerIdTree* iTriggerIdTree;   
hgs
parents:
diff changeset
   201
    
hgs
parents:
diff changeset
   202
    RArray<TLbtTriggerModifiedInfo> iIdArray;
hgs
parents:
diff changeset
   203
    
hgs
parents:
diff changeset
   204
    TInt iCountOfEnabledAndValidTrigger;
hgs
parents:
diff changeset
   205
    
hgs
parents:
diff changeset
   206
    // Data member to hold the current operation underway
hgs
parents:
diff changeset
   207
    TOperation iCurrentOperation;    
hgs
parents:
diff changeset
   208
    
hgs
parents:
diff changeset
   209
    // The client status
hgs
parents:
diff changeset
   210
    TRequestStatus* iClientStatus;
hgs
parents:
diff changeset
   211
    
hgs
parents:
diff changeset
   212
    // Data member to hold the trigger id which is under operation
hgs
parents:
diff changeset
   213
    TLbtTriggerId iCurrentTriggerId;
hgs
parents:
diff changeset
   214
    
hgs
parents:
diff changeset
   215
    // Clients security policy
hgs
parents:
diff changeset
   216
    TLbtSecurityPolicy iClientSecurityPolicy;
hgs
parents:
diff changeset
   217
    
hgs
parents:
diff changeset
   218
    // Pointer to clients trigger array
hgs
parents:
diff changeset
   219
    RPointerArray<CLbtContainerTriggerEntry>* iClientTriggerArray;
hgs
parents:
diff changeset
   220
    
hgs
parents:
diff changeset
   221
    // Copy of client provided filter base
hgs
parents:
diff changeset
   222
    CLbtContainerFilterBase* iFilterBase;
hgs
parents:
diff changeset
   223
    
hgs
parents:
diff changeset
   224
    // Client provided list options filter
hgs
parents:
diff changeset
   225
    CLbtContainerListOptions* iFilter;
hgs
parents:
diff changeset
   226
    
hgs
parents:
diff changeset
   227
    // Iterator into modification array
hgs
parents:
diff changeset
   228
    TInt iIterator;
hgs
parents:
diff changeset
   229
    
hgs
parents:
diff changeset
   230
    // Trigger state
hgs
parents:
diff changeset
   231
    CLbtTriggerEntry::TLbtTriggerState iState;
hgs
parents:
diff changeset
   232
    
hgs
parents:
diff changeset
   233
    // Fire on update flag
hgs
parents:
diff changeset
   234
    TLbtFireOnUpdate iFireOnUpdate;
hgs
parents:
diff changeset
   235
    
hgs
parents:
diff changeset
   236
    // Container trigger entry
hgs
parents:
diff changeset
   237
    CLbtContainerTriggerEntry* iClientTriggerEntry;
hgs
parents:
diff changeset
   238
    
hgs
parents:
diff changeset
   239
    TLbtTriggerDataMask  iDataMask;
hgs
parents:
diff changeset
   240
    
hgs
parents:
diff changeset
   241
    TLbtTriggerAttributeFieldsMask iAttrMask;
hgs
parents:
diff changeset
   242
    };
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
#endif // C_LBTCONTAINER_RAMTRIGGERS_MANAGER_H