From 73ffad785a317d4014bc448ea4d8a7303e8a4350 Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 24 Jul 2009 15:10:05 +0000 Subject: [PATCH] implement new insert annotation row method and ensure group annotation rows are removed when groups are removed --- src/jalview/datamodel/Alignment.java | 47 ++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index 7fcbda2..afe7032 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -25,6 +25,10 @@ import jalview.analysis.*; /** * Data structure to hold and manipulate a multiple sequence alignment */ +/** + * @author JimP + * + */ public class Alignment implements AlignmentI { protected Alignment dataset; @@ -352,6 +356,14 @@ public class Alignment implements AlignmentI { if (groups.contains(g)) { + if (annotations!=null && annotations.length>0) + { + if (g.hasAnnotationRows()) + { // remove any annotation references. + deleteAnnotation(g.getConsensus());// todo - create=false flag so we don't create another object unnecessarily + deleteAnnotation(g.getConservationRow()); + } + } groups.removeElement(g); } } @@ -606,14 +618,19 @@ public class Alignment implements AlignmentI return swap; } - /** - * DOCUMENT ME! - * - * @param aa - * DOCUMENT ME! + /* (non-Javadoc) + * @see jalview.datamodel.AlignmentI#addAnnotation(jalview.datamodel.AlignmentAnnotation) */ public void addAnnotation(AlignmentAnnotation aa) { + addAnnotation(aa, -1); + } + + /* (non-Javadoc) + * @see jalview.datamodel.AlignmentI#addAnnotation(jalview.datamodel.AlignmentAnnotation, int) + */ + public void addAnnotation(AlignmentAnnotation aa, int pos) + { int aSize = 1; if (annotations != null) { @@ -621,16 +638,24 @@ public class Alignment implements AlignmentI } AlignmentAnnotation[] temp = new AlignmentAnnotation[aSize]; - - temp[aSize - 1] = aa; - int i = 0; - + if (pos==-1 || pos>=aSize) { + temp[aSize - 1] = aa; + } else { + temp[pos] = aa; + } if (aSize > 1) { - for (i = 0; i < (aSize - 1); i++) + int p=0; + for (i = 0; i < (aSize-1); i++,p++) { - temp[i] = annotations[i]; + if (p==pos) + { + p++; + } + if (p