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_http_wims20_ClientSide_hpp
10 #define anna_http_wims20_ClientSide_hpp
12 #include <anna/core/functions.hpp>
14 #include <anna/http/wims20/Abstract.hpp>
25 Permite interpretar una URI según las recomendaciones de WIMS 2.0, lo que facilita
26 el desarrollo de aplicaciones integradas en Web 2.0; estas recomendaciones indican
27 cómo debe formarse la petición ClientSide (REpresentational State Transfer) para permitir
28 el desarrollo de cualquier servicio.
30 Implementa el interfaz WIMS 2.0 desde el punto de vista del proceso que genera la petición.
32 El formato general de una URI según la recomendación de WIMS 2.0 es:
35 http://domain-openapis/path-openapis/serviceID/guid/other_possible_levels?query_parameters
38 Dónde los campos tienen siguen la siguiente especificación:
39 \li http://domain-openapis: Identifica el recurso del Open API.
40 \li path-openapis: Recurso opcional que ajusta la ruta hacia los recursos de éste API.
41 \li serviceID: Identificador de recurso.
42 \li guid: Identificador del usuario que solicita la petición.
43 \li other_possible_level: Opcionalmente se pueden indicar tantos niveles jerárquicos como fuera
44 necesario para el servicio.
45 \li query_parameters: Lista de parámetros. Si hay más de un parámetro se separará con '&'.
47 class ClientSide : public Abstract {
50 * Contructor indicando el parámetro opcional \em path-openapis. Estos dos parámetros se obtendrá como
51 * parte de la configuración de nuestro sistema.
52 * \param domain: Identifica el recurso del OpenAPI.
53 * \param path: Parámetro opcional que ajusta la ruta hacia los recusos de éste API.
55 ClientSide(const std::string& domain, const std::string& path) :
56 Abstract("ClientSide", domain, path) {
57 a_strOtherLevels = NULL;
61 * Constructor que no usará el parámetro opcional \em path-openapis. Este parámetro se obtendrá como
62 * parte de la configuración de nuestro sistema.
63 * \param domain: Identifica el recurso del OpenAPI.
65 explicit ClientSide(const std::string& domain) :
66 Abstract("ClientSide", domain) {
67 a_strOtherLevels = NULL;
73 ~ClientSide() { Abstract::destroyString(a_strOtherLevels); }
76 * Amplía el campo \em other_possible_level con el valor recibido.
77 * \param otherLevel Valor con el que ampliar la ruta.
79 void addOtherLevel(const std::string& otherLevel) throw(RuntimeException);
82 * Amplía el campo \em other_possible_level con el valor recibido.
83 * \param otherLevel Valor con el que ampliar la ruta.
85 void addOtherLevel(const char* otherLevel) throw(RuntimeException) {
86 std::string aux(otherLevel);
91 * Establece el valor del parámetro indicado como parámetro. Si el parámetro indicado ya
92 * existe en la lista de parámetros registrados su valor se sobreescribe.
93 * \param parameter Nombre del parámetro a establecer.
94 * \param value Valor asociado al parámetro.
96 void setParameter(const char* parameter, const char* value) throw(RuntimeException) {
97 std::string p(parameter);
99 Abstract::parameter_set(p, v);
103 * Establece el valor del parámetro indicado como parámetro. Si el parámetro indicado ya
104 * existe en la lista de parámetros registrados su valor se sobreescribe.
105 * \param parameter Nombre del parámetro a establecer.
106 * \param value Valor asociado al parámetro.
108 void setParameter(const char* parameter, const int value) throw(RuntimeException) {
109 std::string p(parameter);
110 Abstract::parameter_set(p, anna::functions::asString(value));
114 * Establece el valor del parámetro indicado como parámetro. Si el parámetro indicado ya
115 * existe en la lista de parámetros registrados su valor se sobreescribe.
116 * \param parameter Nombre del parámetro a establecer.
117 * \param value Valor asociado al parámetro.
119 void setParameter(const std::string& parameter, const std::string& value) throw(RuntimeException) {
120 Abstract::parameter_set(parameter, value);
124 * Establece el valor del parámetro indicado como parámetro. Si el parámetro indicado ya
125 * existe en la lista de parámetros registrados su valor se sobreescribe.
126 * \param parameter Nombre del parámetro a establecer.
127 * \param value Valor asociado al parámetro.
129 void setParameter(const std::string& parameter, const int value) throw(RuntimeException) {
130 Abstract::parameter_set(parameter, anna::functions::asString(value));
134 * Limpia el contenido asociado al parámetro \em other_possible_level. Sólo debería
135 * invocarse a este método en caso de que el servicio destino de la petición haya cambiado.
137 void clearOtherLevels() throw() {
138 Abstract::clearOtherLevels();
139 Abstract::destroyString(a_strOtherLevels);
140 a_strOtherLevels = NULL;
144 * Recopila la información contenida en la petición REST de WIMS2.0 y la
145 * codifica sobre la URI de la petición HTTP recibida como parámetro.
146 * \param message Mensaje HTTP sobre el que se establecerá la URI necesaria para
147 * realizar la peticion WIMS 2.0.
149 void codeOn(http::Request& message) throw(RuntimeException);
152 std::string* a_strOtherLevels;