xdmprotocols/XdmXmlParser/inc/XmlFormatter.h
changeset 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xdmprotocols/XdmXmlParser/inc/XmlFormatter.h	Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,212 @@
+/*
+* 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:   CXmlFormatter
+*
+*/
+
+
+
+
+#ifndef __XMLFORMATTER__
+#define __XMLFORMATTER__
+
+// INCLUDES
+#include <e32base.h>
+#include "XmlParserNodePath.h"
+#include "XmlNodePathInterface.h"
+
+//Konsts
+_LIT8( KXmldocumentStart,               "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
+
+//Forwar declarations
+class CXdmDocument;
+class CXdmXmlParser;
+class CXdmDocumentNode;
+class MXdmNodeInterface;
+class CXmlParserNodePath;
+
+// CLASS DECLARATION
+NONSHARABLE_CLASS( CXmlFormatter ) : public CBase,
+                                     public MXmlNodePathInterface
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Symbian OS Constructor
+        * @return CXmlFormatter* New XML formatter
+        */
+        static CXmlFormatter* NewL( CXdmXmlParser& aParserMain );
+        
+        /**
+        * Format a document
+        * @param TBool Indicates whether parameter is a whole document
+        * @param CXdmDocument* The target document
+        * @param CXdmDocumentNode* The target element
+        * @return HBufC8* The document in textual form
+        */
+        HBufC8* FormatLC( TBool aIsWholeDocument,
+                          const CXdmDocument* aDocument,
+                          const CXdmDocumentNode* aRootNode );
+        
+        /**
+        * Format a document
+        * @param TDesC8& An XML fragment to append
+        * @param CXdmDocument* The target document
+        * @param CXdmDocumentNode* The target element
+        * @return HBufC8* The document in textual form
+        */
+        HBufC8* FormatLC( const TDesC8& aXmlFragment,
+                          const CXdmDocument* aDocument,
+                          const CXdmDocumentNode* aTargetNode );
+                          
+        /**
+        * Destructor
+        */
+        virtual ~CXmlFormatter();
+    
+    private:  //From MXmlParserNodePathInterface
+        
+        /**
+        * Return the target attribute
+        * @return CXdmNodeAttribute* target attribute
+        */
+        CXdmNodeAttribute* TargetAttribute() const;
+        
+    private:
+        
+        /**
+        * C++ constructor
+        * @return CXmlFormatter
+        */
+        CXmlFormatter( CXdmXmlParser& aParserMain );
+        
+        /**
+        * Symbian OS second-phase constructor
+        * @return void
+        */
+        void ConstructL();
+
+        /**
+        * Read data from the format buffer into a contiguous segment
+        * @return HBufC8* An XML document in textual form
+        */  
+        HBufC8* BufferToStringLC();
+        
+        /**
+        * Check the next element in a document
+        * @param CXdmDocumentNode& An XML element
+        * @return void
+        */
+        void CheckSubsetPath( const CXdmDocumentNode& aNode );
+        
+        /**
+        * Reset the internal format buffer
+        * @return void
+        */  
+        void ResetFormatBuffer();
+        
+        /**
+        * Find the (local) name of an element
+        * @param TDesC8& The whole element string
+        * @return TPtrC8 Name part of the element string
+        */ 
+        TPtrC8 FindElementName( const TDesC8& aElementString );
+        
+        /**
+        * Format namespace declarations
+        * @param CXdmDocumentNode& An XML element
+        * @return MXdmNamespaceContainer& Namespace container
+        */ 
+        void FormatNamespaceDeclarationsL( const CXdmDocumentNode& aRootNode,
+                                           const MXdmNamespaceContainer& aContainer );
+                                           
+        /**
+        * Format the parameter element and its descendants
+        * @param CXdmDocumentNode The element to format
+        * @return void
+        */  
+        void FormatElementsL( CXdmDocumentNode* aCurrentNode );
+
+        /**
+        * Format a leaf element 
+        * @param CXdmDocumentNode The element to format
+        * @return void
+        */    
+        void FormatLeafElementL( CXdmDocumentNode* aCurrentNode );
+        
+        /**
+        * Format the start of the parameter element
+        * @param TDesC8& Element prefix 
+        * @param TDesC8& Element URI 
+        * @return void
+        */ 
+        void FormatElementStartL( const TDesC8& aPrefix,
+                                  const TDesC8& aElementData ); 
+
+        /**
+        * Format the end of the parameter element
+        * @param TDesC8& Element prefix 
+        * @param TDesC8& Element URI 
+        * @return void
+        */ 
+        void FormatElementEndL( const TDesC8& aPrefix,
+                                const TDesC8& aElementData );
+        
+        /**
+        * Format an empty element 
+        * @param CXdmDocumentNode The element to format
+        * @return void
+        */    
+        void FormatEmptyElementL( CXdmDocumentNode* aEmptyNode );
+        
+                                                   
+        /**
+        * Append a namespace mapping
+        * @param TDesC8& Element URI 
+        * @param TDesC8& Element prefix
+        * @return void
+        */                                      
+        void AppendNamespaceL( const TDesC8& aUri, const TDesC8& aPrefix );
+        
+        /**
+        * Append XML fragment into the format buffer
+        * @return void
+        */ 
+        void AppendXmlFragmentL();
+        
+        /**
+        * Return the prefix of the parameter element
+        * @param MXdmNodeInterface& An XML element
+        * @return TPtrC8 Prefix
+        */  
+        TPtrC8 Prefix( const MXdmNodeInterface& aInterface );
+        
+    private: //Data
+        
+        TInt                                iFormBufferPos;
+        TBool                               iTargetFound;
+        TBool                               iIsAppended;
+        CBufSeg*                            iFormatBuffer;
+        TPtrC8                              iDocumentFragment;
+        CXdmXmlParser&                      iParserMain;
+        CXdmNodeAttribute*                  iTargetAttribute;
+        CXmlParserNodePath*                 iNodePath;
+        TXdmElementType                     iElementType;
+       
+    };
+
+#endif  //__XMLPARSERNODEPATH__
+
+
+// End of File