cbs/CbsServer/ServerSrc/CCbsDbImp.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/cbs/CbsServer/ServerSrc/CCbsDbImp.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,459 +0,0 @@
-/*
-* Copyright (c) 2003 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 contains basis for the implementation of the database.
-*    
-*                Constructs instances of database subclasses CCbsDbImpSettings,
-*                CCbsDbImpTopicCollection, CCbsDbTopicList and CCbsDbTopicMessages.
-*                On initialization determines whether datafiles already exist.
-*                If all of them are present and valid, no special action is taken.
-*
-*                If some or all datafiles are missing or corrupt, all datafiles
-*                are deleted and new files created.
-*                Factory default settings, if available, are then loaded from
-*                Shared Data and stored in server datafiles. This is done by
-*                database subinstances.
-*
-*/
-
-
-//  INCLUDE FILES
-
-#include <barsc.h>
-#include <e32svr.h>
-#include <bautils.h>
-
-#include <CbsServer.rsg>
-
-#include "CbsUtils.h"
-#include "CbsServerPanic.h"
-#include "CCbsDbImp.H"
-#include "CbsDbConstants.h"
-#include "CCbsDbImpSettings.H"
-#include "CCbsDbImpTopicMessages.h"
-#include "CCbsDbImpTopicList.h"
-#include "CCbsDbImpTopicCollection.h"
-#include "CCbsBackupMonitor.h"
-#include "CCbsDiskSpaceMonitor.h"
-
-#include "CbsLogger.h"
-
-// Data file names
-_LIT( KCbsTopicsAndMsgsFileName, "cbtopicsmsgs.dat" );
-_LIT( KCbsUnsavedMsgsFileName, "cbunsaved.dat" );
-
-// ================= MEMBER FUNCTIONS =======================
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::CCbsDbImp
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CCbsDbImp::CCbsDbImp()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCbsDbImp::ConstructL()
-    {
-    User::LeaveIfError( iFs.Connect() );
-
-    // Create the disk space monitor    
-    iDiskSpaceMonitor = CCbsDiskSpaceMonitor::NewL( *this );
-
-    TInt errorCode( KErrNone );
-    
-#ifdef __SECURE_BACKUP__
-    // Use PubSub for monitoring
-    iBackupMonitor = CCbsBackupMonitor::NewL( *this );
-#else
-    // Create a backup observer wrapper. If an error is returned,
-    // ignore it and leave iBackupWrapper to NULL.
-    TRAP( errorCode, ( iBackupWrapper = CBaBackupSessionWrapper::NewL() ) );
-#endif        
-
-    // Try to create the database components. If we couldn't because
-    // the disk is almost full, that's alright. We'll try again
-    // later.
-    TRAP( errorCode, CreateComponentsL() );
-    if ( errorCode == KErrDiskFull )
-        {
-        // Install an observer for the critical level
-        WaitForCriticalLevel();
-        }
-    else
-        {
-        User::LeaveIfError( errorCode );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCbsDbImp* CCbsDbImp::NewL()
-    {
-    CCbsDbImp* self = new ( ELeave ) CCbsDbImp;
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-    return self;
-    }
-
-// Destructor
-CCbsDbImp::~CCbsDbImp()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsDbImp::~CCbsDbImp()");
-    if ( iDiskSpaceMonitor )
-        {
-        delete iDiskSpaceMonitor;
-        }    
-    
-    DeleteComponents();
-
-    iFs.Close();
-    CBSLOGSTRING("CBSSERVER: <<< CCbsDbImp::~CCbsDbImp()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::TopicListL
-// Returns a reference to the current active topic list. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CCbsDbImpTopicList& CCbsDbImp::TopicListL()
-    {
-    // Check if we have initialized the database succesfully
-    if ( !iTopicList )
-        {
-        User::Leave( KErrDiskFull );
-        }
-
-    return *iTopicList;    
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::TopicMessagesL
-// Returns a reference to the current topic messages DB object. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CCbsDbImpTopicMessages& CCbsDbImp::TopicMessagesL()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsDbImp::TopicMessagesL()");
-    
-    // Check if we have initialized the database succesfully
-    if ( !iTopicMessages )
-        {
-        CBSLOGSTRING("CBSSERVER: CCbsDbImp::TopicMessagesL(): No iTopicMessages instance, leaving with KErrDiskFull...");
-        User::Leave( KErrDiskFull );
-        }
-
-    CBSLOGSTRING("CBSSERVER: <<< CCbsDbImp::TopicMessagesL(), returning *iTopicMessages.");
-    return *iTopicMessages;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::SettingsL
-// Returns a reference to the settings DB object.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CCbsDbImpSettings& CCbsDbImp::SettingsL()
-    {
-    // Check if we have initialized the database succesfully
-    if ( !iSettings )
-        {
-        User::Leave( KErrDiskFull );
-        }
-
-    return *iSettings;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::TopicCollectionL
-// Returns a reference to the topic collection.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CCbsDbImpTopicCollection& CCbsDbImp::TopicCollectionL()
-    {
-    // Check if we have initialized the database succesfully
-    if ( !iTopicCollection )
-        {
-        User::Leave( KErrDiskFull );
-        }
-
-    return *iTopicCollection;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::BackupWrapperL
-// Returns a reference to the backup wrapper. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CBaBackupSessionWrapper& CCbsDbImp::BackupWrapperL()
-    {
-    if ( !iBackupWrapper )
-        {
-        User::Leave( KErrGeneral );
-        }
-
-    return *iBackupWrapper;
-    }
-
-// ---------------------------------------------------------
-// IsInitialized()    
-//
-// ---------------------------------------------------------
-TBool CCbsDbImp::IsInitialized() const
-    {
-    return iSettings != NULL;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::CreateComponentsL
-// Creates topic list, settings topic messages and topic
-// collection instances and loads factory settings if necessary. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsDbImp::CreateComponentsL()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsDbImp::CreateComponentsL()");
-    
-    // Return if we have already been initialized
-    if ( IsInitialized() )
-        {
-        return;
-        }    
-    
-    TBuf<16> topicsFile( KCbsTopicsAndMsgsFileName );
-    TBuf<16> messagesFile( KCbsUnsavedMsgsFileName );  
-    
-    // Delete the old file for unsaved messages 
-    CbsUtils::DeleteFileL( iFs, messagesFile );
-    CBSLOGSTRING("CBSSERVER: CCbsDbImp::CreateComponentsL(): messagesFile deleted.");
-
-    // Make sure that data file paths exist.
-    iFs.MkDirAll( topicsFile ); 
-    iFs.MkDirAll( messagesFile ); 
-    
-    // Create the individual components. If creating any of the components
-    // fails, this method leaves and created components are deleted.
-    CCbsDbImpSettings* settings = CreateSettingsL();
-    CleanupStack::PushL( settings );
-
-    CCbsDbImpTopicList* topicList = CreateTopicListL( topicsFile, messagesFile );
-    CleanupStack::PushL( topicList );
-
-    CCbsDbImpTopicMessages* topicMessages = CreateTopicMessagesL( *topicList );
-    CleanupStack::PushL( topicMessages );
-
-    CCbsDbImpTopicCollection* topicCollection = CreateTopicCollectionL();
-    CleanupStack::PushL( topicCollection );
-    
-
-#ifndef __SECURE_BACKUP__
-
-    CBSLOGSTRING("CBSSERVER: CCbsDbImp::CreateComponentsL(): __SECURE_BACKUP__ not defined.");
-    
-    // Register the file to backup server
-    if ( iBackupWrapper )
-        {
-        iBackupWrapper->RegisterFileL( *topicsFile, *topicList );
-        }
-#endif
-
-    // We have succesfully created all components. Set them to member
-    // variables.
-    iTopicList = topicList;
-    iSettings = settings;
-    iTopicMessages = topicMessages;
-    iTopicCollection = topicCollection;
-
-    // Does not transfer ownership.
-    iTopicList->SetTopicMessages( iTopicMessages );    
-
-    // If we could create the database, cancel the disk space notify request
-    WaitForCriticalLevelCancel();
-
-    // The database components are preserved, but the resource reader and
-    // related buffers are deleted.
-    CleanupStack::Pop( 4 ); // topicMessages, settings, topicList, topicCollection
-    
-    CBSLOGSTRING("CBSSERVER: <<< CCbsDbImp::CreateComponentsL()");
-    }
-
-// ---------------------------------------------------------
-// DeleteComponents()     
-//
-// ---------------------------------------------------------
-void CCbsDbImp::DeleteComponents()
-    {
-    delete iTopicMessages;
-    iTopicMessages = NULL;
-
-    delete iTopicCollection;
-    iTopicCollection = NULL;
-
-#ifdef __SECURE_BACKUP__
-
-#else
-    // Delete owned objects and deregister files from
-    // backup server.
-    if ( iBackupWrapper && iSettings )
-        {
-        //iBackupWrapper->DeregisterFile( iSettings->FileName() );
-        }
-        
-    if ( iBackupWrapper && iTopicList )
-        {
-        //iBackupWrapper->DeregisterFile( iTopicList->TopicFilename() );
-        }
-#endif        
-        
-    delete iSettings;
-    iSettings = NULL;
-    
-    delete iTopicList;
-    iTopicList = NULL;
-
-#ifdef __SECURE_BACKUP__
-    delete iBackupMonitor;
-    iBackupMonitor = NULL;
-#else
-    delete iBackupWrapper;
-    iBackupWrapper = NULL;
-#endif    
-    }
-
-// ---------------------------------------------------------
-// CreateSettingsL()     
-//
-// ---------------------------------------------------------
-CCbsDbImpSettings* CCbsDbImp::CreateSettingsL()
-    {
-    CCbsDbImpSettings* settings = NULL;
-    TRAPD( err, ( settings = CCbsDbImpSettings::NewL( *this ) ) );
-    User::LeaveIfError( err );
-    return settings;
-    }
-
-// ---------------------------------------------------------
-// CreateTopicListL()     
-//
-// ---------------------------------------------------------
-CCbsDbImpTopicList* CCbsDbImp::CreateTopicListL( 
-    const TDesC& aTopicsFile,
-    const TDesC& aMessagesFile )
-    {
-    // Try to create the topic list.
-    CCbsDbImpTopicList* topicList = NULL;
-    TRAPD( err, ( topicList = CCbsDbImpTopicList::NewL(
-        iFs, aTopicsFile, aMessagesFile, *this ) ) );
-
-    // Handle data file corruption here.
-    switch ( err )
-        {
-        case KErrNone:
-            break;
-
-        case KErrCorrupt:
-        case KErrEof:
-            // The data file was corrupt. Delete it and try again.
-            CbsUtils::DeleteFileL( iFs, aTopicsFile );
-            CbsUtils::DeleteFileL( iFs, aMessagesFile );
-            topicList = CCbsDbImpTopicList::NewL(
-                iFs, aTopicsFile, aMessagesFile, *this );
-            break;
-
-        default:
-            User::Leave( err );
-            break;
-        }
-
-    return topicList;
-    }
-
-// ---------------------------------------------------------
-// CreateTopicMessagesL()     
-//
-// ---------------------------------------------------------
-CCbsDbImpTopicMessages* CCbsDbImp::CreateTopicMessagesL( 
-    CCbsDbImpTopicList& aTopicList )
-    {
-    // This cannot leave because of data file corruption.
-    return CCbsDbImpTopicMessages::NewL( aTopicList, iFs );
-    }
-
-
-// ---------------------------------------------------------
-// CreateTopicCollectionL()     
-//
-// ---------------------------------------------------------
-CCbsDbImpTopicCollection* CCbsDbImp::CreateTopicCollectionL()
-    {
-    // This does not create a data file.
-    return CCbsDbImpTopicCollection::NewL();
-    }
-
-// ---------------------------------------------------------
-// WaitForCriticalLevelL()     
-//
-// ---------------------------------------------------------
-void CCbsDbImp::WaitForCriticalLevel()
-    {
-    // We are running low on disk space. Ask for a notification
-    // when there is space again.
-    iDiskSpaceMonitor->IssueRequest();  
-    }
-
-
-// ---------------------------------------------------------
-// WaitForCriticalLevelCancel()     
-//
-// ---------------------------------------------------------
-void CCbsDbImp::WaitForCriticalLevelCancel()
-    {
-    // Cancel the notification for critical level    
-    iDiskSpaceMonitor->Cancel();    
-    }
-
-// ---------------------------------------------------------
-// ChangeFileLocksL()
-// 
-// Releases all files for backup/restore, or takes the
-// files into use again.
-// ---------------------------------------------------------
-    
-void CCbsDbImp::ChangeFileLocksL( const TCbsBackupRequest& aRequest )
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsDbImp::ChangeFileLocksL()");
-    
-    // Check/change the topiclist/topics/saved messages file
-    iTopicList->ChangeFileLockL( aRequest );
-    
-    CBSLOGSTRING("CBSSERVER: <<< CCbsDbImp::ChangeFileLocksL()");
-    }
-
-// ================= OTHER EXPORTED FUNCTIONS ==============
-
-//  End of File