00001
00002
00003 #ifndef __ARC_JOBSUPERVISOR_H__
00004 #define __ARC_JOBSUPERVISOR_H__
00005
00006 #include <list>
00007 #include <string>
00008
00009 #include <arc/URL.h>
00010 #include <arc/client/JobControllerPlugin.h>
00011
00012 namespace Arc {
00013
00014 class Logger;
00015 class Endpoint;
00016 class UserConfig;
00017
00019
00024 class JobSupervisor {
00025 public:
00027
00052 JobSupervisor(const UserConfig& usercfg, const std::list<Job>& jobs = std::list<Job>());
00053
00054 ~JobSupervisor() {}
00055
00057
00066 bool AddJob(const Job& job);
00067
00069
00079 std::list<Job> GetJobs(bool includeJobsWithoutStatus = true) const;
00080
00082
00088 void Update();
00089
00091
00127 bool Retrieve(const std::string& downloaddirprefix, bool usejobname, bool force, std::list<std::string>& downloaddirectories);
00128
00130
00161 bool Renew();
00162
00164
00192 bool Resume();
00193
00195
00251 bool Resubmit(int destination, const std::list<Endpoint>&, std::list<Job>& resubmittedJobs, const std::list<std::string>& = std::list<std::string>());
00252
00254
00305 bool Migrate(bool forcemigration, const std::list<Endpoint>&, std::list<Job>& migratedJobs, const std::list<std::string>& = std::list<std::string>());
00306
00308
00335 bool Cancel();
00336
00338
00350 bool Clean();
00351
00352 const std::list<Job>& GetAllJobs() const { return jobs; }
00353 std::list<Job> GetSelectedJobs() const;
00354
00355 void SelectValid();
00356 void SelectByStatus(const std::list<std::string>& status);
00357 void SelectByID(const std::list<URL>& ids);
00358
00359 void ClearSelection();
00360
00361 const std::list<URL>& GetIDsProcessed() const { return processed; }
00362 const std::list<URL>& GetIDsNotProcessed() const { return notprocessed; }
00363
00364 private:
00365 const UserConfig& usercfg;
00366
00367 std::list<Job> jobs;
00368
00369 typedef std::map<JobControllerPlugin*, std::pair< std::list<Job*>, std::list<Job*> > > JobSelectionMap;
00370 JobSelectionMap jcJobMap;
00371 std::map<std::string, JobControllerPlugin*> loadedJCs;
00372
00373 std::list<URL> processed, notprocessed;
00374
00375 JobControllerPluginLoader loader;
00376
00377 static Logger logger;
00378 };
00379
00380 }
00381
00382 #endif // __ARC_JOBSUPERVISOR_H__