videoscheduler/SchedulerServer/src/CCseScheduleDB.cpp
changeset 50 557e19da7faf
parent 43 0a57f2fb63b1
child 52 0c0f95df01f4
--- a/videoscheduler/SchedulerServer/src/CCseScheduleDB.cpp	Wed Aug 18 10:48:22 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2064 +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:    Database where to store scheduled events.*
-*/
-
-
-
-
-// INCLUDE FILES
-#include "CCseScheduleDB.h"         // Header file for this class
-#include <ipvideo/CCseScheduledProgram.h>   // Represent one schedule in database
-#include <bautils.h>
-#include "CseDebug.h"               // Debug macros
-#include <babackup.h>
-
-// EXTERNAL DATA STRUCTURES
-// None
-
-// EXTERNAL FUNCTION PROTOTYPES  
-// None
-
-// CONSTANTS
-_LIT( KCseCDiskPrefix,  "c:"                         );
-_LIT( KCseSqlGetAll,    "SELECT * FROM ScheduleEvent");
-_LIT( KCseSelectFromDb, "SELECT * FROM "             );
-_LIT( KCseWhere,        " WHERE "                    );
-_LIT( KCseEqual,        " = "                        );
-_LIT( KCseOrderBy,      " ORDER BY "                 );
-_LIT( KCseAnd,          " AND "                      );
-_LIT( KCseLess,         " < "                        );
-_LIT( KCseMore,         " > "                        );
-
-static TUint KScheduleNameMaxLength = 255;
-static TUint KCseDatbaseVersionNumber = 1;
-
-// MACROS
-// None
-
-// LOCAL CONSTANTS AND MACROS
-// None
-
-// MODULE DATA STRUCTURES
-// None
-
-// LOCAL FUNCTION PROTOTYPES
-// None
-
-// FORWARD DECLARATIONS
-// None
-
-// ============================ MEMBER FUNCTIONS ===============================
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::CCseScheduleDB()
-//
-// ---------------------------------------------------------------------------
-CCseScheduleDB::CCseScheduleDB() : iDbAccess( ECseDbOpen )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::CCseScheduleDB");
-	// Default C++ Constructor		
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::CCseScheduleDB");
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::~CCseScheduleDB()
-//
-// ---------------------------------------------------------------------------	
-CCseScheduleDB::~CCseScheduleDB()
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::~CCseScheduleDB");
-	       	
-	iScheduleDb.Close();
-	delete iScheduleFileStore;
-	iFsSession.Close(); 
-	
-	if( iCompactTimer )
-        {
-        iCompactTimer->Cancel();
-        delete iCompactTimer;
-        }
-    delete iBackupWrapper;
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::~CCseScheduleDB");
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::NewL()
-//
-// ---------------------------------------------------------------------------	
-CCseScheduleDB* CCseScheduleDB::NewL()
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::NewL");
-    CCseScheduleDB* self = new ( ELeave ) CCseScheduleDB();    
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );    
-    
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::NewL");
-    
-    return self;
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::ConstructL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::ConstructL()
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::ConstructL");
-    
-    User::LeaveIfError( iFsSession.Connect() );
-    
-    iCompactTimer = CPeriodic::NewL( CActive::EPriorityStandard );
-            
-    iBackupWrapper = CBaBackupSessionWrapper::NewL();
-	
-	TRAPD( err, OpenOrCreateDbL() );
-
-    if ( err != KErrNone )
-        {
-		CSELOGSTRING2_HIGH_LEVEL( "CCseScheduleDB::ConstructL - Opening or creating the database FAILED: %d", err );
-
-        if ( err != KErrNoMemory && 
-             err != KErrLocked && 
-             err != KErrDisMounted &&
-             err != KErrDiskFull &&
-             err != KErrNotReady )
-            {
-            // Delete and recreate database file. Cannot recover other way. 
-    		CSELOGSTRING_HIGH_LEVEL( "CCseScheduleDB::ConstructL - deleting database" );
-            RemoveDbL();
-    		CSELOGSTRING_HIGH_LEVEL( "CCseScheduleDB::ConstructL - recreating database" );
-            TRAPD( err, OpenOrCreateDbL() );
-            if ( err != KErrNone )
-                {
-                CSELOGSTRING2_HIGH_LEVEL( "CCseScheduleDB::ConstructL couldnt recreate database (%d), leaving", err );
-                User::Leave( err );
-                }
-            }
-        else
-            {
-            CSELOGSTRING2_HIGH_LEVEL( "CCseScheduleDB::ConstructL leaving (%d)", err );
-            User::Leave( err );
-            }
-        }
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::ConstructL");	
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::RemoveDbL()
-// ---------------------------------------------------------------------------
-void CCseScheduleDB::RemoveDbL()
-    {
-    delete iBackupWrapper;
-	iBackupWrapper = NULL;
-    iScheduleDb.Close();
-	delete iScheduleFileStore;
-	iScheduleFileStore = NULL;
-    if ( BaflUtils::FileExists( iFsSession, iDbFile ) )
-        {
-        TInt err( iFsSession.Delete( iDbFile ) );
-		CSELOGSTRING2_HIGH_LEVEL("CCseScheduleDB:: deleting database file, err = %d", err);
-        }
-	}
-
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetApplicationSchedulesL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::GetApplicationSchedulesL( const TInt32 aAppUid,
-								RPointerArray<CCseScheduledProgram>& aArray )
-	{
-	CSELOGSTRING2_HIGH_LEVEL(">>>CCseScheduleDB::GetApplicationSchedulesL - AppUid: %d",
-	                          aAppUid);
-	
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Gets program occurence(s) that are going to happen next
-	// from database
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleApplicationUIDCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aAppUid );
-	sqlStatement.Append( KCseOrderBy );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Get the SQL table indexes.
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo scheduleTypeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Loop through the tables
-	while ( view.AtRow() )
-		{
-		// Create new CCseSceduledProgram to be added to array
-		CCseScheduledProgram* prog = CCseScheduledProgram::NewL();
-		CleanupStack::PushL( prog );			
-		
-		// Fill created schedule with DB information
-		view.GetL();
-		prog->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		prog->SetName( view.ColDes8( nameIndex ) );
-		prog->SetStartTime( view.ColTime( startTimeIndex ) );
-		prog->SetEndTime( view.ColTime( endTimeIndex ) );
-		prog->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		prog->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		prog->SetScheduleType( view.ColInt32( scheduleTypeIndex ) );
-		prog->SetPluginType( view.ColInt32( pluginTypeIndex ) );
-		
-		TInt streamLen( 0 );
-		streamLen = view.ColLength( applicationSpecificIndex );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream;
-		readStream.OpenLC( view, applicationSpecificIndex );
-		readStream.ReadL( buffPtr, streamLen );
-		readStream.Release();
-		CleanupStack::PopAndDestroy(); // readStream
-
-		prog->SetApplicationDataL( *appDataBuffer );
-		
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		User::LeaveIfError( aArray.Append( prog ) );
-		CleanupStack::Pop( prog );
-		view.NextL();
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetApplicationSchedulesL");	
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::OpenOrCreateDbL()
-//
-// Create a new database. 
-// ---------------------------------------------------------------------------
-void CCseScheduleDB::OpenOrCreateDbL()
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::OpenOrCreateDbL");
-	TBuf<KMaxFileName> path;
-	
-	// Get path to CSE's private directory
-	TInt err( iFsSession.PrivatePath( path ) );
-	if ( err != KErrNone )
-		{
-		CSELOGSTRING2_HIGH_LEVEL("iFsSession.PrivatePath() failed: %d", err );
-		User::Leave( err );
-		}
-
-	iDbFile.Zero();
-	iDbFile.Append( KCseCDiskPrefix );
-	iDbFile.Append( path );
-	if ( BaflUtils::CheckFolder( iFsSession, iDbFile ) != KErrNone ) 
-		{
-		err = iFsSession.CreatePrivatePath( EDriveC );
-		if ( err != KErrNone )
-			{
-			CSELOGSTRING2_HIGH_LEVEL( "CreatePrivatePath failed! %d", err );
-			User::Leave( err );
-			}
-		}
-	
-	iDbFile.Append( KCseScheduleDBName() );
-	
-	// If file doesn't exist create it
-    if ( !BaflUtils::FileExists( iFsSession, iDbFile ) )
-        {
-        CSELOGSTRING_HIGH_LEVEL("CCseScheduleDB::OpenOrCreateDbL Create New");
-        iScheduleDb.Close();
-                    
-        if( iScheduleFileStore )
-            {
-            delete iScheduleFileStore;
-            iScheduleFileStore = NULL;
-            }
-            
-		iScheduleFileStore = CPermanentFileStore::ReplaceL( iFsSession,
-                                                            iDbFile,
-                                                            EFileRead|EFileWrite );
-		// Set file store type
-		iScheduleFileStore->SetTypeL( iScheduleFileStore->Layout() ); 
-    	// Create stream object
-	    TStreamId id = iScheduleDb.CreateL( iScheduleFileStore );   
-		// Keep database id as root of store  
-    	iScheduleFileStore->SetRootL( id ); 
-		// Complete creation by commiting
-    	iScheduleFileStore->CommitL();                              
-
-        CreateDatabaseTableL( iScheduleDb );        
-        CreateScheduleTableL( iScheduleDb );
-        SetDatabaseVersionL( );
-        }
-    // Or if it exists then just open it.
-	else
-		{
-		iScheduleDb.Close();
-	    delete iScheduleFileStore;
-		iScheduleFileStore = NULL;
-		iScheduleFileStore = CPermanentFileStore::OpenL( iFsSession, iDbFile,
-														EFileRead|EFileWrite );
-		iScheduleFileStore->SetTypeL( iScheduleFileStore->Layout() );
-		iScheduleDb.OpenL( iScheduleFileStore, iScheduleFileStore->Root() );
-    	CheckDbVersionL();    	
-		User::LeaveIfError( iScheduleDb.Compact() );
-		}
-				
-	if ( !iBackupWrapper )
-	    {
-	    iBackupWrapper = CBaBackupSessionWrapper::NewL();
-	    }
-	    
-	iBackupWrapper->RegisterFileL( iDbFile, *this );
-
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::OpenOrCreateDbL");
-    }
-    
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::CheckDbVersionL
-//
-// ---------------------------------------------------------------------------
-void CCseScheduleDB::CheckDbVersionL( )
-	{	
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::CheckDbVersionL");
-	
-	TInt dbVersion( 0 );	
-	
-	TRAPD( leave, dbVersion = GetDbVersionL() );
-	
-	if ( dbVersion != KCseDatbaseVersionNumber || leave != KErrNone )
-	    {
-    	CSELOGSTRING3_HIGH_LEVEL(
-    	    "CCseScheduleDB::CheckDbVersionL Not ok, version: %d, error: %d",
-    	    dbVersion, leave );
-    	
-	    // Destroy the old one
-	    iScheduleDb.Close();
-	    delete iScheduleFileStore;
-	    iScheduleFileStore = NULL;
-	    
-	    // Create new one
-	    iScheduleFileStore = CPermanentFileStore::ReplaceL( iFsSession,
-                                                            iDbFile,
-                                                            EFileRead|EFileWrite );
-                                                        
-		// Set file store type
-		iScheduleFileStore->SetTypeL( iScheduleFileStore->Layout() ); 
-    	// Create stream object
-	    TStreamId id = iScheduleDb.CreateL( iScheduleFileStore );   
-		// Keep database id as root of store  
-    	iScheduleFileStore->SetRootL( id ); 
-		// Complete creation by commiting
-    	iScheduleFileStore->CommitL();                              
-
-    	CreateDatabaseTableL( iScheduleDb );
-        CreateScheduleTableL( iScheduleDb );
-	    SetDatabaseVersionL( );
-	    }
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::CheckDbVersionL");		
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetDbVersionL
-//
-// ---------------------------------------------------------------------------
-TInt CCseScheduleDB::GetDbVersionL( )
-	{	
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetDbVersionL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	TInt dbVersion(0);
-	
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );
-	sqlStatement.Append( KCseDatabaseTable );
-		
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Get the next reminder
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	TDbColNo versionIndex = colSetOrder->ColNo( KCseDatabaseVersionCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-		
-	if ( view.AtRow() )
-		{				
-		view.GetL();
-		dbVersion = view.ColInt32( versionIndex );		
-		}
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-
-	CSELOGSTRING2_HIGH_LEVEL(
-	    "<<<CCseScheduleDB::GetDbVersionL, version: %d",
-	    dbVersion );
-	return dbVersion;
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::CreateScheduleTableL
-//
-// Creates Schedule table.
-// ---------------------------------------------------------------------------
-void CCseScheduleDB::CreateScheduleTableL( RDbStoreDatabase& aDatabase ) const
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::CreateScheduleTableL");
-    
-    // Create columns for the database.     
-    TDbCol keyCol( KCseScheduleDbKeyCol, EDbColUint32 );
-    keyCol.iAttributes = TDbCol::EAutoIncrement;
-    
-	TDbCol nameCol( KCseScheduleNameCol, EDbColText8, KScheduleNameMaxLength );		
-	TDbCol startTimeCol( KCseScheduleStartTimeCol, EDbColDateTime );
-	TDbCol endTimeCol( KCseScheduleEndTimeCol, EDbColDateTime );
-    TDbCol applicationUidCol( KCseScheduleApplicationUIDCol, EDbColInt32 );   
-	TDbCol plugInUidCol( KCseSchedulePlugInUIDCol, EDbColInt32 );    
-	TDbCol typeCol( KCseScheduleTypeCol, EDbColInt32 );    	
-	TDbCol applicationSpecificCol( KCseScheduleApplicationSpecificCol, EDbColLongBinary );
-	TDbCol runCountCol( KCseScheduleRunCountCol, EDbColInt32 );	
-	TDbCol stateCol( KCseScheduleStateCol, EDbColInt32 );	
-	TDbCol pluginTypeCol( KCseSchedulePluginTypeCol, EDbColInt32 );	
-	TDbCol reserved1Col( KCseScheduleReserved1Col, EDbColInt32 );	
-	TDbCol reserved2Col( KCseScheduleReserved2Col, EDbColInt32 );	
-
-	// Create column set and add defined columns in to the set
-    CDbColSet* scheduleColSet = CDbColSet::NewLC();
-    scheduleColSet->AddL( keyCol );
-	scheduleColSet->AddL( nameCol );
-	scheduleColSet->AddL( startTimeCol );
-	scheduleColSet->AddL( endTimeCol );
-    scheduleColSet->AddL( applicationUidCol );
-    scheduleColSet->AddL( plugInUidCol );
-	scheduleColSet->AddL( typeCol );
-    scheduleColSet->AddL( applicationSpecificCol );	
-    scheduleColSet->AddL( runCountCol );	
-    scheduleColSet->AddL( stateCol );
-    scheduleColSet->AddL( pluginTypeCol );
-    scheduleColSet->AddL( reserved1Col );
-    scheduleColSet->AddL( reserved2Col );
-    
-    // Create new table to the database with created columnset
-    User::LeaveIfError( aDatabase.CreateTable( KCseScheduleTable, 
-										      *scheduleColSet ) ); 
-    
-    CleanupStack::PopAndDestroy( scheduleColSet );
-    
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::CreateScheduleTableL");
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::CreateDatabaseTableL
-//
-// Creates Database table.
-// ---------------------------------------------------------------------------
-void CCseScheduleDB::CreateDatabaseTableL( RDbStoreDatabase& aDatabase )
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::CreateDatabaseTableL");
-
-    // Create columns for the database.     
-    TDbCol versionCol( KCseDatabaseVersionCol, EDbColInt32 );
-    TDbCol reserved1Col( KCseDatabaseReserved1Col, EDbColInt32 );
-    TDbCol reserved2Col( KCseDatabaseReserved2Col, EDbColInt32 );
-
-	// Create column set and add defined columns in to the set
-    CDbColSet* databaseColSet = CDbColSet::NewLC();
-    databaseColSet->AddL( versionCol );
-    databaseColSet->AddL( reserved1Col );
-    databaseColSet->AddL( reserved2Col );
-    
-    // Create new table to the database with created columnset
-    User::LeaveIfError( aDatabase.CreateTable( KCseDatabaseTable, 
-										      *databaseColSet ) ); 
-    
-    CleanupStack::PopAndDestroy( databaseColSet );
-    
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::CreateDatabaseTableL");
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::SetDatabaseVersionL
-//
-// Creates Database table.
-// ---------------------------------------------------------------------------
-void CCseScheduleDB::SetDatabaseVersionL( )
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::SetDatabaseVersionL");
-    
-    iSqlSchedule.Zero(); 
-    iSqlSchedule.Append( KCseSelectFromDb );
-    iSqlSchedule.Append( KCseDatabaseTable );
-    
-    RDbView view;
-    CleanupClosePushL( view );
-    
-    // Prepare DB for update
-    User::LeaveIfError(view.Prepare( iScheduleDb,
-    					TDbQuery( iSqlSchedule ),
-    					TDbWindow::EUnlimited,
-    					RDbView::EInsertOnly ));    
-    view.InsertL();
-    
-    // Create colomn set (row) to be added
-    CDbColSet* databaseColSet = view.ColSetL();
-    CleanupStack::PushL( databaseColSet );
-
-    // Fill row with Schedule information
-	view.SetColL( databaseColSet->ColNo( KCseDatabaseVersionCol ),
-										 KCseDatbaseVersionNumber );
-    CleanupStack::PopAndDestroy( databaseColSet );
-    view.PutL();
-	CleanupStack::PopAndDestroy( &view ); // closes view
-    
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::SetDatabaseVersionL");
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::AddScheduleL()
-//
-// ---------------------------------------------------------------------------
-void CCseScheduleDB::AddScheduleL( CCseScheduledProgram& aData )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::AddScheduleL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	iSqlSchedule.Zero();
-	iSqlSchedule.Append( KCseSqlGetAll );
-    RDbView view;
-    CleanupClosePushL( view );
-
-    // Prepare DB for update
-    User::LeaveIfError(view.Prepare( iScheduleDb,
-    					TDbQuery( iSqlSchedule ),
-    					TDbWindow::EUnlimited,
-    					RDbView::EInsertOnly ));    
-    view.InsertL();
-    
-    // Create colomn set (row) to be added
-    CDbColSet* scheduleColSet = view.ColSetL();
-    CleanupStack::PushL( scheduleColSet );
-
-    // Fill row with Schedule information
-	view.SetColL( scheduleColSet->ColNo( KCseScheduleNameCol ),
-										aData.Name() );
-
-	view.SetColL( scheduleColSet->ColNo( KCseScheduleStartTimeCol ),
-										aData.StartTime() );
-
-	view.SetColL( scheduleColSet->ColNo( KCseScheduleEndTimeCol ),
-										aData.EndTime() );
-
-	view.SetColL( scheduleColSet->ColNo( KCseScheduleApplicationUIDCol ), 
-										aData.AppUid() );
-
-	view.SetColL( scheduleColSet->ColNo( KCseSchedulePlugInUIDCol ), 
-										 aData.PluginUid() );	
-
-	view.SetColL( scheduleColSet->ColNo( KCseScheduleTypeCol ), 
-										 aData.ScheduleType() );	
-	
-	view.SetColL( scheduleColSet->ColNo( KCseScheduleRunCountCol ), 
-										 0 );
-										 
-    view.SetColL( scheduleColSet->ColNo( KCseScheduleStateCol ), 
-										 ECseWaiting );
-										 
-    view.SetColL( scheduleColSet->ColNo( KCseSchedulePluginTypeCol ), 
-										 aData.PluginType() );
-										 
-	// Description is long one, it needs to be handled by stream
-	RDbColWriteStream write;
-	write.OpenLC( view, scheduleColSet->ColNo( KCseScheduleApplicationSpecificCol ) );
-	write.WriteL( aData.ApplicationData() );
-	write.CommitL();
-	CleanupStack::PopAndDestroy(); // write
-	
-	TDbColNo keyColumnNo = scheduleColSet->ColNo( KCseScheduleDbKeyCol );
-    CleanupStack::PopAndDestroy( scheduleColSet );
-    view.PutL();
-
-    // Get new program key
-    aData.SetDbIdentifier( view.ColUint32( keyColumnNo ) );
-    
-    CleanupStack::PopAndDestroy( &view ); // closes view
-    
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::AddScheduleL");
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::RemoveScheduleL()
-//
-// ---------------------------------------------------------------------------
-void CCseScheduleDB::RemoveScheduleL( const TUint32 aDbIdentifier )
-	{	
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::RemoveScheduleL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Create SQL string to find given schedule from DB
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleDbKeyCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aDbIdentifier );
-	
-	User::LeaveIfError( iScheduleDb.Begin() );
-	
-	// Prepare DB to update
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-									  TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	view.FirstL();
-
-	TInt count( 0 );
-
-    // If schedule found, remove it.
-	while ( view.AtRow() )
-		{
-		view.DeleteL();
-		count++;
-		view.NextL();	
-		}		
-	
-	CleanupStack::PopAndDestroy( &view ); // closes view
-	User::LeaveIfError( iScheduleDb.Commit() );
-	    	
-    CSELOGSTRING3_HIGH_LEVEL("---- %d Items for identifier %d removed from DB", count, aDbIdentifier);
-	if ( count == 0 )
-		{
-		User::Leave( KErrNotFound );	
-		}
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::RemoveScheduleL");
-	}
-	
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetNextScheduleTimeL()
-//
-// ---------------------------------------------------------------------------	
-TTime CCseScheduleDB::GetNextScheduleTimeL()
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetNextScheduleTimeL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Create SQL satring to get schedule occurence(s) that are
-	// going to happen next from database.
-	TTime nextScheduleTime( 0 );
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleStateCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( ECseWaiting );
-	sqlStatement.Append( KCseOrderBy );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-		
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Get the next schedule
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Schedule found get its start time.
-	if ( view.AtRow() )	
-		{		
-		view.GetL();				
-		nextScheduleTime = view.ColTime( startTimeIndex );
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetNextScheduleTimeL");
-	
-	return nextScheduleTime;
-	}
-	
-	
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::FillScheduleArrayByTimeL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::FillScheduleArrayByTimeL( const TTime& aScheduleTime, 
-					RPointerArray<CCseScheduledProgram>& aNextScheduleArray )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::FillScheduleArrayByTimeL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Gets program occurence(s) that are going to happen next
-	// from database
-	TBuf<100> startTimeBuf;
-	
-	_LIT( KDateTimeFormat,"# %1%*D/%2%*M/%3%*Y %H:%T:%S.%C#" ); 
-
-	aScheduleTime.FormatL( startTimeBuf, KDateTimeFormat );
-		
-	// Create SQL string to get all schedules to be happen at given time
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.Append( startTimeBuf );
-		
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Get the next reminder
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Get column indexes
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo typeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Loop through all found schedules.
-	while ( view.AtRow() )
-		{
-		// Create new schedule to be added to array
-		CCseScheduledProgram* prog = CCseScheduledProgram::NewL();
-		CleanupStack::PushL( prog );			
-		view.GetL();
-		
-		// Copy information from DB to schedule.
-		prog->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		prog->SetName( view.ColDes8( nameIndex ) );
-		prog->SetStartTime( view.ColTime( startTimeIndex ) );
-		prog->SetEndTime( view.ColTime( endTimeIndex ) );
-		prog->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		prog->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		prog->SetScheduleType( CCseScheduledProgram::TCseScheduleType( 
-		                       view.ColInt32( typeIndex ) ) );
-        prog->SetPluginType( CCseScheduledProgram::TCsePluginType( 
-							   view.ColInt32( pluginTypeIndex ) ) );
-		TInt streamLen( view.ColLength( applicationSpecificIndex ) );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream;
-		readStream.OpenLC( view, applicationSpecificIndex );
-		readStream.ReadL( buffPtr, streamLen );
-		readStream.Release();
-		CleanupStack::PopAndDestroy(); // readStream;
-
-		prog->SetApplicationDataL( *appDataBuffer );
-		
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		User::LeaveIfError( aNextScheduleArray.Append( prog ) );
-		CleanupStack::Pop( prog );
-		
-		// And next schedule...
-		view.NextL();
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::FillScheduleArrayByTimeL");
-	}
-
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetScheduleByDbIdentifierL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::GetScheduleByDbIdentifierL( const TUint32 aDbIdentifier, 
-								           CCseScheduledProgram* aSchedule )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetScheduleByDbIdentifierL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	if ( !aSchedule )
-		{
-		return; 
-		}		
-	
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleDbKeyCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aDbIdentifier );
-		
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Get the next reminder
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo typeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-		
-	while ( view.AtRow() )
-		{				
-		view.GetL();
-		aSchedule->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		aSchedule->SetName( view.ColDes8( nameIndex ) );
-		aSchedule->SetStartTime( view.ColTime( startTimeIndex ) );
-		aSchedule->SetEndTime( view.ColTime( endTimeIndex ) );
-		aSchedule->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		aSchedule->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		
-		aSchedule->SetScheduleType( CCseScheduledProgram::TCseScheduleType( 
-							   view.ColInt32( typeIndex ) ) );
-        aSchedule->SetPluginType( CCseScheduledProgram::TCsePluginType( 
-							   view.ColInt32( pluginTypeIndex ) ) );
-
-		TInt streamLen( 0 );
-		streamLen = view.ColLength( applicationSpecificIndex );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream;
-		readStream.OpenLC( view, applicationSpecificIndex ); // |->1
-		readStream.ReadL(buffPtr, streamLen);
-		readStream.Release();
-		CleanupStack::PopAndDestroy( ); // 1<-| Popping pointer to Col that we dont have here
-		TPtrC8 ptr8( appDataBuffer->Des() );
-		aSchedule->SetApplicationDataL( *appDataBuffer );
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		view.NextL();
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetScheduleByDbIdentifierL");
-	}
-
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetOverlappingSchedulesL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::GetOverlappingSchedulesL( const TInt32 aType,
-                                               const TTime& aStartTime,
-                                               const TTime& aEndTime,
-                                               RPointerArray<CCseScheduledProgram>& aResultArray
-                                               )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetOverlappingSchedulesL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	TBuf<100> startTimeBuf;
-	_LIT( KDateTimeFormat,"# %1%*D/%2%*M/%3%*Y %H:%T:%S#" ); 
-	aStartTime.FormatL( startTimeBuf, KDateTimeFormat );
-	TBuf<100> endTimeBuf;
-	aEndTime.FormatL( endTimeBuf, KDateTimeFormat );  
-
-    // Create SQL string to find all overlapping schedules from database between given
-    // timeframe.
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleTypeCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aType );
-	sqlStatement.Append( KCseAnd );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-	sqlStatement.Append( KCseLess );
-	sqlStatement.Append( endTimeBuf );
-	sqlStatement.Append( KCseAnd );
-	sqlStatement.Append( KCseScheduleEndTimeCol );
-	sqlStatement.Append( KCseMore );
-	sqlStatement.Append( startTimeBuf );	
-	sqlStatement.Append( KCseOrderBy );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-
-    // Order table		
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Move to the first row
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Get colon indexes.
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo typeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Loop through all found schedules.
-	while ( view.AtRow() )
-		{
-		// Create new schedule to be added to array.
-		CCseScheduledProgram* schedule = CCseScheduledProgram::NewL();
-		CleanupStack::PushL( schedule );	
-		view.GetL();
-		
-		// Set schedule information.
-		schedule->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		schedule->SetName( view.ColDes8( nameIndex ) );
-		schedule->SetStartTime( view.ColTime( startTimeIndex ) );
-		schedule->SetEndTime( view.ColTime( endTimeIndex ) );
-		schedule->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		schedule->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		
-		schedule->SetScheduleType( CCseScheduledProgram::TCseScheduleType( 
-							   view.ColInt32( typeIndex ) ) );
-        schedule->SetPluginType( CCseScheduledProgram::TCsePluginType( 
-							   view.ColInt32( pluginTypeIndex ) ) );
-
-		TInt streamLen( 0 );
-		streamLen = view.ColLength( applicationSpecificIndex );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream; // |->1
-		readStream.OpenLC( view, applicationSpecificIndex );
-		readStream.ReadL(buffPtr, streamLen);
-		readStream.Release();
-		CleanupStack::PopAndDestroy( ); //  1<-| Popping pointer to Col that we dont have here
-		TPtrC8 ptr8( appDataBuffer->Des() );
-		schedule->SetApplicationDataL( *appDataBuffer );
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		if ( schedule->StartTime() < aEndTime && schedule->EndTime() > aStartTime )
-			{
-			aResultArray.AppendL( schedule );
-			CleanupStack::Pop( schedule );	
-			}
-		else
-			{
-			CleanupStack::PopAndDestroy( schedule );
-			schedule = NULL;
-			}
-		
-		// Next shcedule...
-		view.NextL();
-		}
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetOverlappingSchedulesL");
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::IncreaseRunCountL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::IncreaseRunCountL( const TUint32 aDbIdentifier )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::IncreaseRunCountL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-
-    // Create SQL string to find given schedule
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleDbKeyCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aDbIdentifier );
-		
-	// Order table based on DB identifier
-	RDbView readView;
-	CleanupClosePushL( readView );
-    
-    User::LeaveIfError( readView.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( readView.EvaluateAll() );
-    	
-	// Get the next reminder
-	readView.FirstL();
-	
-	// First we read existint run count
-	CDbColSet* readColSet = readView.ColSetL();
-	CleanupStack::PushL( readColSet );		
-	TDbColNo runCountCol = readColSet->ColNo( KCseScheduleRunCountCol );	
-	CleanupStack::PopAndDestroy( readColSet );
-	TInt32 runCount( 0 );
-	if ( readView.AtRow() )
-		{				
-		readView.GetL();
-		runCount = readView.ColInt32( runCountCol );
-		runCount++;		
-		}
-	// Close read view
-	CleanupStack::PopAndDestroy( &readView );
-
-	// Update run count
-	if ( runCount > 0 )
-		{
-		// Open write view
-        RDbView writeView;
-		CleanupClosePushL( writeView );    
-        User::LeaveIfError( writeView.Prepare( iScheduleDb,
-    				        TDbQuery( sqlStatement ),
-    					    TDbWindow::EUnlimited,
-    					    RDbView::EUpdatable ));
-    	User::LeaveIfError( writeView.EvaluateAll() );
-    	
-    	writeView.FirstL();
-    	CDbColSet* writeColSet = writeView.ColSetL();
-		CleanupStack::PushL( writeColSet );		
-		TDbColNo runCountColNo = writeColSet->ColNo( KCseScheduleRunCountCol );	
-		CleanupStack::PopAndDestroy( writeColSet );
-
-    	writeView.UpdateL();
-    	
-    	// If we found (as we should) schedule again we update its value.
-    	if ( writeView.AtRow() )
-    	    {    	        
-	        writeView.SetColL( runCountColNo, runCount );
-    	    }
-	    
-	    writeView.PutL();
-        
-        CleanupStack::PopAndDestroy( &writeView );
-		}	
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::IncreaseRunCountL");
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetRunCountL()
-//
-// ---------------------------------------------------------------------------	
-TInt32 CCseScheduleDB::GetRunCountL( const TUint32 aDbIdentifier )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetRunCountL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	TInt32 runCount( 0 );
-
-    // Create SQL string to find given schedule	
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleDbKeyCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aDbIdentifier );
-		
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Get the next reminder
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-		
-	TDbColNo runCountCol = colSetOrder->ColNo( KCseScheduleRunCountCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-
-    // If we found schedule get its run count.
-	if ( view.AtRow() )
-		{				
-		view.GetL();
-		
-		runCount = view.ColInt32( runCountCol );
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING2_HIGH_LEVEL("<<<CCseScheduleDB::GetRunCountL: runCount=%d", runCount);
-	
-	return runCount;
-	}
-	
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::SetScheduleStateL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::SetScheduleStateL( const TUint32 aDbIdentifier,
-                                        const TInt32 aState )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::SetScheduleStateL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-    // Create SQL string to find given schedule	
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleDbKeyCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aDbIdentifier );
-		
-	// Open write view
-    RDbView writeView;
-	CleanupClosePushL( writeView );    
-    User::LeaveIfError( writeView.Prepare( iScheduleDb,
-				        TDbQuery( sqlStatement ),
-					    TDbWindow::EUnlimited,
-					    RDbView::EUpdatable ));
-	User::LeaveIfError( writeView.EvaluateAll() );
-	
-	writeView.FirstL();
-	CDbColSet* writeColSet = writeView.ColSetL();
-	CleanupStack::PushL( writeColSet );		
-	TDbColNo stateColNo = writeColSet->ColNo( KCseScheduleStateCol );	
-	CleanupStack::PopAndDestroy( writeColSet );
-
-	writeView.UpdateL();
-	
-	// If we found schedule, we change the column value.
-	if ( writeView.AtRow() )
-	    {    	        
-        writeView.SetColL( stateColNo, aState );
-	    }
-    
-    writeView.PutL();
-    CleanupStack::PopAndDestroy( &writeView );
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::SetScheduleStateL");
-	}
-	
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetScheduleStateL()
-//
-// ---------------------------------------------------------------------------	
-TInt32 CCseScheduleDB::GetScheduleStateL( const TUint32 aDbIdentifier )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetScheduleStateL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Create SQL string to find given schedule	
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleDbKeyCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aDbIdentifier );
-		
-	// Order table based on DB identifier
-	RDbView readView;
-	CleanupClosePushL( readView );    
-    User::LeaveIfError( readView.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( readView.EvaluateAll() );    		
-    	
-	// Get the reminder
-	readView.FirstL();
-	
-	CDbColSet* readColSet = readView.ColSetL();
-	CleanupStack::PushL( readColSet );		
-	TDbColNo stateCol = readColSet->ColNo( KCseScheduleStateCol );	
-	CleanupStack::PopAndDestroy( readColSet );
-	TInt32 state( KErrNotFound );
-	
-    // If we found schedule, get the schedule state.
-	if ( readView.AtRow() )
-		{				
-		readView.GetL();
-		state = readView.ColInt32( stateCol );
-		}
-	// Close read view
-	CleanupStack::PopAndDestroy( &readView );
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetScheduleStateL");
-	
-	return state;
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::StartupSchedulesL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::StartupSchedulesL( RPointerArray<CCseScheduledProgram>& aScheduleArray )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::StartupSchedulesL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-
-	// Create SQL string to find wanted schedules.
-	// At startup phase we are first interested for
-	// those schedules that were on run when phone was
-	// shutdown (eg runcount is bigger than 0).	
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleRunCountCol );
-	sqlStatement.Append( KCseMore );
-	sqlStatement.AppendNum( 0 );
-
-    // Order table
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Get the first reminder
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Column indexes
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo typeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-
-    // Loop through the found schedules.		
-	while ( view.AtRow() )
-		{
-		// Create CseScheduledProgram to be added to string.
-		CCseScheduledProgram* prog = CCseScheduledProgram::NewL();
-		CleanupStack::PushL( prog );			
-		view.GetL();
-		
-		// Set schedule information.
-		prog->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		prog->SetName( view.ColDes8( nameIndex ) );
-		prog->SetStartTime( view.ColTime( startTimeIndex ) );
-		prog->SetEndTime( view.ColTime( endTimeIndex ) );
-		prog->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		prog->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		
-		prog->SetScheduleType( CCseScheduledProgram::TCseScheduleType( 
-							   view.ColInt32( typeIndex ) ) );
-        prog->SetPluginType( CCseScheduledProgram::TCsePluginType( 
-							   view.ColInt32( pluginTypeIndex ) ) );
-							   
-		TInt streamLen( view.ColLength( applicationSpecificIndex ) );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream;
-		readStream.OpenLC( view, applicationSpecificIndex ); // |->1
-		readStream.ReadL( buffPtr, streamLen );
-		readStream.Release();
-		CleanupStack::PopAndDestroy( ); // 1<-| Popping pointer to Col that we dont have here
-
-		prog->SetApplicationDataL( *appDataBuffer );
-		
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		User::LeaveIfError( aScheduleArray.Append( prog ) );
-		CleanupStack::Pop( prog );
-		
-		// Next shcedule
-		view.NextL();
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::StartupSchedulesL");
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::ResetCompactTimer()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::ResetCompactTimer()
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::ResetCompactTimer");
-    
-    // If iCompatTimer is not running start it.
-    if( !iCompactTimer )
-        {
-        TRAPD(err, iCompactTimer = CPeriodic::NewL( CActive::EPriorityStandard ));
-        
-        if(err != KErrNone )
-            {
-            CSELOGSTRING2_HIGH_LEVEL("CCseScheduleDB::ResetCompactTimer - Can't create iCompactTimer: %d", err);
-            }
-        }
-        
-    // If iCompactTimer is running cancel it and start over again.
-    if( iCompactTimer )
-        {            
-        iCompactTimer->Cancel();
-        
-        iCompactTimer->Start( KCseDbCompactTimeout,
-                              KCseDbCompactTimeout, 
-                              TCallBack( CompactCallback, this ) );
-        }
-        
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::ResetCompactTimer");
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::CompactCallback()
-//
-// ---------------------------------------------------------------------------
-TInt CCseScheduleDB::CompactCallback( TAny* aThis )
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::CompactCallback");
-    
-    // Direct call to class method.
-    static_cast<CCseScheduleDB*>( aThis )->CompactDb();
-    
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::CompactCallback");
-    return EFalse;    
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::CompactDb()
-//
-// ---------------------------------------------------------------------------    
-void CCseScheduleDB::CompactDb()
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::CompactDb");
-    // Compact database
-    TInt err( iScheduleDb.Compact() );
-    if ( err != KErrNone )
-        {
-        CSELOGSTRING2_HIGH_LEVEL("iScheduleDb.Compact() failed: %d", err);    
-        }
-    // Cancel timer if it is running    
-	if ( iCompactTimer )
-		{
-		iCompactTimer->Cancel();
-    	delete iCompactTimer;
-    	iCompactTimer = NULL;    	
-		}
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::CompactDb");
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::ChangeFileLockL()
-//
-// ---------------------------------------------------------------------------    
-//
-void CCseScheduleDB::ChangeFileLockL(
-    const TDesC& /*aFileName*/,
-    TFileLockFlags aFlags )
-    {
-    CSELOGSTRING_HIGH_LEVEL( ">>>CCseScheduleDB::ChangeFileLockL" );
-    
-    switch ( aFlags )
-        {
-        case MBackupObserver::EReleaseLockReadOnly:
-        case MBackupObserver::EReleaseLockNoAccess:
-            {
-            // Backup and restore starting, close the db
-            CloseDbFile();
-            }
-            break;
-            
-        default:
-            {
-            OpenDbFileL();
-            }
-            break;                
-        }
-
-    CSELOGSTRING_HIGH_LEVEL( "<<<CCseScheduleDB::ChangeFileLockL" );
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::CloseDbFile()
-//
-// ---------------------------------------------------------------------------    
-void CCseScheduleDB::CloseDbFile()
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::CloseDbFile");
-    
-    iDbAccess = ECseDbLocked;
-    iScheduleDb.Close();
-    delete iScheduleFileStore;
-    iScheduleFileStore = NULL;    
-        
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::CloseDbFile");
-    }
-	
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::OpenDbFileL()
-//
-// ---------------------------------------------------------------------------    
-void CCseScheduleDB::OpenDbFileL()
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::OpenDbFileL");
-    
-    iScheduleDb.Close();
-    if( iScheduleFileStore )
-        {
-        delete iScheduleFileStore;
-        iScheduleFileStore = NULL;
-        }
-	iScheduleFileStore = CPermanentFileStore::OpenL( iFsSession, iDbFile,
-												     EFileRead|EFileWrite );
-	iScheduleFileStore->SetTypeL( iScheduleFileStore->Layout() );	
-    iScheduleDb.OpenL( iScheduleFileStore, iScheduleFileStore->Root() );
-	User::LeaveIfError( iScheduleDb.Compact() );    
-	
-	iDbAccess = ECseDbOpen;
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::OpenDbFileL");
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::LeaveIfDbLocked()
-//
-// ---------------------------------------------------------------------------    
-void CCseScheduleDB::LeaveIfDbLockedL() const
-    {
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::LeaveIfDbLocked");
-    
-    if(iDbAccess == ECseDbLocked)
-        {
-        CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::LeaveIfDbLocked - Leave, DB locked!!");
-        User::Leave( KErrLocked );
-        }
-        
-    CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::LeaveIfDbLocked");
-    }
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetSchedulesByPluginL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::GetSchedulesByPluginL( const TInt32 aPluginUid,
-								            RPointerArray<CCseScheduledProgram>& aArray )
-	{
-	
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetSchedulesByPluginL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Gets program occurence(s) that are going to happen next
-	// from database
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseSchedulePlugInUIDCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aPluginUid );
-	sqlStatement.Append( KCseOrderBy );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Get the SQL table indexes.
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo scheduleTypeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Loop through the tables
-	while ( view.AtRow() )
-		{
-		// Create new CCseSceduledProgram to be added to array
-		CCseScheduledProgram* prog = CCseScheduledProgram::NewL();
-		CleanupStack::PushL( prog );			
-		
-		// Fill created schedule with DB information
-		view.GetL();
-		prog->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		prog->SetName( view.ColDes8( nameIndex ) );
-		prog->SetStartTime( view.ColTime( startTimeIndex ) );
-		prog->SetEndTime( view.ColTime( endTimeIndex ) );
-		prog->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		prog->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		prog->SetScheduleType( view.ColInt32( scheduleTypeIndex ) );
-		prog->SetPluginType( view.ColInt32( pluginTypeIndex ) );
-		
-		TInt streamLen( 0 );
-		streamLen = view.ColLength( applicationSpecificIndex );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream;
-		readStream.OpenLC( view, applicationSpecificIndex ); // |->1
-		readStream.ReadL( buffPtr, streamLen );
-		readStream.Release();
-		CleanupStack::PopAndDestroy( ); // 1<-| Popping pointer to Col that we dont have here
-
-		prog->SetApplicationDataL( *appDataBuffer );
-		
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		User::LeaveIfError( aArray.Append( prog ) );
-		CleanupStack::Pop( prog );
-		view.NextL();
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetSchedulesByPluginL");	
-	}
-	
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetSchedulesByTypeL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::GetSchedulesByTypeL( const TInt32 aType,
-								          RPointerArray<CCseScheduledProgram>& aArray )
-	{	
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetSchedulesByPluginL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Gets program occurence(s) that are going to happen next
-	// from database
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleTypeCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aType );
-	sqlStatement.Append( KCseOrderBy );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Get the SQL table indexes.
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo scheduleTypeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Loop through the tables
-	while ( view.AtRow() )
-		{
-		// Create new CCseSceduledProgram to be added to array
-		CCseScheduledProgram* prog = CCseScheduledProgram::NewL();
-		CleanupStack::PushL( prog );			
-		
-		// Fill created schedule with DB information
-		view.GetL();
-		prog->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		prog->SetName( view.ColDes8( nameIndex ) );
-		prog->SetStartTime( view.ColTime( startTimeIndex ) );
-		prog->SetEndTime( view.ColTime( endTimeIndex ) );
-		prog->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		prog->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		prog->SetScheduleType( view.ColInt32( scheduleTypeIndex ) );
-		prog->SetPluginType( view.ColInt32( pluginTypeIndex ) );
-		
-		TInt streamLen( 0 );
-		streamLen = view.ColLength( applicationSpecificIndex );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream;
-		readStream.OpenLC( view, applicationSpecificIndex ); // |-> 1
-		readStream.ReadL( buffPtr, streamLen );
-		readStream.Release();
-		CleanupStack::PopAndDestroy( ); // 1 <-| Popping pointer to Col that we dont have here
-
-		prog->SetApplicationDataL( *appDataBuffer );
-		
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		User::LeaveIfError( aArray.Append( prog ) );
-		CleanupStack::Pop( prog );
-		view.NextL();
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetSchedulesByPluginL");	
-	}
-	
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetSchedulesByTimeframeL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::GetSchedulesByTimeframeL( const TTime& aBeginning,
-                                               const TTime& aEnd,
-                                               RPointerArray<CCseScheduledProgram>& aResultArray
-                                               )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetSchedulesByTimeframeL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	TBuf<100> startTimeBuf;
-	_LIT( KDateTimeFormat,"# %1%*D/%2%*M/%3%*Y %H:%T:%S#" ); 
-	aBeginning.FormatL( startTimeBuf, KDateTimeFormat );
-	TBuf<100> endTimeBuf;
-	aEnd.FormatL( endTimeBuf, KDateTimeFormat );  
-
-    // Create SQL string to find all overlapping schedules from database between given
-    // timeframe.
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-	sqlStatement.Append( KCseLess );
-	sqlStatement.Append( endTimeBuf );
-	sqlStatement.Append( KCseAnd );
-	sqlStatement.Append( KCseScheduleEndTimeCol );
-	sqlStatement.Append( KCseMore );
-	sqlStatement.Append( startTimeBuf );	
-	sqlStatement.Append( KCseOrderBy );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-
-    // Order table		
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Move to the first row
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Get colon indexes.
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo typeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Loop through all found schedules.
-	while ( view.AtRow() )
-		{
-		// Create new schedule to be added to array.
-		CCseScheduledProgram* schedule = CCseScheduledProgram::NewL();
-		CleanupStack::PushL( schedule );	
-		view.GetL();
-		
-		// Set schedule information.
-		schedule->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		schedule->SetName( view.ColDes8( nameIndex ) );
-		schedule->SetStartTime( view.ColTime( startTimeIndex ) );
-		schedule->SetEndTime( view.ColTime( endTimeIndex ) );
-		schedule->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		schedule->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		
-		schedule->SetScheduleType( CCseScheduledProgram::TCseScheduleType( 
-							   view.ColInt32( typeIndex ) ) );
-        schedule->SetPluginType( CCseScheduledProgram::TCseScheduleType( 
-							   view.ColInt32( pluginTypeIndex ) ) );
-
-		TInt streamLen( 0 );
-		streamLen = view.ColLength( applicationSpecificIndex );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream;
-		readStream.OpenLC( view, applicationSpecificIndex ); // |-> 1
-		readStream.ReadL(buffPtr, streamLen);
-		readStream.Release();
-		CleanupStack::PopAndDestroy( ); // 1 <-| Popping pointer to Col that we dont have here
-		TPtrC8 ptr8( appDataBuffer->Des() );
-		schedule->SetApplicationDataL( *appDataBuffer );
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		
-		aResultArray.AppendL( schedule );
-		CleanupStack::Pop( schedule );	
-	
-		// Next shcedule...
-		view.NextL();
-		}
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetSchedulesByTimeframeL");
-	}
-	
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetPluginsL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::GetPluginsL( RArray<TInt32>& aPlugins )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetPluginsL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();	
-	
-	// Gets program occurence(s) that are going to happen next
-	// from database
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseOrderBy );
-	sqlStatement.Append( KCseSchedulePlugInUIDCol );
-	
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Get the SQL table indexes.	
-	TDbColNo pluginUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	TInt32 currentPluginUid( 0 );
-	TInt32 newPluginUid( 0 );
-	
-	// Loop through the tables
-	while ( view.AtRow() )
-	    {	    
-	    view.GetL();
-	    
-	    // Get plugin Uid from row	        
-		newPluginUid = view.ColInt32( pluginUidIndex );
-		
-		// If it is different that the current plugin uid add it to
-		// array and set new "current" uid.
-		if( newPluginUid != currentPluginUid )
-		    {
-		    // Query results are sorted by plugin uid
-		    // so if uid changes we can add it to array
-		    // without fearing that we will have
-		    // duplicates.		    
-		    aPlugins.Append( newPluginUid );
-		    currentPluginUid = newPluginUid;
-		    }		
-		
-		view.NextL();
-		}
-		
-    view.Close();		
-	CleanupStack::PopAndDestroy( &view ); // Closes view	
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetPluginsL");
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetNextScheduleTimeByPluginL()
-//
-// ---------------------------------------------------------------------------	
-TTime CCseScheduleDB::GetNextScheduleTimeByPluginL( TInt32 aPluginUid )
-	{
-	CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetNextScheduleTimeByPluginL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Create SQL satring to get schedule occurence(s) that are
-	// going to happen next from database.
-	TTime nextScheduleTime( 0 );
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleStateCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( ECseWaiting );
-	sqlStatement.Append( KCseAnd );
-	sqlStatement.Append( KCseSchedulePlugInUIDCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aPluginUid );
-	sqlStatement.Append( KCseOrderBy );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-		
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Get the next schedule
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Schedule found get its start time.
-	if ( view.AtRow() )	
-		{		
-		view.GetL();				
-		nextScheduleTime = view.ColTime( startTimeIndex );
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetNextScheduleTimeByPluginL");
-	
-	return nextScheduleTime;
-	}
-
-// ---------------------------------------------------------------------------
-// CCseScheduleDB::GetSchedulesByTimeAndPluginL()
-//
-// ---------------------------------------------------------------------------	
-void CCseScheduleDB::GetSchedulesByTimeAndPluginL(
-                                     const TTime& aScheduleTime, 
-                                     TInt32 aPluginUid,
-					                 RPointerArray<CCseScheduledProgram>& aNextScheduleArray )
-	{
-    CSELOGSTRING_HIGH_LEVEL(">>>CCseScheduleDB::GetSchedulesByTimeAndPluginL");
-	LeaveIfDbLockedL();
-	ResetCompactTimer();
-	
-	// Gets program occurence(s) that are going to happen next
-	// from database
-	TBuf<100> startTimeBuf;
-	
-	_LIT( KDateTimeFormat,"# %1%*D/%2%*M/%3%*Y %H:%T:%S.%C#" ); 
-
-	aScheduleTime.FormatL( startTimeBuf, KDateTimeFormat );
-		
-	// Create SQL string to get all schedules to be happen at given time
-	TBuf<KCseCustomSqlLength> sqlStatement;
-	sqlStatement.Append( KCseSelectFromDb );	
-	sqlStatement.Append( KCseScheduleTable );
-	sqlStatement.Append( KCseWhere );
-	sqlStatement.Append( KCseScheduleStartTimeCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.Append( startTimeBuf );
-	sqlStatement.Append( KCseAnd );
-	sqlStatement.Append( KCseSchedulePlugInUIDCol );
-	sqlStatement.Append( KCseEqual );
-	sqlStatement.AppendNum( aPluginUid );
-		
-	// Order table based on start time
-	RDbView view;
-	CleanupClosePushL( view );
-	User::LeaveIfError( view.Prepare( iScheduleDb, 
-						TDbQuery( sqlStatement ) ) );
-	User::LeaveIfError( view.EvaluateAll() );
-	
-	// Get the next reminder
-	view.FirstL();
-	
-	CDbColSet* colSetOrder = view.ColSetL();
-	CleanupStack::PushL( colSetOrder );
-	
-	// Get column indexes
-	TDbColNo keyIndex = colSetOrder->ColNo( KCseScheduleDbKeyCol );
-	TDbColNo nameIndex = colSetOrder->ColNo( KCseScheduleNameCol );
-	TDbColNo startTimeIndex = colSetOrder->ColNo( KCseScheduleStartTimeCol );
-	TDbColNo endTimeIndex = colSetOrder->ColNo( KCseScheduleEndTimeCol );
-	TDbColNo applicationUidIdIndex = colSetOrder->ColNo( KCseScheduleApplicationUIDCol );
-	TDbColNo plugInUidIndex = colSetOrder->ColNo( KCseSchedulePlugInUIDCol );
-	TDbColNo typeIndex = colSetOrder->ColNo( KCseScheduleTypeCol );
-	TDbColNo applicationSpecificIndex = colSetOrder->ColNo( KCseScheduleApplicationSpecificCol );
-	TDbColNo pluginTypeIndex = colSetOrder->ColNo( KCseSchedulePluginTypeCol );
-	
-	CleanupStack::PopAndDestroy( colSetOrder );
-	
-	// Loop through all found schedules.
-	while ( view.AtRow() )
-		{
-		// Create new schedule to be added to array
-		CCseScheduledProgram* prog = CCseScheduledProgram::NewL();
-		CleanupStack::PushL( prog );			
-		view.GetL();
-		
-		// Copy information from DB to schedule.
-		prog->SetDbIdentifier( view.ColUint32( keyIndex ) );
-		prog->SetName( view.ColDes8( nameIndex ) );
-		prog->SetStartTime( view.ColTime( startTimeIndex ) );
-		prog->SetEndTime( view.ColTime( endTimeIndex ) );
-		prog->SetAppUid( view.ColInt32( applicationUidIdIndex ) );
-		prog->SetPluginUid( view.ColInt32( plugInUidIndex ) );
-		
-		prog->SetScheduleType( CCseScheduledProgram::TCseScheduleType( 
-							   view.ColInt32( typeIndex ) ) );
-        prog->SetPluginType( view.ColInt32( pluginTypeIndex ) );
-		TInt streamLen( view.ColLength( applicationSpecificIndex ) );
-	
-		HBufC8* appDataBuffer = HBufC8::NewL( streamLen );
-		CleanupStack::PushL( appDataBuffer );
-		
-		TPtr8 buffPtr( appDataBuffer->Des() );
-		RDbColReadStream readStream;
-		readStream.OpenLC( view, applicationSpecificIndex ); // |-> 1
-		readStream.ReadL( buffPtr, streamLen );
-		readStream.Release();
-		CleanupStack::PopAndDestroy(); // 1 <-|
-
-		prog->SetApplicationDataL( *appDataBuffer );
-		
-		CleanupStack::PopAndDestroy( appDataBuffer );
-		User::LeaveIfError( aNextScheduleArray.Append( prog ) );
-		CleanupStack::Pop( prog );
-		
-		// And next schedule...
-		view.NextL();
-		}
-		
-	CleanupStack::PopAndDestroy( &view ); // Closes view
-	
-	CSELOGSTRING_HIGH_LEVEL("<<<CCseScheduleDB::GetSchedulesByTimeAndPluginL");
-	}
-
-
-// End of file.