00001
00002
00003
00004
00005 #ifndef SAGA_PACKAGES_SD_DISCOVERER_HPP
00006
00007 #define SAGA_PACKAGES_SD_DISCOVERER_HPP
00008
00009
00010 #include <saga/saga/util.hpp>
00011 #include <saga/saga/base.hpp>
00012 #include <saga/saga/types.hpp>
00013 #include <saga/saga/session.hpp>
00014 #include <saga/saga/call.hpp>
00015 #include <saga/saga/exception.hpp>
00016 #include <saga/saga/url.hpp>
00017
00018 #include <saga/saga/packages/sd/config.hpp>
00019 #include <saga/saga/packages/sd/service_description.hpp>
00020
00021 namespace saga
00022 {
00023 namespace sd {
00024
00179 class SAGA_SD_PACKAGE_EXPORT discoverer
00180 : public saga::object
00181 {
00182
00183 public:
00184
00185 private:
00186
00187 SAGA_CALL_CREATE_PRIV_2(session const&, saga::url)
00188
00189 SAGA_CALL_PRIV_2 (list_services, std::string, std::string)
00190 SAGA_CALL_PRIV_3 (list_services, std::string, std::string, std::string)
00191
00192 protected:
00193 TR1::shared_ptr <saga::impl::discoverer> get_impl_sp (void) const;
00194 saga::impl::discoverer* get_impl (void) const;
00195 friend class saga::impl::discoverer;
00196 explicit discoverer(saga::impl::discoverer* impl)
00197 SAGA_THROW_SPEC(throw(saga::not_implemented,
00198 saga::incorrect_url,
00199 saga::does_not_exist,
00200 saga::authorization_failed,
00201 saga::authentication_failed,
00202 saga::timeout,
00203 saga::no_success));
00204
00205 public:
00239 explicit discoverer(saga::url loc = saga::url())
00240 SAGA_THROW_SPEC(throw(saga::not_implemented,
00241 saga::incorrect_url,
00242 saga::does_not_exist,
00243 saga::authorization_failed,
00244 saga::authentication_failed,
00245 saga::timeout,
00246 saga::no_success));
00247
00283 explicit discoverer(session const& s, saga::url loc = saga::url())
00284 SAGA_THROW_SPEC(throw(saga::not_implemented,
00285 saga::incorrect_url,
00286 saga::does_not_exist,
00287 saga::authorization_failed,
00288 saga::authentication_failed,
00289 saga::timeout,
00290 saga::no_success));
00291
00292
00296 ~discoverer (void) SAGA_THROW_SPEC(throw());
00297
00333 static discoverer create(session const& s, saga::url loc = saga::url())
00334 SAGA_THROW_SPEC(throw(saga::not_implemented,
00335 saga::incorrect_url,
00336 saga::does_not_exist,
00337 saga::authorization_failed,
00338 saga::authentication_failed,
00339 saga::timeout,
00340 saga::no_success))
00341 {
00342 return discoverer(s, loc);
00343 }
00344 SAGA_CALL_CREATE_2_DEF_1(session const&, saga::url, saga::url())
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379 static discoverer create(saga::url loc = saga::url())
00380 SAGA_THROW_SPEC(throw(saga::not_implemented,
00381 saga::incorrect_url,
00382 saga::not_implemented,
00383 saga::authorization_failed,
00384 saga::authentication_failed,
00385 saga::timeout,
00386 saga::no_success))
00387 {
00388 return discoverer(loc);
00389 }
00390
00391 template <typename Tag>
00392 static saga::task create(saga::url loc = saga::url())
00393 {
00394 return create<Tag>(saga::detail::get_the_session(), loc);
00395 }
00396
00397
00398 discoverer& operator= (saga::object const& o)
00399 SAGA_THROW_SPEC(throw());
00400
00401
00402
00441 std::vector<saga::sd::service_description>
00442 list_services(std::string service_filter,
00443 std::string data_filter,
00444 std::string authz_filter)
00445 SAGA_THROW_SPEC(throw(saga::bad_parameter,
00446 saga::authorization_failed,
00447 saga::authentication_failed,
00448 saga::timeout,
00449 saga::no_success))
00450 {
00451 saga::task t = list_servicespriv(service_filter,
00452 data_filter,
00453 authz_filter,
00454 saga::task_base::Sync());
00455 return t.get_result<std::vector<saga::sd::service_description> >();
00456 }
00457 SAGA_CALL_PUB_3_DEF_0 (list_services, std::string, std::string, std::string)
00458
00459
00496 std::vector<saga::sd::service_description>
00497 list_services(std::string service_filter,
00498 std::string data_filter)
00499 SAGA_THROW_SPEC(throw(saga::bad_parameter,
00500 saga::authorization_failed,
00501 saga::authentication_failed,
00502 saga::timeout,
00503 saga::no_success))
00504 {
00505 saga::task t = list_servicespriv(service_filter,
00506 data_filter,
00507 saga::task_base::Sync());
00508 return t.get_result<std::vector<saga::sd::service_description> >();
00509 }
00510 SAGA_CALL_PUB_2_DEF_0 (list_services, std::string, std::string)
00511 };
00512 }
00513 }
00514 #endif