00001
00002
00003 #ifndef __ARC_JOBCONTROLLER_H__
00004 #define __ARC_JOBCONTROLLER_H__
00005
00006 #include <list>
00007 #include <vector>
00008 #include <string>
00009
00010 #include <arc/URL.h>
00011 #include <arc/client/Job.h>
00012 #include <arc/loader/Loader.h>
00013 #include <arc/loader/Plugin.h>
00014
00015 namespace Arc {
00016
00017 class Broker;
00018 class Logger;
00019 class UserConfig;
00020
00021
00022 class JobControllerPlugin
00023 : public Plugin {
00024 protected:
00025 JobControllerPlugin(const UserConfig& usercfg, PluginArgument* parg)
00026 : Plugin(parg), usercfg(usercfg) {}
00027 public:
00028 virtual ~JobControllerPlugin() {}
00029
00030 virtual void UpdateJobs(std::list<Job*>& jobs, bool isGrouped = false) const;
00031 virtual void UpdateJobs(std::list<Job*>& jobs, std::list<URL>& IDsProcessed, std::list<URL>& IDsNotProcessed, bool isGrouped = false) const = 0;
00032
00033 virtual bool CleanJobs(const std::list<Job*>& jobs, bool isGrouped = false) const;
00034 virtual bool CleanJobs(const std::list<Job*>& jobs, std::list<URL>& IDsProcessed, std::list<URL>& IDsNotProcessed, bool isGrouped = false) const = 0;
00035 virtual bool CancelJobs(const std::list<Job*>& jobs, bool isGrouped = false) const;
00036 virtual bool CancelJobs(const std::list<Job*>& jobs, std::list<URL>& IDsProcessed, std::list<URL>& IDsNotProcessed, bool isGrouped = false) const = 0;
00037 virtual bool RenewJobs(const std::list<Job*>& jobs, bool isGrouped = false) const;
00038 virtual bool RenewJobs(const std::list<Job*>& jobs, std::list<URL>& IDsProcessed, std::list<URL>& IDsNotProcessed, bool isGrouped = false) const = 0;
00039 virtual bool ResumeJobs(const std::list<Job*>& jobs, bool isGrouped = false) const;
00040 virtual bool ResumeJobs(const std::list<Job*>& jobs, std::list<URL>& IDsProcessed, std::list<URL>& IDsNotProcessed, bool isGrouped = false) const = 0;
00041
00042 virtual bool GetJobDescription(const Job& job, std::string& desc_str) const = 0;
00043 virtual bool GetURLToJobResource(const Job& job, Job::ResourceType resource, URL& url) const = 0;
00044
00045 virtual std::string GetGroupID() const { return ""; }
00046
00047 virtual const std::list<std::string>& SupportedInterfaces() const { return supportedInterfaces; };
00048
00049 protected:
00050 const UserConfig& usercfg;
00051 std::list<std::string> supportedInterfaces;
00052 static Logger logger;
00053 };
00054
00058 class JobControllerPluginLoader
00059 : public Loader {
00060
00061 public:
00064 JobControllerPluginLoader();
00065
00069 ~JobControllerPluginLoader();
00070
00075 JobControllerPlugin* load(const std::string& name, const UserConfig& uc);
00076
00077 JobControllerPlugin* loadByInterfaceName(const std::string& name, const UserConfig& uc);
00078
00079 private:
00080 void initialiseInterfacePluginMap(const UserConfig& uc);
00081
00082 std::multimap<std::string, JobControllerPlugin*> jobcontrollers;
00083 static std::map<std::string, std::string> interfacePluginMap;
00084 };
00085
00086 class JobControllerPluginPluginArgument : public PluginArgument {
00087 public:
00088 JobControllerPluginPluginArgument(const UserConfig& usercfg) : usercfg(usercfg) {}
00089 ~JobControllerPluginPluginArgument() {}
00090 operator const UserConfig&() { return usercfg; }
00091 private:
00092 const UserConfig& usercfg;
00093 };
00094
00095 }
00096
00097 #endif // __ARC_JOBCONTROLLER_H__