JAL-3851 throwaway code
[jalview.git] / src / jalview / gbtest / TestListener.java
index 8ba80db..8321fb9 100644 (file)
@@ -1,14 +1,20 @@
 package jalview.gbtest;
 
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.net.BindException;
 import java.net.URI;
+import java.util.HashMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import jalview.bin.Cache;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
 import jalview.gui.Desktop;
+import jalview.gui.SeqPanel;
 import jalview.gui.SequenceFetcher;
 import jalview.httpserver.AbstractRequestHandler;
 import jalview.structure.SelectionSource;
@@ -20,6 +26,14 @@ public class TestListener extends AbstractRequestHandler
 
   private String MY_PATH = "TEST";
 
+  private static String viewgene = "viewgene";
+
+  private static String highlight = "highlight";
+
+  private HashMap<String, Thread> threadMap = new HashMap<>();
+
+  private HashMap<String, AlignFrame> alignFrames = new HashMap<>();
+
   /**
    * Constructor that registers this as an Http request handler on path
    * /chimeraN, where N is incremented for each instance. Call getUri to get the
@@ -41,31 +55,113 @@ public class TestListener extends AbstractRequestHandler
   {
     dumpRequest(request);
 
-    URI reqUri = URI.create(request.getRequestURI());
-
-    Cache.warn("*** request.getRequestURI()=" + request.getRequestURI());
-    Cache.warn("*** reqUri=" + reqUri.toASCIIString());
-    Cache.warn("*** request.getContextPath()=" + request.getContextPath());
-    Cache.warn("*** request.getPathInfo()=" + request.getPathInfo());
-
-    String pathInfo = request.getPathInfo();
-    Cache.warn("*** pathInfo=" + pathInfo);
-    String viewgene = "viewgene";
-    if (pathInfo.startsWith("/" + viewgene + "/"))
+    try // debugging try -- remove later!
     {
-
-      String temp = pathInfo.substring(viewgene.length() + 2);
-      String ensemblId = temp.indexOf("/") > -1
-              ? temp.substring(0, temp.indexOf("/"))
-              : temp;
-      Cache.warn("*** temp=" + temp);
-      Cache.warn("*** ensemblId=" + ensemblId);
-
-      String db = DBRefUtils.getCanonicalName("ensembl");
-      Desktop desktop = Desktop.instance;
-      SequenceFetcher sf = new SequenceFetcher(desktop, db, ensemblId);
-      sf.ok_actionPerformed();
-
+      URI reqUri = URI.create(request.getRequestURI());
+
+      Cache.warn("*** request.getRequestURI()=" + request.getRequestURI());
+      Cache.warn("*** reqUri=" + reqUri.toASCIIString());
+      Cache.warn(
+              "*** request.getContextPath()=" + request.getContextPath());
+      Cache.warn("*** request.getPathInfo()=" + request.getPathInfo());
+
+      String pathInfo = request.getPathInfo();
+      Cache.warn("*** pathInfo=" + pathInfo);
+      if (pathInfo.startsWith("/" + viewgene + "/"))
+      {
+
+        String temp = pathInfo.substring(viewgene.length() + 2);
+        String ensemblId = temp.indexOf("/") > -1
+                ? temp.substring(0, temp.indexOf("/"))
+                : temp;
+        Cache.warn("*** temp=" + temp);
+        Cache.warn("*** ensemblId=" + ensemblId);
+
+        // Check whether this ensembl search has already been started
+        // and hasn't finished.
+        StringBuilder idSB = new StringBuilder();
+        // Commenting out HttpSession -- there's no SessionManager (causes
+        // Exception)
+        // HttpSession session = request.getSession(true);
+        // idSB.append(session == null ? "NOSESSION" : session.getId());
+        idSB.append(MY_PATH);
+        idSB.append("::");
+        // idSB.append(viewgene);
+        // idSB.append("::");
+        idSB.append(ensemblId);
+
+        String id = request.getParameter("id") == null ? idSB.toString()
+                : request.getParameter("id");
+
+        Thread worker = threadMap.get(id);
+        if (worker == null)
+        {
+          String db = DBRefUtils.getCanonicalName("ensembl");
+          Desktop desktop = Desktop.instance;
+          SequenceFetcher sf = new SequenceFetcher(desktop, db, ensemblId);
+          sf.closeDialog(true);
+          sf.saveAlignFrame(id, alignFrames);
+          worker = sf.ok_actionPerformed(true);
+          threadMap.put(id, worker);
+        }
+        AlignFrame af = alignFrames.get(id);
+        PrintWriter pw = response.getWriter();
+        pw.println("id=" + id);
+        pw.println("state=" + worker.getState().toString());
+        pw.println("alignframe=" + (af == null ? null : af.getTitle()));
+        if (af != null)
+        {
+
+        }
+      }
+      else if (pathInfo.startsWith("/" + highlight + "/"))
+      {
+        String temp = pathInfo.substring(highlight.length() + 2);
+        String id = temp.indexOf("/") > -1
+                ? temp.substring(0, temp.indexOf("/"))
+                : temp;
+        AlignFrame af = alignFrames.get(id);
+        Cache.warn("*** temp=" + temp);
+        Cache.warn("*** id=" + id);
+        PrintWriter pw = response.getWriter();
+        pw.println("id=" + id);
+        pw.println("state=" + threadMap.get(id).getState().toString());
+        pw.println("alignframe=" + (af == null ? null : af.getTitle()));
+        if (af == null)
+        {
+          pw.println("error=alignframe not ready");
+          return;
+        }
+        String startS = request.getParameter("start");
+        String endS = request.getParameter("end");
+        int start = 0;
+        int end = -1;
+        if (startS != null || endS != null)
+        {
+          try
+          {
+            start = Integer.parseInt(startS);
+            end = Integer.parseInt(endS);
+          } catch (NumberFormatException e)
+          {
+            Cache.warn(Cache.getStackTraceString(e));
+            pw.println("error=couldn't parse start and end");
+            return;
+          }
+        }
+        pw.println("start=" + start);
+        pw.println("end=" + end);
+
+        SeqPanel seqPanel = af.alignPanel.getSeqPanel();
+        SequenceI[] seqs = af.getViewport().getSequenceSelection();
+        SequenceI seq = seqs.length > 0 ? seqs[0] : null;
+        SearchResults sr = new SearchResults();
+        sr.addResult(seq, start, end);
+        seqPanel.highlightSequence(sr);
+      }
+    } catch (Exception e)
+    {
+      Cache.warn(Cache.getStackTraceString(e));
     }
 
   }