X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureCommandsBase.java;h=57544b750838c2709e775110768c96e4323ac4a1;hb=d87b55e45cc1e6a5b7df3865ded1b87a0e3dc7ff;hp=44764db439a872510de274500ccda446153ca556;hpb=fea6f8ed76719fd78b600adfea8891dafb8c9d12;p=jalview.git diff --git a/src/jalview/structure/StructureCommandsBase.java b/src/jalview/structure/StructureCommandsBase.java index 44764db..57544b7 100644 --- a/src/jalview/structure/StructureCommandsBase.java +++ b/src/jalview/structure/StructureCommandsBase.java @@ -1,18 +1,7 @@ package jalview.structure; -import jalview.api.AlignViewportI; -import jalview.api.AlignmentViewPanel; -import jalview.api.FeatureRenderer; -import jalview.api.SequenceRenderer; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.HiddenColumns; -import jalview.datamodel.SequenceI; -import jalview.renderer.seqfeatures.FeatureColourFinder; -import jalview.util.Comparison; - import java.awt.Color; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -26,6 +15,8 @@ import java.util.Map.Entry; */ public abstract class StructureCommandsBase implements StructureCommandsI { + public static final String NAMESPACE_PREFIX = "jv_"; + private static final String CMD_SEPARATOR = ";"; /** @@ -38,14 +29,6 @@ public abstract class StructureCommandsBase implements StructureCommandsI return CMD_SEPARATOR; } - @Override - public String[] setAttributesForFeatures(StructureSelectionManager ssm, - String[] files, SequenceI[][] sequence, AlignmentViewPanel avp) - { - // default does nothing, override where this is implemented - return null; - } - /** * Returns the lowest model number used by the structure viewer * @@ -74,8 +57,8 @@ public abstract class StructureCommandsBase implements StructureCommandsI * @param chain */ public static final void addAtomSpecRange(Map map, - Object value, - int model, int startPos, int endPos, String chain) + Object value, String model, int startPos, int endPos, + String chain) { /* * Get/initialize map of data for the colour @@ -91,38 +74,60 @@ public abstract class StructureCommandsBase implements StructureCommandsI } /** + * Makes a structure viewer attribute name for a Jalview feature type by + * prefixing it with "jv_", and replacing any non-alphanumeric characters with + * an underscore + * + * @param featureType + * @return + */ + protected String makeAttributeName(String featureType) + { + StringBuilder sb = new StringBuilder(); + if (featureType != null) + { + for (char c : featureType.toCharArray()) + { + sb.append(Character.isLetterOrDigit(c) ? c : '_'); + } + } + String attName = NAMESPACE_PREFIX + sb.toString(); + return attName; + } + + /** * Traverse the map of colours/models/chains/positions to construct a list of * 'color' commands (one per distinct colour used). The format of each command * is specific to the structure viewer. + *

+ * The default implementation returns a single command containing one command + * per colour, concatenated. * * @param colourMap * @return */ @Override - public String[] colourBySequence(Map colourMap) + public List colourBySequence( + Map colourMap) { - /* - * This version concatenates all commands into a single String (semi-colon - * delimited). If length limit issues arise, refactor to return one color - * command per colour. - */ - List commands = new ArrayList<>(); - StringBuilder sb = new StringBuilder(256); - boolean firstColour = true; + List commands = new ArrayList<>(); + StringBuilder sb = new StringBuilder(colourMap.size() * 20); + boolean first = true; for (Object key : colourMap.keySet()) { Color colour = (Color) key; - if (!firstColour) + final AtomSpecModel colourData = colourMap.get(colour); + StructureCommandI command = getColourCommand(colourData, colour); + if (!first) { - sb.append(getCommandSeparator()).append(" "); + sb.append(getCommandSeparator()); } - firstColour = false; - final AtomSpecModel colourData = colourMap.get(colour); - sb.append(getColourCommand(colourData, colour)); + first = false; + sb.append(command.getCommand()); } - commands.add(sb.toString()); - return commands.toArray(new String[commands.size()]); + commands.add(new StructureCommand(sb.toString())); + return commands; } /** @@ -133,10 +138,11 @@ public abstract class StructureCommandsBase implements StructureCommandsI * @param colour * @return */ - protected String getColourCommand(AtomSpecModel atomSpecModel, Color colour) + protected StructureCommandI getColourCommand(AtomSpecModel atomSpecModel, + Color colour) { String atomSpec = getAtomSpec(atomSpecModel, false); - return getColourCommand(atomSpec, colour); + return colourResidues(atomSpec, colour); } /** @@ -147,21 +153,25 @@ public abstract class StructureCommandsBase implements StructureCommandsI * @param colour * @return */ - protected abstract String getColourCommand(String atomSpec, Color colour); + protected abstract StructureCommandI colourResidues(String atomSpec, + Color colour); @Override - public String colourByResidues(Map colours) + public List colourByResidues( + Map colours) { - StringBuilder cmd = new StringBuilder(12 * colours.size()); - + List commands = new ArrayList<>(); for (Entry entry : colours.entrySet()) { - String residue = entry.getKey(); - String atomSpec = getResidueSpec(residue); - cmd.append(getColourCommand(atomSpec, entry.getValue())); - cmd.append(getCommandSeparator()); + commands.add(colourResidue(entry.getKey(), entry.getValue())); } - return cmd.toString(); + return commands; + } + + private StructureCommandI colourResidue(String resName, Color col) + { + String atomSpec = getResidueSpec(resName); + return colourResidues(atomSpec, col); } /** @@ -206,4 +216,42 @@ public abstract class StructureCommandsBase implements StructureCommandsI * @return */ protected abstract String getResidueSpec(String residue); + + @Override + public List setAttributes( + Map> featureValues) + { + // default does nothing, override where this is implemented + return null; + } + + @Override + public List startNotifications(String uri) + { + return null; + } + + @Override + public List stopNotifications() + { + return null; + } + + @Override + public StructureCommandI getSelectedResidues() + { + return null; + } + + @Override + public StructureCommandI listResidueAttributes() + { + return null; + } + + @Override + public StructureCommandI getResidueAttributes(String attName) + { + return null; + } }