JAL-3081 new method to get alignment sequence order lookup
[jalview.git] / src / jalview / datamodel / Alignment.java
index 3ba35b6..5739b7c 100755 (executable)
@@ -32,6 +32,7 @@ import java.util.Arrays;
 import java.util.BitSet;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.Iterator;
@@ -712,39 +713,21 @@ public class Alignment implements AlignmentI
   
     for (int i = 0; i < sequences.size(); i++)
     {
-      if (getSequenceAt(i).getLength() > maxLength)
-      {
-        maxLength = getSequenceAt(i).getLength();
-      }
+      maxLength = Math.max(maxLength, getSequenceAt(i).getLength());
     }
-  
     return maxLength;
   }
-  /*
+
   @Override
-  public int getWidth()
+  public int getVisibleWidth()
   {
-    final Wrapper temp = new Wrapper();
-  
-    forEachSequence(new Consumer<SequenceI>()
+    int w = getWidth();
+    if (hiddenCols != null)
     {
-      @Override
-      public void accept(SequenceI s)
-      {
-        if (s.getLength() > temp.inner)
-        {
-          temp.inner = s.getLength();
-        }
-      }
-    }, 0, sequences.size() - 1);
-  
-    return temp.inner;
+      w -= hiddenCols.getSize();
+    }
+    return w;
   }
-  
-  public static class Wrapper
-  {
-    public int inner;
-  }*/
 
   /**
    * DOCUMENT ME!
@@ -1922,9 +1905,12 @@ public class Alignment implements AlignmentI
   }
 
   @Override
-  public void setHiddenColumns(HiddenColumns cols)
+  public boolean setHiddenColumns(HiddenColumns cols)
   {
+    boolean changed = cols == null ? hiddenCols != null
+            : !cols.equals(hiddenCols);
     hiddenCols = cols;
+    return changed;
   }
 
   @Override
@@ -2039,4 +2025,23 @@ public class Alignment implements AlignmentI
     }
   }
 
+  /**
+   * Returns a map from sequence to position (0, 1,...) in the alignment
+   */
+  @Override
+  public Map<SequenceI, Integer> getSequencePositions()
+  {
+    Map<SequenceI, Integer> map = new HashMap<>();
+
+    synchronized (sequences)
+    {
+      int i = sequences.size();
+      for (int j = 0; j < i; j++)
+      {
+        map.put(sequences.get(j), Integer.valueOf(j));
+      }
+    }
+    return map;
+  }
+
 }