diff -r 491b3ed49290 -r 65326cf895ed filemanager/bkupengine/src/CMMCScBkupStateArchiveOpJavaData.cpp --- /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; + } + + + + + + + + +