srsf/sisrscontrollerplugin/src/sidatabase.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:17 +0100
branchRCL_3
changeset 23 e36f3802f733
parent 0 bf1d17376201
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2004-2007 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 class implements the SI Controller Plugin database.
*
*/



#ifndef SIDATABASE_H
#define SIDATABASE_H

//  INCLUDES
#include <d32dbms.h>
#include <e32svr.h>
#include <sysutil.h> // Critical Level check
#include <f32file.h>


class CNssBackupObserver;

// CLASS DECLARATION

/**
*  This class is the base class for all SI Controller Plugin DB classes.
*  It provides the common functionality for the DB classes.
*
*  @lib SIControllerPlugin.lib
*  @since 2.8
*/
class CSIDatabase : public CBase
    {
    public:  // Constructors and destructor

        /**
        * Two-phased constructor.
        */
        static CSIDatabase* NewL(TFileName aDatabaseFileName);

 		/**
        * Destructor.
        */
        virtual ~CSIDatabase();

    public: // New functions

        /**
        * Begins a database transaction if not already.
        * @since 2.8
        * @return	Reference to the database.
        */
		void BeginTransactionL();

        /**
        * Commits all changes to the database.
        * @since 2.8
        */
		void CommitChangesL( TBool aCompact );

        /**
        * Rollback all changes to the database.
        * @since 2.8
        */
		void Rollback();

        /**
        * Checks to see if ID tables exist.
        * @since 2.8
        * @return	ETrue if ID tables exist; EFalse otherwise.
        */
		TBool DoIDTablesExistL();

        /**
        * @todo Add comments
        */
        TBool DoesLockTableExistL();

        /**
        * @todo Add comments
        */
        TBool DoesModelBankTableExistL();

        /**
        * @todo Add comments
        */
        TBool DoesLexiconTableExistL();

        /**
        * @todo Add comments
        */
        TBool DoesGrammarTableExistL();


        /**
        * Returns a reference to the database.
        * @since 2.8
        * @return	Reference to the database.
        */
		RDbNamedDatabase& SIDatabase();

        /**
        * Returns a reference to DB session.
        * @since 2.8
        * @return	Reference to the database.
        */
		RDbs& DbSession();

        /**
        * Returns a drive for DB file.
        * @since 2.8
        * @return	Reference to the session.
        */
		TInt DbDrive();

        /**
        * Creates a small table to the database. Writing of this table is tried
        * when acquiring for a write lock.
        */
        void CreateLockTableL();

		/**
		* Permit transactions. Used when e.g. backup or restore begins 
		* @since 3.1
		*/
		void LockTransactionsL();

		/**
		* Allow transactions. Used when e.g. backup or restore ends 
		* @since 3.1
		*/
		void UnlockTransactionsL();
		
        /**
        * Opens a database session.  If database file doesn't exist, it creates one.
        * @since 2.8
        */
        void OpenDatabaseL();
        
        /**
	    * Close database.
	    * @since 3.1
	    * @return Symbian-wide error codes
	    */
		TInt  CloseDatabase();
		
     private:

        /**
        * C++ default constructor.
        */
        CSIDatabase(TFileName aDbFileName);

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();

        /**
        * Creates a new database file.
        * @since 2.8
        */
		void CreateDatabaseL();




    public:    // Data

		// Database session
		RDbs iDbSession;

		// Database
        RDbNamedDatabase iDb;

		// Indication for outstanding transaction by this client
		TBool iOpenTransaction;

		// Name of the database file	
		TFileName iDatabaseFileName;

        // drive for the database file
        TInt iDatabaseDrive;

        // Indication if database connection is open
        TBool iDatabaseOpen;

        // Mutex for DB write lock
        // Makes sure that only one process gets the DB lock
        RMutex iMutex; 
        
        // Critical section is used in locking transactions inside one object
        RCriticalSection iCriticalSection;
        
        // backup and restore observer
        CNssBackupObserver* iBackupObserver;
        
    };

#endif // SIDATABASE_H

// End of File