diff -r 2580314736af -r 2669f8761a99 XDMEngine/src/XdmEngine.cpp --- a/XDMEngine/src/XdmEngine.cpp Thu Aug 19 10:19:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,446 +0,0 @@ -/* -* 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: XDM Engine -* -*/ - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include "XdmEngine.h" -#include "XdmDocument.h" -#include "XdmProtocol.h" -#include "XdmDirectory.h" -#include "XdmLogWriter.h" -#include "XdmStaticUtils.h" -#include "XdmSettingsApi.h" -#include "XdmProtocolInfo.h" - -// ---------------------------------------------------------- -// CXdmEngine::CXdmEngine -// -// ---------------------------------------------------------- -// -CXdmEngine::CXdmEngine() : CActive( EPriorityStandard ) - { - } - -// ---------------------------------------------------------- -// CXdmEngine::NewL -// -// ---------------------------------------------------------- -// -EXPORT_C CXdmEngine* CXdmEngine::NewL( const CXdmProtocolInfo& aProtocolInfo ) - { - CXdmEngine* self = new ( ELeave ) CXdmEngine(); - CleanupStack::PushL( self ); - self->ConstructL( CONST_CAST( CXdmProtocolInfo&, aProtocolInfo ) ); - CleanupStack::Pop(); - return self; - } - -// ---------------------------------------------------------- -// CXdmEngine::XdmSettingsLC -// -// ---------------------------------------------------------- -// -EXPORT_C CDesC16Array* CXdmEngine::XdmSettingsLC( RArray& aSettingIds ) - { - return TXdmSettingsApi::CollectionNamesLC( aSettingIds ); - } - -// ---------------------------------------------------------- -// CXdmEngine::ConstructL -// -// ---------------------------------------------------------- -// -void CXdmEngine::ConstructL( CXdmProtocolInfo& aProtocolInfo ) - { - #ifdef _DEBUG - iLogWriter = CXdmLogWriter::NewL( KXdmEngLogFile ); - WriteToLog( _L8( "CXdmEngine::ConstructL()" ) ); - #endif - TRAPD( error, iXdmProtocol = CXdmProtocol::NewL( *this, aProtocolInfo ) ); - if( error == KErrNone && iXdmProtocol != NULL ) - { - #ifdef _DEBUG - WriteToLog( _L8( " Protocol implementation created successfully" ) ); - #endif - CActiveScheduler::Add( this ); - } - else - { - #ifdef _DEBUG - WriteToLog( _L8( " Protocol creation failed - Error: %d Protocol: %x" ), error, iXdmProtocol ); - #endif - User::Leave( KErrUnknown ); - } - } - -// ---------------------------------------------------- -// CXdmEngine::~CXdmEngine -// -// ---------------------------------------------------- -// -CXdmEngine::~CXdmEngine() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::~CXdmEngine()" ) ); - #endif - iDocUpdateQueue.Close(); - iDirUpdateQueue.Close(); - iDocumentQueue.Close(); - iDirectoryQueue.Close(); - #ifdef _DEBUG - WriteToLog( _L8( " Queues closed" ) ); - #endif - delete iXdmProtocol; - #ifdef _DEBUG - WriteToLog( _L8( " Protocol deleted" ) ); - #endif - REComSession::FinalClose(); - #ifdef _DEBUG - WriteToLog( _L8( " Destructor finished" ) ); - #endif - delete iLogWriter; - } - -// ---------------------------------------------------------- -// CXdmEngine::WriteToLog -// -// ---------------------------------------------------------- -// -void CXdmEngine::WriteToLog( TRefByValue aFmt,... ) const - { - VA_LIST list; - VA_START( list, aFmt ); - TBuf8 buf; - buf.FormatList( aFmt, list ); - iLogWriter->WriteToLog( buf ); - } - -// ---------------------------------------------------- -// CXdmEngine::DirectoryCollection -// -// ---------------------------------------------------- -// -EXPORT_C const RPointerArray& CXdmEngine::DocumentCollection() const - { - return iDocumentQueue; - } - -// ---------------------------------------------------- -// CXdmEngine::DirectoryCollection -// -// ---------------------------------------------------- -// -EXPORT_C const RPointerArray& CXdmEngine::DirectoryCollection() const - { - return iDirectoryQueue; - } - - -// ---------------------------------------------------- -// CXdmEngine::CancelUpdate -// -// ---------------------------------------------------- -// -EXPORT_C void CXdmEngine::CancelUpdate( CXdmDocument* aDocument ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::CancelUpdate( document )" ) ); - #endif - TInt index = iDocumentQueue.Find( aDocument ); - if( IsActive() ) - { - #ifdef _DEBUG - WriteToLog( _L8( " Transfer media init pending, cancel self" ) ); - #endif - Cancel(); - } - else if( index != KErrNotFound && aDocument->IsActive() ) - { - #ifdef _DEBUG - WriteToLog( _L8( " Cancel document update" ) ); - #endif - aDocument->CancelUpdate(); - if( iDocUpdateQueue.Find( aDocument ) == KErrNone ) - iDocUpdateQueue.Remove( index ); - } - } - -// ---------------------------------------------------- -// CXdmEngine::CancelUpdate -// -// ---------------------------------------------------- -// -EXPORT_C void CXdmEngine::CancelUpdate( CXdmDirectory* aDirectory ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::CancelUpdate( directory )" ) ); - #endif - TInt index = iDirectoryQueue.Find( aDirectory ); - if( IsActive() ) - { - #ifdef _DEBUG - WriteToLog( _L8( " Transfer media init pending, cancel self" ) ); - #endif - Cancel(); - } - else if( index != KErrNotFound && aDirectory->IsActive() ) - { - #ifdef _DEBUG - WriteToLog( _L8( " Cancel directory update" ) ); - #endif - aDirectory->CancelUpdate(); - if( iDirUpdateQueue.Find( aDirectory ) == KErrNone ) - iDirUpdateQueue.Remove( index ); - } - } - -// ---------------------------------------------------- -// CXdmEngine::CreateDocumentModelL -// -// ---------------------------------------------------- -// -EXPORT_C CXdmDocument* CXdmEngine::CreateDocumentModelL( const TDesC& aDocumentName, - const TXdmDocType aDocumentType ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::CreateDocumentModelL()" ) ); - #endif - CXdmDocument* document = iXdmProtocol->CreateDocumentL( aDocumentName, aDocumentType ); - CleanupStack::PushL( document ); - User::LeaveIfError( iDocumentQueue.Append( document ) ); - CleanupStack::Pop(); //document - return document; - } - -// ---------------------------------------------------- -// CXdmEngine::DeleteDocumentModelL -// -// ---------------------------------------------------- -// -EXPORT_C void CXdmEngine::DeleteDocumentModelL( const CXdmDocument* aDocument ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::DeleteDocumentModelL()" ) ); - #endif - TInt index = iDocumentQueue.Find( aDocument ); - __ASSERT_ALWAYS( index != KErrNotFound, User::Leave( KErrNotFound ) ); - iDocumentQueue.Remove( index ); - delete aDocument; - aDocument = NULL; - } - -// ---------------------------------------------------- -// CXdmEngine::CreateDirectoryModelL -// -// ---------------------------------------------------- -// -EXPORT_C CXdmDirectory* CXdmEngine::CreateDirectoryModelL( const TDesC& aDirectoryPath ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::CreateDirectoryModelL()" ) ); - #endif - CXdmDirectory* directory = iXdmProtocol->CreateDirectoryL( aDirectoryPath ); - CleanupStack::PushL( directory ); - User::LeaveIfError( iDirectoryQueue.Append( directory ) ); - CleanupStack::Pop(); //document - return directory; - } - -// ---------------------------------------------------- -// CXdmEngine::DeleteDirectoryModelL -// -// ---------------------------------------------------- -// -EXPORT_C void CXdmEngine::DeleteDirectoryModelL( const CXdmDirectory* aDirectory ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::DeleteDirectoryModelL()" ) ); - #endif - TInt index = iDirectoryQueue.Find( aDirectory ); - __ASSERT_ALWAYS( index != KErrNotFound, User::Panic( _L( "CXdmEngine" ), EDirModelNotFound ) ); - iDirectoryQueue.Remove( index ); - delete aDirectory; - aDirectory = NULL; - } - -// ---------------------------------------------------- -// CXdmEngine::CreateDocumentNodeL -// -// ---------------------------------------------------- -// -EXPORT_C CXdmDocumentNode* CXdmEngine::CreateDocumentNodeL() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::CreateDocumentNodeL()" ) ); - #endif - return iXdmProtocol->CreateDocumentNodeL(); - } - -// ---------------------------------------------------- -// CXdmEngine::UpdateL -// -// ---------------------------------------------------- -// -EXPORT_C void CXdmEngine::UpdateL( CXdmDocument* aDocument, - TRequestStatus& aStatus ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::UpdateL( document )" ) ); - #endif - iClientStatus = &aStatus; - aStatus = KRequestPending; - aDocument->SaveClientStatus( aStatus ); - User::LeaveIfError( iDocUpdateQueue.Append( aDocument ) ); - if( !IsActive() ) - { - iXdmProtocol->InitTransferMedium( KDefaultIdleTimeout, iStatus ); - SetActive(); - } - } - -// ---------------------------------------------------- -// CXdmEngine::UpdateL -// -// ---------------------------------------------------- -// -EXPORT_C void CXdmEngine::UpdateL( TRequestStatus& aStatus, - CXdmDirectory* aDirectory, - TDirUpdatePhase aUpdatePhase ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::UpdateL( directory )" ) ); - #endif - iClientStatus = &aStatus; - aStatus = KRequestPending; - aDirectory->SaveRequestData( aUpdatePhase, aStatus ); - User::LeaveIfError( iDirUpdateQueue.Append( aDirectory ) ); - if( !IsActive() ) - { - iXdmProtocol->InitTransferMedium( KDefaultIdleTimeout, iStatus ); - SetActive(); - } - } - -// --------------------------------------------------------- -// CXdmEngine::RunL -// -// --------------------------------------------------------- -// -void CXdmEngine::RunL() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::RunL() - Status: %d" ), iStatus.Int() ); - #endif - if( iStatus == KErrCancel ) - { - #ifdef _DEBUG - WriteToLog( _L8( " Update cancelled, complete client request" ) ); - #endif - if( iClientStatus ) - { - iDocUpdateQueue.Reset(); - iDirUpdateQueue.Reset(); - User::RequestComplete( iClientStatus, KErrCancel ); - #ifdef _DEBUG - WriteToLog( _L8( " Request complete" ) ); - #endif - } - } - else - { - #ifdef _DEBUG - WriteToLog( _L8( " Transfer media initialised, start update" ) ); - #endif - TInt dirCount( iDirUpdateQueue.Count() ); - TInt docCount( iDocUpdateQueue.Count() ); - #ifdef _DEBUG - WriteToLog( _L8( " Document queue count: %d" ), docCount ); - WriteToLog( _L8( " Directory queue count: %d" ), dirCount ); - #endif - //First check the document queue - for( TInt i = 0;i < docCount;i++ ) - { - iDocUpdateQueue[0]->StartUpdateL(); - iDocUpdateQueue.Remove( 0 ); - } - //Then the directory queue - for( TInt j = 0;j < dirCount;j++ ) - { - iDirUpdateQueue[0]->StartUpdateL(); - iDirUpdateQueue.Remove( 0 ); - } - } - } - -// --------------------------------------------------------- -// CXdmEngine::DoCancel -// -// --------------------------------------------------------- -// -void CXdmEngine::DoCancel() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::DoCancel()" ) ); - #endif - iXdmProtocol->CancelTransferMediumInit(); - if( iClientStatus ) - { - #ifdef _DEBUG - WriteToLog( _L8( " Client request pending => Complete" ) ); - #endif - iDocUpdateQueue.Reset(); - iDirUpdateQueue.Reset(); - User::RequestComplete( iClientStatus, KErrCancel ); - } - } - -// --------------------------------------------------------- -// CXdmEngine::XdmProtocol -// -// --------------------------------------------------------- -// -CXdmProtocol* CXdmEngine::XdmProtocol() const - { - #ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::XdmProtocol()" ) ); - #endif - return iXdmProtocol; - } - -// --------------------------------------------------------- -// CXdmEngine::ConvertToUTF8L -// -// --------------------------------------------------------- -// -HBufC8* CXdmEngine::ConvertToUTF8L( const TDesC& aUnicodeDesc ) - { - /*#ifdef _DEBUG - WriteToLog( _L8( "CXdmEngine::ConvertToUTF8L()" ) ); - #endif*/ - return CnvUtfConverter::ConvertFromUnicodeToUtf8L( aUnicodeDesc ); - } - - - - -