package water.api;
import water.*;
import water.api.schemas3.JobV3;
import water.api.schemas3.JobsV3;
import water.api.schemas4.input.JobIV4;
import water.api.schemas4.output.JobV4;
import water.exceptions.H2ONotFoundArgumentException;
public class JobsHandler extends Handler {
/** Impl class for a collection of jobs; only used in the API to make it easier to cons up the jobs array via the magic of PojoUtils.copyProperties. */
@SuppressWarnings("unused") // called through reflection by RequestServer
public JobsV3 list(int version, JobsV3 s) {
Job[] jobs = Job.jobs();
// Jobs j = new Jobs();
// j._jobs = Job.jobs();
// PojoUtils.copyProperties(s, j, PojoUtils.FieldNaming.ORIGIN_HAS_UNDERSCORES);
s.jobs = new JobV3[jobs.length];
int i = 0;
for (Job j : jobs) {
try { s.jobs[i] = (JobV3) SchemaServer.schema(version, j).fillFromImpl(j); }
// no special schema for this job subclass, so fall back to JobV3
catch (H2ONotFoundArgumentException e) { s.jobs[i] = new JobV3().fillFromImpl(j); }
i++; // Java does the increment before the function call which throws?!
}
return s;
}
@SuppressWarnings("unused") // called through reflection by RequestServer
public JobsV3 fetch(int version, JobsV3 s) {
Key key = s.job_id.key();
Value val = DKV.get(key);
if( null == val ) throw new IllegalArgumentException("Job is missing");
Iced ice = val.get();
if( !(ice instanceof Job) ) throw new IllegalArgumentException("Must be a Job not a "+ice.getClass());
Job j = (Job) ice;
s.jobs = new JobV3[1];
// s.fillFromImpl(jobs);
try { s.jobs[0] = (JobV3) SchemaServer.schema(version, j).fillFromImpl(j); }
// no special schema for this job subclass, so fall back to JobV3
catch (H2ONotFoundArgumentException e) { s.jobs[0] = new JobV3().fillFromImpl(j); }
return s;
}
public JobsV3 cancel(int version, JobsV3 c) {
Job j = DKV.getGet(c.job_id.key());
if (j == null) {
throw new IllegalArgumentException("No job with key " + c.job_id.key());
}
j.stop(); // Request Job stop
return c;
}
public static class FetchJob extends RestApiHandler<JobIV4, JobV4> {
@Override public String name() {
return "getJob4";
}
@Override public String help() {
return "Retrieve information about the current state of a job.";
}
@Override
public JobV4 exec(int ignored, JobIV4 input) {
Key<Job> key = Key.make(input.job_id);
Value val = DKV.get(key);
if (val == null)
throw new IllegalArgumentException("Job " + input.job_id + " is missing");
Iced iced = val.get();
if (!(iced instanceof Job))
throw new IllegalArgumentException("Id " + input.job_id + " references a " + iced.getClass() + " not a Job");
Job job = (Job) iced;
JobV4 out = new JobV4();
out.fillFromImpl(job);
return out;
}
}
}