filemanager/bkupengine/src/CMMCScBkupStateArchiveOpJavaData.cpp
branchRCL_3
changeset 39 65326cf895ed
parent 0 6a9f87576119
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpJavaData.cpp	Wed Sep 01 12:31:07 2010 +0100
@@ -0,0 +1,548 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpJavaData implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpJavaData.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupIndexJavaData.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::CMMCScBkupStateArchiveOpJavaData()
+// 
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpJavaData::CMMCScBkupStateArchiveOpJavaData( MMMCScBkupDriver& aDriver )
+:   CMMCScBkupStateOpAware( aDriver ), iIndexValueCurrent( -1 )
+    {
+    __LOG1("CMMCScBkupStateArchiveOpJavaData::CMMCScBkupStateArchiveOpJavaData() - 0x%08x", StateId().iUid );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::~CMMCScBkupStateArchiveOpJavaData()
+// 
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpJavaData::~CMMCScBkupStateArchiveOpJavaData()
+    {
+    Cancel();
+    //
+    delete iBackupTransferObjectMidlet;
+    delete iBackupTransferObjectMidletData;
+    delete iRestoreTransferObjectMidlet;
+    delete iRestoreTransferObjectMidletData;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::NewL()
+// 
+// 
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpJavaData* CMMCScBkupStateArchiveOpJavaData::NewL( MMMCScBkupDriver& aDriver )
+    {
+    CMMCScBkupStateArchiveOpJavaData* self = new(ELeave) CMMCScBkupStateArchiveOpJavaData( aDriver );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::StateId()
+// 
+// 
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpJavaData::StateId() const
+    {
+    return KMMCScBkupStateIdArchiveOpJavaData;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::NextStateBackupId()
+// 
+// 
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpJavaData::NextStateBackupId( TBool /*aPartial*/ ) const
+    {
+    return KMMCScBkupStateIdGetDataOwnerStatuses;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::NextStateRestoreId()
+// 
+// 
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpJavaData::NextStateRestoreId( TBool /*aPartial*/ ) const
+    {
+    return KMMCScBkupStateIdArchiveOpPassiveData;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformStateInitBackupL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformStateInitBackupL( TBool /*aPartial*/ )
+    {
+    __LOG("CMMCScBkupStateArchiveOpJavaData::PerformStateInitBackupL() - START" );
+    __DEBUG_TESTING_SKIP_BACKUP_JAV_DATA;
+
+    iBackupTransferObjectMidlet = CMMCScBkupWriteDataTransferRequest< TJavaTransferType >::NewL(
+                                    Driver(), 
+                                    *this,
+                                    EMMCScBkupOwnerDataTypeJavaData,
+                                    EJavaTransferDerivedType,
+                                    EJavaMIDlet
+                                    );
+
+    iBackupTransferObjectMidletData = CMMCScBkupWriteDataTransferRequest< TJavaTransferType >::NewL(
+                                    Driver(), 
+                                    *this,
+                                    EMMCScBkupOwnerDataTypePassiveData,
+                                    EJavaTransferDerivedType,
+                                    EJavaMIDletData
+                                    );
+
+    CompleteSelf();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformStateInitRestoreL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformStateInitRestoreL( TBool /*aPartial*/ )
+    {
+    __LOG("CMMCScBkupStateArchiveOpJavaData::PerformStateInitRestoreL() - START" );
+    __DEBUG_TESTING_SKIP_RESTORE_JAV_DATA;
+
+
+    iRestoreTransferObjectMidlet = CMMCScBkupReadDataTransferRequest< TJavaTransferType >::NewL(
+                                    Driver(), 
+                                    EMMCScBkupOwnerDataTypeJavaData,
+                                    EJavaMIDlet
+                                    );
+
+    iRestoreTransferObjectMidletData = CMMCScBkupReadDataTransferRequest< TJavaTransferType >::NewL(
+                                    Driver(), 
+                                    EMMCScBkupOwnerDataTypePassiveData,
+                                    EJavaMIDletData
+                                    );
+
+    CompleteSelf();
+    __LOG("CMMCScBkupStateArchiveOpJavaData::PerformStateInitRestoreL() - END" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ )
+    {
+    __LOG1("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - START - iCurrentJavaState: %d", iCurrentJavaState );
+
+    switch( iCurrentJavaState )
+        {
+    case EJavaStateIdle:
+        __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - EJavaStateIdle");
+        BackupMidletL();
+        break;
+    case EJavaStateMidlet:
+        __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - EJavaStateMidlet");
+        BackupMidletDataL();
+        break;
+    case EJavaStateMidletData:
+        __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - EJavaStateMidletData");
+        iCurrentJavaState = EJavaStateIdle;
+        CompleteSelf();
+        break;
+    default:
+        break;
+        }
+
+    __LOG2("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - END - iCurrentJavaState: %d, IsActive: %d", iCurrentJavaState, IsActive() );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ )
+    {
+    __LOG1("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - START - iCurrentJavaState: %d", iCurrentJavaState );
+
+    switch( iCurrentJavaState )
+        {
+    case EJavaStateIdle:
+        __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - EJavaStateIdle");
+        RestoreMidletL();
+        break;
+    case EJavaStateMidlet:
+        __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - EJavaStateMidlet");
+        RestoreMidletDataL();
+        break;
+    case EJavaStateMidletData:
+        __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - EJavaStateMidletData");
+        iCurrentJavaState = EJavaStateIdle;
+        CompleteSelf();
+        break;
+    default:
+        break;
+        }
+
+    __LOG2("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - END - iCurrentJavaState: %d, IsActive: %d", iCurrentJavaState, IsActive() );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupBackup()
+// 
+// 
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupBackup( TBool /*aPartial*/, TInt aError )
+    {
+    (void) aError;
+    __LOG1("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupBackup() - error: %d", aError );
+
+    // Reset state and move to next item. Treat the current (badly behaving) item
+    // as completed/processed.
+    CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+    if  ( iIndexValueCurrent < dataOwners.Count() )
+        {
+        CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+        owner.SetCompletionStatus( EMMCScBkupOwnerDataTypeJavaData, ETrue );
+        iCurrentJavaState = EJavaStateIdle;
+
+        __LOGFILE2("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupBackup() - **** - error: %d, SID: 0x%08x - JAVA data skipped for DO", aError, owner.SecureId().iId );
+        }
+
+    CompleteSelf();
+    return ETrue;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupRestore()
+// 
+// 
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt aError )
+    {
+    (void) aError;
+    __LOGFILE1("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupRestore() - **** - error: %d", aError );
+
+    iCurrentJavaState = EJavaStateIdle;
+    CompleteSelf();
+    return ETrue;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousCancellation()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousCancellation()
+    {
+    if  (iBackupTransferObjectMidlet)
+        {
+        iBackupTransferObjectMidlet->Cancel();
+        }
+    if  (iBackupTransferObjectMidletData)
+        {
+        iBackupTransferObjectMidletData->Cancel();
+        }
+    if  (iRestoreTransferObjectMidlet)
+        {
+        iRestoreTransferObjectMidlet->Cancel();
+        }
+    if  (iRestoreTransferObjectMidletData)
+        {
+        iRestoreTransferObjectMidletData->Cancel();
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformLastRightsBackupL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformLastRightsBackupL( TBool /*aPartial*/ )
+    {
+    CMMCScBkupIndexBase& index = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+    index.StoreL( Driver() );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformLastRightsRestoreL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformLastRightsRestoreL( TBool /*aPartial*/ )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::AddIndexRecordL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive )
+    {
+	CMMCScBkupIndexBase& indexBase = aFooter.IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+    CMMCScBkupIndexJavaData& index = static_cast< CMMCScBkupIndexJavaData& >( indexBase );
+    //
+    TJavaTransferType type = EJavaMIDlet;
+    HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( aDataOwner.Owner().Identifier() );
+    //
+    if  ( iCurrentJavaState == EJavaStateMidlet )
+        {
+		__LOG4("CMMCScBkupStateArchiveOpJavaData::AddIndexRecordL() - hash: %S, aDrive: %c:, offset: %8d, length: %8d, type: EJavaMIDlet", hash, aDrive + 'A', aInfo.Offset(), aInfo.Length() );
+        type = EJavaMIDlet;
+        }
+    else if ( iCurrentJavaState == EJavaStateMidletData )
+        {
+		__LOG4("CMMCScBkupStateArchiveOpJavaData::AddIndexRecordL() - hash: %S, aDrive: %c:, offset: %8d, length: %8d, type: EJavaMIDletData", hash, aDrive + 'A', aInfo.Offset(), aInfo.Length() );
+        type = EJavaMIDletData;
+        }
+    //
+    index.AddIndexRecordL( aInfo, *hash, aDrive, type );
+    CleanupStack::PopAndDestroy( hash );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::BackupMidletL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::BackupMidletL()
+    {
+    CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+    const TInt count = dataOwners.Count();
+    //
+    while ( ++iIndexValueCurrent < count )
+        {
+        CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+        //
+        if  ( owner.CompletionStatus( EMMCScBkupOwnerDataTypeJavaData ) == EFalse )
+            {
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+			HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( owner.Owner().Identifier() );
+			__LOG1("CMMCScBkupStateArchiveOpJavaData::BackupMidletL() - trying to get midlet for hash: %S", hash );
+			CleanupStack::PopAndDestroy( hash );
+#endif
+
+			iBackupTransferObjectMidlet->RequestL( owner, 
+                                                   iStatus,
+                                                   Driver().DrvParamsBase().DriveAndOperations() );
+            SetActive();
+            iCurrentJavaState = EJavaStateMidlet;
+
+            break; // while loop
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::BackupMidletDataL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::BackupMidletDataL()
+    {
+    CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+    CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+ 
+    // We only need to request the midlet's passive data if it has a non-zero
+    // size.
+    if  ( owner.CompletionStatus( EMMCScBkupOwnerDataTypePassiveData ) == EFalse )
+        {
+        if  ( owner.OperationalSize( EMMCScBkupOwnerDataTypePassiveData ) > 0 )
+            {
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+			HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( owner.Owner().Identifier() );
+			__LOG1("CMMCScBkupStateArchiveOpJavaData::BackupMidletDataL() - trying to get midlet data for hash: %S", hash );
+			CleanupStack::PopAndDestroy( hash );
+#endif
+
+			iBackupTransferObjectMidletData->RequestL( owner, 
+                                                       iStatus,
+                                                       Driver().DrvParamsBase().DriveAndOperations() );
+            SetActive();
+            }
+        else
+            {
+            CompleteSelf();
+            }
+        }
+    else
+        {
+        CompleteSelf();
+        }
+
+    iCurrentJavaState = EJavaStateMidletData;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::RestoreMidletL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::RestoreMidletL()
+    {
+    CMMCScBkupIndexBase& indexBase = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+    CMMCScBkupIndexJavaData& index = static_cast< CMMCScBkupIndexJavaData& >( indexBase );
+
+    const TInt count = index.Count();
+    __LOG1("CMMCScBkupStateArchiveOpJavaData::RestoreMidletL() - START - %d data owners...", count );
+    //
+    if  ( ++iIndexValueCurrent < count )
+        {
+        __LOG2("CMMCScBkupStateArchiveOpJavaData::RestoreMidletL() - getting java data index record [%03d/%03d]", iIndexValueCurrent, count);
+        const CMMCScBkupIndexJavaDataEntry& entry = index.At( iIndexValueCurrent );
+
+        // Get the associated data owner
+        CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+
+        __LOG1("CMMCScBkupStateArchiveOpJavaData::RestoreMidletL() - trying to get data owner info for hash: %S", &entry.Hash() );
+        CMMCScBkupDataOwnerInfo& owner = dataOwners.OwnerL( entry.Hash() );
+
+        if  ( owner.CompletionStatus( EMMCScBkupOwnerDataTypeJavaData ) == EFalse )
+            {
+            // Request all the java data (on all supported drives) for this
+            // particular data owner
+    		__LOG3("CMMCScBkupStateArchiveOpJavaData::RestoreMidletL() - trying to restore JAVA MIDLET for hash: %S [offset: %8d, length: %8d]", &entry.Hash(), entry.MidletInfo().Offset(), entry.MidletInfo().Length() );
+
+            // Build restore entry list (will only contain one entry - the 
+            // reader API forces an array interface on us, so let's do ou best
+            // to please it...)
+            const TMMCScBkupArchiveDriveAndVector driveAndVector( entry.Drive(),  entry.MidletInfo() );
+            iRestoreEntries.Reset();
+            iRestoreEntries.AppendL( driveAndVector );
+            
+            // Start the asynchronous restore op...
+            iRestoreTransferObjectMidlet->RequestL( owner, 
+                                                    iStatus,
+                                                    iRestoreEntries );
+            SetActive();
+            }
+        else
+            {
+            CompleteSelf();
+            }
+            
+        iCurrentJavaState = EJavaStateMidlet;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL()
+    {
+    CMMCScBkupIndexBase& indexBase = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+    CMMCScBkupIndexJavaData& index = static_cast< CMMCScBkupIndexJavaData& >( indexBase );
+
+    const TInt count = index.Count();
+    __LOG1("CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL() - START - %d data owners...", count );
+    //
+    if  ( iIndexValueCurrent < count )
+        {
+        __LOG2("CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL() - getting java data index record [%03d/%03d]", iIndexValueCurrent, count);
+        const CMMCScBkupIndexJavaDataEntry& entry = index.At( iIndexValueCurrent );
+
+        if  ( entry.HasMidletDataInfo() )
+            {
+            // Get the associated data owner
+            CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+
+            __LOG1("CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL() - trying to get data owner info for hash: %S", &entry.Hash() );
+            CMMCScBkupDataOwnerInfo& owner = dataOwners.OwnerL( entry.Hash() );
+
+            if  ( owner.CompletionStatus( EMMCScBkupOwnerDataTypePassiveData ) == EFalse )
+                {
+                // Request all the java data (on all supported drives) for this
+                // particular data owner
+    			__LOG3("CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL() - trying to restore JAVA MIDLET DATA for hash: %S [offset: %8d, length: %8d]", &entry.Hash(), entry.MidletDataInfo().Offset(), entry.MidletDataInfo().Length() );
+
+                // Build restore entry list (will only contain one entry - the 
+                // reader API forces an array interface on us, so let's do ou best
+                // to please it...)
+                const TMMCScBkupArchiveDriveAndVector driveAndVector( entry.Drive(),  entry.MidletDataInfo() );
+                iRestoreEntries.Reset();
+                iRestoreEntries.AppendL( driveAndVector );
+            
+                // Start the asynchronous restore op...
+                iRestoreTransferObjectMidletData->RequestL( owner, 
+                                                            iStatus,
+                                                            iRestoreEntries );
+                SetActive();
+                }
+            else
+                {
+                CompleteSelf();
+                }
+            }
+        else
+            {
+            CompleteSelf();
+            }
+        }
+    else
+        {
+        CompleteSelf();
+        }
+
+    iCurrentJavaState = EJavaStateMidletData;
+    }
+
+
+
+
+
+
+
+
+