JAL-3851 start a listener with -testlistener and suggest a port with -testlistener_po...
[jalview.git] / src / jalview / gbtest / TestListener.java
diff --git a/src/jalview/gbtest/TestListener.java b/src/jalview/gbtest/TestListener.java
new file mode 100644 (file)
index 0000000..8ba80db
--- /dev/null
@@ -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";
+  }
+
+}