// ProcessJobCreator.cxx #include "dial_job/ProcessJobCreator.h" #include "dataset_util/DtdRegistry.h" #include "dial_job/ProcessJob.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::ProcessJobCreator; //********************************************************************** // Local definitions. //********************************************************************** namespace { //********************************************************************** // Creator. const JobCreator* create(const XmlElement& ele) { if ( ele.name() != ProcessJobCreator::xml_name() ) return 0; if ( ! ele.has_attribute("runcom") ) return 0; string runcom = ele.attribute("runcom"); return new ProcessJobCreator(runcom); } //********************************************************************** // Register creator. int STAT_ProcessJobCreator = JobCreator:: register_creator(ProcessJobCreator::xml_name(), create); } //********************************************************************** // Register the DTD. DtdRegistry::Status ISTAT_DTD_ProcessJobCreator = DtdRegistry::register_dtd("dial"); //********************************************************************** // Static member functions. //********************************************************************** // DTD const Text& ProcessJobCreator::dtd() { static Text txt; if ( txt.size() == 0 ) { txt.append(""); txt.append(""); } return txt; } //********************************************************************** // Member functions. //********************************************************************** // Constructor. ProcessJobCreator::ProcessJobCreator(string runcom) : m_runcom(runcom) { } //********************************************************************** // Validity. bool ProcessJobCreator::is_valid() const { return true; } //********************************************************************** // Create a new local job. Job* ProcessJobCreator:: create_local_job(JobId jid, const Application& app, const Task& tsk, const Dataset& dst, const JobPreferences& prf, string rundir, string runfile) const { return new ProcessJob(jid, app, tsk, dst, prf, rundir, runfile, m_runcom); } //********************************************************************** // Convert. Job* ProcessJobCreator::convert(const Job& job) const { return new ProcessJob(job, m_runcom); } //********************************************************************** // Run command. string ProcessJobCreator::run_command() const { return m_runcom; } //********************************************************************** // XML. const XmlElement* ProcessJobCreator::xml() const { auto_ptr pele(new XmlElement(xml_name())); pele->add_attribute("runcom", run_command()); return pele.release(); } //********************************************************************** // Output stream. ostream& ProcessJobCreator::ostr(ostream& lhs) const { lhs << "Creator for ProcessJob"; return lhs; } //**********************************************************************