diff -r 2669f8761a99 -r fbd2e7cec7ef xdmprotocols/LocalProtocol/LocalOperations/src/LocalOperationBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xdmprotocols/LocalProtocol/LocalOperations/src/LocalOperationBase.cpp Wed Sep 01 12:23:14 2010 +0100 @@ -0,0 +1,263 @@ +/* +* 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: CLocalOperationBase +* +*/ + + + + + +// INCLUDES +#include "XdmXmlParser.h" +#include "LocalProtocol.h" +#include "LocalDocument.h" +#include "LocalOperationBase.h" + +// --------------------------------------------------------- +// C++ constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------- +// +CLocalOperationBase::CLocalOperationBase( const CLocalDocument& aTargetDoc, + CLocalOperationFactory& aOperationFactory ) : + iTargetDoc( CONST_CAST( CLocalDocument&, aTargetDoc ) ), + iOperationFactory( aOperationFactory ) + { + } + +// --------------------------------------------------------- +// Destructor +// +// --------------------------------------------------------- +// +CLocalOperationBase::~CLocalOperationBase() + { + iXmlFile.Close(); + delete iXmlParser; + delete iFileManager; + } + +// --------------------------------------------------------- +// CLocalOperationBase::BaseConstructL +// +// --------------------------------------------------------- +// +void CLocalOperationBase::BaseConstructL() + { + iXmlParser = CXdmXmlParser::NewL(); + iFileManager = CFileMan::NewL( CLocalProtocol::FileSession() ); + } + +// --------------------------------------------------------- +// CLocalOperationBase::WriteFileL +// +// --------------------------------------------------------- +// +void CLocalOperationBase::WriteFileL( const CXdmDocumentNode* aRootNode ) + { + __ASSERT_DEBUG( aRootNode != NULL, User::Panic( _L( "CLocalOperationBase" ), 1 ) ); + HBufC8* data = iXmlParser->FormatToXmlLC( ETrue, &iTargetDoc, aRootNode ); + User::LeaveIfError( iXmlFile.Write( data->Des() ) ); + CleanupStack::PopAndDestroy(); //data + GenerateTimeStampL(); + } + +// --------------------------------------------------------- +// CLocalOperationBase::GenerateTimeStampL +// +// --------------------------------------------------------- +// +void CLocalOperationBase::GenerateTimeStampL() + { + RFile timeStamp; + HBufC8* time = TimeLC(); + HBufC* timeStampName = ConstructTimestampNameL(); + CleanupStack::PushL( timeStampName ); + User::LeaveIfError( timeStamp.Replace( CLocalProtocol::FileSession(), timeStampName->Des(), EFileWrite ) ); + User::LeaveIfError( timeStamp.Write( time->Des() ) ); + timeStamp.Close(); + CleanupStack::PopAndDestroy( 2 ); //timeStampName, time + } + +// --------------------------------------------------------- +// CLocalOperationBase::ConstructTimestampNameL +// +// --------------------------------------------------------- +// +HBufC* CLocalOperationBase::ConstructTimestampNameL() + { + const TChar backSlash = 92; + const TChar idSeparator = 46; + TInt index = iFullPath.LocateReverse( backSlash ); + TPtrC path = iFullPath.Left( index + 1 ); + HBufC* fileName = HBufC::NewLC( iTargetDoc.Name().Length() + KTimeStampFileExt().Length() ); + HBufC* fullPath = HBufC::NewLC( path.Length() + fileName->Des().MaxLength() ); + TPtr ptr( fileName->Des() ); + ptr.Copy( iTargetDoc.Name() ); + index = ptr.LocateReverse( idSeparator ); + TPtrC tmspName = index > 0 ? ptr.Left( index ) : ptr; + fullPath->Des().Copy( path ); + fullPath->Des().Append( tmspName ); + fullPath->Des().Append( KTimeStampFileExt ); + CleanupStack::Pop(); //fullPath + CleanupStack::PopAndDestroy(); //fileName + return fullPath; + } + +// --------------------------------------------------------- +// CLocalOperationBase::Time +// +// --------------------------------------------------------- +// +HBufC8* CLocalOperationBase::TimeLC() + { + TTime time; + TBuf dateBuffer; + time.HomeTime(); + time.FormatL( dateBuffer, KDateFormat ); + TBuf timeBuffer; + time.HomeTime(); + time.FormatL( timeBuffer, KTimeFormat ); + TBuf buffer; + buffer.SetLength( 0 ); + buffer.Copy( dateBuffer ); + buffer.Append( _L( " " ) ); + buffer.Append( timeBuffer ); + HBufC8* ret = HBufC8::NewLC( buffer.Length() ); + ret->Des().Copy( buffer ); + return ret; + } + +// --------------------------------------------------------- +// CLocalOperationBase::FetchXmlDataL +// +// --------------------------------------------------------- +// +HBufC8* CLocalOperationBase::FetchXmlDataL( TInt aFileSize ) + { + HBufC8* data = HBufC8::NewLC( aFileSize ); + TPtr8 desc( data->Des() ); + User::LeaveIfError( iXmlFile.Read( desc ) ); + CleanupStack::Pop(); //data + return data; + } + +// --------------------------------------------------------- +// CLocalOperationBase::FetchXmlDataL +// +// --------------------------------------------------------- +// +TInt CLocalOperationBase::OpenDataFileL( const TDesC& aFilePath ) + { + TInt length = 0; + iFullPath.Set( aFilePath ); + TInt error = iXmlFile.Open( CLocalProtocol::FileSession(), iFullPath, + EFileRead | EFileWrite | EFileShareExclusive ); + if( error != KErrNone ) + { + if( error == KErrPathNotFound ) + User::LeaveIfError( CLocalProtocol::FileSession().MkDirAll( CLocalProtocol::RootFolder() ) ); + error = iXmlFile.Create( CLocalProtocol::FileSession(), iFullPath, + EFileRead | EFileWrite | EFileShareExclusive ); + } + error = error == KErrNone ? iXmlFile.Size( length ) : KErrUnknown; + return error == KErrNone ? length : error; + } + +// --------------------------------------------------------- +// CLocalOperationBase::ReplaceDataFileL +// +// --------------------------------------------------------- +// +void CLocalOperationBase::ReplaceDataFileL() + { + User::LeaveIfError( iXmlFile.Replace( CLocalProtocol::FileSession(), iFullPath, + EFileRead | EFileWrite | EFileShareExclusive ) ); + } + +// --------------------------------------------------------- +// CLocalOperationBase::DeleteDataFileL +// +// --------------------------------------------------------- +// +void CLocalOperationBase::DeleteDataFileL() + { + User::LeaveIfError( CLocalProtocol::FileSession().Delete( iFullPath ) ); + HBufC* timeStampName = ConstructTimestampNameL(); + CleanupStack::PushL( timeStampName ); + User::LeaveIfError( CLocalProtocol::FileSession().Delete( timeStampName->Des() ) ); + CleanupStack::PopAndDestroy(); //timeStampName + } + +// --------------------------------------------------------- +// CLocalOperationBase::ExecuteL +// +// --------------------------------------------------------- +// +void CLocalOperationBase::ExecuteL( TRequestStatus& /*aStatus*/, TUint /*aOptions*/ ) + { + } + +// --------------------------------------------------------- +// CLocalOperationBase::CancelOperation +// +// --------------------------------------------------------- +// +void CLocalOperationBase::CancelOperation() + { + } + +// --------------------------------------------------------- +// CLocalOperationBase::CompletionData +// +// --------------------------------------------------------- +// +const TXdmCompletionData& CLocalOperationBase::CompletionData() const + { + return iCompletionData; + } + +// --------------------------------------------------------- +// CLocalOperationBase::IsCompleted +// +// --------------------------------------------------------- +// +TBool CLocalOperationBase::IsCompleted() const + { + return ETrue; + } + +// --------------------------------------------------------- +// CLocalOperationBase::TargetNode +// +// --------------------------------------------------------- +// +CXdmDocumentNode* CLocalOperationBase::TargetNode() const + { + return NULL; + } + +// --------------------------------------------------------- +// CLocalOperationBase::Result +// +// --------------------------------------------------------- +// +TInt CLocalOperationBase::Result() const + { + return KErrNone; + } + +// End of File +