ARC SDK
EntityRetrieverPlugin.h
Go to the documentation of this file.
1 #ifndef __ARC_ENTITYRETRIEVERPLUGIN_H__
2 #define __ARC_ENTITYRETRIEVERPLUGIN_H__
3 
8 #include <list>
9 #include <map>
10 #include <set>
11 #include <string>
12 
13 #include <arc/UserConfig.h>
14 #include <arc/compute/Endpoint.h>
15 #include <arc/compute/EndpointQueryingStatus.h>
16 #include <arc/compute/ExecutionTarget.h>
17 #include <arc/loader/Loader.h>
18 #include <arc/loader/FinderLoader.h>
19 
20 namespace Arc {
21 
23 template<typename T>
25 public:
27 
32  EndpointQueryOptions(const std::set<std::string>& preferredInterfaceNames = std::set<std::string>()) : preferredInterfaceNames(preferredInterfaceNames) {}
33 
34  const std::set<std::string>& getPreferredInterfaceNames() const { return preferredInterfaceNames; }
35 private:
36  std::set<std::string> preferredInterfaceNames;
37 };
38 
40 template<>
42 public:
44 
53  EndpointQueryOptions(bool recursive = false,
54  const std::list<std::string>& capabilityFilter = std::list<std::string>(),
55  const std::list<std::string>& rejectedServices = std::list<std::string>(),
56  const std::set<std::string>& preferredInterfaceNames = std::set<std::string>() )
57  : recursive(recursive), capabilityFilter(capabilityFilter), rejectedServices(rejectedServices),
58  preferredInterfaceNames(preferredInterfaceNames) {}
59 
60  bool recursiveEnabled() const { return recursive; }
61  const std::list<std::string>& getCapabilityFilter() const { return capabilityFilter; }
62  const std::list<std::string>& getRejectedServices() const { return rejectedServices; }
63  const std::set<std::string>& getPreferredInterfaceNames() const { return preferredInterfaceNames; }
64 
65 private:
66  bool recursive;
67  std::list<std::string> capabilityFilter;
68  std::list<std::string> rejectedServices;
69  std::set<std::string> preferredInterfaceNames;
70 };
71 
76 template<typename T>
77 class EntityRetrieverPlugin : public Plugin {
78 protected:
79  EntityRetrieverPlugin(PluginArgument* parg): Plugin(parg) {};
80 public:
81  virtual const std::list<std::string>& SupportedInterfaces() const { return supportedInterfaces; };
82  virtual bool isEndpointNotSupported(const Endpoint&) const = 0;
83  virtual EndpointQueryingStatus Query(const UserConfig&, const Endpoint& rEndpoint, std::list<T>&, const EndpointQueryOptions<T>& options) const = 0;
84 
85  static const std::string kind;
86 
87 protected:
88  std::list<std::string> supportedInterfaces;
89 };
90 
95 template<typename T>
96 class EntityRetrieverPluginLoader : public Loader {
97 public:
98  EntityRetrieverPluginLoader() : Loader(BaseConfig().MakeConfig(Config()).Parent()) {}
100 
101  EntityRetrieverPlugin<T>* load(const std::string& name);
102  static std::list<std::string> getListOfPlugins();
103  const std::map<std::string, EntityRetrieverPlugin<T> *>& GetTargetInformationRetrieverPlugins() const { return plugins; }
104 
105 protected:
106  std::map<std::string, EntityRetrieverPlugin<T> *> plugins;
107 
108  static Logger logger;
109 };
110 
116 protected:
117  ServiceEndpointRetrieverPlugin(PluginArgument* parg);
118  virtual ~ServiceEndpointRetrieverPlugin() {}
119 };
120 
125 class TargetInformationRetrieverPlugin : public EntityRetrieverPlugin<ComputingServiceType> {
126 protected:
127  TargetInformationRetrieverPlugin(PluginArgument* parg);
129 };
130 
136 protected:
137  JobListRetrieverPlugin(PluginArgument* parg);
138  virtual ~JobListRetrieverPlugin() {}
139 };
140 
146 
152 
158 
159 } // namespace Arc
160 
161 #endif // __ARC_ENTITYRETRIEVERPLUGIN_H__