package com.github.signed.tryanderror.jersey.resources; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; @Path("/longrunningprocess") public class LongRunningProcessResource { private final ProcessArchive archive; @Inject public LongRunningProcessResource(ProcessArchive archive){ this.archive = archive; } @GET @Produces("text/plain") public String list() { final StringBuilder builder = new StringBuilder(); archive.eachProcess(new Callback<LongRunningProcess>() { @Override public void call(LongRunningProcess value) { builder.append(value.identifier).append("\n"); } }); return builder.toString(); } @GET @Produces("text/plain") @Path("{id}") public String single(@PathParam("id") long id) { final StringBuilder builder = new StringBuilder(); final ProcessIdentifier identifier = new ProcessIdentifier(id); archive.eachProcess(new Callback<LongRunningProcess>() { @Override public void call(LongRunningProcess value) { if(identifier.equals(value.identifier)) { builder.append(value.toString()); } } }); String message = builder.toString(); if (message.isEmpty()){ throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity("'"+id +"' does not identify a long running process").build()); } return message; } }