00001
00002
00003 #ifndef __ARC_SUBMITTER_H__
00004 #define __ARC_SUBMITTER_H__
00005
00006 #include <arc/UserConfig.h>
00007
00008 #include <arc/client/Endpoint.h>
00009 #include <arc/client/JobDescription.h>
00010 #include <arc/client/Job.h>
00011 #include <arc/client/SubmitterPlugin.h>
00012 #include <arc/client/ExecutionTarget.h>
00013 #include <arc/client/EntityRetriever.h>
00014
00015
00016 namespace Arc {
00017
00018 class Submitter {
00019 public:
00020 Submitter(const UserConfig& uc) : uc(uc) {}
00021 ~Submitter() {}
00022
00023
00024 void addConsumer(EntityConsumer<Job>& jc) { consumers.push_back(&jc); }
00025 void removeConsumer(EntityConsumer<Job>& jc);
00026
00027
00028
00029
00030
00031 bool Submit(const ExecutionTarget& et, const JobDescription& desc) { return Submit(et, std::list<JobDescription>(1, desc)); }
00032 bool Submit(const ExecutionTarget& et, const JobDescription& desc, Job& job);
00033
00034
00035 bool Submit(const ExecutionTarget& et, const std::list<JobDescription>& descs);
00036 bool Submit(const ExecutionTarget& et, const std::list<JobDescription>& descs, std::list<Job>& jobs);
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 const std::list<const JobDescription*>& GetDescriptionsNotSubmitted() const { return notsubmitted; }
00058 void ClearNotSubmittedDescriptions() { notsubmitted.clear(); }
00059
00060
00061 private:
00062 class ConsumerWrapper : public EntityConsumer<Job> {
00063 public:
00064 ConsumerWrapper(Submitter& s) : s(s) {}
00065 void addEntity(const Job& j) {
00066 for (std::list<EntityConsumer<Job>*>::iterator it = s.consumers.begin(); it != s.consumers.end(); ++it) {
00067 (*it)->addEntity(j);
00068 }
00069 }
00070 private:
00071 Submitter& s;
00072 };
00073
00074 const UserConfig& uc;
00075
00076 std::list<const JobDescription*> notsubmitted;
00077 std::list<EntityConsumer<Job>*> consumers;
00078
00079 static SubmitterPluginLoader loader;
00080 };
00081
00082 }
00083
00084 #endif // __ARC_SUBMITTER_H__