diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/protocol/src/ncd_parser_pp_response.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/protocol/src/ncd_parser_pp_response.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,248 @@ +/* +* Copyright (c) 2006 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: CNcdPreminetProtocolResponseParser implementation +* +*/ + + +#include "ncdprotocolwords.h" +#include "ncdunknownparser.h" +#include "ncdparserobserver.h" +#include "ncdprotocolutils.h" +#include "ncd_parser_pp_response.h" +#include "ncd_parser_pp_entityref.h" +#include "ncd_parser_pp_embeddeddata.h" +#include "ncd_parser_pp_purchase.h" +#include "ncd_parser_pp_subscriptionreport.h" +#include "ncd_parser_pp_information.h" +#include "ncd_parser_cp_error.h" +#include "ncdprotocolutils.h" +#include "ncd_pp_folderref.h" +#include "ncd_pp_itemref.h" +#include "ncd_pp_informationimpl.h" +#include "catalogsdebug.h" + + +CNcdPreminetProtocolResponseParser* CNcdPreminetProtocolResponseParser::NewL( + MNcdParserObserverBundle& aObservers, + MNcdSubParserObserver& aSubParserObserver, + TInt aDepth, + const Xml::RTagInfo& aElement, + const Xml::RAttributeArray& aAttributes ) + { + CNcdPreminetProtocolResponseParser* self + = new(ELeave) CNcdPreminetProtocolResponseParser( + aObservers, aSubParserObserver, aDepth ); + CleanupStack::PushL( self ); + self->ConstructL( aElement, aAttributes ); + CleanupStack::Pop( self ); + return self; + } + +CNcdPreminetProtocolResponseParser::CNcdPreminetProtocolResponseParser( + MNcdParserObserverBundle& aObservers, + MNcdSubParserObserver& aSubParserObserver, + TInt aDepth ) + : CNcdSubParser( aObservers, aSubParserObserver, aDepth ) + { + + } + +CNcdPreminetProtocolResponseParser::~CNcdPreminetProtocolResponseParser() + { + delete iResponseNamespace; + } + + +void CNcdPreminetProtocolResponseParser::ConstructL( + const Xml::RTagInfo& aElement, + const Xml::RAttributeArray& aAttributes ) + { + DLTRACEIN(("")); + CNcdSubParser::ConstructL( aElement ); + + // handle attributes + TPtrC8 responseNamespace = AttributeValue( KAttrNamespace, aAttributes ); + NcdProtocolUtils::AssignDesL( iResponseNamespace, responseNamespace ); + + DLINFO(("namespace=%S",&responseNamespace)); + TPtrC8 id = AttributeValue( KAttrId, aAttributes ); + DLINFO(("id=%S",&id)); + TPtrC8 version = AttributeValue( KAttrVersion, aAttributes ); + DLINFO(("version=%S",&version)); + + TPtrC8 session = AttributeValue( KAttrSession, aAttributes ); + if( session != KNullDesC8 ) + { + if( iObservers->SessionObserver() ) + { + HBufC* data = NcdProtocolUtils::ConvertUtf8ToUnicodeLC( session ); + iObservers->SessionObserver()->SessionL( + *data, iObservers->SessionOrigin(), *iResponseNamespace ); + CleanupStack::PopAndDestroy( data ); + } + } + + } + + +void CNcdPreminetProtocolResponseParser::OnStartElementL( + const Xml::RTagInfo& aElement, + const Xml::RAttributeArray& aAttributes, + TInt aErrorCode) + { + + TPtrC8 tag( aElement.LocalName().DesC() ); + + if( iSubParser == 0 ) + { + DLTRACEIN(("preminet start tag=%S error=%d depth=%d",&aElement.LocalName().DesC(),aErrorCode,iDepth)); + if( tag == KTagEntity ) + { + iSubParser = CNcdPreminetProtocolEntityRefParser::NewL( + *iObservers, *this, iDepth+1, aElement, aAttributes, + KNullDesC /*no parent id*/, *iResponseNamespace ); + } + else if( tag == KTagEmbeddedData ) + { + iSubParser = CNcdPreminetProtocolEmbeddedDataParser::NewL( + *iObservers, *this, iDepth+1, aElement, aAttributes, + *iResponseNamespace ); + // no handling needed in SubParserFinishedL + } + else if( tag == KTagPurchase ) + { + iSubParser = CNcdPreminetProtocolPurchaseParser::NewL( + *iObservers, *this, iDepth+1, aElement, aAttributes, + KNullDesC /*no parent id*/ ); + // no handling needed in SubParserFinishedL + } + else if( tag == KTagSubscriptionReport ) + { + iSubParser = CNcdPreminetProtocolSubscriptionReportParser::NewL( + *iObservers, *this, iDepth+1, aElement, aAttributes, + KNullDesC /*no parent id*/, *iResponseNamespace ); + // no handling needed in SubParserFinishedL + } + else if( tag == KTagInformation ) + { + iSubParser = CNcdPreminetProtocolInformationParser::NewL( + *iObservers, *this, iDepth+1, aElement, aAttributes ); + } + else if( tag == KTagError ) + { + iSubParser = CNcdConfigurationProtocolErrorParser::NewL( + *iObservers, *this, iDepth+1, aElement, aAttributes ); + } + else + { + iSubParser = CNcdUnknownParser::NewL( + *iObservers, *this, iDepth+1, aElement, aAttributes ); + } + } + else + { + iSubParser->OnStartElementL( aElement, aAttributes, aErrorCode ); + } + } + + + +void CNcdPreminetProtocolResponseParser::OnEndElementL( + const Xml::RTagInfo& aElement, TInt aErrorCode) + { + DLTRACEIN(("")); + if( iSubParser == 0 && iTag && *iTag == aElement.LocalName().DesC() ) + { + DLTRACE(("end tag=%S",&aElement.LocalName().DesC())); + iSubParserObserver->SubParserFinishedL( + aElement.LocalName().DesC(), aErrorCode ); + } + else if( iSubParser ) + { + iSubParser->OnEndElementL( aElement, aErrorCode ); + } + else + { + DLWARNING(("end tag ignored, tag=%S",&aElement.LocalName().DesC())); + } + } + + +void CNcdPreminetProtocolResponseParser::OnContentL( + const TDesC8& aBytes, TInt aErrorCode) + { + DLTRACEIN(("")); + if( iSubParser ) + { + iSubParser->OnContentL( aBytes, aErrorCode ); + } + } + +void CNcdPreminetProtocolResponseParser::SubParserFinishedL( + const TDesC8& aTag, TInt /*aErrorCode*/ ) + { + DLTRACEIN(("tag=%S subparser=%X",&aTag,iSubParser)); + + if( iSubParser->Type() == EParserEntityRef && + iObservers->EntityObserver() && + aTag == KTagEntity ) + { + MNcdPreminetProtocolItemRef* itemRef = + static_cast + ( iSubParser )->ItemRef(); + MNcdPreminetProtocolFolderRef* folderRef = + static_cast + ( iSubParser )->FolderRef(); + DLINFO(("subparser itemref=%X folderref=%X",itemRef,folderRef)); + if( itemRef ) + { + iObservers->EntityObserver()->ItemRefL( itemRef ); + } + if( folderRef ) + { + DLINFO((_L("folder id=%S"),&folderRef->Id())); + iObservers->EntityObserver()->FolderRefL( folderRef ); + } + } + else if( aTag == KTagInformation ) + { + MNcdParserInformationObserver* observer = iObservers->InformationObserver(); + + if( observer ) + { + MNcdPreminetProtocolInformation* information = + static_cast( iSubParser )->Information(); + CNcdPreminetProtocolInformationImpl* info = + static_cast(information); + NcdProtocolUtils::AssignDesL( info->iNamespace, *iResponseNamespace ); + observer->InformationL( information ); + } + } + + else if( aTag == KTagError ) + { + MNcdParserErrorObserver* observer = iObservers->ErrorObserver(); + + if( observer ) + { + MNcdPreminetProtocolError* error = + static_cast( iSubParser )->PreminetProtocolError(); + observer->ErrorL( error ); + } + } + + delete iSubParser; + iSubParser = 0; + }