X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fext%2Fedu%2Fucsf%2Frbvi%2Fstrucviz2%2FChimeraManager.java;fp=src%2Fext%2Fedu%2Fucsf%2Frbvi%2Fstrucviz2%2FChimeraManager.java;h=2de2829219cf23ed6394eae514c88ab2b83193bc;hb=9623cea766a766683243235557ad48e6f7659e6a;hp=b66778cb03e47e2151808109ef99faaaf0b28292;hpb=6066400ed6b0fe288ebbea82389f59838a534706;p=jalview.git diff --git a/src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java b/src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java index b66778c..2de2829 100644 --- a/src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java +++ b/src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java @@ -1,5 +1,7 @@ package ext.edu.ucsf.rbvi.strucviz2; +import jalview.ws.HttpClientUtils; + import java.awt.Color; import java.io.BufferedReader; import java.io.File; @@ -20,8 +22,6 @@ import org.slf4j.LoggerFactory; import ext.edu.ucsf.rbvi.strucviz2.StructureManager.ModelType; import ext.edu.ucsf.rbvi.strucviz2.port.ListenerThreads; -import jalview.ws.HttpClientUtils; - /** * This object maintains the Chimera communication information. */ @@ -302,13 +302,12 @@ public class ChimeraManager // TODO: [Optional] Convert path to name in a better way if (modelPath.lastIndexOf(File.separator) > 0) { - modelName = modelPath.substring(modelPath - .lastIndexOf(File.separator) + 1); + modelName = modelPath + .substring(modelPath.lastIndexOf(File.separator) + 1); } else if (modelPath.lastIndexOf("/") > 0) { - modelName = modelPath - .substring(modelPath.lastIndexOf("/") + 1); + modelName = modelPath.substring(modelPath.lastIndexOf("/") + 1); } return modelName; } @@ -355,7 +354,8 @@ public class ChimeraManager public void startListening(String uri) { sendChimeraCommand("listen start models url " + uri - + ";listen start select prefix SelectionChanged url " + uri, false); + + ";listen start select prefix SelectionChanged url " + uri, + false); } /** @@ -379,7 +379,7 @@ public class ChimeraManager { chimera = null; currentModelsMap.clear(); - this.chimeraRestPort = 0; + this.chimeraRestPort = 0; structureManager.clearOnChimeraExit(); } @@ -554,8 +554,8 @@ public class ChimeraManager for (String chimeraPath : chimeraPaths) { File path = new File(chimeraPath); - // enable the next line to simulate Chimera not installed - // File path = new File(chimeraPath + "x"); + // uncomment the next line to simulate Chimera not installed + // path = new File(chimeraPath + "x"); if (!path.canExecute()) { error += "File '" + path + "' does not exist.\n"; @@ -565,6 +565,8 @@ public class ChimeraManager { List args = new ArrayList(); args.add(chimeraPath); + // shows Chimera output window but suppresses REST responses: + // args.add("--debug"); args.add("--start"); args.add("RESTServer"); ProcessBuilder pb = new ProcessBuilder(args); @@ -589,7 +591,7 @@ public class ChimeraManager // TODO: [Optional] Check Chimera version and show a warning if below 1.8 // Ask Chimera to give us updates // startListening(); // later - see ChimeraListener - return true; + return (chimeraRestPort > 0); } // Tell the user that Chimera could not be started because of an error @@ -606,21 +608,29 @@ public class ChimeraManager InputStream readChan = chimera.getInputStream(); BufferedReader lineReader = new BufferedReader(new InputStreamReader( readChan)); - String response = null; + StringBuilder responses = new StringBuilder(); try { - // expect: REST server on host 127.0.0.1 port port_number - response = lineReader.readLine(); - String [] tokens = response.split(" "); - if (tokens.length == 7 && "port".equals(tokens[5])) { - port = Integer.parseInt(tokens[6]); - logger.info("Chimera REST service listening on port " - + chimeraRestPort); + String response = lineReader.readLine(); + while (response != null) + { + responses.append("\n" + response); + // expect: REST server on host 127.0.0.1 port port_number + if (response.startsWith("REST server")) + { + String[] tokens = response.split(" "); + if (tokens.length == 7 && "port".equals(tokens[5])) + { + port = Integer.parseInt(tokens[6]); + break; + } + } + response = lineReader.readLine(); } } catch (Exception e) { - logger.error("Failed to get REST port number from " + response + ": " - + e.getMessage()); + logger.error("Failed to get REST port number from " + responses + + ": " + e.getMessage()); } finally { try @@ -630,6 +640,13 @@ public class ChimeraManager { } } + if (port == 0) + { + System.err + .println("Failed to start Chimera with REST service, response was: " + + responses); + } + logger.info("Chimera REST service listening on port " + chimeraRestPort); return port; } @@ -758,7 +775,7 @@ public class ChimeraManager */ public List sendChimeraCommand(String command, boolean reply) { -// System.out.println("chimeradebug>> " + command); + // System.out.println("chimeradebug>> " + command); if (!isChimeraLaunched() || command == null || "".equals(command.trim())) { @@ -809,16 +826,18 @@ public class ChimeraManager List reply = new ArrayList(); BufferedReader response = null; - try { + try + { response = HttpClientUtils .doHttpUrlPost(restUrl, commands, 100, 5000); String line = ""; - while ((line = response.readLine()) != null) { + while ((line = response.readLine()) != null) + { reply.add(line); } } catch (Exception e) { - logger.error("REST call " + command + " failed: " + e.getMessage()); + logger.error("REST call '" + command + "' failed: " + e.getMessage()); } finally { if (response != null)