#include "XmlFunctionHandler.h"

XmlFunctionHandler::XmlFunctionHandler()
{
	endElementHandler.insert(endElementHandlerMap::value_type("MSG",
                                       &XmlFunctionHandler::MSG_EndHandler));

    endElementHandler.insert(endElementHandlerMap::value_type("messagebody",
                                       &XmlFunctionHandler::messagebody_EndHandler));

    endElementHandler.insert(endElementHandlerMap::value_type("messageheader",
                                       &XmlFunctionHandler::messageheader_EndHandler));
}

void messageheader_EndHandler(string strCharData)
{
	cout<<strCharData.c_str()<<endl;
}

void MSG_EndHandler(string strCharData)
{
	cout<<strCharData.c_str()<<endl;
}

void messagebody_EndHandler(string strCharData)
{
	cout<<strCharData.c_str()<<endl;
}


void XmlFunctionHandler::startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs)
{
	//cout<<"<"<<XMLString::transcode(localname)<<">"<<endl;	
}

void XmlFunctionHandler::characters(const XMLCh* const chars, const unsigned int length)
{
	cout<<XMLString::transcode(chars)<<endl;
	//m_CharData = XMLString::transcode(chars);
}

void XmlFunctionHandler::endElement ( const XMLCh *const uri, \
									 const XMLCh *const localname,const XMLCh *const qname)  
{
	string strName = XMLString::transcode(localname);
 if ( (endElementIterator = endElementHandler.find(strName)) != endElementHandler.end()) {
      (this->*endElementHandler[strName]) (m_CharData); 
   }
}

void XmlFunctionHandler::comment (  const XMLCh *const chars, \
 const unsigned int length )  
{
	cout<<"comment handler"<<XMLString::transcode(chars)<<endl;
}

void XmlFunctionHandler::endDocument()
{
	cout<<"End Of Document"<<endl;
}

void XmlFunctionHandler::ignorableWhitespace (  const XMLCh *const chars, \
 const unsigned int length )  
{
	cout<<"WhiteSPace"<<XMLString::transcode(chars)<<endl;
}

void XmlFunctionHandler::startEntity (  const XMLCh *const name )
{
	cout<<"Starting Entity.........."<<XMLString::transcode(name)<<endl;
}
  
void XmlFunctionHandler::startDTD (  const XMLCh *const name,\
									 const XMLCh *const publicId,  \
									 const XMLCh *const systemId )  \
{
	cout<<"Starting DTD.........."<<XMLString::transcode(name)<<endl;
}

void XmlFunctionHandler::notationDecl (  const XMLCh *const name,\
										 const XMLCh *const publicId,  \
										 const XMLCh *const systemId )
{
	cout<<"Starting notationDecl.........."<<XMLString::transcode(name)<<endl;
}

void XmlFunctionHandler::processingInstruction (  const XMLCh *const target,  \
											  const XMLCh *const data )
{
	cout<<"Starting processingInstructions.........."<<XMLString::transcode(data)<<endl;
}

void XmlFunctionHandler::setDocumentLocator (  const Locator *const locator)
{
	cout<<"locator processed"<<endl;
	m_LocatorObject=locator;
}

void XmlFunctionHandler::resetDocument()
{
	cout<<"document reseted"<<endl;
}

// ---------------------------------------------------------------------------
//  MemParseHandlers: Overrides of the SAX ErrorHandler interface
// ---------------------------------------------------------------------------
void XmlFunctionHandler::error(const SAXParseException& e)
{
    cout << "\nError at (file " << XMLString::transcode(e.getSystemId())
		 << ", line " << e.getLineNumber()
		 << ", char " << e.getColumnNumber()
         << "): " << XMLString::transcode(e.getMessage()) << endl;
}

void XmlFunctionHandler::fatalError(const SAXParseException& e)
{
    cout << "\nFatal Error at (file " << XMLString::transcode(e.getSystemId())
		 << ", line " << e.getLineNumber()
		 << ", char " << e.getColumnNumber()
         << "): " << XMLString::transcode(e.getMessage()) << endl;
}

void XmlFunctionHandler::warning(const SAXParseException& e)
{
    cerr << "\nWarning at (file " << XMLString::transcode(e.getSystemId())
		 << ", line " << e.getLineNumber()
		 << ", char " << e.getColumnNumber()
         << "): " << XMLString::transcode(e.getMessage())<< endl;
}