9 #ifndef CARMA_DBMS_SAXHANDLER_H
10 #define CARMA_DBMS_SAXHANDLER_H
13 #include <xercesc/sax/HandlerBase.hpp>
17 #include "MonitorDescription.h"
19 XERCES_CPP_NAMESPACE_USE
25 class SaxHandler :
public HandlerBase {
27 typedef enum {SUBSYSTEM, CONTAINER, POINT, SHORT, LONG, UNITS,
28 DESCRIPTION, INTEGRATE, WARNLO, WARNHI, ERRLO, ERRHI,
29 ENDELEMENT} currentElementType;
32 virtual ~SaxHandler() {};
36 void characters(
const XMLCh *
const chars,
const unsigned int length);
38 void startElement(
const XMLCh *
const elementName,
39 AttributeList &attributes);
42 void endElement(
const XMLCh *
const elementName);
47 void processContainer(
const std::string& containerType,
48 AttributeList &attributes);
60 void processEnum(
const AttributeList& attributes);
64 void warning(
const SAXParseException &ex);
65 void error(
const SAXParseException &ex);
66 void fatalError(
const SAXParseException &ex);
74 std::string getContainerName();
80 std::vector<std::string> getCombinations(
81 const std::vector<char *>& names,
82 const std::vector<unsigned>& count,
83 const std::string& prepend=
"")
87 inline std::vector<carma::dbms::MonitorDescription>
88 getMonitorDescriptions()
const {
89 return monitorDescriptions_;
92 inline std::string getAggregateSubsystemName()
const {
93 return aggregateSubsystemName_;
96 inline unsigned getAggregateSubsystemCount()
const {
97 return aggregateSubsystemCount_;
100 inline unsigned getAggregateSubsystemMaxSamples()
const {
101 return aggregateSubsystemMaxSamples_;
104 inline unsigned getAggregateSubsystemMaxPoints()
const {
105 return aggregateSubsystemMaxPoints_;
110 std::string getLocation(
const std::string& cname)
const;
111 std::string getDevice(
const std::string& cname)
const;
114 std::map<std::string, MonitorDescription*> monitorPoints_;
116 std::vector<std::string> elementStack_;
123 std::vector<char*> containerNames_;
124 std::vector<unsigned> containerCount_;
126 enum CONTAINER_TYPE {C_SUBSYSTEM, C_CONTAINER, C_DEVICE};
128 std::vector<CONTAINER_TYPE> containerTypes_;
130 std::string currentEnumerator_;
132 std::string location_;
138 std::vector<Device> devices_;
141 std::vector<MonitorDescription> currentMonitorDescriptions_;
143 std::vector<carma::dbms::MonitorDescription> monitorDescriptions_;
146 std::string aggregateSubsystemName_;
147 unsigned aggregateSubsystemCount_;
148 unsigned aggregateSubsystemMaxSamples_;
149 unsigned aggregateSubsystemMaxPoints_;
MonitorPointType
describes to what class this monitor point belongs