package com.datascience.service; import javax.servlet.ServletContext; import javax.ws.rs.*; import javax.ws.rs.core.*; import com.datascience.datastoring.jobs.Job; import com.datascience.datastoring.jobs.JobsManager; import com.datascience.galc.ContinuousProject; import com.datascience.utils.IRandomUniqIDGenerator; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.sun.jersey.spi.resource.Singleton; import static com.datascience.serialization.json.JSONUtils.tKeys; import static com.google.common.base.Preconditions.checkArgument; @Path("/jobs/") @Singleton public class JobsEntry { @Context ServletContext context; @Context Request request; @Context UriInfo uriInfo; private JobsManager getJobsManager(){ return (JobsManager) context.getAttribute(Constants.JOBS_MANAGER); } private IRandomUniqIDGenerator getJidGenerator(){ return (IRandomUniqIDGenerator) context.getAttribute(Constants.ID_GENERATOR); } private ResponseBuilder getResponseBuilder(){ return (ResponseBuilder) context.getAttribute(Constants.RESPONSER); } protected boolean empty_jid(String jid){ return jid == null || "".equals(jid); } @DELETE public Response deleteJob(@FormParam("id") String jid) throws Exception{ if (!InitializationSupport.checkIsInitialized(context)) return InitializationSupport.makeNotInitializedResponse(context); if (empty_jid(jid)) { throw new IllegalArgumentException("No job ID given"); } Job job = getJobsManager().get(jid); if (job == null) { throw new IllegalArgumentException("Job with ID " + jid + " does not exist"); } getJobsManager().remove(job); return getResponseBuilder().makeOKResponse("Removed job with ID: " + jid); } @POST @Consumes(MediaType.APPLICATION_JSON) public Response createJob(String json) throws Exception{ if (!InitializationSupport.checkIsInitialized(context)) return InitializationSupport.makeNotInitializedResponse(context); JsonObject jo = json.isEmpty() ? new JsonObject() : tKeys(new JsonParser().parse(json).getAsJsonObject()); String jid = jo.has("id") ? jo.get("id").getAsString() : getJidGenerator().getID(); checkArgument(jo.has("algorithm"), "You should provide alogorithm type (for example BDS or GALC)"); getJobsManager().createAndAdd(jo.get("algorithm").getAsString(), jid, jo); return getResponseBuilder().makeOKResponse("New job created with ID: " + jid); } @Path("{id}") public JobEntryBase getJobEntry(@PathParam("id") String id) throws Exception{ Job job = getJobsManager().get(id); checkArgument(job != null, "Job with ID " + id + " does not exist"); if (job.getProject() instanceof ContinuousProject) return new ContinuousJobEntry(context, request, uriInfo, id); else return new NominalJobEntry(context, request, uriInfo, id); } }