
#ifndef _SPS_XMLPARSER_HXX
#define _SPS_XMLPARSER_HXX

//System Includes
#include <iostream>

#ifdef SPS_FEDORA3
#include <xalanc/Include/PlatformDefinitions.hpp>
#endif

#ifndef SPS_FEDORA3
#include <Include/PlatformDefinitions.hpp>
#endif

#include <cassert>
#if defined(XALAN_OLD_STREAM_HEADERS)
#include <iostream.h>
#else
#include <iostream>
#endif
#include <util/PlatformUtils.hpp>
#include <framework/LocalFileInputSource.hpp>

#ifndef SPS_FEDORA3
#include <XalanDOM/XalanDocument.hpp>
#include <XalanDOM/XalanElement.hpp>

#include <XPath/XObject.hpp>
#include <XPath/XPathEvaluator.hpp>

#include <XalanSourceTree/XalanSourceTreeDOMSupport.hpp>
#include <XalanSourceTree/XalanSourceTreeInit.hpp>
#include <XalanSourceTree/XalanSourceTreeParserLiaison.hpp>
#endif
#ifdef SPS_FEDORA3
#include <xalanc/XalanDOM/XalanDocument.hpp>
#include <xalanc/XalanDOM/XalanElement.hpp>

#include <xalanc/XPath/XObject.hpp>
#include <xalanc/XPath/XPathEvaluator.hpp>

#include <xalanc/XalanSourceTree/XalanSourceTreeDOMSupport.hpp>
#include <xalanc/XalanSourceTree/XalanSourceTreeInit.hpp>
#include <xalanc/XalanSourceTree/XalanSourceTreeParserLiaison.hpp>
#endif
#include <framework/MemBufInputSource.hpp>
#include <sax/InputSource.hpp>

//Project Includes
#include "spsDefs.hxx"
#include "pthread.h"

using namespace std;
#ifdef SPS_FEDORA3
    XALAN_USING_XALAN(XalanDocument)
    XALAN_USING_XALAN(XPathEvaluator)
    XALAN_USING_XERCES(XMLPlatformUtils)
    XALAN_USING_XERCES(MemBufInputSource)
    XALAN_USING_XALAN(XalanDOMString)
    XALAN_USING_XALAN(XalanNode)
    XALAN_USING_XALAN(XalanSourceTreeInit)
    XALAN_USING_XALAN(XalanSourceTreeDOMSupport)
    XALAN_USING_XALAN(XalanSourceTreeParserLiaison)
    XALAN_USING_XALAN(XObjectPtr)
    XALAN_USING_XALAN(NodeRefList)
    XALAN_USING_XERCES(LocalFileInputSource)
#endif
//XMLParser Class
class XMLParser {
public:

    /*****************
    ** Life Cycle
    *****************/
    XMLParser();
    XMLParser(const SPS_CHAR* lpEventRoot, const SPS_CHAR* lpXmlEvent, SPS_UINT2 iIsFile);
    virtual ~XMLParser();

    /*****************
    ** Operations
    *****************/

    //Creates and starts the threads for an object
    SPS_CHAR* queryValue(SPS_CHAR* lpXPath);

    static void initXMLLibs();
    static void termXMLLibs();

    static const SPS_UINT2 SPS_XML_EVENT = 0;
    static const SPS_UINT2 SPS_XML_FILE = 1;
protected:

private:

    XalanSourceTreeDOMSupport	mTheDOMSupport;
    XalanSourceTreeParserLiaison* mpTheLiaison;
    XalanDocument* mpTheDocumentPtr;
    SPS_CHAR* mlpEventRoot;

};
#endif
