/*!
\file stdLibParser.h
\brief Parses standard library xml files using xercesc
\author Martin Peters
$Date: 2010/08/11 21:06:59 $
$Revision: 1.18 $
----------------------------------------------------------------------------
MTK++ - C++ package of modeling libraries.
Copyright (C) 2005-2006 (see AUTHORS file for a list of contributors)
This file is part of MTK++.
MTK++ is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
MTK++ is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lessser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see .
----------------------------------------------------------------------------
*/
#ifndef STDLIBPARSER_H
#define STDLIBPARSER_H
#include
#include
#include
#include
#include
#include
#include
#include "baseParser.h"
#ifdef USE_QT
#include
#include
#elif defined(USE_XERCES)
#include "domErrorHandler.h"
#else // USE_TINYXML
#include
#include "tinyxml/tinyxml.h"
#endif
namespace MTKpp
{
class collection;
class stdLibrary;
class stdGroup;
class stdFrag;
struct stdAtom;
struct stdBond;
struct stdImproper;
struct stdLoop;
struct stdAlias;
struct stdRing;
struct stdFeature;
struct stdFuncGroup;
class parameters;
#ifdef USE_QT
class stdLibParser : public QObject, public baseParser
{
Q_OBJECT
#else // USE_XERCES or USE_TINYXML
class stdLibParser : public baseParser
{
#endif
public:
/*!
\brief baseParser Constructor
\param c collection pointer
\param s stdLibrary pointer
\param p parameters pointer
*/
stdLibParser(collection* c, stdLibrary* s, parameters* p);
/*!
\brief baseParser Constructor
\param s stdLibrary pointer
\param p parameters pointer
*/
stdLibParser(stdLibrary* s, parameters* p);
/*!
\brief baseParser Constructor
\param s stdLibrary pointer
*/
stdLibParser(stdLibrary* s);
//! baseParser Destructor
virtual ~stdLibParser();
/*!
\brief Read standard library xml file
\param i Standard library file
*/
void Read(std::string i);
/*!
\brief Write standard library xml file
\param i Standard library file
*/
void Write(std::string i);
/*!
\brief Write standard library xml file
\param i Standard library file
\param g group name
*/
void Write(std::string i, std::string g);
/*!
\brief Write standard library xml file
\param i Standard library file
\param g group name
\param f fragment name
*/
void Write(std::string i, std::string g, std::string f);
#ifdef USE_TINYXML
protected:
/*!
\brief Standard group writer
\param root TiXmlElement object
*/
void writeGroup(TiXmlElement* root, stdGroup* stdGp);
/*!
\brief Standard group writer
\param root TiXmlElement object
\param fragName standard fragment name
*/
void writeGroup(TiXmlElement* root, stdGroup* stdGp, std::string fragName);
/*!
\brief Standard fragment writer
\param root TiXmlElement object
\param stdFg standard fragment object
*/
void writeFrag(TiXmlElement* root, stdFrag* stdFg);
#endif // USE_TINYXML
#ifdef USE_QT
protected:
/*!
\brief Standard group reader
\param d QDomNode object
*/
void groupFiller(QDomNode d);
/*!
\brief Standard fragment reader
\param d QDomNode object
*/
void fragmentFiller(QDomNode d);
/*!
\brief Standard atom reader
\param d QDomNode object
*/
void atomFiller(QDomNode d);
/*!
\brief Standard alias reader
\param d QDomNode object
*/
void aliasFiller(QDomNode d);
/*!
\brief Standard improper reader
\param d QDomNode object
*/
void improperFiller(QDomNode d);
/*!
\brief Standard loop reader
\param d QDomNode object
*/
void loopFiller(QDomNode d);
/*!
\brief Standard ring reader
\param d QDomNode object
*/
void ringFiller(QDomNode d);
/*!
\brief Standard feature reader
\param d QDomNode object
*/
void featureFiller(QDomNode d);
/*!
\brief Standard functional group reader
\param d QDomNode object
*/
void funcGroupFiller(QDomNode d);
/*!
\brief Connection Points reader
\param d QDomNode object
*/
void connPtsFiller(QDomNode d);
/*!
\brief Connection Torsions reader
\param d QDomNode object
*/
void connTorFiller(QDomNode d);
/*!
\brief Rotatable Bond reader
\param d QDomNode object
*/
void rotBondFiller(QDomNode d);
/*!
\brief Write group
\param doc QDomDocument object
\param stdGp standard group
*/
void writeGroup(QDomDocument doc, stdGroup* stdGp);
/*!
\brief Write group
\param doc QDomDocument object
\param stdGp standard group
\param fragName standard fragment name
*/
void writeGroup(QDomDocument doc, stdGroup* stdGp, std::string fragName);
/*!
\brief Write fragment
\param doc QDomDocument object
\param groupElem dom element
\param stdFg standard fragment
*/
void writeFrag(QDomDocument doc, QDomElement groupElem, stdFrag* stdFg);
/*!
\brief Write atom
\param doc QDomDocument object
\param fragElem dom element
\param stdFg standard fragment
\param stdAt standard atom
*/
void writeAtom(QDomDocument doc, QDomElement fragElem, stdFrag* stdFg, stdAtom* stdAt);
/*!
\brief Write loop
\param doc QDomDocument object
\param fragElem dom element
\param stdLp standard loop
*/
void writeLoop(QDomDocument doc, QDomElement fragElem, stdLoop* stdLp);
/*!
\brief Write alias
\param doc QDomDocument object
\param fragElem dom element
\param stdAl standard alias
*/
void writeAlias(QDomDocument doc, QDomElement fragElem, stdAlias* stdAl);
/*!
\brief Write improper
\param doc QDomDocument object
\param fragElem dom element
\param stdIm standard improper
*/
void writeImproper(QDomDocument doc, QDomElement fragElem, stdImproper* stdIm);
/*!
\brief Write ring
\param doc QDomDocument object
\param fragElem dom element
\param stdRg standard ring
*/
void writeRing(QDomDocument doc, QDomElement fragElem, stdRing* stdRg);
/*!
\brief Write feature
\param doc QDomDocument object
\param fragElem dom element
\param stdFt standard feature
*/
void writeFeature(QDomDocument doc, QDomElement fragElem, stdFeature* stdFt);
/*!
\brief Write funcGroup
\param doc QDomDocument object
\param fragElem dom element
\param stdFg standard functional group
*/
void writeFuncGroup(QDomDocument doc, QDomElement fragElem, stdFuncGroup* stdFg);
/*!
\brief Write connection points
\param doc QDomDocument object
\param fragElem dom element
\param stdFg standard fragment
*/
void writeConnPts(QDomDocument doc, QDomElement fragElem, stdFrag* stdFg);
#endif // USE_QT
#ifdef USE_XERCES
protected:
/*!
\brief Standard library reader
\param d dom node
*/
void stdLibFiller(DOMNode* d);
/*!
\brief Standard group reader
\param d dom node
*/
void groupFiller(DOMNode* d);
/*!
\brief Standard fragment reader
\param d dom node
*/
void fragmentFiller(DOMNode* d);
/*!
\brief Standard atom reader
\param d dom node
\todo electron to kcal for MM calculations
*/
void atomFiller(DOMNode* d);
/*!
\brief Standard alias reader
\param d dom node
*/
void aliasFiller(DOMNode* d);
/*!
\brief Standard improper reader
\param d dom node
*/
void improperFiller(DOMNode* d);
/*!
\brief Standard loop reader
\param d dom node
*/
void loopFiller(DOMNode* d);
/*!
\brief Standard ring reader
\param d dom node
*/
void ringFiller(DOMNode* d);
/*!
\brief Standard feature reader
\param d dom node
*/
void featureFiller(DOMNode* d);
/*!
\brief Standard functional group reader
\param d dom node
*/
void funcGroupFiller(DOMNode* d);
/*!
\brief Connection Points reader
\param d dom node
*/
void connPtsFiller(DOMNode* d);
/*!
\brief Connection Torsions reader
\param d dom node
*/
void connTorFiller(DOMNode* d);
/*!
\brief Rotatable Bond reader
\param d dom node
*/
void rotBondFiller(DOMNode* d);
/*!
\brief Write group
\param doc dom document
\param stdGp standard group
*/
void writeGroup(XERCES_CPP_NAMESPACE::DOMDocument* doc, stdGroup* stdGp);
/*!
\brief Write group
\param doc dom document
\param stdGp standard group
\param fragName standard fragment name
*/
void writeGroup(XERCES_CPP_NAMESPACE::DOMDocument* doc, stdGroup* stdGp, std::string fragName);
/*!
\brief Write fragment
\param doc dom document
\param groupElem dom element
\param stdFg standard fragment
*/
void writeFrag(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* groupElem, stdFrag* stdFg);
/*!
\brief Write atom
\param doc dom document
\param fragElem dom element
\param stdFg standard fragment
\param stdAt standard atom
*/
void writeAtom(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* fragElem, stdFrag* stdFg, stdAtom* stdAt);
/*!
\brief Write loop
\param doc dom document
\param fragElem dom element
\param stdLp standard loop
*/
void writeLoop(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* fragElem, stdLoop* stdLp);
/*!
\brief Write alias
\param doc dom document
\param fragElem dom element
\param stdAl standard alias
*/
void writeAlias(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* fragElem, stdAlias* stdAl);
/*!
\brief Write improper
\param doc dom document
\param fragElem dom element
\param stdIm standard improper
*/
void writeImproper(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* fragElem, stdImproper* stdIm);
/*!
\brief Write ring
\param doc dom document
\param fragElem dom element
\param stdRg standard ring
*/
void writeRing(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* fragElem, stdRing* stdRg);
/*!
\brief Write feature
\param doc dom document
\param fragElem dom element
\param stdFt standard feature
*/
void writeFeature(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* fragElem, stdFeature* stdFt);
/*!
\brief Write funcGroup
\param doc dom document
\param fragElem dom element
\param stdFg standard functional group
*/
void writeFuncGroup(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* fragElem, stdFuncGroup* stdFg);
/*!
\brief Write connection points
\param doc dom document
\param fragElem dom element
\param stdFg standard fragment
*/
void writeConnPts(XERCES_CPP_NAMESPACE::DOMDocument* doc, DOMElement* fragElem, stdFrag* stdFg);
#endif // USE_XERCES
protected:
//! collection pointer
collection* pCollection;
//! stdLibrary pointer
stdLibrary* pStdLibrary;
//! parameters pointer
parameters* pParameters;
//! stdGroup pointer
stdGroup* pStdGroup;
//! stdFrag pointer
stdFrag* pStdFrag;
//! stdAtom pointer
stdAtom* pStdAtom;
//! stdBond pointer
stdBond* pStdBond;
//! stdImproper pointer
stdImproper* pStdImproper;
//! stdLoop pointer
stdLoop* pStdLoop;
//! stdAlias pointer
stdAlias* pStdAlias;
//! stdRing pointer
stdRing* pStdRing;
//! stdFeature pointer
stdFeature* pStdFeature;
//! stdFuncGroup pointer
stdFuncGroup* pStdFuncGroup;
};
} // MTKpp namespace
#endif // STDLIBPARSER_H