/* * ConstantsParser.cc * * Created on: Mar 18, 2019 * Author: AKKA */ #include "NodeCfg.hh" #include "AMDA_exception.hh" #include "ConstantsParser.hh" #include "ParserLogger.hh" #include using namespace AMDA::XMLConfigurator; namespace AMDA { namespace parser { /////////////////////////////////////////////////////////////////////////////// /* * @brief constant id node */ class ConstantNode : public NodeCfg { public: void proceed(xmlNodePtr pNode,const AMDA::Parameters::CfgContext& pContext) { std::string val; if ((pNode->children != NULL) && (pNode->children->content != NULL)) { val = std::string((char*)pNode->children->content); } //Get name xmlChar* value = xmlGetProp(pNode, (const xmlChar *) "name"); std::string name; if (value != NULL) { name = "@"; name += (char *)value; xmlFree(value); } if (!name.empty()) { std::map * pConstantsMap = pContext.get *>(); (*pConstantsMap)[name] = val; } } }; /////////////////////////////////////////////////////////////////////////////// /* * @brief constants node */ class ConstantsNode : public NodeGrpCfg { public: ConstantsNode () : NodeGrpCfg() { getChildList()["constant"] = NodeCfgSPtr(new ConstantNode); } void proceed(xmlNodePtr pNode, const AMDA::Parameters::CfgContext& pContext) { LOG4CXX_INFO(gLogger, "ConstantsNode::proceed"); // Proceed nodes NodeGrpCfg::proceed(pNode, pContext); } }; /////////////////////////////////////////////////////////////////////////////// /* * @brief constants node parser */ ConstantsParser::ConstantsParser (const char* pXSDFile) : XMLConfigurator(pXSDFile,true) { // constants root node getXmlConfiguratorMap()["constants"] = RootNodeCfgSPtr(new ConstantsNode ()); } std::map ConstantsParser::parse (const std::string& constantsFile) { LOG4CXX_INFO(gLogger, "ConstantsParser::parse parsing " << constantsFile); AMDA::Parameters::CfgContext ctx; std::map constantsMap; ctx.push *>(&constantsMap); // Check schema validity and parse xml file try { if (!XMLConfigurator::proceed(constantsFile.c_str(), ctx, true)) { return constantsMap; } } catch (...) { LOG4CXX_INFO(gLogger, "ConstantsParser::parse error while parsing file " << constantsFile); return constantsMap; } return constantsMap; } } /* namespace parser */ } /* namespace AMDA */