Remove dynamic exceptions
[anna.git] / include / anna / ldap / Request.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_ldap_Request_hpp
10 #define anna_ldap_Request_hpp
11
12 #include <anna/ldap/defines.hpp>
13 #include <anna/ldap/ClassCode.hpp>
14
15 namespace anna {
16
17 namespace xml {
18 class Node;
19 }
20
21 namespace ldap {
22
23 class Session;
24
25 /**
26    Prototipo de las peticiones que podemos realizar a un servidor LDAP.
27 */
28 class Request {
29 public:
30   /**
31    * Define las acciones a realizar en caso de que el temporizador de la petición expire.
32    */
33   struct OnExpiry { enum _v { Abandon, Ignore }; };
34
35   /**
36      Devuelve el tipo de la clase de esta peticion indicada en el contructor.
37      \return El tipo de la clase de esta peticion indicada en el contructor.
38   */
39   ClassCode::_v getClassCode() const { return a_classCode; }
40
41   /**
42    * Devuelve la acción a realizar en caso de que el temporizador asociado a esta petición expire.
43    * \return la acción a realizar en caso de que el temporizador asociado a esta petición expire.
44    */
45   OnExpiry::_v getOnExpiry() const { return a_onExpiry; }
46
47   /**
48    * Establece la acción a realizar en caso de que el temporizador asociado a esta petición expire.
49    * \param onExpiry Indica la acción a realizar en caso de que el temporizador asociado a esta petición expire.
50    *
51    * \warning Establecer el valor OnExpiry::Ignore podría causar pérdida de memoria y uso innecesario de recursos.
52    */
53   void setOnExpiry(const OnExpiry::_v onExpiry)  { a_onExpiry = onExpiry; }
54
55   /**
56      Devuelve una cadena con la informacion mas relevante de esta instancia.
57      \return Una cadena con la informacion mas relevante de esta instancia.
58   */
59   virtual std::string asString() const ;
60
61   /**
62      Devuelve un documento XML con la informacion mas relevante de esta instancia.
63      \param parent Nodo XML del que colgar la informacion referente a esta instancia.
64      \return Un documento XML con la informacion mas relevante de esta instancia.
65   */
66   virtual xml::Node* asXML(xml::Node* parent) const ;
67
68   /**
69      Inicializa los parametros de esta peticion.
70   */
71   virtual void clear()  = 0;
72
73   /**
74      Devuelve \em NULL si la \em std::string recibida como parametro esta vacia o el contenido de la
75      misma en otro caso.
76      \return \em NULL si la \em std::string recibida como parametro esta vacia o el contenido de la
77      misma en otro caso.
78      \warning Uso interno.
79   */
80   static const char* asCString(const std::string& value) {
81     return (value.empty() == true) ? NULL : value.c_str();
82   }
83
84   /**
85      Devuelve \em "<null>" si la std::string recibida como parametro esta vacia o el contenido de la
86      misma en otro caso.
87      \return \em "<null>" si la std::string recibida como parametro esta vacia o el contenido de la
88      misma en otro caso.
89   */
90   static const char* asText(const std::string& value) {
91     return (value.empty() == true) ? "<null>" : value.c_str();
92   }
93
94 protected:
95   /**
96      Constructor.
97      \param classCode Tipo de clase de esta peticion.
98      \param onExpiry Indica la acción a realizar si el temporizador de esta transación expira.
99   */
100   Request(const ClassCode::_v classCode, const OnExpiry::_v onExpiry) : a_classCode(classCode), a_onExpiry(onExpiry) {;}
101
102 private:
103   ClassCode::_v a_classCode;
104   OnExpiry::_v a_onExpiry;
105
106   virtual IdMessage send(Session&) const  = 0;
107
108   friend class Session;
109 };
110
111 }
112 }
113
114 #endif
115