X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Frbvi%2Fchimera%2FChimeraCommands.java;h=bfad8fb7e1dee597505a432f184cceff622d6646;hb=0b6e9403e96ee9f0d41211b2f90130ff850c4e98;hp=ac10b0b1c21f997ac135cac6fcf04af79ab04066;hpb=2107a91322a1988a8a6b724c74f9d244795341e3;p=jalview.git diff --git a/src/jalview/ext/rbvi/chimera/ChimeraCommands.java b/src/jalview/ext/rbvi/chimera/ChimeraCommands.java index ac10b0b..bfad8fb 100644 --- a/src/jalview/ext/rbvi/chimera/ChimeraCommands.java +++ b/src/jalview/ext/rbvi/chimera/ChimeraCommands.java @@ -20,6 +20,8 @@ */ package jalview.ext.rbvi.chimera; +import java.util.Locale; + import java.awt.Color; import java.util.ArrayList; import java.util.Arrays; @@ -40,12 +42,30 @@ import jalview.util.ColorUtils; */ public class ChimeraCommands extends StructureCommandsBase { + // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/focus.html + private static final StructureCommand FOCUS_VIEW = new StructureCommand("focus"); + + // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/listen.html#listresattr + private static final StructureCommand LIST_RESIDUE_ATTRIBUTES = new StructureCommand("list resattr"); + + // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/stop.html + private static final StructureCommand CLOSE_CHIMERA = new StructureCommand("stop really"); + + // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/listen.html + private static final StructureCommand STOP_NOTIFY_SELECTION = new StructureCommand("listen stop selection"); + + private static final StructureCommand STOP_NOTIFY_MODELS = new StructureCommand("listen stop models"); + + // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/listen.html#listselection + private static final StructureCommand GET_SELECTION = new StructureCommand("list selection level residue"); + private static final StructureCommand SHOW_BACKBONE = new StructureCommand( "~display all;~ribbon;chain @CA|P"); private static final StructureCommandI COLOUR_BY_CHARGE = new StructureCommand( "color white;color red ::ASP,GLU;color blue ::LYS,ARG;color yellow ::CYS"); + // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/rainbow.html private static final StructureCommandI COLOUR_BY_CHAIN = new StructureCommand( "rainbow chain"); @@ -154,6 +174,7 @@ public class ChimeraCommands extends StructureCommandsBase * @return * @see https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/setattr.html */ + @Override protected String makeAttributeName(String featureType) { String attName = super.makeAttributeName(featureType); @@ -162,7 +183,7 @@ public class ChimeraCommands extends StructureCommandsBase * Chimera treats an attribute name ending in 'color' as colour-valued; * Jalview doesn't, so prevent this by appending an underscore */ - if (attName.toUpperCase().endsWith("COLOR")) + if (attName.toUpperCase(Locale.ROOT).endsWith("COLOR")) { attName += "_"; } @@ -198,8 +219,7 @@ public class ChimeraCommands extends StructureCommandsBase @Override public StructureCommandI focusView() { - // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/focus.html - return new StructureCommand("focus"); + return FOCUS_VIEW; } @Override @@ -239,7 +259,7 @@ public class ChimeraCommands extends StructureCommandsBase @Override public List superposeStructures(AtomSpecModel ref, - AtomSpecModel spec) + AtomSpecModel spec, boolean isNucleotide) { /* * Form Chimera match command to match spec to ref @@ -370,31 +390,59 @@ public class ChimeraCommands extends StructureCommandsBase return new StructureCommand("open " + file); } - /** - * Overrides the default method to concatenate colour commands into one - */ @Override - public List colourBySequence( - Map colourMap) + public StructureCommandI openSession(String filepath) { - List commands = new ArrayList<>(); - StringBuilder sb = new StringBuilder(colourMap.size() * 20); - boolean first = true; - for (Object key : colourMap.keySet()) - { - Color colour = (Color) key; - final AtomSpecModel colourData = colourMap.get(colour); - StructureCommandI command = getColourCommand(colourData, colour); - if (!first) - { - sb.append(getCommandSeparator()); - } - first = false; - sb.append(command.getCommand()); - } + // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/filetypes.html + // this version of the command has no dependency on file extension + return new StructureCommand("open chimera:" + filepath); + } - commands.add(new StructureCommand(sb.toString())); - return commands; + @Override + public StructureCommandI closeViewer() + { + return CLOSE_CHIMERA; + } + + @Override + public List startNotifications(String uri) + { + // https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/midas/listen.html + List cmds = new ArrayList<>(); + cmds.add(new StructureCommand("listen start models url " + uri)); + cmds.add(new StructureCommand("listen start select prefix SelectionChanged url " + uri)); + return cmds; + } + + @Override + public List stopNotifications() + { + List cmds = new ArrayList<>(); + cmds.add(STOP_NOTIFY_MODELS); + cmds.add(STOP_NOTIFY_SELECTION); + return cmds; + } + + @Override + public StructureCommandI getSelectedResidues() + { + return GET_SELECTION; + } + + @Override + public StructureCommandI listResidueAttributes() + { + return LIST_RESIDUE_ATTRIBUTES; + } + + @Override + public StructureCommandI getResidueAttributes(String attName) + { + // this alternative command + // list residues spec ':*/attName' attr attName + // doesn't report 'None' values (which is good), but + // fails for 'average.bfactor' (which is bad): + return new StructureCommand("list residues attr '" + attName + "'"); } }