diff -r 798ee5f1972c -r 826cea16efd9 videoscheduler/SchedulerServer/inc/CCseScheduleDB.h --- a/videoscheduler/SchedulerServer/inc/CCseScheduleDB.h Thu Aug 19 10:54:18 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,447 +0,0 @@ -/* -* 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 the License "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: header file for CCseScheduleDB class* -*/ - - - -#ifndef _CCSESCHEDULEDB_H -#define _CCSESCHEDULEDB_H - -#include -#include // RDbStoreDatabase -#include // RFs -#include -#include - -// CONSTANTS -const int KCseCustomSqlLength = 256; -const int KCseDbCompactTimeout = 30000000; - -// Constant for filename definition -_LIT( KCseScheduleDBName, "CseSchedules.db" ); -// Database table -_LIT( KCseDatabaseTable, "CseDatabase" ); -_LIT( KCseDatabaseVersionCol, "DbVersion" ); -_LIT( KCseDatabaseReserved1Col, "DbReserved1" ); -_LIT( KCseDatabaseReserved2Col, "DbReserved2" ); - -// Program table -_LIT( KCseScheduleTable, "ScheduleEvent" ); -_LIT( KCseScheduleDbKeyCol, "Key" ); -_LIT( KCseScheduleNameCol, "Name" ); -_LIT( KCseScheduleStartTimeCol, "StartTime" ); -_LIT( KCseScheduleEndTimeCol, "EndTime" ); -_LIT( KCseScheduleApplicationUIDCol, "ApplicationUID" ); -_LIT( KCseSchedulePlugInUIDCol, "PlugInUID" ); -_LIT( KCseScheduleTypeCol, "Type" ); -_LIT( KCseScheduleApplicationSpecificCol, "ApplicationSpecificData" ); -_LIT( KCseScheduleRunCountCol, "ScheduleRunCount" ); -_LIT( KCseScheduleStateCol, "ScheduleState" ); -_LIT( KCseSchedulePluginTypeCol, "PluginType" ); -_LIT( KCseScheduleReserved1Col, "ScheduleReserved1" ); -_LIT( KCseScheduleReserved2Col, "ScheduleReserved2" ); - -class CCseScheduledProgram; - -/** -* Version of CleanupXxxxPushL() that can be used to 'ResetAndDestroy' -* the supplied object if the clean-up stack unwinds. -*/ -template -class CleanupResetAndDestroy - { - public: - inline static void PushL( T& aRef ); - private: - static void ResetAndDestroy( TAny *aPtr ); - }; - -template - inline void CleanupResetAndDestroyPushL( T& aRef ); - -template -inline void CleanupResetAndDestroy::PushL( T& aRef ) - { - CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) ); - } - -template -void CleanupResetAndDestroy::ResetAndDestroy( TAny *aPtr ) - { - ( static_cast( aPtr ) )->ResetAndDestroy(); - } - -template -inline void CleanupResetAndDestroyPushL( T& aRef ) - { - CleanupResetAndDestroy::PushL( aRef ); - } - - -/** -* Schedule database. -*/ -class CCseScheduleDB : public CBase, - public MBackupObserver -{ - public: // Constructors and destructors - virtual ~CCseScheduleDB(); - - /** - * Two-phased constructor. - */ - IMPORT_C static CCseScheduleDB* NewL(); - - /** - * Enum for schedule state - */ - enum TCseScheduleState - { - ECseWaiting = 0, - ECseRunning - }; - - /** - * Enum for database access - */ - enum TCseDatabaseAccess - { - ECseDbOpen = 0, - ECseDbLocked - }; - - public: // Methods from MBackupObserver - void ChangeFileLockL(const TDesC &aFileName, TFileLockFlags aFlags); - - public: // New methods - /** - * Adds given schedule to database. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aData schedule to be added to database. - * @return None - */ - void AddScheduleL( CCseScheduledProgram& aData ); - - /** - * Removes schedule from database. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aData schedule to be removed from database. - * @return None - */ - void RemoveScheduleL( const TUint32 aDbIdentifier ); - - /** - * Finds start time of the schedule that is happening next from the database. - * Method will leave with KErrLocked -error code if Backup/Restore is going on. - * @return Start time of the next schedule. - */ - TTime GetNextScheduleTimeL(); - - /** - * Fills parameter array with schedules that have same starting time as - * paramter time. Method will leave with KErrLocked -error code if - * Backup/Restore is going on. - * @param aSchdeduleTime Start time of the schedules fetched. - * @param aNextScheduleArray Array containing schedules after call - * is completed. - * @return None - */ - void FillScheduleArrayByTimeL( const TTime& aScheduleTime, - RPointerArray& aNextScheduleArray ); - - /** - * Gets the given schedule from database. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aDbIdentifier Database identifier of the schedule fetched. - * @param aSchedule Pointer where schedule is stored when call - * is completed. - * @return None - */ - void GetScheduleByDbIdentifierL( const TUint32 aDbIdentifier, - CCseScheduledProgram* aSchedule ); - - /** - * Get application specific schedules from db. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aAppUid Application UID. - * @param aScheduleArray Array where to put scheduled events. - * @return None - */ - void GetApplicationSchedulesL( const TInt32 aAppUid, - RPointerArray& aArray ); - - /** - * Get overlapping schedules. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aType Schedule type (one from - * CCseScheduledProgram::TCseScheduleType) - * @param aStartTime Start time - * @param aEndTime End Time - * @param aResultArray On return, contains pointers to overlapping schedules - * empty if none found. - * @return None. - */ - void GetOverlappingSchedulesL( const TInt32 aType, - const TTime& aStartTime, - const TTime& aEndTime, - RPointerArray& aResultArray ); - - /** - * Increases runcount of given schedule in DB. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aDbIdentifier Database identifier of the schedule thats - * runcount is to be incremented - */ - void IncreaseRunCountL( const TUint32 aDbIdentifier ); - - /** - * Gets the runcount of give schedule. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aDbIdentifier DbIdentifier of the schedule whos runcount is fetched. - * @return Run count of the schedule. - */ - TInt32 GetRunCountL( const TUint32 aDbIdentifier ); - - /** - * Gets the state of give schedule. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aDbIdentifier DbIdentifier of the schedule whos state is fetched. - * @return Schedule state (one of the CCseScheduledDB::TCseScheduleState) - */ - TInt32 GetScheduleStateL( const TUint32 aDbIdentifier ); - - /** - * Sets the state of give schedule. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aDbIdentifier DbIdentifier of the schedule whos state is fetched. - * @param aState State to be set. - * @return None - */ - void SetScheduleStateL( const TUint32 aDbIdentifier, - const TInt32 aState ); - - /** - * Gets the startup schedules from the DB. When phone is set on, we try to run all - * schdeulus that were on run when the phone was set off (run count is bigger than 0). - * Method will leave with KErrLocked -error code if Backup/Restore is going on. - * @param aResultArray Array where schedules that were on run are stored. - * @return None - */ - void StartupSchedulesL( RPointerArray& aResultArray ); - - /** - * Get plugin specific schedules from db. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aPluginUid Application UID. - * @param aScheduleArray Array where to put scheduled events. - * @return None - */ - void GetSchedulesByPluginL( const TInt32 aPluginUid, - RPointerArray& aArray ); - - /** - * Get plugin specific schedules of specific type from db. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aType Schedule type - * @param aScheduleArray Array where to put scheduled events. - * @return None - */ - void GetSchedulesByTypeL( const TInt32 aType, - RPointerArray& aArray ); - - /** - * Get schedules in given timeframe. Method will leave with - * KErrLocked -error code if Backup/Restore is going on. - * @param aBeginning Start time of timeframe - * @param aEnd End Time of timeframe - * @param aResultArray On return, contains pointers to overlapping schedules - * empty if none found. - * @return None. - */ - void GetSchedulesByTimeframeL( const TTime& aStartTime, - const TTime& aEndTime, - RPointerArray& aResultArray ); - - /** - * Gets all the uid's of different plugins that are in DB. - * KErrLocked -error code if Backup/Restore is going on. - * @param aPlugins On return, contains all the different plugin uid's in - * db. Empty if none found. - */ - void GetPluginsL( RArray& aPlugins ); - - /** - * Get the next happening time of schedule from database based on plugin uid. - * KErrLocked -error code if Backup/Restore is going on. - * @param aPluginUid Plugin uid in which to base the search - * @return Next start time of the schedule of given plugin Uid. - */ - TTime GetNextScheduleTimeByPluginL( TInt32 aPluginUid ); - - /** - * Gets all the schedules that are going to happen at the given time based on plugin uid. - * KErrLocked -error code if Backup/Restore is going on. - * @param aScheduleTime Start time in which to base the search - * @param aPluginUid Plugin uid in which to base the search - * @param aNextScheduleArray On return, contains pointers to schedules. - */ - void GetSchedulesByTimeAndPluginL( - const TTime& aScheduleTime, - TInt32 aPluginUid, - RPointerArray& aNextScheduleArray ); - - - private: - /** - * C++ default constructor. - */ - CCseScheduleDB(); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - - private: // Methods - /** - * Checks the db version from db. If it is older than current one, destroy it - * and create new one. - * @return None - */ - void CheckDbVersionL(); - - /** - * Open DB or create new database if DB file is not found. - * @return None - */ - void OpenOrCreateDbL(); - - /** - * Create schedule table. - * @param aDatabase where to create schedule table. - * @return None - */ - void CreateScheduleTableL( RDbStoreDatabase& aDatabase ) const; - - /** - * Create database table. - * @param aDatabase where to create database table. - * @return None - */ - void CreateDatabaseTableL( RDbStoreDatabase& aDatabase ); - - /** - * Gets the database version number - * @param None - * @return None - */ - TInt GetDbVersionL( ); - - /** - * Set hardcoded database version to database. Used after creating new database. - * @param None - * @return None - */ - void SetDatabaseVersionL(); - - /** - * Removes existing database. - * @return None - */ - void RemoveDbL(); - - /** - * Static call back for CPeriodic. - * @param aThis Pointer to CCseScheduleDB so that we can - * direct call back to class. - * @return Always TFalse - */ - static TInt CompactCallback( TAny* aThis ); - - /** - * We want to compact database 30 seconds after last database operation. - * this resets 30 sec counter. - * @return None - */ - void ResetCompactTimer( ); - - /** - * Compacts database. - * @return None - */ - void CompactDb(); - - /** - * Closed Db file and sets iDbAccess to ECseDbLocked. - * @return None - */ - void CloseDbFile(); - - /** - * Closed Db file and sets iDbAccess to ECseDbOpen. - * @return None - */ - void OpenDbFileL(); - - /** - * Leaves with KErrLocked if iDbAccess is ECseDbLocked. - * @return None - */ - void LeaveIfDbLockedL() const; - - private: // Data - /** - * File server session is connected in construction and closed in - * destruction - */ - RFs iFsSession; - - /** - * File name of the database which to handle - */ - TFileName iDbFile; - - /** - * For database operations - */ - RDbStoreDatabase iScheduleDb; - - /** - * For creating and opening services database file. Own. - */ - CFileStore* iScheduleFileStore; - - /** - * Timer used in compacting database. Own. - */ - CPeriodic* iCompactTimer; - - /** - * SQL string for SQL calls - */ - TBuf iSqlSchedule; - - /** - * Status is database accessible - */ - TCseDatabaseAccess iDbAccess; - - /** - * Wrapper to get notification if backup/restore is - * about to happen. Own. - */ - CBaBackupSessionWrapper* iBackupWrapper; -}; -#endif _CCSESCHEDULEDB_H \ No newline at end of file