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;
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
{
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));
}
}