Back to index

nordugrid-arc-nox  1.1.0~rc6
TargetRetriever.h
Go to the documentation of this file.
00001 // -*- indent-tabs-mode: nil -*-
00002 
00003 #ifndef __ARC_TARGETRETRIEVER_H__
00004 #define __ARC_TARGETRETRIEVER_H__
00005 
00006 #include <list>
00007 #include <string>
00008 
00009 #include <arc/URL.h>
00010 #include <arc/UserConfig.h>
00011 #include <arc/loader/Loader.h>
00012 #include <arc/loader/Plugin.h>
00013 
00014 namespace Arc {
00015 
00016   class Logger;
00017   class TargetGenerator;
00018 
00020 
00025   class TargetRetriever
00026     : public Plugin {
00027   protected:
00028 
00030 
00043     TargetRetriever(const UserConfig& usercfg,
00044                     const URL& url, ServiceType st,
00045                     const std::string& flavour);
00046   public:
00047     virtual ~TargetRetriever();
00049 
00061     virtual void GetTargets(TargetGenerator& mom, int targetType,
00062                             int detailLevel) = 0;
00063   protected:
00064     const std::string flavour;
00065     const UserConfig& usercfg;
00066     const URL url;
00067     const ServiceType serviceType;
00068 
00069     static Logger logger;
00070   };
00071 
00075   class TargetRetrieverLoader
00076     : public Loader {
00077 
00078   public:
00081     TargetRetrieverLoader();
00082 
00086     ~TargetRetrieverLoader();
00087 
00094     TargetRetriever* load(const std::string& name, const UserConfig& usercfg, const URL& url, const ServiceType& st);
00095 
00098     const std::list<TargetRetriever*>& GetTargetRetrievers() const {
00099       return targetretrievers;
00100     }
00101 
00102   private:
00103     std::list<TargetRetriever*> targetretrievers;
00104   };
00105 
00106   class TargetRetrieverPluginArgument
00107     : public PluginArgument {
00108   public:
00109     TargetRetrieverPluginArgument(const UserConfig& usercfg, const URL& url, const ServiceType& st)
00110       : usercfg(usercfg), url(url), st(st) {}
00111     ~TargetRetrieverPluginArgument() {}
00112     operator const UserConfig&() {
00113       return usercfg;
00114     }
00115     operator const URL&() {
00116       return url;
00117     }
00118     operator const ServiceType&() {
00119       return st;
00120     }
00121   private:
00122     const UserConfig& usercfg;
00123     const URL& url;
00124     const ServiceType& st;
00125   };
00126 
00127 } // namespace Arc
00128 
00129 #endif // __ARC_TARGETRETRIEVER_H__