JAL-3851 throwaway code
authorBen Soares <b.soares@dundee.ac.uk>
Fri, 20 Aug 2021 14:02:27 +0000 (15:02 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Fri, 20 Aug 2021 14:02:27 +0000 (15:02 +0100)
src/jalview/bin/Jalview.java
src/jalview/gbtest/TestListener.java
src/jalview/gui/SequenceFetcher.java

index 76ed17e..ee21164 100755 (executable)
@@ -479,8 +479,7 @@ public class Jalview
     }
 
     // Start a TestListener
-    boolean startTestListener = aparser.contains("testlistener");
-    if (startTestListener)
+    if (aparser.contains("testlistener"))
     {
       String sPort = aparser.getValue("testlistener_port");
       int port = 0;
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));
     }
 
   }
index 8b5d3b7..b4ca075 100755 (executable)
  */
 package jalview.gui;
 
-import jalview.api.FeatureSettingsModelI;
-import jalview.bin.Cache;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.SequenceI;
-import jalview.fts.core.GFTSPanel;
-import jalview.fts.service.pdb.PDBFTSPanel;
-import jalview.fts.service.uniprot.UniprotFTSPanel;
-import jalview.io.FileFormatI;
-import jalview.io.gff.SequenceOntologyI;
-import jalview.util.DBRefUtils;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-import jalview.ws.seqfetcher.DbSourceProxy;
-
 import java.awt.BorderLayout;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
@@ -46,6 +31,7 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -57,6 +43,21 @@ import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 import javax.swing.SwingConstants;
 
+import jalview.api.FeatureSettingsModelI;
+import jalview.bin.Cache;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.SequenceI;
+import jalview.fts.core.GFTSPanel;
+import jalview.fts.service.pdb.PDBFTSPanel;
+import jalview.fts.service.uniprot.UniprotFTSPanel;
+import jalview.io.FileFormatI;
+import jalview.io.gff.SequenceOntologyI;
+import jalview.util.DBRefUtils;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.ws.seqfetcher.DbSourceProxy;
+
 /**
  * A panel where the use may choose a database source, and enter one or more
  * accessions, to retrieve entries from the database.
@@ -96,6 +97,14 @@ public class SequenceFetcher extends JPanel implements Runnable
 
   volatile boolean _isConstructing = false;
 
+  private boolean closeDialog = false;
+
+  // set to true to close the fetch sequence dialog window after completion
+  public void closeDialog(boolean c)
+  {
+    closeDialog = c;
+  }
+
   /**
    * Returns the shared instance of the SequenceFetcher client
    * 
@@ -145,8 +154,8 @@ public class SequenceFetcher extends JPanel implements Runnable
 
     frame = new JInternalFrame();
     frame.setContentPane(this);
-    Desktop.addInternalFrame(frame, getFrameTitle(), true, 400, 
-               Platform.isAMacAndNotJS() ? 240 : 180);
+    Desktop.addInternalFrame(frame, getFrameTitle(), true, 400,
+            Platform.isAMacAndNotJS() ? 240 : 180);
   }
 
   private String getFrameTitle()
@@ -414,6 +423,11 @@ public class SequenceFetcher extends JPanel implements Runnable
    */
   public void ok_actionPerformed()
   {
+    ok_actionPerformed(false);
+  }
+
+  public Thread ok_actionPerformed(boolean returnThread)
+  {
     /*
      * tidy inputs and check there is something to search for
      */
@@ -424,9 +438,9 @@ public class SequenceFetcher extends JPanel implements Runnable
       text = text.replace(",", ";");
     }
     text = text.replaceAll("(\\s|[; ])+", ";");
-    if (!t0.equals(text)) 
+    if (!t0.equals(text))
     {
-         textArea.setText(text);
+      textArea.setText(text);
     }
     if (text.isEmpty())
     {
@@ -434,14 +448,14 @@ public class SequenceFetcher extends JPanel implements Runnable
       showErrorMessage(
               "Please enter a (semi-colon separated list of) database id(s)");
       resetDialog();
-      return;
+      return null;
     }
     if (database.getSelectedIndex() == 0)
     {
       // todo i18n
       showErrorMessage("Please choose a database");
       resetDialog();
-      return;
+      return null;
     }
 
     exampleBtn.setEnabled(false);
@@ -452,6 +466,7 @@ public class SequenceFetcher extends JPanel implements Runnable
 
     Thread worker = new Thread(this);
     worker.start();
+    return returnThread ? worker : null;
   }
 
   private void resetDialog()
@@ -633,6 +648,31 @@ public class SequenceFetcher extends JPanel implements Runnable
       showErrorMessage(sb.toString());
     }
     resetDialog();
+    if (closeDialog)
+    {
+      close_actionPerformed(null);
+    }
+  }
+
+  // ability to access the alignframe created/used in run+parseResult
+  private boolean saveAlignFrame = false;
+
+  private String savedAlignFrameId = null;
+
+  private Map savedAlignFrames = null;
+
+  public void saveAlignFrame(String id, Map map)
+  {
+    saveAlignFrame = true;
+    savedAlignFrameId = id;
+    savedAlignFrames = map;
+  }
+
+  public void resetSavedAlignFrames()
+  {
+    saveAlignFrame = false;
+    savedAlignFrameId = null;
+    savedAlignFrames = null;
   }
 
   /**
@@ -761,12 +801,12 @@ public class SequenceFetcher extends JPanel implements Runnable
 
     for (String q : queries)
     {
-       // BH 2019.01.25 dbr is never used.
-//      DBRefEntry dbr = new DBRefEntry();
-//      dbr.setSource(proxy.getDbSource());
-//      dbr.setVersion(null);
+      // BH 2019.01.25 dbr is never used.
+      // DBRefEntry dbr = new DBRefEntry();
+      // dbr.setSource(proxy.getDbSource());
+      // dbr.setVersion(null);
       String accId = proxy.getAccessionIdFromQuery(q);
-//      dbr.setAccessionId(accId);
+      // dbr.setAccessionId(accId);
       boolean rfound = false;
       for (int r = 0, nr = rs.length; r < nr; r++)
       {
@@ -813,6 +853,10 @@ public class SequenceFetcher extends JPanel implements Runnable
       {
         AlignFrame af = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH,
                 AlignFrame.DEFAULT_HEIGHT);
+        if (saveAlignFrame && savedAlignFrames != null)
+        {
+          savedAlignFrames.put(savedAlignFrameId, af);
+        }
         if (currentFileFormat != null)
         {
           af.currentFileFormat = currentFileFormat;
@@ -854,6 +898,10 @@ public class SequenceFetcher extends JPanel implements Runnable
       }
       else
       {
+        if (saveAlignFrame && savedAlignFrames != null)
+        {
+          savedAlignFrames.put(savedAlignFrameId, alignFrame);
+        }
         alignFrame.viewport.addAlignment(al, title);
       }
     }