CGMES_3_0_0
Loading...
Searching...
No Matches
CIMContentHandler.hpp
1#ifndef CIMCONTENTHANDLER_HPP
2#define CIMCONTENTHANDLER_HPP
3
4#include <SAX/ContentHandler.hpp>
5
6#include <deque>
7#include <stack>
8#include <string>
9#include <unordered_map>
10#include <vector>
11
12#include "BaseClass.hpp"
13#include "Task.hpp"
14
15class CIMContentHandler : public Arabica::SAX::ContentHandler<std::string>
16{
17public:
18 CIMContentHandler();
19 ~CIMContentHandler();
20
21 std::vector<BaseClass*> *Objects;
22 std::unordered_map<std::string, BaseClass*> *RDFMap;
23 void setObjectsContainer(std::vector<BaseClass*> *Objects);
24 void setRDFMap(std::unordered_map<std::string, BaseClass*> *RDFMap);
25
26 void checkStacksEmpty(); //Check if tagStack or ObjectStack is empty, throw CriticalError if true
27
28 bool resolveRDFRelations(); // AKA work through task queue
29
30protected:
31 void setDocumentLocator(const LocatorT &locator) override;
32 void startDocument() override;
33 void endDocument() override;
34 void startPrefixMapping(const std::string &prefix, const std::string &uri) override;
35 void endPrefixMapping(const std::string &prefix) override;
36 void startElement(const std::string &namespaceURI, const std::string &localName, const std::string &qName, const AttributesT &atts) override;
37 void endElement(const std::string &namespaceURI, const std::string &localName, const std::string &qName) override;
38 void characters(const std::string &ch) override;
39 void ignorableWhitespace(const std::string &ch) override;
40 void processingInstruction(const std::string &target, const std::string &data) override;
41 void skippedEntity(const std::string &name) override;
42
43 static std::string get_rdf_id(const AttributesT &properties);
44 static std::string get_rdf_resource(const AttributesT &properties);
45 static std::string get_rdf_enum(const AttributesT &properties);
46 static bool is_only_whitespace(const std::string &characters);
47
48private:
49 std::stack<BaseClass*> objectStack;
50 std::stack<std::string> tagStack;
51 std::deque<Task> taskQueue;
52 std::string value;
53 std::string RDF;
54 std::string MD;
55 BaseClass* retypeObject(BaseClass* oldObject_ptr, const std::string& className, const std::string& rdfid);
56};
57
58
59
60#endif // CIMCONTENTHANDLER_HPP
Definition BaseClass.hpp:22