--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsxml/src/sendomfragment.cpp Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2002-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:
+*
+*/
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include "SenXmlElement.h"
+#include "SenDomFragment.h"
+#include "SenXmlConstants.h"
+#include "SenXmlUtils.h"
+#include "senxmldebug.h"
+
+EXPORT_C CSenDomFragment* CSenDomFragment::NewL()
+ {
+ CSenDomFragment* pNew = new (ELeave) CSenDomFragment;
+ return pNew;
+ }
+
+EXPORT_C CSenDomFragment* CSenDomFragment::NewL(const CSenElement& aElement)
+ {
+ CSenDomFragment* pNew = new (ELeave) CSenDomFragment;
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL(aElement);
+ CleanupStack::Pop(); // delete pNew;
+ return pNew;
+ }
+
+EXPORT_C CSenDomFragment* CSenDomFragment::NewL(const TDesC8& aLocalName)
+ {
+ CSenDomFragment* pNew = new (ELeave) CSenDomFragment;
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL(aLocalName);
+ CleanupStack::Pop(); // delete pNew;
+ return pNew;
+ }
+
+EXPORT_C CSenDomFragment* CSenDomFragment::NewL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName
+ )
+ {
+ CSenDomFragment* pNew = new (ELeave) CSenDomFragment;
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL(aNsUri, aLocalName);
+ CleanupStack::Pop(); // delete pNew;
+ return pNew;
+ }
+
+EXPORT_C CSenDomFragment* CSenDomFragment::NewL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aQName,
+ const RAttributeArray& aAttrs
+ )
+ {
+ CSenDomFragment* pNew = new (ELeave) CSenDomFragment;
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL(aNsUri, aLocalName, aQName, aAttrs);
+ CleanupStack::Pop(); // delete pNew;
+ return pNew;
+ }
+
+EXPORT_C CSenDomFragment* CSenDomFragment::NewL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aQName,
+ /* NOT IN JAVA */
+ const RAttributeArray& aAttrs,
+ CSenElement& aParent
+ )
+ {
+ CSenDomFragment* pNew = new (ELeave) CSenDomFragment;
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL(aNsUri, aLocalName, aQName, aAttrs, aParent);
+ CleanupStack::Pop(); // delete pNew;
+ return pNew;
+ }
+
+EXPORT_C CSenDomFragment* CSenDomFragment::NewL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aQName
+ )
+ {
+ CSenDomFragment* pNew = new (ELeave) CSenDomFragment;
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL(aNsUri, aLocalName, aQName);
+ CleanupStack::Pop(); // delete pNew;
+ return pNew;
+ }
+
+EXPORT_C CSenDomFragment::~CSenDomFragment()
+ {
+ if(ipDomDelegate)
+ {
+ // We do not own the element, so remove it from the fragment.
+ ipDomDelegate->ExtractElement();
+ delete ipDomDelegate;
+ ipDomDelegate = NULL;
+ }
+ }
+
+EXPORT_C CSenDomFragment::CSenDomFragment()
+:ipDomDelegate(NULL)
+ {
+ }
+
+EXPORT_C void CSenDomFragment::BaseConstructL(const CSenElement& aElement)
+ {
+ CSenBaseFragment::BaseConstructL(aElement);
+ }
+
+EXPORT_C void CSenDomFragment::BaseConstructL(const TDesC8& aLocalName)
+ {
+ CSenBaseFragment::BaseConstructL(aLocalName);
+ }
+
+EXPORT_C void CSenDomFragment::BaseConstructL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName
+ )
+ {
+ CSenBaseFragment::BaseConstructL(aNsUri, aLocalName);
+ }
+
+EXPORT_C void CSenDomFragment::BaseConstructL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aQName,
+ const RAttributeArray& aAttrs
+ )
+ {
+ CSenBaseFragment::BaseConstructL(aNsUri, aLocalName, aQName, aAttrs);
+ }
+
+EXPORT_C void CSenDomFragment::BaseConstructL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aQName,
+ const RAttributeArray& aAttrs,
+ CSenElement& aParent
+ )
+ {
+ CSenBaseFragment::BaseConstructL( aNsUri,
+ aLocalName,
+ aQName,
+ aAttrs,
+ aParent);
+ }
+
+EXPORT_C void CSenDomFragment::BaseConstructL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aQName
+ )
+ {
+ CSenBaseFragment::BaseConstructL(aNsUri, aLocalName, aQName);
+ }
+
+
+EXPORT_C void CSenDomFragment::BaseConstructL(CSenXmlReader& aReader)
+ {
+ CSenBaseFragment::BaseConstructL(aReader);
+ }
+
+
+EXPORT_C void CSenDomFragment::ParseWithL(CSenXmlReader& aReader) // IOP
+ {
+ CSenBaseFragment::ParseWithL(aReader);
+ iState = KStateSave; // IOP
+ }
+
+EXPORT_C void CSenDomFragment::StartElementL(const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aQName,
+ const RAttributeArray& aAttrs)
+ {
+
+ // 2004-09-10. moved out from KStateIgnore -code segment
+ if(!ipElement)
+ {
+ ipElement = CSenXmlElement::NewL(aNsUri, aLocalName, aQName);
+ }
+ AllocContentSaverL();
+
+ if(iState == KStateIgnore)
+ {
+ const TDesC8& localName = ipElement->LocalName();
+ const TDesC8& nsUri = ipElement->NamespaceURI();
+
+ if(localName == aLocalName && nsUri == aNsUri)
+ {
+ iState = KStateSave; // IOP
+ SetAttributesL(aAttrs);
+ }
+ }
+ else if((iState & KStateSave) == KStateSave)
+ {
+ ExpandL(aNsUri, aLocalName, aQName, aAttrs);
+ }
+ }
+
+EXPORT_C void CSenDomFragment::CharactersL(
+ const TDesC8& aChars,
+ const TInt /*aStart*/,
+ const TInt /*aLength*/
+ )
+ {
+ AllocContentSaverL();
+
+
+ HBufC8* pCharsCopy = NULL;
+
+ if (SenXmlUtils::EncodeHttpCharactersL(aChars, pCharsCopy))
+ {
+ CleanupStack::PushL(pCharsCopy);
+ iWs.WriteL(*pCharsCopy);
+ CleanupStack::PopAndDestroy(); // pCharsCopy
+ }
+ else
+ {
+ iWs.WriteL(aChars);
+ }
+ }
+
+EXPORT_C void CSenDomFragment::SetAttributesL(const RAttributeArray& aAttrs)
+ {
+ CSenBaseFragment::SetAttributesL(aAttrs);
+ if(ipElement)
+ {
+ ((CSenXmlElement*)ipElement)->SetAttributesL(aAttrs);
+ }
+ }
+
+EXPORT_C void CSenDomFragment::ExpandL(
+ const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aQName,
+ const RAttributeArray& aAttrs
+ )
+ {
+
+ if(ipDomDelegate)
+ {
+ // We do not own the element, so remove it from the fragment.
+ ipDomDelegate->ExtractElement();
+ delete ipDomDelegate;
+ ipDomDelegate = NULL;
+ }
+
+ // delegate parsing to a new DOMFragment,
+ // until we encounter the end of an element with the given qualified name
+ ipDomDelegate = CSenDomFragment::NewL( aNsUri,
+ aLocalName,
+ aQName,
+ aAttrs,
+ *ipElement);
+
+ ipElement->AddElementL(ipDomDelegate->AsElement());
+
+ DelegateParsingL(*ipDomDelegate); // note that the parsing is actually
+ // performed AFTER the StartElement()
+ // method, which called this ExpandL()
+ // has been fully executed (this is an
+ // async signal send to the _same_
+ // parser(!)
+ }
+
+
+EXPORT_C void CSenDomFragment::WriteStartElementL(
+ const TDesC8& /* aNsUri */,
+ const TDesC8& /* aLocalName */,
+ const TDesC8& /* aQName */,
+ const RAttributeArray& /*aAttrs*/
+ )
+ {
+ // in DOM fragment: do nothing
+ }
+
+EXPORT_C void CSenDomFragment::WriteEndElementL(
+ const TDesC8& /* aNsUri */,
+ const TDesC8& /* aLocalName */,
+ const TDesC8& /* aQName */
+ )
+ {
+ // in DOM fragment: do nothing
+ }
+
+
+// Overridden from CSenBaseFragment to be much more simple
+EXPORT_C void CSenDomFragment::ResumeParsingFromL( // IOP
+ const TDesC8& /*aNsUri*/,
+ const TDesC8& /*aLocalName*/,
+ const TDesC8& /*aQName*/
+ )
+ {
+ iXmlReader->SetContentHandler(*this);
+ if(ipDomDelegate)
+ {
+ // We do not own the element, so remove it from the fragment.
+ ipDomDelegate->ExtractElement();
+ delete ipDomDelegate;
+ ipDomDelegate = NULL;
+ }
+ }
+
+// End of File