webservices/wsfragment/src/sendomfragmentbase.cpp
changeset 0 62f9d29f7211
child 22 c5fabff9b552
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsfragment/src/sendomfragmentbase.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,560 @@
+/*
+* Copyright (c) 2002-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:        Class implements XML DOM fragment using libxml2 classes
+*
+*/
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include "SenDomFragmentBase.h"
+#include <xmlengserializationoptions.h> // needed for TSerializationOptions
+
+
+EXPORT_C CSenDomFragmentBase* CSenDomFragmentBase::NewL()
+    {
+    CSenDomFragmentBase* pNew = new (ELeave) CSenDomFragmentBase;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL();
+    CleanupStack::Pop(); // Pop pNew
+    return pNew;
+    }
+
+EXPORT_C CSenDomFragmentBase* CSenDomFragmentBase::NewL(const TXmlEngElement& aElement)
+    {
+    CSenDomFragmentBase* pNew = new (ELeave) CSenDomFragmentBase;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aElement);
+    CleanupStack::Pop(); // Pop pNew
+    return pNew;
+    }
+
+EXPORT_C CSenDomFragmentBase* CSenDomFragmentBase::NewL(const TDesC8& aLocalName)
+    {
+    CSenDomFragmentBase* pNew = new (ELeave) CSenDomFragmentBase;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aLocalName);
+    CleanupStack::Pop(); // Pop pNew
+    return pNew;
+    }
+
+EXPORT_C CSenDomFragmentBase* CSenDomFragmentBase::NewL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName
+    )
+    {
+    CSenDomFragmentBase* pNew = new (ELeave) CSenDomFragmentBase;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aNsUri, aLocalName);
+    CleanupStack::Pop(); // Pop pNew
+    return pNew;
+    }
+
+EXPORT_C CSenDomFragmentBase* CSenDomFragmentBase::NewL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aPrefix,
+    const RAttributeArray& aAttrs
+    )
+    {
+    CSenDomFragmentBase* pNew = new (ELeave) CSenDomFragmentBase;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aNsUri, aLocalName, aPrefix, aAttrs);
+    CleanupStack::Pop(); // Pop pNew
+    return pNew;
+    }
+
+EXPORT_C CSenDomFragmentBase* CSenDomFragmentBase::NewL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aPrefix,
+    const RAttributeArray& aAttrs,
+    TXmlEngElement& aParent
+    )
+    {
+    CSenDomFragmentBase* pNew = new (ELeave) CSenDomFragmentBase;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aNsUri, aLocalName, aPrefix, aAttrs, aParent);
+    CleanupStack::Pop(); // delete pNew;
+    return pNew;
+    }
+
+EXPORT_C CSenDomFragmentBase* CSenDomFragmentBase::NewL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aPrefix,
+    const RAttributeArray& aAttrs,
+    TXmlEngElement& aParent,
+    RSenDocument& aOwnerDocument
+    )
+    {
+    CSenDomFragmentBase* pNew = new (ELeave) CSenDomFragmentBase;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aNsUri, aLocalName, aPrefix, aAttrs, aParent,
+                         aOwnerDocument);
+    CleanupStack::Pop(); // delete pNew;
+    return pNew;
+    }
+
+EXPORT_C CSenDomFragmentBase* CSenDomFragmentBase::NewL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aPrefix
+    )
+    {
+    CSenDomFragmentBase* pNew = new (ELeave) CSenDomFragmentBase;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aNsUri, aLocalName, aPrefix);
+    CleanupStack::Pop(); // delete pNew;
+    return pNew;
+    }
+
+EXPORT_C CSenDomFragmentBase::~CSenDomFragmentBase()
+    {
+    if ( ipDomDelegate )
+        {
+        // We do not own the element, so remove it from the fragment.
+        //ipDomDelegate->ExtractElement();
+        delete ipDomDelegate;
+        ipDomDelegate = NULL;
+        }
+    }
+
+EXPORT_C CSenDomFragmentBase::CSenDomFragmentBase()
+:   ipDomDelegate(NULL)
+    {
+    }
+
+EXPORT_C void CSenDomFragmentBase::BaseConstructL()
+    {
+    iDocument = RSenDocument::NewL();
+    }
+
+EXPORT_C void CSenDomFragmentBase::BaseConstructL(const TXmlEngElement& aElement)
+    {
+    CSenFragmentBase::BaseConstructL(aElement);
+    }
+
+EXPORT_C void CSenDomFragmentBase::BaseConstructL(const TDesC8& aLocalName)
+    {
+    CSenFragmentBase::BaseConstructL(aLocalName);
+    }
+
+EXPORT_C void CSenDomFragmentBase::BaseConstructL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName
+    )
+    {
+    CSenFragmentBase::BaseConstructL(aNsUri, aLocalName);
+    }
+
+EXPORT_C void CSenDomFragmentBase::BaseConstructL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aPrefix,
+    const RAttributeArray& aAttrs
+    )
+    {
+    CSenFragmentBase::BaseConstructL(aNsUri, aLocalName, aPrefix, aAttrs);
+    }
+
+EXPORT_C void CSenDomFragmentBase::BaseConstructL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aPrefix,
+    const RAttributeArray& aAttrs,
+    TXmlEngElement& aParent
+    )
+    {
+    CSenFragmentBase::BaseConstructL(   aNsUri,
+                                        aLocalName,
+                                        aPrefix,
+                                        aAttrs,
+                                        aParent);
+    }
+    
+EXPORT_C void CSenDomFragmentBase::BaseConstructL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aPrefix,
+    const RAttributeArray& aAttrs,
+    TXmlEngElement& aParent,
+    RSenDocument& aOwnerDocument
+    )
+    {
+    CSenFragmentBase::BaseConstructL(   aNsUri,
+                                        aLocalName,
+                                        aPrefix,
+                                        aAttrs,
+                                        aParent,
+                                        aOwnerDocument);
+    }
+
+EXPORT_C void CSenDomFragmentBase::BaseConstructL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aPrefix
+    )
+    {
+    CSenFragmentBase::BaseConstructL(aNsUri, aLocalName, aPrefix);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnStartElementL(const RTagInfo& aElement, 
+                                                 const RAttributeArray& aAttributes, 
+                                                 TInt aErrorCode)
+    {
+    const TPtrC8 saxLocalName   = aElement.LocalName().DesC();
+    const TPtrC8 saxNsUri       = aElement.Uri().DesC();
+    const TPtrC8 saxPrefix      = aElement.Prefix().DesC();
+    
+    
+    if ( iElement.IsNull() )
+        {
+        if ( saxNsUri == KNullDesC8 && saxPrefix == KNullDesC8 )
+            {
+            iDocument.CreateDocumentElementL(saxLocalName);
+            }
+        else
+            {
+            if ( saxPrefix == KNullDesC8 )
+                {
+                iDocument.CreateDocumentElementL(saxLocalName,
+                                                 saxNsUri,
+                                                 KNullDesC8);
+                }
+            else
+                {
+                iDocument.CreateDocumentElementL(saxLocalName,
+                                                 saxNsUri,
+                                                 saxPrefix);
+                }
+            }
+        iElement = iDocument.DocumentElement();        
+        }    
+    
+    TXmlEngElement element = AsElementL();
+    
+    TPtrC8 localName =  element.Name();
+    TPtrC8 nsUri(KNullDesC8);
+    if ( element.NamespaceUri() != KNullDesC8 )
+        {
+        nsUri.Set(element.NamespaceUri());
+        }
+    
+    if(iState == KSenStateIgnore)
+        {
+        if(localName == saxLocalName && nsUri == saxNsUri) 
+            {
+            iState = KSenStateSave;
+            AddNamespacesL();
+            AddAttributesL(aAttributes);
+            }
+        else
+            {
+            if ( ipNamespaceArray )
+                {
+                ipNamespaceArray->ResetAndDestroy();
+                }
+            }
+        }
+    else if((iState & KSenStateSave) == KSenStateSave)
+        {
+        ExpandL(aElement, aAttributes, aErrorCode);
+        }
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnContentL(const TDesC8& aBytes,
+                                              TInt /*aErrorCode*/)
+    {
+    if((iState & KSenStateSave) == KSenStateSave)
+        {
+        TXmlEngElement element = AsElementL();
+        element.AddTextL(aBytes);
+        }
+    }
+
+EXPORT_C void CSenDomFragmentBase::ExpandL(const RTagInfo& aElement,
+                                           const RAttributeArray& aAttributes,
+                                           TInt /*aErrorCode*/)
+    {
+    if ( ipDomDelegate )
+        {
+        // We do not own the element, so remove it from the fragment.
+        //ipDomDelegate->ExtractElement();
+        delete ipDomDelegate;
+        ipDomDelegate = NULL;
+        }
+
+    const TPtrC8 saxLocalName   = aElement.LocalName().DesC();
+    const TPtrC8 saxNsUri       = aElement.Uri().DesC();
+    const TPtrC8 saxPrefix      = aElement.Prefix().DesC();
+
+    TXmlEngElement element = AsElementL();
+    RSenDocument document = AsDocumentL();
+    
+    // delegate parsing to a new DOMFragment,
+    // until we encounter the end of an element with the given qualified name
+    ipDomDelegate = CSenDomFragmentBase::NewL( saxNsUri,
+                                               saxLocalName,
+                                               saxPrefix,
+                                               aAttributes,
+                                               element,
+                                               document );
+                                               
+    ipDomDelegate->iState = KSenStateDelegate;
+                                                
+    OnDelegateParsingL(*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 CSenDomFragmentBase::OnWriteStartElementL(
+                                        const RTagInfo& /*aElement*/, 
+                                        const RAttributeArray& /*aAttributes*/)
+    {
+    // in DOM fragment: do nothing
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnWriteEndElementL(
+                                        const RTagInfo& /*aElement*/)
+    {
+    // in DOM fragment: do nothing
+    }
+
+
+// Overridden from CSenBaseFragment to be much more simple
+EXPORT_C void CSenDomFragmentBase::OnResumeParsingFromL(
+                                        const RTagInfo& /*aElement*/,
+                                        TInt /*aErrorCode*/)
+    {
+    SetContentHandler(*this);
+    
+    if ( ipDomDelegate )
+        {
+        delete ipDomDelegate;
+        ipDomDelegate = NULL;
+        }
+    }
+    
+EXPORT_C HBufC8* CSenDomFragmentBase::AsXmlL()
+    {
+    return CSenFragmentBase::AsXmlL();
+    }
+    
+EXPORT_C void CSenDomFragmentBase::AddNamespacesL()
+    {
+    CSenFragmentBase::AddNamespacesL();
+    }
+
+EXPORT_C void CSenDomFragmentBase::AddAttributesL(const RAttributeArray& aAttrs)
+    {
+    CSenFragmentBase::AddAttributesL(aAttrs);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnEndElementL(const RTagInfo& aElement, TInt aErrorCode)
+    {
+    CSenFragmentBase::OnEndElementL(aElement, aErrorCode);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnStartDocumentL(const RDocumentParameters& /*aDocParam*/, TInt /*aErrorCode*/)
+    {
+    // in DOM fragment: do nothing
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnEndDocumentL(TInt /*aErrorCode*/)
+    {
+    // in DOM fragment: do nothing
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode)
+    {
+    CSenFragmentBase::OnStartPrefixMappingL(aPrefix, aUri, aErrorCode);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode)
+    {
+    CSenFragmentBase::OnEndPrefixMappingL(aPrefix, aErrorCode);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt ErrorCode)
+    {
+    CSenFragmentBase::OnIgnorableWhiteSpaceL(aBytes, ErrorCode);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnSkippedEntityL(const RString& aName, TInt aErrorCode)
+    {
+    CSenFragmentBase::OnSkippedEntityL(aName, aErrorCode);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode)
+    {
+    CSenFragmentBase::OnProcessingInstructionL(aTarget, aData, aErrorCode);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnError(TInt aErrorCode)
+    {
+    CSenFragmentBase::OnError(aErrorCode);
+    }
+
+EXPORT_C TAny* CSenDomFragmentBase::GetExtendedInterface(const TInt32 aUid)
+    {
+    return CSenFragmentBase::GetExtendedInterface(aUid);
+    }
+
+EXPORT_C TPtrC8 CSenDomFragmentBase::ContentL()
+    {
+    return CSenFragmentBase::ContentL();
+    }
+        
+EXPORT_C TXmlEngNamespace CSenDomFragmentBase::Namespace(const TDesC8& aPrefix)
+    {
+    return CSenFragmentBase::Namespace(aPrefix);
+    }
+        
+//EXPORT_C void CSenDomFragmentBase::DetachL()
+//    {
+//    CSenFragmentBase::DetachL();
+//    }
+        
+EXPORT_C void CSenDomFragmentBase::ResetContentL()
+    {
+    CSenFragmentBase::ResetContentL();
+    }
+
+EXPORT_C TPtrC8 CSenDomFragmentBase::LocalName() const
+    {
+    return CSenFragmentBase::LocalName();
+    }
+        
+EXPORT_C TPtrC8 CSenDomFragmentBase::NsUri() const
+    {
+    return CSenFragmentBase::NsUri();
+    }
+
+EXPORT_C TPtrC8 CSenDomFragmentBase::NsPrefix() const
+    {
+    return CSenFragmentBase::NsPrefix();
+    }
+
+EXPORT_C TXmlEngElement CSenDomFragmentBase::AsElementL()
+    {
+    return CSenFragmentBase::AsElementL();
+    }
+
+EXPORT_C RSenDocument& CSenDomFragmentBase::AsDocumentL()
+    {
+    return CSenFragmentBase::AsDocumentL();
+    }
+
+EXPORT_C TXmlEngElement CSenDomFragmentBase::ExtractElement()
+    {
+    return CSenFragmentBase::ExtractElement();
+    }
+        
+EXPORT_C void CSenDomFragmentBase::OnDelegateParsingL(CSenFragmentBase& aDelegate)
+    {
+    CSenFragmentBase::OnDelegateParsingL(aDelegate);
+    }
+
+EXPORT_C void CSenDomFragmentBase::OnDelegateParsingL(const RTagInfo& aElement, 
+                                                 const RAttributeArray& aAttributes, 
+                                                 TInt aErrorCode)
+    {
+    CSenFragmentBase::OnDelegateParsingL(aElement, aAttributes, aErrorCode);
+    }
+        
+EXPORT_C void CSenDomFragmentBase::SetOwner(CSenFragmentBase& aFragment)
+    {
+    CSenFragmentBase::SetOwner(aFragment);
+    }
+
+EXPORT_C HBufC* CSenDomFragmentBase::AsXmlUnicodeL()
+    {
+    return CSenFragmentBase::AsXmlUnicodeL();
+    }
+
+EXPORT_C void CSenDomFragmentBase::WriteAsXMLToL(RWriteStream& aWs)
+    {
+    CSenFragmentBase::WriteAsXMLToL(aWs);
+    }
+
+EXPORT_C TBool CSenDomFragmentBase::ConsistsOfL(CSenFragmentBase& aCandidate)
+    {
+    return CSenFragmentBase::ConsistsOfL(aCandidate);
+    }
+        
+EXPORT_C void CSenDomFragmentBase::SetContentHandler(CSenFragmentBase& aContentHandler)
+    {
+    CSenFragmentBase::SetContentHandler(aContentHandler);
+    }
+        
+void CSenDomFragmentBase::RenameL(const TDesC8& aLocalName, const TDesC8& aPrefix, const TDesC8& aNamespace)
+    {
+    CSenFragmentBase::RenameL(aLocalName, aPrefix, aNamespace);
+    }
+
+void CSenDomFragmentBase::RenameL(const TDesC8& aLocalName, const TDesC8& aNamespace)
+    {
+    CSenFragmentBase::RenameL(aLocalName, aNamespace);
+    }
+
+void CSenDomFragmentBase::RenameLocalNameL(const TDesC8& aLocalName)
+    {
+    CSenFragmentBase::RenameLocalNameL(aLocalName);
+    }
+
+void CSenDomFragmentBase::RenameNamespaceL(const TDesC8& aNamespace)
+    {
+    CSenFragmentBase::RenameNamespaceL(aNamespace);
+    }
+
+void CSenDomFragmentBase::RenamePrefixL(const TDesC8& aPrefix)
+    {
+    CSenFragmentBase::RenamePrefixL(aPrefix);
+    }
+
+void CSenDomFragmentBase::RenameNamespaceL(const TDesC8& aPrefix, const TDesC8& aNamespace)
+    {
+    CSenFragmentBase::RenameNamespaceL(aPrefix, aNamespace);
+    }
+         
+EXPORT_C TXmlEngElement CSenDomFragmentBase::SetContentOfL(const TDesC8& aLocalName,
+                                        const TDesC8& aContent)
+    {
+    return CSenFragmentBase::SetContentOfL(aLocalName, aContent);
+    }
+
+EXPORT_C TPtrC8 CSenDomFragmentBase::ContentOf(const TDesC8& aLocalName)
+    {
+    return CSenFragmentBase::ContentOf(aLocalName);
+    }
+
+EXPORT_C TBool CSenDomFragmentBase::ConsistsOfL(TXmlEngElement& aElement,
+                                                TXmlEngElement& aCandidate)
+    {
+    return CSenFragmentBase::ConsistsOfL(aElement, aCandidate);
+    }
+    
+
+// End of File
+