public void stopListening()
{
- sendChimeraCommand("listen stop models ; listen stop selection ", false);
+ // TODO send this command when viewer connection is closed in Jalview
+ String command = isChimeraX
+ ? "info notify stop models jalview; info notify stop selection jalview"
+ : "listen stop models ; listen stop selection ";
+ sendChimeraCommand(command, false);
}
/**
*/
public void startListening(String uri)
{
- sendChimeraCommand("listen start models url " + uri
- + ";listen start select prefix SelectionChanged url " + uri,
- false);
+ /*
+ * listen for model changes
+ */
+ String command = isChimeraX
+ ? ("info notify start models prefix ModelChanged jalview url "
+ + uri)
+ : ("listen start models url " + uri);
+ sendChimeraCommand(command, false);
+
+ /*
+ * listen for selection changes
+ */
+ command = isChimeraX
+ ? ("info notify start selection jalview prefix SelectionChanged url "
+ + uri)
+ : ("listen start select prefix SelectionChanged url " + uri);
+ sendChimeraCommand(command, false);
}
/**
public List<String> getSelectedResidueSpecs()
{
List<String> selectedResidues = new ArrayList<>();
- List<String> chimeraReply = sendChimeraCommand(
- "list selection level residue", true);
+
+ /*
+ * skip for now if ChimeraX - request times out
+ */
+ if (isChimeraX)
+ {
+ // return selectedResidues;
+ }
+
+ // in fact 'listinfo' (undocumented) works in ChimeraX
+ String command = (isChimeraX
+ ? "view" /*"info selection level residue" */
+ : "list selection level residue");
+ List<String> chimeraReply = sendChimeraCommand(command, true);
if (chimeraReply != null)
{
/*
- * expect 0, 1 or more lines of the format
+ * expect 0, 1 or more lines of the format either
+ * Chimera:
* residue id #0:43.A type GLY
- * where we are only interested in the atomspec #0.43.A
+ * ChimeraX:
+ * residue id /A:89 name THR index 88
+ * We are only interested in the atomspec (third token of the reply)
*/
for (String inputLine : chimeraReply)
{
String[] inputLineParts = inputLine.split("\\s+");
- if (inputLineParts.length == 5)
+ if (inputLineParts.length >= 5)
{
selectedResidues.add(inputLineParts[2]);
}
public List<ChimeraModel> getModelList()
{
List<ChimeraModel> modelList = new ArrayList<>();
- modelList.add(new ChimeraModel("4zhp", ModelType.PDB_MODEL, 1, 0));
- return modelList; // ChimeraX doesn't have 'list models' command
- // List<String> list = sendChimeraCommand("list models type molecule",
- // true);
- // if (list != null)
- // {
- // for (String modelLine : list)
- // {
- // ChimeraModel chimeraModel = new ChimeraModel(modelLine);
- // modelList.add(chimeraModel);
- // }
- // }
- // return modelList;
+ String command = "list models type "
+ + (isChimeraX ? "AtomicStructure" : "molecule");
+ List<String> list = sendChimeraCommand(command, true);
+ if (list != null)
+ {
+ for (String modelLine : list)
+ {
+ try
+ {
+ ChimeraModel chimeraModel = new ChimeraModel(modelLine);
+ modelList.add(chimeraModel);
+ } catch (NullPointerException e)
+ {
+ // hack for now
+ }
+ }
+ }
+ return modelList;
}
/**
public List<String> getAttrList()
{
List<String> attributes = new ArrayList<>();
- final List<String> reply = sendChimeraCommand("list resattr", true);
+ String command = (isChimeraX ? "info " : "list") + "resattr";
+ final List<String> reply = sendChimeraCommand(command, true);
if (reply != null)
{
for (String inputLine : reply)
{
String restUrl = "http://127.0.0.1:" + this.chimeraRestPort + "/run";
List<NameValuePair> commands = new ArrayList<>(1);
- String encoded = command.replace(" ", "+").replace("#", "%23")
- .replace("|", "%7C").replace(";", "%3B");
- commands.add(new BasicNameValuePair("command", encoded));
+ String method = isChimeraX() ? "GET" : "POST";
+ if ("GET".equals(method))
+ {
+ command = command.replace(" ", "+").replace("#", "%23")
+ .replace("|", "%7C").replace(";", "%3B");
+ }
+ commands.add(new BasicNameValuePair("command", command));
List<String> reply = new ArrayList<>();
BufferedReader response = null;
try
{
- if (isChimeraX())
- {
- response = HttpClientUtils.doHttpGet(restUrl, commands,
- CONNECTION_TIMEOUT_MS, REST_REPLY_TIMEOUT_MS);
- }
- else
- {
- response = HttpClientUtils.doHttpUrlPost(restUrl, commands,
- CONNECTION_TIMEOUT_MS, REST_REPLY_TIMEOUT_MS);
- }
+ response = "GET".equals(method)
+ ? HttpClientUtils.doHttpGet(restUrl, commands,
+ CONNECTION_TIMEOUT_MS, REST_REPLY_TIMEOUT_MS)
+ : HttpClientUtils.doHttpUrlPost(restUrl, commands,
+ CONNECTION_TIMEOUT_MS, REST_REPLY_TIMEOUT_MS);
String line = "";
while ((line = response.readLine()) != null)
{
{
return isChimeraX;
}
+
+ public void setChimeraX(boolean b)
+ {
+ isChimeraX = b;
+ }
}