1 /******************************************************************************
2
3 This source file is part of the MoleQueue project.
4
5 Copyright 2012 Kitware, Inc.
6
7 This source code is released under the New BSD License, (the "License").
8
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14
15 ******************************************************************************/
16
17 #include "idtypeutils.h"
18 #include "job.h"
19 #include "jobdata.h"
20 #include "jobmanager.h"
21
22 namespace MoleQueue
23 {
24
Job(JobData * jobdata)25 Job::Job(JobData *jobdata)
26 : JobReferenceBase(jobdata)
27 {
28 }
29
Job(JobManager * jobManager,IdType mQId)30 Job::Job(JobManager *jobManager, IdType mQId)
31 : JobReferenceBase(jobManager, mQId)
32 {
33 }
34
Job(const JobReferenceBase & other)35 Job::Job(const JobReferenceBase &other)
36 : JobReferenceBase(other)
37 {
38 }
39
~Job()40 Job::~Job()
41 {
42 }
43
setFromJson(const QJsonObject & state)44 void Job::setFromJson(const QJsonObject &state)
45 {
46 if (warnIfInvalid())
47 m_jobData->setFromJson(state);
48 }
49
toJsonObject() const50 QJsonObject Job::toJsonObject() const
51 {
52 if (warnIfInvalid())
53 return m_jobData->toJsonObject();
54 return QJsonObject();
55 }
56
setQueue(const QString & newQueue)57 void Job::setQueue(const QString &newQueue)
58 {
59
60 if (warnIfInvalid())
61 m_jobData->setQueue(newQueue);
62 }
63
queue() const64 QString Job::queue() const
65 {
66 if (warnIfInvalid())
67 return m_jobData->queue();
68 return QString();
69 }
70
setProgram(const QString & newProgram)71 void Job::setProgram(const QString &newProgram)
72 {
73 if (warnIfInvalid())
74 m_jobData->setProgram(newProgram);
75 }
76
program() const77 QString Job::program() const
78 {
79 if (warnIfInvalid())
80 return m_jobData->program();
81 return QString();
82 }
83
setJobState(JobState state)84 void Job::setJobState(JobState state)
85 {
86 if (warnIfInvalid())
87 m_jobData->jobManager()->setJobState(moleQueueId(), state);
88 }
89
jobState() const90 JobState Job::jobState() const
91 {
92 if (warnIfInvalid())
93 return m_jobData->jobState();
94 return MoleQueue::Unknown;
95 }
96
setDescription(const QString & newDesc)97 void Job::setDescription(const QString &newDesc)
98 {
99 if (warnIfInvalid())
100 m_jobData->setDescription(newDesc);
101 }
102
description() const103 QString Job::description() const
104 {
105 if (warnIfInvalid())
106 return m_jobData->description();
107 return QString();
108 }
109
setInputFile(const FileSpecification & spec)110 void Job::setInputFile(const FileSpecification &spec)
111 {
112 if (warnIfInvalid())
113 m_jobData->setInputFile(spec);
114 }
115
inputFile() const116 FileSpecification Job::inputFile() const
117 {
118 if (warnIfInvalid())
119 return m_jobData->inputFile();
120 return FileSpecification();
121 }
122
setAdditionalInputFiles(const QList<FileSpecification> & files)123 void Job::setAdditionalInputFiles(const QList<FileSpecification> &files)
124 {
125 if (warnIfInvalid())
126 m_jobData->setAdditionalInputFiles(files);
127 }
128
additionalInputFiles() const129 QList<FileSpecification> Job::additionalInputFiles() const
130 {
131 if (warnIfInvalid())
132 return m_jobData->additionalInputFiles();
133 return QList<FileSpecification>();
134 }
135
addInputFile(const FileSpecification & spec)136 void Job::addInputFile(const FileSpecification &spec)
137 {
138 if (warnIfInvalid()) {
139 m_jobData->additionalInputFilesRef().append(spec);
140 m_jobData->modified();
141 }
142 }
143
setOutputDirectory(const QString & path)144 void Job::setOutputDirectory(const QString &path)
145 {
146 if (warnIfInvalid())
147 m_jobData->setOutputDirectory(path);
148 }
149
outputDirectory() const150 QString Job::outputDirectory() const
151 {
152 if (warnIfInvalid())
153 return m_jobData->outputDirectory();
154 return QString();
155 }
156
setLocalWorkingDirectory(const QString & path)157 void Job::setLocalWorkingDirectory(const QString &path)
158 {
159 if (warnIfInvalid())
160 m_jobData->setLocalWorkingDirectory(path);
161 }
162
localWorkingDirectory() const163 QString Job::localWorkingDirectory() const
164 {
165 if (warnIfInvalid())
166 return m_jobData->localWorkingDirectory();
167 return QString();
168 }
169
setCleanRemoteFiles(bool clean)170 void Job::setCleanRemoteFiles(bool clean)
171 {
172 if (warnIfInvalid())
173 m_jobData->setCleanRemoteFiles(clean);
174 }
175
cleanRemoteFiles() const176 bool Job::cleanRemoteFiles() const
177 {
178 if (warnIfInvalid())
179 return m_jobData->cleanRemoteFiles();
180 return false;
181 }
182
setRetrieveOutput(bool b)183 void Job::setRetrieveOutput(bool b)
184 {
185 if (warnIfInvalid())
186 m_jobData->setRetrieveOutput(b);
187 }
188
retrieveOutput() const189 bool Job::retrieveOutput() const
190 {
191 if (warnIfInvalid())
192 return m_jobData->retrieveOutput();
193 return false;
194 }
195
setCleanLocalWorkingDirectory(bool b)196 void Job::setCleanLocalWorkingDirectory(bool b)
197 {
198 if (warnIfInvalid())
199 m_jobData->setCleanLocalWorkingDirectory(b);
200 }
201
cleanLocalWorkingDirectory() const202 bool Job::cleanLocalWorkingDirectory() const
203 {
204 if (warnIfInvalid())
205 return m_jobData->cleanLocalWorkingDirectory();
206 return false;
207 }
208
setHideFromGui(bool b)209 void Job::setHideFromGui(bool b)
210 {
211 if (warnIfInvalid())
212 m_jobData->setHideFromGui(b);
213 }
214
hideFromGui() const215 bool Job::hideFromGui() const
216 {
217 if (warnIfInvalid())
218 return m_jobData->hideFromGui();
219 return false;
220 }
221
setPopupOnStateChange(bool b)222 void Job::setPopupOnStateChange(bool b)
223 {
224 if (warnIfInvalid())
225 m_jobData->setPopupOnStateChange(b);
226 }
227
popupOnStateChange() const228 bool Job::popupOnStateChange() const
229 {
230 if (warnIfInvalid())
231 return m_jobData->popupOnStateChange();
232 return false;
233 }
234
setNumberOfCores(int num)235 void Job::setNumberOfCores(int num)
236 {
237 if (warnIfInvalid())
238 m_jobData->setNumberOfCores(num);
239 }
240
numberOfCores() const241 int Job::numberOfCores() const
242 {
243 if (warnIfInvalid())
244 return m_jobData->numberOfCores();
245 return -1;
246 }
247
setMaxWallTime(int minutes)248 void Job::setMaxWallTime(int minutes)
249 {
250 if (warnIfInvalid())
251 m_jobData->setMaxWallTime(minutes);
252 }
253
maxWallTime() const254 int Job::maxWallTime() const
255 {
256 if (warnIfInvalid())
257 return m_jobData->maxWallTime();
258 return -1;
259 }
260
setMoleQueueId(IdType id)261 void Job::setMoleQueueId(IdType id)
262 {
263 if (warnIfInvalid()) {
264 m_jobData->setMoleQueueId(id);
265 m_jobData->jobManager()->moleQueueIdChanged(*this);
266 }
267 }
268
moleQueueId() const269 IdType Job::moleQueueId() const
270 {
271 if (warnIfInvalid())
272 return m_jobData->moleQueueId();
273 return InvalidId;
274 }
275
setQueueId(IdType id)276 void Job::setQueueId(IdType id)
277 {
278 if (warnIfInvalid())
279 m_jobData->jobManager()->setJobQueueId(m_jobData->moleQueueId(), id);
280 }
281
queueId() const282 IdType Job::queueId() const
283 {
284 if (warnIfInvalid())
285 return m_jobData->queueId();
286 return InvalidId;
287 }
288
setKeywords(const QHash<QString,QString> & keyrep)289 void Job::setKeywords(const QHash<QString, QString> &keyrep)
290 {
291 if (warnIfInvalid())
292 m_jobData->setKeywords(keyrep);
293 }
294
keywords() const295 QHash<QString, QString> Job::keywords() const
296 {
297 if (warnIfInvalid())
298 return m_jobData->keywords();
299 return QHash<QString, QString>();
300 }
301
setKeywordReplacement(const QString & keyword,const QString & replacement)302 void Job::setKeywordReplacement(const QString &keyword, const QString &replacement)
303 {
304 if (warnIfInvalid()) {
305 m_jobData->keywordsRef().insert(keyword, replacement);
306 m_jobData->modified();
307 }
308 }
309
hasKeywordReplacement(const QString & keyword) const310 bool Job::hasKeywordReplacement(const QString &keyword) const
311 {
312 if (warnIfInvalid())
313 return m_jobData->keywords().contains(keyword);
314 return false;
315 }
316
lookupKeywordReplacement(const QString & keyword) const317 QString Job::lookupKeywordReplacement(const QString &keyword) const
318 {
319 if (warnIfInvalid())
320 return m_jobData->keywords().value(keyword);
321 return QString();
322 }
323
replaceKeywords(QString & launchScript) const324 void Job::replaceKeywords(QString &launchScript) const
325 {
326 if (!warnIfInvalid())
327 return;
328
329 const QHash<QString, QString> &keywordHash = m_jobData->keywordsRef();
330 foreach (const QString &key, keywordHash.keys()) {
331 QString keyword = QString("$$%1$$").arg(key);
332 launchScript.replace(keyword, keywordHash.value(key));
333 }
334
335 FileSpecification inputFileSpec(inputFile());
336 if (inputFileSpec.isValid()) {
337 launchScript.replace("$$inputFileName$$", inputFileSpec.filename());
338 launchScript.replace("$$inputFileBaseName$$", inputFileSpec.fileBaseName());
339 }
340
341 launchScript.replace("$$moleQueueId$$", idTypeToString(moleQueueId()));
342
343 launchScript.replace("$$numberOfCores$$",
344 QString::number(numberOfCores()));
345 }
346
347 } // end namespace MoleQueue
348