JAL-3851 Add a redirect back to itself for working endpoints
authorBen Soares <b.soares@dundee.ac.uk>
Tue, 29 Mar 2022 00:26:56 +0000 (01:26 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Tue, 29 Mar 2022 00:26:56 +0000 (01:26 +0100)
src/jalview/rest/AbstractEndpoint.java
src/jalview/rest/AbstractEndpointAsync.java
src/jalview/rest/FetchSequencesEndpoint.java
src/jalview/rest/HighlightSequenceEndpoint.java

index ae9a938..332365b 100644 (file)
@@ -32,6 +32,8 @@ public abstract class AbstractEndpoint implements EndpointI
 
   private Map<String, String> 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)
   {
index 989bd27..fe10d1d 100644 (file)
@@ -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);
index 7fa95e2..e3161cf 100644 (file)
@@ -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=");
index 4e2b072..144995a 100644 (file)
@@ -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<SequenceI> seqs = (List<SequenceI>) al.getSequences();
-        if (sequenceNum >= 0)
+        if (0 <= sequenceNum && sequenceNum < seqs.size())
         {
           try
           {