From: Ben Soares Date: Tue, 29 Mar 2022 00:26:56 +0000 (+0100) Subject: JAL-3851 Add a redirect back to itself for working endpoints X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=f647912de6ba5d76fc01317dbf388e220f4d5e0f;p=jalview.git JAL-3851 Add a redirect back to itself for working endpoints --- diff --git a/src/jalview/rest/AbstractEndpoint.java b/src/jalview/rest/AbstractEndpoint.java index ae9a938..332365b 100644 --- a/src/jalview/rest/AbstractEndpoint.java +++ b/src/jalview/rest/AbstractEndpoint.java @@ -32,6 +32,8 @@ public abstract class AbstractEndpoint implements EndpointI private Map options = null; + private String requestUrl = null; + private String id = null; private String fromId = null; @@ -163,6 +165,28 @@ public abstract class AbstractEndpoint implements EndpointI return opts; } + protected String getRequestUrl(HttpServletRequest request) + { + if (requestUrl != null) + return requestUrl; + if (request != null) + { + StringBuilder sb = new StringBuilder( + request.getRequestURL().toString()); + String query = request.getQueryString(); + if (query != null || query.length() > 0) + { + sb.append("?").append(query); + } + requestUrl = sb.toString(); + } + else + { + Console.debug("AbstractEndpoint: request is null"); + } + return requestUrl; + } + protected void returnError(HttpServletRequest request, HttpServletResponse response, String message) { diff --git a/src/jalview/rest/AbstractEndpointAsync.java b/src/jalview/rest/AbstractEndpointAsync.java index 989bd27..fe10d1d 100644 --- a/src/jalview/rest/AbstractEndpointAsync.java +++ b/src/jalview/rest/AbstractEndpointAsync.java @@ -84,6 +84,7 @@ public abstract class AbstractEndpointAsync extends AbstractEndpoint this.getEndpointPathParameters(request); this.getQueryParameters(request); this.getOptions(request); + this.getRequestUrl(request); } protected abstract void processAsync(HttpServletRequest request, @@ -164,6 +165,7 @@ public abstract class AbstractEndpointAsync extends AbstractEndpoint { setId(idString); } + return getId(); } @@ -210,10 +212,40 @@ public abstract class AbstractEndpointAsync extends AbstractEndpoint switch (getStatus()) { case STARTED: - response.setStatus(HttpServletResponse.SC_ACCEPTED); + if (getRequestUrl(request) != null) + { + response.sendRedirect(getRequestUrl(request)); + Console.debug(getStatus() + ": redirecting to '" + + getRequestUrl(request) + "'"); + try + { + Thread.sleep(1000); + } catch (InterruptedException e) + { + } + } + else + { + response.setStatus(HttpServletResponse.SC_ACCEPTED); + } break; case IN_PROGRESS: - response.setStatus(HttpServletResponse.SC_ACCEPTED); + if (getRequestUrl(request) != null) + { + response.sendRedirect(getRequestUrl(request)); + Console.debug(getStatus() + ": redirecting to '" + + getRequestUrl(request) + "'"); + try + { + Thread.sleep(1500); + } catch (InterruptedException e) + { + } + } + else + { + response.setStatus(HttpServletResponse.SC_ACCEPTED); + } break; case FINISHED: response.setStatus(HttpServletResponse.SC_CREATED); diff --git a/src/jalview/rest/FetchSequencesEndpoint.java b/src/jalview/rest/FetchSequencesEndpoint.java index 7fa95e2..e3161cf 100644 --- a/src/jalview/rest/FetchSequencesEndpoint.java +++ b/src/jalview/rest/FetchSequencesEndpoint.java @@ -46,6 +46,8 @@ public class FetchSequencesEndpoint extends AbstractEndpointAsync String dbId = parameters[1]; setId(request, dbName + "::" + dbId); + saveParameters(request); + if (checkStatus(request, response)) return; @@ -89,6 +91,7 @@ public class FetchSequencesEndpoint extends AbstractEndpointAsync if (sb.length() > 0) sb.append(","); sb.append(seq.getName()); + seq.setStart(1000); } } sb.insert(0, "sequences="); diff --git a/src/jalview/rest/HighlightSequenceEndpoint.java b/src/jalview/rest/HighlightSequenceEndpoint.java index 4e2b072..144995a 100644 --- a/src/jalview/rest/HighlightSequenceEndpoint.java +++ b/src/jalview/rest/HighlightSequenceEndpoint.java @@ -49,7 +49,7 @@ public class HighlightSequenceEndpoint extends AbstractEndpoint "Could not parse postition integer " + posString); } - String sequenceNames = parameters[0] == null ? "#0" : parameters[0]; + String sequenceNames = parameters[0] == null ? "*0" : parameters[0]; Console.debug("Looking for sequence '" + sequenceNames + "'"); int sequenceNum = -1; @@ -82,7 +82,7 @@ public class HighlightSequenceEndpoint extends AbstractEndpoint StructureSelectionManager ssm = ap.getStructureSelectionManager(); AlignmentI al = ap.getAlignment(); List seqs = (List) al.getSequences(); - if (sequenceNum >= 0) + if (0 <= sequenceNum && sequenceNum < seqs.size()) { try {