#ifndef LIBRARYPARSER_H_
#define LIBRARYPARSER_H_

#include <string>
#include <sstream>
#include <map>
#include <list>
#include "NodeLinkLibrary.h"
#include "Factory.h"
#include "tinyxml.h"

using namespace std;

namespace cosi {

class LibraryParser {
public:

	LibraryParser(string pFname);
	virtual ~LibraryParser();
	void Parse();
	void Parse(TiXmlNode* pParent);
	NodeLinkLibrary* GetLibrary();

private:

	void ParseDocument(TiXmlNode* pParent);

	// <Library>
	void ParseLibrary(TiXmlNode* pParent);
	void GetLibraryAttributes(TiXmlNode* pParent);

	// <Node>
	void ParseNode(TiXmlNode* pParent);
	void GetNodeAttributes(TiXmlNode* pParent);

	// <Interface>
	void ParseInterface(TiXmlNode* pParent);
	void GetInterfaceAttributes(TiXmlNode* pParent);

	// <Link>
	void ParseLink(TiXmlNode* pParent);
	void GetLinkAttributes(TiXmlNode* pParent);

	//<Source>
	void ParseLinkSource(TiXmlNode* pParent);
	void GetLinkSourceAttributes(TiXmlNode* pParent);

	//<Dest>
	void ParseLinkDest(TiXmlNode* pParent);
	void GetLinkDestAttributes(TiXmlNode* pParent);

	// <BiLink>
	void ParseBiLink(TiXmlNode* pParent);
	void GetBiLinkAttributes(TiXmlNode* pParent);

	string mFname;
	string mName;
	NodeLinkLibrary* mLib;
	Node mCurrentNode;
	Link mCurrentLink;
	BiLink mCurrentBiLink;
	string mCurrentDirection;

};

}

#endif /*LIBRARYPARSER_H_*/
