6fc59305805b58d8895bc87a2b26ce9a08df7406
[anna.git] / include / anna / xml / Attribute.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_Attribute_hpp
10 #define anna_xml_Attribute_hpp
11
12 #include <anna/core/Allocator.hpp>
13 #include <anna/xml/Data.hpp>
14
15 namespace anna {
16
17 namespace xml {
18
19 class Namespace;
20
21 /**
22    Atributo de nodo XML.
23
24    Cada nodo XML puede tener una serie indeterminada de atributos. 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    \endcode
32
33    Cada uno de los nodos \em INetAddress tiene dos atributos (\em Address y \em Port).
34 */
35 class Attribute : public Data {
36 public:
37   /**
38      Devuelve el nombre de este atributo.
39      \return Nombre de este atributo.
40   */
41   const char* getName() const throw() { return a_name.c_str(); }
42
43   /**
44    * Devuelve el namespace asociado a este atributo. Puede ser NULL.
45    * \return el namespace asociado a este atributo. Puede ser NULL.
46    */
47   const Namespace* getNamespace() const throw() { return a_namespace; }
48
49   /**
50    * Devuelve el nombre del nodo.
51    * \return El nombre del nodo.
52    */
53   const std::string& getNameAsString() const throw() { return a_name; }
54
55   /**
56      Devuelve una cadena con toda la informacion relevante de esta instancia.
57      \return Una cadena con toda la informacion relevante de esta instancia.
58   */
59   std::string asString() const throw();
60
61 private:
62   std::string a_name;
63   const Namespace* a_namespace;
64
65   /* Para evitar que se pueda crear desde el exterior */
66   Attribute() : Data(), a_namespace(NULL) {;}
67
68   void setName(const char* name) throw() { a_name = name; }
69   void setNamespace(const Namespace* _namespace) throw() { a_namespace = _namespace; }
70
71   friend class Node;
72   friend class Allocator<Attribute>;
73 };
74
75 }
76 }
77
78 #endif