--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpJavaData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -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;
+ }
+
+
+
+
+
+
+
+
+