1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
6 * Created on: Mar 14, 2014
10 #ifndef CONFIG_XMLREADER_H_
11 #define CONFIG_XMLREADER_H_
13 #include <Config_def.h>
19 //>> Forward declaration of xmlNodePtr.
20 typedef struct _xmlNode xmlNode;
21 typedef xmlNode *xmlNodePtr;
25 //>> Forward declaration of xmlDocPtr.
26 typedef struct _xmlDoc xmlDoc;
27 typedef xmlDoc *xmlDocPtr;
32 * \class Config_XMLReader
34 * \brief Base class for all libxml readers. Provides high-level API
35 * for all xml operations.
37 class Config_XMLReader
42 * \param theXmlFile - full path to the xml file which will be processed by the reader
44 CONFIG_EXPORT Config_XMLReader(const std::string& theXmlFile);
45 CONFIG_EXPORT virtual ~Config_XMLReader();
47 * Returns a path to the plugins.xml file (created from ROOT_DIR environment variable)
48 * \return string value
50 CONFIG_EXPORT static std::string pluginConfigFile();
52 * Read all nodes in associated xml file,
53 * recursively if processChildren(xmlNode) is true for the xmlNode.
54 * For each read node the processNode will be called.
56 CONFIG_EXPORT void readAll();
58 * Returns xmlNodePtr to the root of reader's document
59 * or NULL if not found
61 CONFIG_EXPORT xmlNodePtr findRoot();
63 CONFIG_EXPORT const char* encoding() const;
67 * \brief Allows to customize reader's behavior for a node. Virtual.
68 * The default implementation process "source", "validator" and
69 * "selection_filter" nodes.
71 virtual void processNode(xmlNodePtr aNode);
74 * This method gives an ability to finalize processing of a node,
75 * when reader is about to leave the node (node and all it's children are processed)
77 virtual void cleanup(xmlNodePtr aNode);
79 * \brief Defines which nodes should be processed recursively. Virtual.
80 * The default impl is to read all nodes.
82 virtual bool processChildren(xmlNodePtr aNode);
84 * Calls processNode() for each child (for some - recursively)
88 void readRecursively(xmlNodePtr theParent);
90 * \brief void* -> xmlNodePtr
92 xmlNodePtr node(void* theNode);
93 /// Gets xml node name
94 std::string getNodeName(xmlNodePtr theNode);
95 /// Stores an attribute in internal map for later use.
96 /// Key is "Node_Name:Node_Attribute" and value is getProperty(theNodeAttribute)
97 void storeAttribute(xmlNodePtr theNode, const char* theNodeAttribute, bool doClean = false);
98 /// Restores an attribute from internal map.
99 std::string restoreAttribute(xmlNodePtr theNode, const char* theNodeAttribute);
100 /// Restores an attribute from internal map.
101 std::string restoreAttribute(const char* theNodeName, const char* theNodeAttribute);
102 /// Cleanups attribute from cache
103 bool cleanupAttribute(xmlNodePtr theNode, const char* theNodeAttribute);
104 /// Cleanups attribute from cache
105 bool cleanupAttribute(const char* theNodeName, const char* theNodeAttribute);
108 std::string myDocumentPath; ///< Path to the xml document
109 xmlDocPtr myXmlDoc; ///< Root of the xml document
110 /// A map to store all parent's attributes.
111 /// The key has from "Node_Name:Node_Attribute"
112 std::map<std::string, std::string> myCachedAttributes;
115 #endif /* CONFIG_XMLREADER_H_ */