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_ldap_Search_hpp
10 #define anna_ldap_Search_hpp
14 #include <anna/core/util/Recycler.hpp>
16 #include <anna/ldap/defines.hpp>
17 #include <anna/ldap/Request.hpp>
18 #include <anna/ldap/Scope.hpp>
27 Modela las peticiones de busqueda realizadas contra un servidor LDAP.
29 class Search : public Request {
30 typedef Recycler<std::string> attribute_pool;
31 typedef std::vector<std::string*> attribute_container;
32 typedef attribute_container::iterator attribute_iterator;
35 typedef attribute_container::const_iterator const_attribute_iterator;
39 \param onExpiry Indica la acción a realizar si el temporizador de esta transación expira.
41 Search(const Request::OnExpiry::_v onExpiry = Request::OnExpiry::Abandon) : Request(ClassCode::Search, onExpiry) { clear(); }
44 Devuelve el DN de la entrada en la que se comienza la busqueda.
45 \return El DN de la entrada en la que se comienza la busqueda.
47 const std::string& getBase() const throw() { return a_base; }
50 Devuelve el ambito de la busqueda.
51 \return El ambito de la busqueda.
53 Scope::_v getScope() const throw() { return a_scope; }
56 Devuelve el filtro aplicado a la busqueda.
57 \return El filtro aplicado a la busqueda.
59 const std::string& getFilter() const throw() { return a_filter; }
62 Devuelve el indicador de tratamiento de busquedas.
63 \return El indicador de tratamiento de busquedas.
65 bool getOnlyType() const throw() { return a_onlyType; }
68 Devuelve el numero maximo de elementos devueltos como resultado de la consulta.
69 \return El numero maximo de elementos devueltos como resultado de la consulta.
72 int getSizeLimit() const throw() { return a_sizeLimit; }
75 Establece el DN de la entrada en la que comenzar la busqueda.
76 \param base DN de la entrada en la que comenzar la busqueda.
78 void setBase(const std::string& base) throw() { a_base = base; }
81 Establece el ambito de la busqueda.
82 \param scope Ambito de la busqueda.
84 void setScope(const Scope::_v scope) throw() { a_scope = scope; }
87 Establece el ambito de la busqueda.
88 \param scope Texto que identifica el ambito de la busqueda. Si no se trata de un texto
89 reconocido se devolvera una excepcion.
91 void setScope(const char* scope) throw(RuntimeException) { a_scope = Scope::asEnumEx(scope); }
94 Establece el filtro aplicado a la busqueda.
95 \param filter Filtro aplicado a la busqueda.
98 void setFilter(const std::string& filter) throw() { a_filter = filter; }
101 Determina como se van a tratar los atributos.
102 \param onlyType Un valor \em true indica que solo se requieren los tipos de atributos, un valor
103 \em false indica que se requieren tipos y valores asociados a los atributos.
105 void setOnlyType(const bool onlyType) throw() { a_onlyType = onlyType; }
108 Establece el numero maximo de elementos devueltos como resultado de la consulta.
109 \param sizeLimit Numero de entradas retornadas por la busqueda.
112 void setSizeLimit(const int sizeLimit) throw() { a_sizeLimit = sizeLimit; }
115 Elimina el filtro asociado a esta consulta.
117 void clearFilter() throw() { a_filter.clear(); }
120 Elimina el limite en cuanto al numero de elementos indicados en la consulta.
122 void clearSizeLimit() throw() { a_sizeLimit = 0; }
125 * Elimina los atributos asociados a esta consulta.
127 void clearAttributes() throw();
130 Incorpora un elemento a la lista de atributos que deseamos obtener de cada una de las entradas
131 que cumplen el filtro establecido.
132 Si esta lista esta vacia se devolvera la informacion de todos los atributos implicados.
134 void addAttribute(const std::string& attribute) throw() {
135 std::string* newString = st_attributes.create();
136 *newString = attribute;
137 a_attributes.push_back(newString);
141 Inicializa el contenido de esta clase.
143 void clear() throw();
146 Devuelve un iterador que apunta el primer atributo contenido en la consulta.
147 \return un iterador que apunta el primer atributo contenido en la consulta.
149 const_attribute_iterator attribute_begin() const throw() { return a_attributes.begin(); }
152 Devuelve un iterador que apunta el ultimo atributo contenido en la consulta.
153 \return un iterador que apunta el ultimo atributo contenido en la consulta.
155 const_attribute_iterator attribute_end() const throw() { return a_attributes.end(); }
158 Devuelve el numero de atributos contenidos en la consulta.
159 \return El numero de atributos contenidos en la consulta.
161 int attribute_size() const throw() { return a_attributes.size(); }
164 Devuelve el atributo apuntado por el iterador recibido.
165 \param ii Iterador con el que estamos recorriendo los atributos.
166 \return El atributo apuntado por el iterador recibido.
168 static const std::string& attribute(const_attribute_iterator ii) throw() { return **ii; }
171 Devuelve una cadena con la informacion referente a este objeto.
172 \return Una cadena con la informacion referente a este objeto.
174 virtual std::string asString() const throw();
177 Devuelve un nodo XML con la informacion referente a este objeto.
178 \param parent Nodo XML a partir del cual introducir la informacion.
179 \return Un nodo XML con la informacion referente a este objeto.
181 virtual xml::Node* asXML(xml::Node* parent) const throw();
186 std::string a_filter;
189 attribute_container a_attributes;
191 static attribute_pool st_attributes;
193 attribute_iterator attribute_begin() throw() { return a_attributes.begin(); }
194 attribute_iterator attribute_end() throw() { return a_attributes.end(); }
195 int attribute_size() throw() { return a_attributes.size(); }
196 static std::string& attribute(attribute_iterator ii) throw() { return **ii; }
198 IdMessage send(Session&) const throw();