// LsfJobCreator.cxx #include "dial_lsf/LsfJobCreator.h" #include "dataset_util/DtdRegistry.h" #include "dial_lsf/LsfJob.h" #include using std::string; using std::ostream; using std::auto_ptr; using dset::Dataset; using dial::Application; using dial::Task; using dial::Job; using dial::JobCreator; using dial::LsfJobCreator; //********************************************************************** // Local definitions. //********************************************************************** namespace { //********************************************************************** // Creator. const JobCreator* create(const XmlElement& ele) { if ( ele.name() != LsfJobCreator::xml_name() ) return 0; if ( ! ele.has_attribute("queue") ) return 0; string queue = ele.attribute("queue"); return new LsfJobCreator(queue); } //********************************************************************** // Register creator. int STAT_LsfJobCreator = JobCreator:: register_creator(LsfJobCreator::xml_name(), create); } //********************************************************************** // Register the DTD. DtdRegistry::Status ISTAT_DTD_LsfJobCreator = DtdRegistry::register_dtd("dial"); //********************************************************************** // Static member functions. //********************************************************************** // DTD const Text& LsfJobCreator::dtd() { static Text txt; if ( txt.size() == 0 ) { txt.append(""); txt.append(""); } return txt; } //********************************************************************** // Constructor takes queue name LsfJobCreator::LsfJobCreator(string qname): m_queue(qname) { if( !is_valid() ) m_queue = ""; } //********************************************************************** bool LsfJobCreator::is_valid() const { if( m_queue.size() == 0 ) return false; return true; } //********************************************************************** // Create a new local job. Job* LsfJobCreator:: create_local_job(JobId jid, const Application& app, const Task& tsk, const Dataset& dst, const JobPreferences& prf, string rundir, string runfile) const { if( !is_valid() ) return 0; return new LsfJob(jid, m_queue, app, tsk, dst, prf, rundir, runfile); } //********************************************************************** // Convert. Job* LsfJobCreator::convert(const Job& job) const { return new LsfJob(job, m_queue); } //********************************************************************** // Lsf queue. string LsfJobCreator::lsf_queue() const { return m_queue; } //********************************************************************** // XML. const XmlElement* LsfJobCreator::xml() const { auto_ptr pele(new XmlElement(xml_name())); pele->add_attribute("queue", lsf_queue()); return pele.release(); } //********************************************************************** // Output stream. ostream& LsfJobCreator::ostr(ostream& lhs) const { lhs << "Creator for LsfsJob"; return lhs; } //**********************************************************************