williamr@2: /* williamr@2: * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Declaration of classes CActiveApDb williamr@2: * and MActiveApDbObserver. williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef ACTIVE_APDB_H williamr@2: #define ACTIVE_APDB_H williamr@2: williamr@2: // Deprecation warning williamr@2: #warning This header file has been deprecated. Will be removed in one of the next SDK releases. williamr@2: williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: #include williamr@2: williamr@2: /* williamr@2: // Enum for DATABASE_TYPE field williamr@2: // Will be deprecated in 7.0 williamr@2: enum TCommDbDatabaseType williamr@2: { williamr@2: EUnspecified = 0, // not specifying which type it is - any type of williamr@2: // database can be opened with this parameter williamr@2: EIAP, williamr@2: EISP williamr@2: }; williamr@2: */ williamr@2: williamr@2: // CONSTANTS williamr@2: const TInt KErrActiveApDbObserverNotFound = -500; williamr@2: williamr@2: // FORWARD DECLARATION williamr@2: class CActiveApDbNotifier; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: williamr@2: /** williamr@2: * Mixin protocol for handling events from a CCommsDatabase. williamr@2: * Events are related to database changes and availability. williamr@2: */ williamr@2: class MActiveApDbObserver williamr@2: { williamr@2: public: // types williamr@2: enum TEvent /// Events reported to the database observer. williamr@2: { williamr@2: EDbChanged, ///< Database has changed. williamr@2: EDbClosing, ///< Database is about to close. williamr@2: EDbAvailable ///< Database is available again.(E.g. after unlock) williamr@2: }; williamr@2: williamr@2: public: // new methods williamr@2: williamr@2: /** williamr@2: * Derived classes should implement this method, and act accordingly williamr@2: * to database events. williamr@2: * @param anEvent Database-related event. williamr@2: * williamr@2: * @deprecated williamr@2: */ williamr@2: IMPORT_C virtual void HandleApDbEventL( TEvent anEvent ) = 0; williamr@2: williamr@2: }; williamr@2: williamr@2: /** williamr@2: * This class manages and guards database integrity williamr@2: * by handling all events that are related to the database. These events williamr@2: * may originate from the system (Shutdown, Backup/Restore) and from the williamr@2: * database itself. The events are transformed into a simple protocol, williamr@2: * defined by MActiveApDbObserver. williamr@2: * Expects an active scheduler to be installed and running. williamr@2: */ williamr@2: NONSHARABLE_CLASS( CActiveApDb ) : public CBase williamr@2: { williamr@2: williamr@2: public: // Constructors and destructor williamr@2: /** williamr@2: * Two-phased constructor. Leaves on failure. williamr@2: * @param aType The desired type of the CCommsDatabase object. williamr@2: * Defaults to EDatabaseTypeIAP. williamr@2: * @return The constructed CActiveApDb object. williamr@2: * williamr@2: * @deprecated williamr@2: */ williamr@2: IMPORT_C static CActiveApDb* NewL williamr@2: ( TCommDbDatabaseType aType = EDatabaseTypeIAP ); williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: * williamr@2: * @deprecated williamr@2: */ williamr@2: IMPORT_C virtual ~CActiveApDb(); williamr@2: williamr@2: protected: // Constructors williamr@2: williamr@2: /** williamr@2: * Second phase constructor. Leaves on failure. williamr@2: * @param aType The desired type of the CCommsDatabase object. williamr@2: * events. williamr@2: */ williamr@2: void ConstructL(); williamr@2: williamr@2: public: // new methods williamr@2: /** williamr@2: * Adds an observer to the list of observers to be notified williamr@2: * about the DB events. williamr@2: * Also automatically starts observation and notification. williamr@2: * The order of notification will be exactly the order of registration. williamr@2: * @param anObserver Observer to be notified about database-related williamr@2: * events. williamr@2: * williamr@2: * @deprecated williamr@2: */ williamr@2: IMPORT_C void AddObserverL( MActiveApDbObserver* anObserver ); williamr@2: williamr@2: williamr@2: /** williamr@2: * Removes an observer. If not added, silently ignores. williamr@2: * @param anObserver The observer. williamr@2: * williamr@2: * @deprecated williamr@2: */ williamr@2: IMPORT_C void RemoveObserver( MActiveApDbObserver* anObserver ); williamr@2: williamr@2: williamr@2: /** williamr@2: * Returns the CCommsDatabase. williamr@2: * Required because we can not derive from CCommsDatabase... williamr@2: * williamr@2: * @deprecated williamr@2: */ williamr@2: IMPORT_C CCommsDatabase* Database(); williamr@2: williamr@2: private: williamr@2: /** williamr@2: * Handle events from the database (DBMS). williamr@2: * The order of notification is the order of registration. williamr@2: * @param anEvent Event generated by DBMS. Values from williamr@2: * RDbNotifier::TEvent, or KErrCancel. williamr@2: */ williamr@2: void HandleDbEventL( TInt anEvent ); williamr@2: williamr@2: williamr@2: /** williamr@2: * Notify all observers about an event. williamr@2: * @param anEvent Event to be sent to observers. williamr@2: */ williamr@2: void NotifyObserversL( MActiveApDbObserver::TEvent anEvent ); williamr@2: williamr@2: friend class CActiveApDbNotifier; williamr@2: williamr@2: private: // types williamr@2: /** williamr@2: * Default constructor. Can not leave. williamr@2: */ williamr@2: CActiveApDb(); williamr@2: williamr@2: williamr@2: enum TState /// State of the finite state machine. williamr@2: { williamr@2: EClosed, ///< Closed and idle. williamr@2: EReady, ///< Open and ready for use. williamr@2: EWaitClose, ///< Closed, waiting for other users to close. williamr@2: EWaitBackupRestore, ///< Closed, waiting Backup/Restore to finish. williamr@2: EWaitShutdown ///< Closed, waiting to die. williamr@2: }; williamr@2: williamr@2: private: // Data williamr@2: CArrayPtrFlat* iObservers; ///< Observers. williamr@2: williamr@2: CCommsDatabase* iDb; // Creates & owns it ! williamr@2: // CommsDb has its own RDbNotifier... williamr@2: TState iState; ///< Current state of the database. williamr@2: CActiveApDbNotifier* iDbNotifier; williamr@2: }; williamr@2: williamr@2: #endif williamr@2: williamr@2: // End of File