Remove dynamic exceptions
[anna.git] / include / anna / xml / Data.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_xml_Data_hpp
10 #define anna_xml_Data_hpp
11
12 #include <string>
13 #include <stdlib.h>
14
15 namespace anna {
16
17 namespace xml {
18
19 class Node;
20
21 /**
22    Dato generico de nodo XML.
23
24    Cada nodo XML puede tener una serie indeterminada de dato XMLs. Por ejemplo:
25
26    \code
27       <broadcast>
28          <INetAddress Address="204.152.65.15" Port="2000"/>
29          <INetAddress Address="204.152.65.47" Port="2002"/>
30       </broadcast>
31       <Indicador>
32       Es es un texto libre
33       </Indicador>
34    \endcode
35
36    Cada uno de los nodos \em INetAddress tiene dos dato XMLs (\em Address y \em Port).
37 */
38 class Data {
39 public:
40   /**
41      Devuelve el valor asociado a este dato XML.
42      \return El valor asociado a este dato XML.
43   */
44   const std::string& getValue() const { return a_value; }
45
46   /**
47      Devuelve el valor asociado a este dato XML.
48      \return El valor asociado a este dato XML.
49   */
50   const char* getCStringValue() const { return a_value.c_str(); }
51
52   /**
53      Devuelve el valor numerico asociado a este dato XML.
54      \return El valor numerico asociado a este dato XML.
55   */
56   int getIntegerValue() const { return atoi(a_value.c_str()); }
57
58   /**
59    * Establece el valor de éste dato XML.
60    * \param value Valor que tomará éste dato XML.
61    */
62   void setValue(const char* value) { a_value = (value != NULL) ? value : ""; filter(a_value); }
63
64   /**
65    * Establece el valor de éste dato XML.
66    * \param value Valor que tomará éste dato XML.
67    */
68   void setValue(const std::string& value) { a_value = value; }
69
70   /**
71    * Establece el valor de éste dato XML.
72    * \param value Valor que tomará éste dato XML.
73    */
74   void setValue(const int value) ;
75
76   /**
77      Devuelve una cadena con toda la informacion relevante de esta instancia.
78      \return Una cadena con toda la informacion relevante de esta instancia.
79   */
80   virtual std::string asString() const ;
81
82 protected:
83   /**
84    * Contructor.
85    */
86   Data() : a_owner(NULL) {;}
87
88 private:
89   std::string a_value;
90   Node* a_owner;
91
92   void setNode(Node* node) { a_owner = node; }
93
94   /**
95      Filtra la cadena recibida como parametro para asegurar que no contiene ninguna
96      expresion o caracter que pudiera causar un error al establecer el xml::Data con
97      este valor.
98      \return La instancia de la cadena una vez modificada.
99   */
100   static const std::string& filter(const std::string& str) { return str; }
101
102   friend class Node;
103 };
104
105 }
106 }
107
108 #endif