1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
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 //
9 #ifndef anna_core_util_Configuration_hpp
10 #define anna_core_util_Configuration_hpp
18 #include <anna/core/functions.hpp>
19 #include <anna/core/util/Variable.hpp>
20 #include <anna/core/RuntimeException.hpp>
25 Clase para recoger parametros de un determinado archivo de configuracion.
29 static const char* defaultSection;
39 ~Configuration() { removeAll(); }
42 Carga en memoria el archivo indicado como argumento.
44 @param configFile Ruta completa con el nombre del archivo de configuracion a cargar.
45 Cualquier otro archivo procesado anteriormente con esta instancia se perdera.
47 void load(const char* configFile) throw(RuntimeException);
50 Establece el valor por defecto para una determinada variable, es decir, en caso de que
51 la variable no exista en el fichero de configuracion cargado (ver #load) devolvera
52 el valor establecido mediante este metodo.
54 @param sectionName Nombre de la seccion a la que pertenece la variable.
55 @param variableName Nombre de la variable de configuracion.
56 @param defaultValue Valor por defecto de la variable. Éste valor solo sera devuelto en caso
57 de que la variable indicada por la seccion y el nombre de variable no este contenido en
58 el archivo de configuracion cargado.
60 void setDefaultValue(const char* sectionName, const char* variableName, const char* defaultValue)
61 throw(RuntimeException);
64 Devuelve el valor asociada a la variable indicada.
66 @param sectionName Nombre de la seccion a la que pertenece la variable.
67 @param variableName Nombre de la variable de configuracion.
68 @param strict Si es true indica que debe devolver el valor estricto de la variable, de forma,
69 que si esta variable no esta contenida en el archivo de configuracion aun habiendo asociado
70 un valor por defecto (ver #setDefaultValue) devolvera NULL.
72 @return El valor asociado a la variable. Puede ser NULL.
74 const char* getValue(const char* sectionName, const char* variableName, const bool strict = false) const
75 throw(RuntimeException);
78 Devuelve el valor asociada a la variable indicada.
79 @param sectionName Nombre de la seccion a la que pertenece la variable.
80 @param variableName Nombre de la variable de configuracion.
81 @param strict Si es true indica que debe devolver el valor estricto de la variable, de forma,
82 que si esta variable no esta contenida en el archivo de configuracion aun habiendo asociado
83 un valor por defecto (ver #setDefaultValue) devolvera NULL.
85 @return El valor asociado a la variable.
87 int getIntegerValue(const char* sectionName, const char* variableName, const bool strict = false) const
88 throw(RuntimeException);
91 Devuelve el estado de existencia o no de la variable indicada.
92 @param sectionName Nombre de la seccion a la que pertenece la variable.
93 @param variableName Nombre de la variable de configuracion.
95 @return true si la variable existe, y false en otro caso. Solo deberia invocarse despues de
96 invocar al metodo #load.
98 bool exists(const char* sectionName, const char* variableName) const throw();
101 Devuelve la cadena por la que podemos buscar el componente.
102 \return La cadena por la que podemos buscar el componente.
103 \see Application::find
105 static const char* getClassName() { return "anna::Configuration"; }
108 class VariableEx : public Variable {
110 typedef std::vector <VariableEx*> Vector;
112 VariableEx(const char* variableName) :
113 Variable(variableName, Variable::Type::String),
114 a_defaultValue(NULL) {}
116 void setDefaultValue(const char* defaultValue) { a_defaultValue = defaultValue; }
118 const char* getDefaultValue() const { return a_defaultValue; }
121 const char* a_defaultValue;
124 std::map <std::string, VariableEx::Vector*> a_sections;
126 Configuration(const Configuration& other); // No implementado
128 void initialize() throw(RuntimeException) {;}
129 void stop() throw() {;}
131 void removeAll() throw();
132 bool processSection(const int nline, char* buffer, std::string& currentSection);
133 void processVariable(const int nline, char* buffer, const std::string& currentSection) throw(RuntimeException);
134 VariableEx* createVariable(const std::string& section, const char* variableName) throw();
135 VariableEx* find(const std::string& section, const char* variableName) throw();
136 const VariableEx* find(const std::string& section, const char* variableName) const
138 return const_cast <Configuration*>(this)->find(section, variableName);
141 static char* strip(char* buffer);