JAL-1492 JAL-1397 make AnnotatedCollectionI context aware so groups can be coloured...
authorJim Procter <jprocter@dundee.ac.uk>
Thu, 1 May 2014 14:38:57 +0000 (15:38 +0100)
committerJim Procter <jprocter@dundee.ac.uk>
Thu, 1 May 2014 14:38:57 +0000 (15:38 +0100)
src/jalview/datamodel/Alignment.java
src/jalview/datamodel/AnnotatedCollectionI.java
src/jalview/datamodel/SequenceGroup.java
src/jalview/schemes/AnnotationColourGradient.java
src/jalview/schemes/TCoffeeColourScheme.java

index ed65dd5..35efe4f 100755 (executable)
@@ -371,7 +371,7 @@ public class Alignment implements AlignmentI
             return;
           }
         }
-
+        sg.setContext(this);
         groups.add(sg);
       }
     }
@@ -446,6 +446,9 @@ public class Alignment implements AlignmentI
       {
         removeAnnotationForGroup(null);
       }
+      for (SequenceGroup sg:groups) {
+        sg.setContext(null);
+      }
       groups.clear();
     }
   }
@@ -460,6 +463,7 @@ public class Alignment implements AlignmentI
       {
         removeAnnotationForGroup(g);
         groups.remove(g);
+        g.setContext(null);
       }
     }
   }
@@ -1498,4 +1502,14 @@ public int getStartRes()
 {
   return 0;
 }
+
+/* In the case of AlignmentI - returns the dataset for the alignment, if set
+ * (non-Javadoc)
+ * @see jalview.datamodel.AnnotatedCollectionI#getContext()
+ */
+@Override
+public AnnotatedCollectionI getContext()
+{
+  return dataset;
+}
 }
index 510437a..0f856ee 100644 (file)
@@ -31,4 +31,9 @@ public interface AnnotatedCollectionI extends SequenceCollectionI
 
   Iterable<AlignmentAnnotation> findAnnotation(String calcId);
 
+  /**
+   * context for this annotated collection
+   * @return null or the collection upon which this collection is defined (e.g. alignment, parent group).
+   */
+  AnnotatedCollectionI getContext();
 }
index 521bdbe..1df45a2 100755 (executable)
@@ -500,10 +500,6 @@ public class SequenceGroup implements AnnotatedCollectionI
     {
       return;
     }
-    if (cs != null)
-    {
-      cs.alignmentChanged(this, null);
-    }
     try
     {
       Hashtable cnsns[] = AAFrequency.calculate(sequences, startRes,
@@ -515,7 +511,6 @@ public class SequenceGroup implements AnnotatedCollectionI
       if (cs != null)
       {
         cs.setConsensus(cnsns);
-        cs.alignmentChanged(this, null);
       }
 
       if ((conservation != null)
@@ -535,10 +530,13 @@ public class SequenceGroup implements AnnotatedCollectionI
           if (cs.conservationApplied())
           {
             cs.setConservation(c);
-            cs.alignmentChanged(this, null);
           }
         }
       }
+      if (cs != null)
+      {
+        cs.alignmentChanged(context!=null ? context : this, null);
+      }
     } catch (java.lang.OutOfMemoryError err)
     {
       // TODO: catch OOM
@@ -1248,4 +1246,21 @@ public class SequenceGroup implements AnnotatedCollectionI
   {
     sequences.clear();
   }
+  private AnnotatedCollectionI context;
+  /**
+   * set the alignment or group context for this group
+   * @param context
+   */
+  public void setContext(AnnotatedCollectionI context)
+  {
+    this.context = context; 
+  }
+  /* (non-Javadoc)
+   * @see jalview.datamodel.AnnotatedCollectionI#getContext()
+   */
+  @Override
+  public AnnotatedCollectionI getContext()
+  {
+    return context;
+  }
 }
index f619d07..3606db9 100755 (executable)
@@ -19,6 +19,7 @@
 package jalview.schemes;
 
 import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.GraphLine;
 import jalview.datamodel.SequenceCollectionI;
@@ -138,7 +139,9 @@ public class AnnotationColourGradient extends FollowerColourScheme
       {
         seqannot = new IdentityHashMap<SequenceI, AlignmentAnnotation>();
       }
-      for (AlignmentAnnotation alan : alignment.findAnnotation(annotation
+      // resolve the context containing all the annotation for the sequence
+      AnnotatedCollectionI alcontext = alignment instanceof AlignmentI ? alignment : alignment.getContext();
+      for (AlignmentAnnotation alan : alcontext.findAnnotation(annotation
               .getCalcId()))
       {
         if (alan.sequenceRef != null
index 38d1200..1c8e469 100644 (file)
@@ -85,8 +85,9 @@ public class TCoffeeColourScheme extends ResidueColourScheme
     // Search alignment to get all tcoffee annotation and pick one set of
     // annotation to use to colour seqs.
     seqMap = new IdentityHashMap<SequenceI, Color[]>();
+    AnnotatedCollectionI alcontext = alignment instanceof AlignmentI ? alignment : alignment.getContext();
     int w = 0;
-    for (AlignmentAnnotation al : alignment
+    for (AlignmentAnnotation al : alcontext
             .findAnnotation(TCoffeeScoreFile.TCOFFEE_SCORE))
     {
       if (al.sequenceRef != null && !al.belowAlignment)