MeVisLab Toolbox Reference
mlXMLTreeNode.h
Go to the documentation of this file.
1/*************************************************************************************
2**
3** Copyright 2007, MeVis Medical Solutions AG
4**
5** The user may use this file in accordance with the license agreement provided with
6** the Software or, alternatively, in accordance with the terms contained in a
7** written agreement between the user and MeVis Medical Solutions AG.
8**
9** For further information use the contact form at https://www.mevislab.de/contact
10**
11**************************************************************************************/
12
13#ifndef ML_XMLTREE_NODE_H
14#define ML_XMLTREE_NODE_H
15
16
19
20#include "mlBase.h"
21#include "mlTreeNode.h"
22#include "../mlParserSystem.h"
23#include "mlXMLParserSystem.h"
24
25#include <mlTypeDefs.h>
26
27namespace XERCES_CPP_NAMESPACE {
28
29 class DOMElement;
30 class DOMNode;
31 class XercesDOMParser;
32}
33
34using namespace XERCES_CPP_NAMESPACE;
35
36
38
40 enum {
46
48 , TNE_XML_COUNT = static_cast<int>(TNE_XML_LAST_MESSAGE_IDX) - TNE_COUNT
49 };
50
54
55 public:
56
58 XMLTreeNodeException(int errorCode = 0, const char* msg = nullptr);
59
61
63 const char* getMessage() const override;
64
65 private:
66
67 std::string _message;
68
70 static const char* _stdErrorMsg[];
71
75
76 };
77
78
83 {
84 public:
85
87
97 XMLTreeNode(TreeNode::ConstructionMode mode = TreeNode::CM_writerRoot);
98
100
102 ~XMLTreeNode() override;
103
106
108 void writeToFile (const char* fileName) override;
109
110 public:
111 void writeToString(std::string& str) override;
113
116
118 void readFromFile (const char* fileName) override;
119
120 void readFromString(const std::string& str) override;
121
123
136
137 //virtual void addChild (bool val, const char* tagName);
138 void addChild (unsigned long val, const char* tagName) override;
139 void addChild (long val, const char* tagName) override;
140 void addChild (MLuint64 val, const char* tagName) override;
141 void addChild (MLint64 val, const char* tagName) override;
142 void addChild (long double val, const char* tagName) override;
143 void addChild (const Vector2& vec, const char* tagName) override;
144 void addChild (const Vector3& vec, const char* tagName) override;
145 void addChild (const Vector4& vec, const char* tagName) override;
146 void addChild (const Vector6& vec, const char* tagName) override;
147 void addChild (const ImageVector& vec, const char* tagName) override;
148 void addChild (const Matrix3& mat, const char* tagName) override;
149 void addChild (const Matrix4& mat, const char* tagName) override;
150 void addChild (const SubImageBox& box, const char* tagName) override;
151 void addChild (const SubImageBoxd& box, const char* tagName) override;
152
153 public:
154
155 void addChild(const std::string& str, const char* tagName) override;
156 void addChild (const void* const ptr, size_t noBytes, const char* tagName) override;
157
158
161
166 void addChild (const Base* const obj, const char* tagName, bool generic = true) override;
167
170 TreeNode* addChild ( const char* tagName) override;
171
172
174
187
192 bool hasChild (const char* tagName = nullptr) override;
193
194 //virtual void readChild (bool& val, const char* tagName = NULL);
195 void readChild (unsigned long& val, const char* tagName = nullptr) override;
196 void readChild (long& val, const char* tagName = nullptr) override;
197 void readChild (MLuint64& val, const char* tagName = nullptr) override;
198 void readChild (MLint64& val, const char* tagName = nullptr) override;
199 void readChild (long double& val, const char* tagName = nullptr) override;
200 void readChild (Vector2& val, const char* tagName = nullptr) override;
201 void readChild (Vector3& val, const char* tagName = nullptr) override;
202 void readChild (Vector4& val, const char* tagName = nullptr) override;
203 void readChild (Vector6& val, const char* tagName = nullptr) override;
204 void readChild (ImageVector& val, const char* tagName = nullptr) override;
205 void readChild (Matrix3& val, const char* tagName = nullptr) override;
206 void readChild (Matrix4& val, const char* tagName = nullptr) override;
207 void readChild (SubImageBox& val, const char* tagName = nullptr) override;
208 void readChild (SubImageBoxd& val, const char* tagName = nullptr) override;
209 void readChild (void*& ptr, unsigned long& noBytes, const char* tagName = nullptr) override;
210
213
214
215public:
216
217 void readChild(std::string& val, const char* tagName = nullptr) override;
218
222 void readChild (Base*& val, const char* tagName = nullptr) override;
223
227 void readChild (Base& val, const char* tagName = nullptr) override;
228
230 void readChild (TreeNode*& val, const char* tagName = nullptr) override;
231
232public:
233
234
236
239
241 void setVersion(const char* className, int version) override;
242
244 int getVersion(const char* /*className*/) override;
245
247
249 const char* getLastReadChildName() const override;
250
255 static char* normalizeFileName(const char* fileName);
256
259
260 static void initXMLSystem();
261 static void terminateXMLSystem();
262
264
265 protected:
266
267 //------------------------------------------------
270 //------------------------------------------------
271
275
278
281 DOMElement* _findElemByTagName(const char* tagName, DOMNode* prevNode = nullptr);
282
285
288
289 // count the number of active root instances, so we can correctly
290 // terminate the XML framework after deleting the last one
292
295
297
298 private:
300 void _initFromParser(XercesDOMParser& parser);
301
303 DOMNode* _lastNode;
304
306 DOMNode* _lastNodeRead;
307
309 mutable StringX _lastName;
310
314
315 }; // class XMLTreeNode
316
318
319#endif
320
Defines library specific stuff, mostly for system independence.
Class representing general ML objects that support import/export via strings (setPersistentState() an...
Definition mlBase.h:59
SubImageBoxd - SubImageBox with coordinates of float data type.
The class TreeNodeException is the base class for all exceptions thrown by the class TreeNode and all...
Definition mlTreeNode.h:95
The class TreeNode is the abstract base class for the import/export of ML objects.
Definition mlTreeNode.h:154
ConstructionMode
TreeNode construction modes:
Definition mlTreeNode.h:197
The XMLTreeNodeException class extends the exceptions already provided by class TreeNodeException.
XMLTreeNodeException(int errorCode=0, const char *msg=nullptr)
Constructor.
const char * getMessage() const override
Returns an error message containing error code and message (if present).
The class XMLTreeNode implements the abstract class TreeNode to allow export and import of ML objects...
void readFromString(const std::string &str) override
Reads the subtree represented by this node from a string.
void readChild(SubImageBox &val, const char *tagName=nullptr) override
void readChild(Matrix4 &val, const char *tagName=nullptr) override
static void terminateXMLSystem()
void setVersion(const char *className, int version) override
Set version for current node. className is currently not used.
void addChild(const Matrix4 &mat, const char *tagName) override
void readChild(Base *&val, const char *tagName=nullptr) override
The type of the object here is read from the XML file.
void addChild(const void *const ptr, size_t noBytes, const char *tagName) override
void readChild(Vector2 &val, const char *tagName=nullptr) override
void writeToString(std::string &str) override
Generates a string representation of the subtree represented by this node to a file.
static void initXMLSystem()
void addChild(const std::string &str, const char *tagName) override
void addChild(const SubImageBox &box, const char *tagName) override
void readChild(long double &val, const char *tagName=nullptr) override
XMLTreeNode(TreeNode::ConstructionMode mode=TreeNode::CM_writerRoot)
Constructor.
static char * _getTextNodeString(DOMElement *parentNode)
Returns the string contained by the TextNode child of parentNode.
void addChild(const Vector3 &vec, const char *tagName) override
void addChild(const Vector6 &vec, const char *tagName) override
void readChild(ImageVector &val, const char *tagName=nullptr) override
void addChild(unsigned long val, const char *tagName) override
Factory method adding a child encapsulating a variable of type long.
XMLTreeNode * _addTreeNodeChild(DOMElement *child)
Adds a new node containing the given child.
void readChild(SubImageBoxd &val, const char *tagName=nullptr) override
void readChild(unsigned long &val, const char *tagName=nullptr) override
void readChild(Vector6 &val, const char *tagName=nullptr) override
void addChild(const Vector4 &vec, const char *tagName) override
static int _numActiveRootInstances
void addChild(const SubImageBoxd &box, const char *tagName) override
void readChild(Base &val, const char *tagName=nullptr) override
Opposed to the readChild(Base*& ...) method, you have to create the object yourself BEFORE calling th...
DOMElement * _parentDOMNode
pointer to the DOM node actually wrapped by this class
void readFromFile(const char *fileName) override
Generates a tree parsing a file. Throws TNE_FileNotFound, TNE_ReadingFile, TNE_XML_ParserError.
void readChild(Vector3 &val, const char *tagName=nullptr) override
void addChild(const Vector2 &vec, const char *tagName) override
void readChild(MLint64 &val, const char *tagName=nullptr) override
void addChild(const ImageVector &vec, const char *tagName) override
void readChild(long &val, const char *tagName=nullptr) override
XMLTreeNode(DOMElement *parent)
void readChild(Matrix3 &val, const char *tagName=nullptr) override
static bool _xercesInitialized
Indicates whether the Xerces XML SubSystem is already initialized.
~XMLTreeNode() override
Destructor.
DOMElement * _findElemByTagName(const char *tagName, DOMNode *prevNode=nullptr)
Starting from the element after node (or the first element, if node is NULL), returns the first DOM e...
void readChild(Vector4 &val, const char *tagName=nullptr) override
void addChild(long double val, const char *tagName) override
Factory method adding a child encapsulating a variable of type long double.
void addChild(MLuint64 val, const char *tagName) override
Factory method adding a child encapsulating a variable of type MLuint64.
void addChild(long val, const char *tagName) override
Factory method adding a child encapsulating a variable of type long.
void addChild(const Base *const obj, const char *tagName, bool generic=true) override
Adds an child representing an object whose class is derived from base and thus implements the addStat...
void writeToFile(const char *fileName) override
Writes the complete tree to a file. Throws TNE_WritingFile.
TreeNode * addChild(const char *tagName) override
Adds a group or container node with the specified tag name.
void readChild(MLuint64 &val, const char *tagName=nullptr) override
void readChild(TreeNode *&val, const char *tagName=nullptr) override
Returns the group or container node with the specified tag name.
bool hasChild(const char *tagName=nullptr) override
returns true when a child of the given tagName exists.
const char * getLastReadChildName() const override
Returns the name of the child most recently read.
void readChild(void *&ptr, unsigned long &noBytes, const char *tagName=nullptr) override
void readChild(std::string &val, const char *tagName=nullptr) override
The string returned is allocated on the heap.
void addChild(const Matrix3 &mat, const char *tagName) override
static char * normalizeFileName(const char *fileName)
normalizes the given filename so that it can be used by Xerces to read or write a file with the given...
void addChild(MLint64 val, const char *tagName) override
Factory method adding a child encapsulating a variable of type MLint64.
int getVersion(const char *) override
Get version of current node. className is currently not used.
#define PARSER_EXPORT
Definiert systemspezifische Macros, die f"ur diese DLL gelten sollen.
Target mlrange_cast(Source arg)
Generic version of checked ML casts.
#define ML_CLASS_HEADER(className)
Same like ML_CLASS_HEADER_EXPORTED with a non existing export symbol.
UINT64 MLuint64
Introduce platform independent 64 bit unsigned integer type.
Definition mlTypeDefs.h:425
INT64 MLint64
Include 64 bit integer support for Windows or Unix.
Definition mlTypeDefs.h:412
Implement the AbstractPersistence(Input/Output)Stream classes with XML backend.
@ TNE_COUNT
Definition mlTreeNode.h:79
@ TNE_XML_Unknown
@ TNE_XML_SystemInit
@ TNE_XML_ParserError
@ TNE_XML_COUNT
@ TNE_XML_LAST_MESSAGE_IDX
Only for number calculations; do not use.
@ TNE_XML_ReadingRawDataSize
@ TNE_XML_Other