00001 #ifndef SAGA_PACKAGES_SD_DISCOVERER_HPP
00002
00003 #define SAGA_PACKAGES_SD_DISCOVERER_HPP
00004
00005
00006 #include <saga/saga/util.hpp>
00007 #include <saga/saga/base.hpp>
00008 #include <saga/saga/types.hpp>
00009 #include <saga/saga/session.hpp>
00010 #include <saga/saga/call.hpp>
00011 #include <saga/saga/exception.hpp>
00012 #include <saga/saga/url.hpp>
00013
00014 #include <saga/saga/packages/sd/config.hpp>
00015 #include <saga/saga/packages/sd/service_description.hpp>
00016
00018 namespace saga
00019 {
00020 namespace sd {
00021
00023
00178 class SAGA_SD_PACKAGE_EXPORT discoverer
00179 : public saga::object
00180 {
00181
00182 public:
00183
00184 private:
00185
00186 SAGA_CALL_CREATE_PRIV_2(session const&, saga::url)
00187
00188 SAGA_CALL_PRIV_2 (list_services, std::string, std::string)
00189 SAGA_CALL_PRIV_3 (list_services, std::string, std::string, std::string)
00190
00191 protected:
00192 TR1::shared_ptr <saga::impl::discoverer> get_impl (void) const;
00193 friend class saga::impl::discoverer;
00194 explicit discoverer(saga::impl::discoverer* impl)
00195 SAGA_THROW_SPEC(throw(saga::not_implemented,
00196 saga::no_success));
00197
00198 public:
00212 explicit discoverer(saga::url loc = saga::url())
00213 SAGA_THROW_SPEC(throw(saga::not_implemented,
00214 saga::no_success));
00215
00231 explicit discoverer(session const& s, saga::url loc = saga::url())
00232 SAGA_THROW_SPEC(throw(saga::not_implemented,
00233 saga::no_success));
00234
00235
00239 ~discoverer (void) SAGA_THROW_SPEC(throw());
00240
00256 static discoverer create(session const& s, saga::url loc = saga::url())
00257 SAGA_THROW_SPEC(throw(saga::not_implemented,
00258 saga::no_success))
00259 {
00260 return discoverer(s, loc);
00261 }
00262 SAGA_CALL_CREATE_2_DEF_1(session const&, saga::url, saga::url())
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277 static discoverer create(saga::url loc = saga::url())
00278 SAGA_THROW_SPEC(throw(saga::not_implemented,
00279 saga::no_success))
00280 {
00281 return discoverer(loc);
00282 }
00283
00284 template <typename Tag>
00285 static saga::task create(saga::url loc = saga::url())
00286 {
00287 return create<Tag>(saga::detail::get_the_session(), loc);
00288 }
00289
00290
00291 discoverer& operator= (saga::object const& o)
00292 SAGA_THROW_SPEC(throw());
00293
00294
00295
00334 std::vector<saga::sd::service_description>
00335 list_services(std::string service_filter,
00336 std::string authz_filter,
00337 std::string data_filter)
00338 SAGA_THROW_SPEC(throw(saga::bad_parameter,
00339 saga::authorization_failed,
00340 saga::authentication_failed,
00341 saga::timeout,
00342 saga::no_success))
00343 {
00344 saga::task t = list_servicespriv(service_filter,
00345 authz_filter,
00346 data_filter,
00347 saga::task_base::Sync());
00348 return t.get_result<std::vector<saga::sd::service_description> >();
00349 }
00350 SAGA_CALL_PUB_3_DEF_0 (list_services, std::string, std::string, std::string)
00351
00352
00389 std::vector<saga::sd::service_description>
00390 list_services(std::string service_filter,
00391 std::string data_filter)
00392 SAGA_THROW_SPEC(throw(saga::bad_parameter,
00393 saga::authorization_failed,
00394 saga::authentication_failed,
00395 saga::timeout,
00396 saga::no_success))
00397 {
00398 saga::task t = list_servicespriv(service_filter,
00399 data_filter,
00400 saga::task_base::Sync());
00401 return t.get_result<std::vector<saga::sd::service_description> >();
00402 }
00403 SAGA_CALL_PUB_2_DEF_0 (list_services, std::string, std::string)
00404 };
00405 }
00406 }
00408 #endif