filemanager/bkupengine/src/CMMCScBkupDriveDataSizeManager.cpp
changeset 0 6a9f87576119
child 13 5181328fad28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupDriveDataSizeManager.cpp	Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,571 @@
+/*
+* Copyright (c) 2005-2008 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: CMMCScBkupDriveSizer implementation
+*
+*
+*/
+
+#include "CMMCScBkupDriveDataSizeManager.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::CMMCScBkupDriveSizer()
+// 
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer::CMMCScBkupDriveSizer( TMMCScBkupOwnerDataType aType )
+:   iDataType( aType )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::~CMMCScBkupDriveSizer()
+// 
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer::~CMMCScBkupDriveSizer()
+    {
+    iEntries.Close();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::ConstructL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::ConstructL()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::NewLC()
+// 
+// 
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer* CMMCScBkupDriveSizer::NewLC( TMMCScBkupOwnerDataType aType )
+    {
+    CMMCScBkupDriveSizer* self = new(ELeave) CMMCScBkupDriveSizer( aType );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::NewLC()
+// 
+// 
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer* CMMCScBkupDriveSizer::NewLC( RReadStream& aStream )
+    {
+    CMMCScBkupDriveSizer* self = new(ELeave) CMMCScBkupDriveSizer( EMMCScBkupOwnerDataTypeAny );
+    CleanupStack::PushL(self);
+    aStream >> *self;
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::AddToSizeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::AddToSizeL( TInt64 aAmount, TDriveNumber aDrive )
+    {
+    TMMCScBkupDriveAndSize* entry = EntryByDrive( aDrive );
+    //
+    if  ( entry == NULL )
+        {
+        if  ( aAmount > 0 )
+            {
+            TMMCScBkupDriveAndSize newEntry( aDrive, aAmount );
+            iEntries.AppendL( newEntry );
+            }
+        }
+    else
+        {
+        entry->AddToSize( aAmount );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::Reset()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::Reset()
+    {
+    const TInt count = iEntries.Count();
+    for( TInt i=0; i<count; i++ )
+        {
+        TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+        entry.SetSize( 0 );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::Reset()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::Reset( TDriveNumber aDrive )
+    {
+    TMMCScBkupDriveAndSize* entry = EntryByDrive( aDrive );
+    //
+    if  ( entry != NULL )
+        {
+        entry->SetSize( 0 );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::Size()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDriveSizer::Size() const
+    {
+    TInt64 size = 0;
+    //
+    const TInt count = iEntries.Count();
+    for( TInt i=0; i<count; i++ )
+        {
+        const TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+        size += entry.Size();
+        }
+    //
+    return size;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::Size()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDriveSizer::Size( TDriveNumber aDrive ) const
+    {
+    TInt64 size = 0;
+    TMMCScBkupDriveAndSize* entry = const_cast< CMMCScBkupDriveSizer* >( this )->EntryByDrive( aDrive );
+    //
+    if  ( entry != NULL )
+        {
+        size = entry->Size();
+        }
+    //
+    return size;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::InternalizeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::InternalizeL(RReadStream& aStream)
+    {
+    aStream.ReadInt32L(); // EStreamFormatVersion1 
+    aStream.ReadInt32L(); // spare1
+    aStream.ReadInt32L(); // spare2
+    //
+    iDataType = static_cast< TMMCScBkupOwnerDataType >( aStream.ReadInt8L() );
+    const TInt count = aStream.ReadInt8L();
+    for( TInt i=0; i<count; i++ )
+        {
+        TMMCScBkupDriveAndSize entry;
+        aStream >> entry;
+        iEntries.AppendL( entry );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::ExternalizeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L( EStreamFormatVersion1 );
+    aStream.WriteInt32L( 0 ); // spare1
+    aStream.WriteInt32L( 0 ); // spare2
+    //
+    aStream.WriteInt8L( iDataType );
+
+    // Work out how many non-zero entries we need to write.
+    TInt i = 0;
+    const TInt count = iEntries.Count();
+    TInt numberOfExternalisedEntries = 0;
+    //    
+    for( i=0; i<count; i++ )
+        {
+        const TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+        if  ( entry.Size() > 0 )
+            {
+            ++numberOfExternalisedEntries;
+            }
+        }
+    
+    // Now really write the entries...
+    aStream.WriteInt8L( numberOfExternalisedEntries );
+    if  ( numberOfExternalisedEntries > 0 )
+        {
+        for( i=0; i<count; i++ )
+            {
+            const TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+            if  ( entry.Size() > 0 )
+                {
+                aStream << entry;
+                }
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::EntryByDrive()
+// 
+// 
+// ---------------------------------------------------------------------------
+TMMCScBkupDriveAndSize* CMMCScBkupDriveSizer::EntryByDrive( TDriveNumber aDrive )
+    {
+    TMMCScBkupDriveAndSize* ret = NULL;
+    //
+    const TInt count = iEntries.Count();
+    for( TInt i=0; i<count; i++ )
+        {
+        TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+        //
+        if  ( entry.Drive() == aDrive )
+            {
+            ret = &entry;
+            break;
+            }
+        }
+    //
+    return ret;
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::CMMCScBkupDataTypeSizer()
+// 
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataTypeSizer::CMMCScBkupDataTypeSizer()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::~CMMCScBkupDataTypeSizer()
+// 
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataTypeSizer::~CMMCScBkupDataTypeSizer()
+    {
+    iSizers.Close();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::ConstructL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::ConstructL()
+    {
+    iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeDataOwner ) );
+    CleanupStack::Pop(); // sizer
+    iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeJavaData ) );
+    CleanupStack::Pop(); // sizer
+    iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypePublicData ) );
+    CleanupStack::Pop(); // sizer
+    iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeSystemData ) );
+    CleanupStack::Pop(); // sizer
+    iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeActiveData ) );
+    CleanupStack::Pop(); // sizer
+    iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypePassiveData ) );
+    CleanupStack::Pop(); // sizer
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::NewL()
+// 
+// 
+// ---------------------------------------------------------------------------
+CMMCScBkupDataTypeSizer* CMMCScBkupDataTypeSizer::NewL()
+    {
+    CMMCScBkupDataTypeSizer* self = new(ELeave) CMMCScBkupDataTypeSizer();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::NewLC()
+// 
+// 
+// ---------------------------------------------------------------------------
+CMMCScBkupDataTypeSizer* CMMCScBkupDataTypeSizer::NewLC( RReadStream& aStream )
+    {
+    CMMCScBkupDataTypeSizer* self = new(ELeave) CMMCScBkupDataTypeSizer();
+    CleanupStack::PushL(self);
+    aStream >> *self;
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::AddToSizeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::AddToSizeL( TMMCScBkupOwnerDataType aDataType, TInt64 aAmount, TDriveNumber aDrive )
+    {
+    CMMCScBkupDriveSizer* sizer = SizerByDataType( aDataType );
+    ASSERT( sizer != NULL );
+    sizer->AddToSizeL( aAmount, aDrive );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::Reset()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::Reset( TMMCScBkupOwnerDataType aDataType )
+    {
+    CMMCScBkupDriveSizer* sizer = SizerByDataType( aDataType );
+    ASSERT( sizer != NULL );
+    sizer->Reset();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::Reset()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::Reset( TMMCScBkupOwnerDataType aDataType, TDriveNumber aDrive )
+    {
+    CMMCScBkupDriveSizer* sizer = SizerByDataType( aDataType );
+    ASSERT( sizer != NULL );
+    sizer->Reset( aDrive );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::Size()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataTypeSizer::Size( TMMCScBkupOwnerDataType aDataType ) const
+    {
+    CMMCScBkupDriveSizer* sizer = const_cast< CMMCScBkupDataTypeSizer* >( this )->SizerByDataType( aDataType );
+    ASSERT( sizer != NULL );
+    const TInt64 size = sizer->Size();
+    return size;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::Size()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataTypeSizer::Size( TMMCScBkupOwnerDataType aDataType, TDriveNumber aDrive ) const
+    {
+    CMMCScBkupDriveSizer* sizer = const_cast< CMMCScBkupDataTypeSizer* >( this )->SizerByDataType( aDataType );
+    ASSERT( sizer != NULL );
+    const TInt64 size = sizer->Size( aDrive );
+    return size;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::GetSizesL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::GetSizesL( RArray<TMMCScBkupDriveAndSize>& aSizes ) const
+    {
+    aSizes.Reset();
+    //
+    for( TInt d = EDriveA; d<=EDriveZ; d++ )
+        {
+        // Get the size of each data type for this drive.
+        const TDriveNumber drive = static_cast< TDriveNumber >( d );
+        TMMCScBkupDriveAndSize driveAndSize( drive, 0 );
+
+        const TInt count = iSizers.Count();
+        for( TInt i=0; i<count; i++ )
+            {
+            const CMMCScBkupDriveSizer* sizer = iSizers[ i ];
+            const TInt sizeOfDataForDrive = sizer->Size( drive );
+            //
+            driveAndSize.AddToSize( sizeOfDataForDrive );
+            }
+
+        // Add the entry if the size is more than 0
+        if  ( driveAndSize.Size() > 0 )
+            {
+            aSizes.AppendL( driveAndSize );
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::CombinedSize()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataTypeSizer::CombinedSize( TDriveNumber aDrive ) const
+    {
+    TInt64 size = 0;
+    //
+    const TInt count = iSizers.Count();
+    for( TInt i=0; i<count; i++ )
+        {
+        const CMMCScBkupDriveSizer* sizer = iSizers[ i ];
+        size += sizer->Size( aDrive );
+        }
+    //
+    return size;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::InternalizeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::InternalizeL(RReadStream& aStream)
+    {
+    aStream.ReadInt32L(); // EStreamFormatVersion1 
+    aStream.ReadInt32L(); // spare1
+    aStream.ReadInt32L(); // spare2
+    //
+    const TInt count = aStream.ReadInt8L();
+    for( TInt i=0; i<count; i++ )
+        {
+        CMMCScBkupDriveSizer* sizer = CMMCScBkupDriveSizer::NewLC( aStream );
+        iSizers.AppendL( sizer );
+        CleanupStack::Pop( sizer );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::ExternalizeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L( EStreamFormatVersion1 );
+    aStream.WriteInt32L( 0 ); // spare1
+    aStream.WriteInt32L( 0 ); // spare2
+    //
+    const TInt count = iSizers.Count();
+    aStream.WriteInt8L( count );
+    //
+    for( TInt i=0; i<count; i++ )
+        {
+        CMMCScBkupDriveSizer* sizer = iSizers[ i ];
+        aStream << *sizer;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::SizerByDataType()
+// 
+// 
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer* CMMCScBkupDataTypeSizer::SizerByDataType( TMMCScBkupOwnerDataType aDataType )
+    {
+    CMMCScBkupDriveSizer* ret = NULL;
+    //
+    const TInt count = iSizers.Count();
+    for( TInt i=0; i<count; i++ )
+        {
+        CMMCScBkupDriveSizer* sizer = iSizers[ i ];
+        //
+        if  ( sizer->DataType() == aDataType )
+            {
+            ret = sizer;
+            break;
+            }
+        }
+    //
+    return ret;
+    }
+