00001 #ifndef __ARC_COMPUTINGSERVICERETRIEVER_H__
00002 #define __ARC_COMPUTINGSERVICERETRIEVER_H__
00003
00004 #include <list>
00005 #include <string>
00006
00007 #include <arc/UserConfig.h>
00008 #include <arc/client/Endpoint.h>
00009 #include <arc/client/EntityRetriever.h>
00010 #include <arc/client/ExecutionTarget.h>
00011
00012 namespace Arc {
00013
00014 class ComputingServiceRetriever : public EntityConsumer<Endpoint>, public EntityContainer<ComputingServiceType> {
00015 public:
00016 ComputingServiceRetriever(
00017 const UserConfig& uc,
00018 const std::list<Endpoint>& services = std::list<Endpoint>(),
00019 const std::list<std::string>& rejectedServices = std::list<std::string>(),
00020 const std::list<std::string>& preferredInterfaceNames = std::list<std::string>(),
00021 const std::list<std::string>& capabilityFilter = std::list<std::string>(1, Endpoint::GetStringForCapability(Arc::Endpoint::COMPUTINGINFO))
00022 );
00023
00024 void wait() { ser.wait(); tir.wait(); }
00025
00026 void addEndpoint(const Endpoint& service);
00027 void addEntity(const Endpoint& service) { addEndpoint(service); }
00028
00029 void addConsumer(EntityConsumer<ComputingServiceType>& c) { tir.addConsumer(c); };
00030 void removeConsumer(const EntityConsumer<ComputingServiceType>& c) { tir.removeConsumer(c); }
00031
00032 void GetExecutionTargets(std::list<ExecutionTarget>& etList) {
00033 ExecutionTarget::GetExecutionTargets(*this, etList);
00034 }
00035
00036 private:
00037 ServiceEndpointRetriever ser;
00038 TargetInformationRetriever tir;
00039 };
00040
00041 }
00042
00043 #endif // __ARC_COMPUTINGSERVICERETRIEVER_H__