X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgbtest%2FTestListener.java;h=8321fb95a5062af0160dca9caaad33689c7c020d;hb=c329b66e5ebe188fcaa8daa825593da87f113ce5;hp=8ba80db7bee0553a6e1049ac4570f472f5efa0d4;hpb=0ba88485af97e4f2f2728b27fb22603f4901acbb;p=jalview.git diff --git a/src/jalview/gbtest/TestListener.java b/src/jalview/gbtest/TestListener.java index 8ba80db..8321fb9 100644 --- a/src/jalview/gbtest/TestListener.java +++ b/src/jalview/gbtest/TestListener.java @@ -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 threadMap = new HashMap<>(); + + private HashMap 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)); } }