diff -r 2580314736af -r 2669f8761a99 xdmprotocols/LocalProtocol/LocalOperations/src/LocalReplacement.cpp --- a/xdmprotocols/LocalProtocol/LocalOperations/src/LocalReplacement.cpp Thu Aug 19 10:19:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +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: CLocalReplacement -* -*/ - - - - -// INCLUDES -#include -#include "XdmXmlParser.h" -#include "LocalProtocol.h" -#include "LocalDocument.h" -#include "LocalReplacement.h" -#include "LocalDocumentNode.h" -#include "LocalNodeAttribute.h" - -// --------------------------------------------------------- -// C++ constructor can NOT contain any code, that -// might leave. -// --------------------------------------------------------- -// -CLocalReplacement::CLocalReplacement( CLocalDocument& aTargetDoc, - CLocalDocumentNode* aOldNode, - CLocalDocumentNode* aNewNode, - CLocalOperationFactory& aOperationFactory ) : - CLocalOperationBase( aTargetDoc, aOperationFactory ), - iNewNode( ( CLocalDocumentNode* )aNewNode ), - iTargetNode( ( CLocalDocumentNode* )aOldNode ), - iOperationType( iTargetNode == NULL ? - EXdmDocument : EXdmPartialDocument ) - { - } - -// --------------------------------------------------------- -// Two-phased constructor. -// -// --------------------------------------------------------- -// -CLocalReplacement* CLocalReplacement::NewL( CLocalDocument& aParentDoc, - CLocalDocumentNode* aOldNode, - CLocalDocumentNode* aNewNode, - CLocalOperationFactory& aOperationFactory ) - { - CLocalReplacement* self = new ( ELeave ) CLocalReplacement( aParentDoc, aOldNode, aNewNode, aOperationFactory ); - CleanupStack::PushL( self ); - self->BaseConstructL(); - CleanupStack::Pop(); - return self; - } - -// --------------------------------------------------------- -// CLocalReplacement::ExecuteL -// -// --------------------------------------------------------- -// -void CLocalReplacement::ExecuteL() - { - TPtrC fileName = iTargetDoc.XmlFilePath(); - TInt size = OpenDataFileL( fileName ); - if( size > 0 ) - { - //Only a subset of a document - if( iTargetDoc.IsSubset() ) - HandlePartialReplacementL( size ); - else if( iTargetNode != NULL ) - { - CLocalDocumentNode* parent = ( CLocalDocumentNode* )iTargetNode->Parent(); - parent->ReplaceLocalL( iNewNode, iTargetNode ); - } - else - { - iXmlFile.Close(); - ReplaceDataFileL(); - WriteFileL( iTargetDoc.DocumentRoot() ); - } - } - else WriteFileL( iTargetDoc.DocumentRoot() ); - iXmlFile.Close(); - } - -// --------------------------------------------------------- -// CLocalReplacement::HandlePartialReplacementL -// -// --------------------------------------------------------- -// -void CLocalReplacement::HandlePartialReplacementL( TInt aDataLength ) - { - TInt error = KErrNone; - HBufC8* data = FetchXmlDataL( aDataLength ); - CleanupStack::PushL( data ); - TRAP( error, iXmlParser->ParseDocumentL( &iTargetDoc, *data ) ); - CXdmDocumentNode* parent = iTargetNode->Parent(); - RPointerArray parentResults; - CleanupClosePushL( parentResults ); - RPointerArray parentAttributes; - CleanupClosePushL( parentAttributes ); - RPointerArray targetResults; - CleanupClosePushL( targetResults ); - RPointerArray targetAttributes; - CleanupClosePushL( targetAttributes ); - TInt pAttrCount = parent->AttributeCount(); - TInt tAttrCount = iTargetNode->AttributeCount(); - if( pAttrCount > 0 ) - { - SXdmAttribute16 attribute; - for( TInt i = 0;i < pAttrCount;i++ ) - { - attribute.iName.Set( parent->Attribute( i )->NodeName() ); - attribute.iValue.Set( parent->Attribute( i )->AttributeValue() ); - } - User::LeaveIfError( parentAttributes.Append( &attribute ) ); - } - if( tAttrCount > 0 ) - { - SXdmAttribute16 attribute; - for( TInt i = 0;i < tAttrCount;i++ ) - { - attribute.iName.Set( iTargetNode->Attribute( i )->NodeName() ); - attribute.iValue.Set( iTargetNode->Attribute( i )->AttributeValue() ); - } - User::LeaveIfError( targetAttributes.Append( &attribute ) ); - } - iTargetDoc.Find( parent->NodeName(), parentResults, parentAttributes ); - iTargetDoc.Find( iTargetNode->NodeName(), targetResults, targetAttributes ); - if( parentResults.Count() == 1 && targetResults.Count() == 1 ) - { - iXmlFile.Close(); - ReplaceDataFileL(); - CLocalDocumentNode* node = ( CLocalDocumentNode* )parentResults[0]; - CLocalDocumentNode* target = ( CLocalDocumentNode* )targetResults[0]; - node->ReplaceLocalL( iNewNode, target ); - WriteFileL( iTargetDoc.DocumentRoot() ); - } - else User::Leave( KErrGeneral ); - CleanupStack::PopAndDestroy( 5 ); //targetAttributes, targetResults, - //parentAttributes, parentResults, data - } - -// --------------------------------------------------------- -// Symbian OS default constructor may leave. -// -// --------------------------------------------------------- -// -void CLocalReplacement::Destroy() - { - delete this; - } - -// --------------------------------------------------------- -// Destructor -// -// --------------------------------------------------------- -// -CLocalReplacement::~CLocalReplacement() - { - - } - -// End of File -