X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;h=0652fb5fa0951b268c3a6a5720c2dc6afdf8bc97;hb=0b2e0f52baa343973a6c9b1e652ff584ce418fa0;hp=f628699dee035546020be7c2d4c014efbd6ab8d9;hpb=2755c8765d39da0da2be087b301d47fc153d9236;p=jalview.git diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index f628699..0652fb5 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -493,7 +493,9 @@ public class Sequence implements SequenceI public char[] getSequence(int start, int end) { if (start < 0) + { start = 0; + } // JBPNote - left to user to pad the result here (TODO:Decide on this // policy) if (start >= sequence.length) @@ -512,16 +514,7 @@ public class Sequence implements SequenceI return reply; } - /** - * make a new Sequence object from start to end (including gaps) over this - * seqeunce - * - * @param start - * int - * @param end - * int - * @return SequenceI - */ + @Override public SequenceI getSubSequence(int start, int end) { if (start < 0) @@ -621,14 +614,7 @@ public class Sequence implements SequenceI } } - /** - * Returns the sequence position for an alignment position - * - * @param i - * column index in alignment (from 1) - * - * @return residue number for residue (left of and) nearest ith column - */ + @Override public int findPosition(int i) { int j = 0; @@ -893,22 +879,30 @@ public class Sequence implements SequenceI return datasetSequence; } + /** + * Returns a new array containing this sequence's annotations, or null. + */ public AlignmentAnnotation[] getAnnotation() { - if (annotation == null) - { - return null; - } - - AlignmentAnnotation[] ret = new AlignmentAnnotation[annotation.size()]; - for (int r = 0; r < ret.length; r++) - { - ret[r] = annotation.elementAt(r); - } + return annotation == null ? null : annotation + .toArray(new AlignmentAnnotation[annotation.size()]); + } - return ret; + /** + * Returns true if this sequence has the given annotation (by object + * identity). + */ + @Override + public boolean hasAnnotation(AlignmentAnnotation ann) + { + return annotation == null ? false : annotation.contains(ann); } + /** + * Add the given annotation, if not already added, and set its sequence ref to + * be this sequence. Does nothing if this sequence's annotations already + * include this annotation (by identical object reference). + */ public void addAlignmentAnnotation(AlignmentAnnotation annotation) { if (this.annotation == null) @@ -928,7 +922,9 @@ public class Sequence implements SequenceI { this.annotation.removeElement(annotation); if (this.annotation.size() == 0) + { this.annotation = null; + } } } @@ -1040,7 +1036,9 @@ public class Sequence implements SequenceI for (int i = 0; i < annotations.length; i++) { if (annotations[i] != null) + { addAlignmentAnnotation(annotations[i]); + } } } } @@ -1082,33 +1080,6 @@ public class Sequence implements SequenceI return anns; } - /** - * Returns a list of any annotations on the sequence that match the given - * calcId (source) and label (type). Null values do not match. - * - * @param calcId - * @param label - * @return - */ - @Override - public List getAlignmentAnnotations(String calcId, - String label) - { - List result = new ArrayList(); - if (annotation != null) - { - for (AlignmentAnnotation ann : annotation) - { - if (ann.calcId != null && ann.calcId.equals(calcId) - && ann.label != null && ann.label.equals(label)) - { - result.add(ann); - } - } - } - return result; - } - public boolean updatePDBIds() { if (datasetSequence != null) @@ -1264,4 +1235,28 @@ public class Sequence implements SequenceI return rna; } + /** + * Returns a (possibly empty) list of any annotations that match on given + * calcId (source) and label (type). Null values do not match. + * + * @param calcId + * @param label + */ + @Override + public List getAlignmentAnnotations(String calcId, + String label) + { + List result = new ArrayList(); + if (this.annotation != null) { + for (AlignmentAnnotation ann : annotation) { + if (ann.calcId != null && ann.calcId.equals(calcId) + && ann.label != null && ann.label.equals(label)) + { + result.add(ann); + } + } + } + return result; + } + }