
/* declaration of XmlFunctionHandler class*/

#ifndef XML_FUNCTION_HANDLER
#define XML_FUNCTION_HANDLER

#include <string>
#include <map>
#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 "MessageFormat.h"
using namespace std;

#pragma warning(disable:4786)

class XmlFunctionHandler;

/* To implement pointer to member functions */

typedef void (XmlFunctionHandler::*endElementPtr)(const std::string&);

typedef map<char*,endElementPtr> endHandlerMap;

class XmlFunctionHandler : public DefaultHandler
{
public:

	XmlFunctionHandler();
   
	void messageid_EndHandler(const string&);
	void messagesize_EndHandler(const string&);
	void messageheader_EndHandler(const string&);
   
	void receiver_EndHandler(const string&);
	void messagetype_EndHandler(const string&);
	void messagetext_EndHandler(const string&);
	void login_EndHandler(const string&);
	void password_EndHandler(const string&);
	void messagebody_EndHandler(const string&);
   
	void MSG_EndHandler(const 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:
	MessageFormat				    m_MessageFormatObject;
    endHandlerMap					endElementHandler;
	endHandlerMap::iterator  endElementIterator;
	string m_CharData;//contains the characters between tags
	const  Locator* m_LocatorObject;
};
#endif