
/* declaration of XmlFunctionHandler class*/

#ifndef XML_FUNCTION_HANDLER
#define XML_FUNCTION_HANDLER


#include <sax2/Attributes.hpp>
#include <sax2/DefaultHandler.hpp>
#include <sax/HandlerBase.hpp>
#include <iostream>
#include <util/BinFileInputStream.hpp>
#include <sax/Locator.hpp>
#include <sax/SAXParseException.hpp>
#include <map>
//#include <stl_map.h>

#pragma warning(disable:4786)

class XmlFunctionHandler;

//using namespace std;

/* To implement pointer to member functions */

typedef void (XmlFunctionHandler::*endElementPtr)(string);

typedef map<string,endElementPtr> endElementHandlerMap;

class XmlFunctionHandler : public DefaultHandler
{
public:

   XmlFunctionHandler();
   
   void messageheader_EndHandler(string);
   void MSG_EndHandler(string);
   void messagebody_EndHandler(string);
   
   // -----------------------------------------------------------------------
   //  Handlers for the SAX ContentHandler interface
   // -----------------------------------------------------------------------
   
   void startElement(const XMLCh* const uri, const XMLCh* const localname, \
					 const XMLCh* const qname	, const Attributes& attrs);
   void characters(const XMLCh* const chars, const unsigned int length);
   void endElement ( const XMLCh *const uri, const XMLCh *const localname,const XMLCh *const qname);  
   void comment (  const XMLCh *const chars,const unsigned int length );  
   void endDocument();
   void ignorableWhitespace (  const XMLCh *const chars, \
											   const unsigned int length );
   void startEntity (  const XMLCh *const name );

   //void ignorableWhitespace(const XMLCh* const chars, const unsigned int length);
   //void resetDocument();

   
    // -----------------------------------------------------------------------
    //  Handlers for the SAX ErrorHandler interface
    // -----------------------------------------------------------------------
    void warning(const SAXParseException& exception);
    void error(const SAXParseException& exception);
    void fatalError(const SAXParseException& exception);
	void startDTD (  const XMLCh *const name,\
					 const XMLCh *const publicId,  \
									 const XMLCh *const systemId );
	void notationDecl (  const XMLCh *const name,\
										 const XMLCh *const publicId,  \
										 const XMLCh *const systemId ); 
	
	void processingInstruction (  const XMLCh *const target,  \
											      const XMLCh *const data );
	void setDocumentLocator (  const Locator *const locator );  
	void resetDocument();



private:
    endElementHandlerMap            endElementHandler;
	endElementHandlerMap::iterator  endElementIterator;
	string m_CharData;//contains the characters between tags
	const  Locator* m_LocatorObject;
};
#endif