X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fext%2Fedu%2Fucsf%2Frbvi%2Fstrucviz2%2FChimeraManager.java;h=c0c7c467cfb728c3535864d2151c78465264f2d9;hb=dddd6b7545b9b75f1d387f838b66867d4c19c1f8;hp=7cc72cff5d198e41f5d7f3358a69a3e0fd36c042;hpb=fddf3084802b37e5cee17829e32692a4aac3e60d;p=jalview.git diff --git a/src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java b/src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java index 7cc72cf..c0c7c46 100644 --- a/src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java +++ b/src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java @@ -178,6 +178,7 @@ public class ChimeraManager { logger.info("chimera open " + modelPath); // stopListening(); + List modelList = getModelList(); List response = null; // TODO: [Optional] Handle modbase models if (type == ModelType.MODBASE_MODEL) @@ -197,76 +198,29 @@ public class ChimeraManager logger.warn("Could not open " + modelPath); return null; } - List models = new ArrayList(); - int[] modelNumbers = null; - if (type == ModelType.PDB_MODEL) + + // patch for Jalview - set model name in Chimera + // TODO: find a variant that works for sub-models + for (ChimeraModel newModel : getModelList()) { - for (String line : response) + if (!modelList.contains(newModel)) { - if (line.startsWith("#")) - { - modelNumbers = ChimUtils.parseOpenedModelNumber(line); - if (modelNumbers != null) - { - int modelNumber = ChimUtils.makeModelKey(modelNumbers[0], - modelNumbers[1]); - if (currentModelsMap.containsKey(modelNumber)) - { - continue; - } - ChimeraModel newModel = new ChimeraModel(modelName, type, - modelNumbers[0], modelNumbers[1]); - currentModelsMap.put(modelNumber, newModel); - models.add(newModel); - - // - // patch for Jalview - set model name in Chimera - // TODO: find a variant that works for sub-models - sendChimeraCommand("setattr M name " + modelName + " #" - + modelNumbers[0], false); - // end patch for Jalview - - modelNumbers = null; - } - } - } - } - else - { - // TODO: [Optional] Open smiles from file would fail. Do we need it? - // If parsing fails, iterate over all open models to get the right one - List openModels = getModelList(); - for (ChimeraModel openModel : openModels) - { - String openModelName = openModel.getModelName(); - if (openModelName.endsWith("...")) - { - openModelName = openModelName.substring(0, - openModelName.length() - 3); - } - if (modelPath.startsWith(openModelName)) - { - openModel.setModelName(modelPath); - int modelNumber = ChimUtils - .makeModelKey(openModel.getModelNumber(), - openModel.getSubModelNumber()); - if (!currentModelsMap.containsKey(modelNumber)) - { - currentModelsMap.put(modelNumber, openModel); - models.add(openModel); - } - } + newModel.setModelName(modelName); + sendChimeraCommand( + "setattr M name " + modelName + " #" + + newModel.getModelNumber(), false); + modelList.add(newModel); } } // assign color and residues to open models - for (ChimeraModel newModel : models) + for (ChimeraModel chimeraModel : modelList) { // get model color - Color modelColor = getModelColor(newModel); + Color modelColor = getModelColor(chimeraModel); if (modelColor != null) { - newModel.setModelColor(modelColor); + chimeraModel.setModelColor(modelColor); } // Get our properties (default color scheme, etc.) @@ -276,13 +230,13 @@ public class ChimeraManager // Create the information we need for the navigator if (type != ModelType.SMILES) { - addResidues(newModel); + addResidues(chimeraModel); } } sendChimeraCommand("focus", false); // startListening(); // see ChimeraListener - return models; + return modelList; } /** @@ -302,13 +256,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 +308,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 +333,7 @@ public class ChimeraManager { chimera = null; currentModelsMap.clear(); - this.chimeraRestPort = 0; + this.chimeraRestPort = 0; structureManager.clearOnChimeraExit(); } @@ -630,8 +584,7 @@ public class ChimeraManager } catch (Exception e) { logger.error("Failed to get REST port number from " + responses - + ": " - + e.getMessage()); + + ": " + e.getMessage()); } finally { try @@ -776,7 +729,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())) { @@ -827,16 +780,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)