JAL-1725 fix for redirect of POST to GET, debug output removed
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 6 May 2015 09:57:34 +0000 (10:57 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 6 May 2015 09:57:34 +0000 (10:57 +0100)
src/jalview/ext/rbvi/chimera/ChimeraListener.java
src/jalview/httpserver/AbstractRequestHandler.java
src/jalview/httpserver/HttpServer.java

index 8b48cd2..2479a1b 100644 (file)
@@ -17,8 +17,12 @@ import jalview.structure.SelectionSource;
  * <li>Start the Chimera process</li>
  * <li>Start the REST service on Chimera, get the port number it is listening on
  * </li>
- * <li>Start the ChimeraListener, get the port number it is listening on</li>
+ * <li>Start the ChimeraListener, get the URL it is listening on</li>
+ * <li>The first listener started will start the singleton HttpServer</li>
  * <li>Send a 'listen' command to Chimera with the URL of the listener</li>
+ * <li>When Jalview's Chimera window is closed, shut down the ChimeraListener</li>
+ * <li>Multiple linked Chimera instances will each have a separate listener (but
+ * share one Http server)</li>
  * </ul>
  * 
  * @author gmcarstairs
@@ -27,6 +31,12 @@ import jalview.structure.SelectionSource;
 public class ChimeraListener extends AbstractRequestHandler implements
         SelectionSource
 {
+  private static final String CHIMERA_NOTIFICATION = "chimeraNotification";
+
+  private static final String MODEL_CHANGED = "ModelChanged: ";
+
+  private static final String SELECTION_CHANGED = "SelectionChanged: selection changed\n";
+
   /*
    * A static counter so each listener can be associated with a distinct context
    * root (/chimera0,1,2,3...). This is needed so we can fetch selections from
@@ -90,20 +100,32 @@ public class ChimeraListener extends AbstractRequestHandler implements
           HttpServletResponse response)
   {
     // dumpRequest(request);
-    String message = request.getParameter("chimeraNotification");
-    if ("selection changed".equals(message))
+    String message = request.getParameter(CHIMERA_NOTIFICATION);
+    if (SELECTION_CHANGED.equals(message))
     {
       this.chimeraBinding.highlightChimeraSelection();
     }
+    else if (message != null && message.startsWith(MODEL_CHANGED))
+    {
+      processModelChanged(message.substring(MODEL_CHANGED.length()));
+    }
     else
     {
       System.err.println("Unexpected chimeraNotification: " + message);
-      // do it anyway for now!
-      this.chimeraBinding.highlightChimeraSelection();
     }
   }
 
   /**
+   * Handler a ModelChanged notification from Chimera
+   * 
+   * @param substring
+   */
+  protected void processModelChanged(String message)
+  {
+    System.out.println(message + " (not implemented in Jalview)");
+  }
+
+  /**
    * Deregister this listener and close it down
    * 
    * @throws Exception
index f48ba49..45064e7 100644 (file)
@@ -72,6 +72,7 @@ public abstract class AbstractRequestHandler extends AbstractHandler
   protected void dumpRequest(HttpServletRequest request)
   {
     System.out.println(request.getMethod());
+    System.out.println(request.getRequestURL());
     for (String hdr : Collections.list(request.getHeaderNames()))
     {
       for (String val : Collections.list(request.getHeaders(hdr)))
index d39ada1..6f4aa75 100644 (file)
@@ -196,6 +196,7 @@ public class HttpServer
   {
     // http://stackoverflow.com/questions/20043097/jetty-9-embedded-adding-handlers-during-runtime
     ContextHandler ch = new ContextHandler();
+    ch.setAllowNullPathInfo(true);
     ch.setContextPath("/" + path);
     ch.setResourceBase(".");
     ch.setClassLoader(Thread.currentThread()