package net.sourceforge.seqware.webservice.resources.queries; import clojure.lang.RT; import clojure.lang.Symbol; import clojure.lang.Var; import java.io.IOException; import java.io.Writer; import net.sourceforge.seqware.webservice.resources.BasicRestlet; import org.restlet.Context; import org.restlet.Request; import org.restlet.Response; import org.restlet.data.MediaType; import org.restlet.data.Status; import org.restlet.representation.WriterRepresentation; import org.restlet.resource.ResourceException; public class FileProvenanceResource extends BasicRestlet { public FileProvenanceResource(Context context) { super(context); } @Override public void handle(final Request request, final Response response) { super.handle(request, response); authenticate(request.getChallengeResponse().getIdentifier()); init(request); response.setEntity(new WriterRepresentation(MediaType.TEXT_TSV) { @Override public void write(Writer writer) throws IOException { Var require = RT.var("clojure.core", "require"); require.invoke(Symbol.intern("io.seqware.report")); Var v = RT.var("io.seqware.report", "write-file-provenance-report!"); try { v.invoke(queryMap(request), writer); } catch (Exception e) { if (e.getMessage().equals("Invalid parameter")) { response.setStatus(Status.CLIENT_ERROR_BAD_REQUEST); throw new ResourceException(Status.CLIENT_ERROR_BAD_REQUEST, "Bad client request, check your parameters"); } else { throw new RuntimeException(e); } } } }); } }