From 0ba88485af97e4f2f2728b27fb22603f4901acbb Mon Sep 17 00:00:00 2001 From: Ben Soares Date: Tue, 3 Aug 2021 21:10:16 +0100 Subject: [PATCH 1/1] JAL-3851 start a listener with -testlistener and suggest a port with -testlistener_port. wget -S -O - http://localhost:20212/jalview/TEST/viewgene/ENSG00000139618 --- src/jalview/bin/Jalview.java | 35 ++++++++++++++ src/jalview/gbtest/TestListener.java | 82 ++++++++++++++++++++++++++++++++ src/jalview/httpserver/HttpServer.java | 54 +++++++++++++++++++-- 3 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 src/jalview/gbtest/TestListener.java diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index 4c21624..76ed17e 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.net.BindException; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; @@ -51,9 +52,11 @@ import com.threerings.getdown.util.LaunchUtil; import groovy.lang.Binding; import groovy.util.GroovyScriptEngine; import jalview.ext.so.SequenceOntology; +import jalview.gbtest.TestListener; import jalview.gui.AlignFrame; import jalview.gui.Desktop; import jalview.gui.PromptUserConfig; +import jalview.httpserver.HttpServer; import jalview.io.AppletFormatAdapter; import jalview.io.BioJsHTMLOutput; import jalview.io.DataSourceType; @@ -475,6 +478,38 @@ public class Jalview } } + // Start a TestListener + boolean startTestListener = aparser.contains("testlistener"); + if (startTestListener) + { + String sPort = aparser.getValue("testlistener_port"); + int port = 0; + if (sPort != null) + { + try + { + port = Integer.parseInt(sPort); + } catch (NumberFormatException e) + { + Cache.warn("testlistener_port '" + sPort + + "' not parseable as Integer"); + } + } + try + { + HttpServer.setSuggestedPort(port); + TestListener testListener = new TestListener(); + Cache.info("TestListener started at " + + HttpServer.getInstance().getUri().toString()); + } catch (BindException e) + { + Cache.warn("Could not open TestListener"); + e.printStackTrace(); + } + System.out + .println("TestListener set to PORT=" + HttpServer.getPort()); + } + // Move any new getdown-launcher-new.jar into place over old // getdown-launcher.jar String appdirString = System.getProperty("getdownappdir"); diff --git a/src/jalview/gbtest/TestListener.java b/src/jalview/gbtest/TestListener.java new file mode 100644 index 0000000..8ba80db --- /dev/null +++ b/src/jalview/gbtest/TestListener.java @@ -0,0 +1,82 @@ +package jalview.gbtest; + +import java.io.IOException; +import java.net.BindException; +import java.net.URI; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import jalview.bin.Cache; +import jalview.gui.Desktop; +import jalview.gui.SequenceFetcher; +import jalview.httpserver.AbstractRequestHandler; +import jalview.structure.SelectionSource; +import jalview.util.DBRefUtils; + +public class TestListener extends AbstractRequestHandler + implements SelectionSource +{ + + private String MY_PATH = "TEST"; + + /** + * Constructor that registers this as an Http request handler on path + * /chimeraN, where N is incremented for each instance. Call getUri to get the + * resulting URI for this handler. + * + * @param chimeraBinding + * @throws BindException + * if no free port can be assigned + */ + public TestListener() throws BindException + { + setPath(MY_PATH); + registerHandler(); + } + + @Override + protected void processRequest(HttpServletRequest request, + HttpServletResponse response) throws IOException + { + 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 + "/")) + { + + 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(); + + } + + } + + /** + * Returns a display name for this service + */ + @Override + public String getName() + { + return "TestListener"; + } + +} diff --git a/src/jalview/httpserver/HttpServer.java b/src/jalview/httpserver/HttpServer.java index a18d38d..397f1a8 100644 --- a/src/jalview/httpserver/HttpServer.java +++ b/src/jalview/httpserver/HttpServer.java @@ -20,8 +20,6 @@ */ package jalview.httpserver; -import jalview.rest.RestHandler; - import java.net.BindException; import java.net.URI; import java.util.Collections; @@ -31,6 +29,7 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; @@ -38,6 +37,8 @@ import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.util.thread.QueuedThreadPool; +import jalview.rest.RestHandler; + /** * An HttpServer built on Jetty. To use it *