package ext.edu.ucsf.rbvi.strucviz2;
+import jalview.ws.HttpClientUtils;
+
import java.awt.Color;
import java.io.BufferedReader;
import java.io.File;
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.
*/
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";
{
List<String> args = new ArrayList<String>();
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);
// 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
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 + ": "
+ logger.error("Failed to get REST port number from " + responses
+ + ": "
+ e.getMessage());
} finally
{
{
}
}
+ 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;
}