Merge branch 'develop' into feature/JAL-1713_overviewInProject
[jalview.git] / src / jalview / datamodel / Alignment.java
index a2a152a..7f97f33 100755 (executable)
  */
 package jalview.datamodel;
 
-import jalview.analysis.AlignmentUtils;
-import jalview.datamodel.AlignedCodonFrame.SequenceToSequenceMapping;
-import jalview.io.FastaFile;
-import jalview.util.Comparison;
-import jalview.util.LinkedIdentityHashSet;
-import jalview.util.MessageManager;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashSet;
@@ -40,6 +34,13 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
 
+import jalview.analysis.AlignmentUtils;
+import jalview.datamodel.AlignedCodonFrame.SequenceToSequenceMapping;
+import jalview.io.FastaFile;
+import jalview.util.Comparison;
+import jalview.util.LinkedIdentityHashSet;
+import jalview.util.MessageManager;
+
 /**
  * Data structure to hold and manipulate a multiple sequence alignment
  */
@@ -1652,8 +1653,10 @@ public class Alignment implements AlignmentI, AutoCloseable
   public Iterable<AlignmentAnnotation> findAnnotations(SequenceI seq,
           String calcId, String label)
   {
-    return AlignmentAnnotation.findAnnotations(
-            Arrays.asList(getAlignmentAnnotation()), seq, calcId, label);
+    return annotations == null ? null
+            : AlignmentAnnotation.findAnnotations(
+                    Arrays.asList(getAlignmentAnnotation()), seq, calcId,
+                    label);
   }
 
   @Override
@@ -2032,4 +2035,68 @@ public class Alignment implements AlignmentI, AutoCloseable
     }
   }
 
+  ////
+  //// Contact Matrix Holder Boilerplate
+  ////
+  ContactMapHolder cmholder = new ContactMapHolder();
+
+  @Override
+  public Collection<ContactMatrixI> getContactMaps()
+  {
+    return cmholder.getContactMaps();
+  }
+
+  @Override
+  public ContactMatrixI getContactMatrixFor(AlignmentAnnotation ann)
+  {
+    return cmholder.getContactMatrixFor(ann);
+  }
+
+  @Override
+  public ContactListI getContactListFor(AlignmentAnnotation _aa, int column)
+  {
+    ContactListI cl = cmholder.getContactListFor(_aa, column);
+    if (cl == null && _aa.groupRef != null)
+    {
+      cl = _aa.groupRef.getContactListFor(_aa, column);
+    }
+    if (cl == null && _aa.sequenceRef != null)
+    {
+      int spos = _aa.sequenceRef.findPosition(column);
+      if (spos >= _aa.sequenceRef.getStart()
+              && spos <= 1 + _aa.sequenceRef.getEnd())
+      {
+        cl = _aa.sequenceRef.getContactListFor(_aa, spos);
+        if (cl == null && _aa.sequenceRef.getDatasetSequence() != null)
+        {
+          _aa.sequenceRef.getDatasetSequence().getContactListFor(_aa, spos);
+        }
+      }
+    }
+    return cl;
+  }
+
+  @Override
+  public AlignmentAnnotation addContactList(ContactMatrixI cm)
+  {
+    AlignmentAnnotation aa = cmholder.addContactList(cm);
+
+    Annotation _aa[] = new Annotation[getWidth()];
+    Annotation dummy = new Annotation(0.0f);
+    for (int i = 0; i < _aa.length; _aa[i++] = dummy)
+    {
+      ;
+    }
+    aa.annotations = _aa;
+    addAnnotation(aa);
+    return aa;
+  }
+
+  @Override
+  public void addContactListFor(AlignmentAnnotation annotation,
+          ContactMatrixI cm)
+  {
+    cmholder.addContactListFor(annotation, cm);
+
+  }
 }