X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureCommandsBase.java;h=e688b64c3be735ab8fe6ad58ec977855bc88d7ee;hb=27f24d1f14b8e8704d72797286f7a6e5f60b2119;hp=44764db439a872510de274500ccda446153ca556;hpb=fea6f8ed76719fd78b600adfea8891dafb8c9d12;p=jalview.git diff --git a/src/jalview/structure/StructureCommandsBase.java b/src/jalview/structure/StructureCommandsBase.java index 44764db..e688b64 100644 --- a/src/jalview/structure/StructureCommandsBase.java +++ b/src/jalview/structure/StructureCommandsBase.java @@ -1,22 +1,14 @@ 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; +import jalview.api.AlignmentViewPanel; +import jalview.datamodel.SequenceI; + /** * A base class holding methods useful to all classes that implement commands * for structure viewers @@ -39,7 +31,8 @@ public abstract class StructureCommandsBase implements StructureCommandsI } @Override - public String[] setAttributesForFeatures(StructureSelectionManager ssm, + public List setAttributesForFeatures( + StructureSelectionManager ssm, String[] files, SequenceI[][] sequence, AlignmentViewPanel avp) { // default does nothing, override where this is implemented @@ -74,8 +67,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 @@ -94,35 +87,35 @@ public abstract class StructureCommandsBase implements StructureCommandsI * 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,7 +126,8 @@ 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); @@ -147,21 +141,25 @@ public abstract class StructureCommandsBase implements StructureCommandsI * @param colour * @return */ - protected abstract String getColourCommand(String atomSpec, Color colour); + protected abstract StructureCommandI getColourCommand(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 getColourCommand(atomSpec, col); } /**