// ScriptedJobCreator.cxx #include "dial_scripted/ScriptedJobCreator.h" #include "dataset_util/DtdRegistry.h" #include "dial_scripted/ScriptedJob.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::ScriptedJobCreator; //********************************************************************** // Local definitions. //********************************************************************** namespace { //********************************************************************** // Creator. const JobCreator* create(const XmlElement& ele) { if ( ele.name() != ScriptedJobCreator::xml_name() ) return 0; if ( ! ele.has_attribute("script_name") ) return 0; string scrname = ele.attribute("script_name"); return new ScriptedJobCreator(scrname); } //********************************************************************** // Register creator. int STAT_ScriptedJobCreator = JobCreator:: register_creator(ScriptedJobCreator::xml_name(), create); } //********************************************************************** // Register the DTD. DtdRegistry::Status ISTAT_DTD_ScriptedJobCreator = DtdRegistry::register_dtd("dial"); //********************************************************************** // Static member functions. //********************************************************************** // DTD const Text& ScriptedJobCreator::dtd() { static Text txt; if ( txt.size() == 0 ) { txt.append(""); txt.append(""); } return txt; } //********************************************************************** // Constructor takes script name ScriptedJobCreator::ScriptedJobCreator(string scrname) : m_scrname(scrname) { if( ! is_valid() ) m_scrname = ""; } //********************************************************************** bool ScriptedJobCreator::is_valid() const { if( m_scrname.size() == 0 ) return false; return true; } //********************************************************************** // Create a new local job. Job* ScriptedJobCreator:: 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 ScriptedJob(jid, m_scrname, app, tsk, dst, prf, rundir, runfile); } //********************************************************************** // Convert. Job* ScriptedJobCreator::convert(const Job& job) const { return new ScriptedJob(job, m_scrname); } //********************************************************************** // Script name. string ScriptedJobCreator::script_name() const { return m_scrname; } //********************************************************************** // XML. const XmlElement* ScriptedJobCreator::xml() const { auto_ptr pele(new XmlElement(xml_name())); pele->add_attribute("script_name", script_name()); return pele.release(); } //********************************************************************** // Output stream. ostream& ScriptedJobCreator::ostr(ostream& lhs) const { lhs << "Creator for ScriptedJob"; return lhs; } //**********************************************************************