JAL-2759 Replaced StringBuffer with StringBuilder; after review
[jalview.git] / src / jalview / datamodel / VisibleContigsIterator.java
index d7594f9..6d3f43d 100644 (file)
@@ -5,7 +5,9 @@ import java.util.Iterator;
 import java.util.List;
 
 /**
- * An iterator which iterates over visible regions in a range.
+ * An iterator which iterates over visible regions in a range. Provides a
+ * special "endsAtHidden" indicator to allow callers to determine if the final
+ * visible column is adjacent to a hidden region.
  */
 public class VisibleContigsIterator implements Iterator<int[]>
 {
@@ -13,6 +15,8 @@ public class VisibleContigsIterator implements Iterator<int[]>
 
   private int currentPosition = 0;
 
+  private boolean endsAtHidden = false;
+
   VisibleContigsIterator(int start, int end,
           List<int[]> hiddenColumns)
   {
@@ -24,6 +28,7 @@ public class VisibleContigsIterator implements Iterator<int[]>
 
       for (int[] region : hiddenColumns)
       {
+        endsAtHidden = false;
         hideStart = region[0];
         hideEnd = region[1];
 
@@ -34,8 +39,17 @@ public class VisibleContigsIterator implements Iterator<int[]>
         }
         if (hideStart > vstart)
         {
-          int[] contig = new int[] { vstart, hideStart - 1 };
-          vcontigs.add(contig);
+          if (end - 1 > hideStart - 1)
+          {
+            int[] contig = new int[] { vstart, hideStart - 1 };
+            vcontigs.add(contig);
+            endsAtHidden = true;
+          }
+          else
+          {
+            int[] contig = new int[] { vstart, end - 1 };
+            vcontigs.add(contig);
+          }
         }
         vstart = hideEnd + 1;
 
@@ -50,6 +64,7 @@ public class VisibleContigsIterator implements Iterator<int[]>
       {
         int[] contig = new int[] { vstart, end - 1 };
         vcontigs.add(contig);
+        endsAtHidden = false;
       }
     }
     else
@@ -72,5 +87,10 @@ public class VisibleContigsIterator implements Iterator<int[]>
     currentPosition++;
     return result;
   }
+
+  public boolean endsAtHidden()
+  {
+    return endsAtHidden;
+  }
 }