JAL-2778 Revert back to old synchronisation
authorkiramt <k.mourao@dundee.ac.uk>
Wed, 21 Feb 2018 08:00:35 +0000 (08:00 +0000)
committerkiramt <k.mourao@dundee.ac.uk>
Wed, 21 Feb 2018 08:00:35 +0000 (08:00 +0000)
src/jalview/datamodel/Alignment.java
src/jalview/datamodel/AlignmentI.java
src/jalview/gui/SeqCanvas.java

index c564618..8b74129 100755 (executable)
@@ -36,7 +36,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
-import java.util.function.Consumer;
 
 /**
  * Data structure to hold and manipulate a multiple sequence alignment
@@ -1940,14 +1939,4 @@ public class Alignment implements AlignmentI
   {
     hiddenCols = cols;
   }
-
-  @Override
-  public void forEachSequence(Consumer<SequenceI> c, int start, int end)
-  {
-    synchronized (sequences)
-    {
-      sequences.subList(start, end).forEach(c);
-    }
-  }
-
 }
index b076ea7..084b80e 100755 (executable)
@@ -24,7 +24,6 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.function.Consumer;
 
 /**
  * Data structure to hold and manipulate a multiple sequence alignment
@@ -583,6 +582,4 @@ public interface AlignmentI extends AnnotatedCollectionI
 
   public void setHiddenColumns(HiddenColumns cols);
 
-  public void forEachSequence(Consumer<SequenceI> c, int start, int end);
-
 }
index 1be4728..f885100 100755 (executable)
@@ -43,7 +43,6 @@ import java.awt.Shape;
 import java.awt.image.BufferedImage;
 import java.beans.PropertyChangeEvent;
 import java.util.List;
-import java.util.function.Consumer;
 
 import javax.swing.JComponent;
 
@@ -1099,97 +1098,72 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
    * @param yOffset
    *          vertical offset at which to draw (for wrapped alignments)
    */
-  private void draw(final Graphics g, final int startRes, final int endRes,
-          final int startSeq, final int endSeq, final int offset)
+  private void draw(Graphics g, int startRes, int endRes, int startSeq,
+          int endSeq, int offset)
   {
+    int charHeight = av.getCharHeight();
+    int charWidth = av.getCharWidth();
+
     g.setFont(av.getFont());
     seqRdr.prepare(g, av.isRenderGaps());
 
-    // First draw the sequences
-    av.getAlignment().forEachSequence(new Consumer<SequenceI>()
-    {
-      int i = startSeq;
+    SequenceI nextSeq;
 
-      @Override
-      public void accept(SequenceI s)
+    // / First draw the sequences
+    // ///////////////////////////
+    for (int i = startSeq; i <= endSeq; i++)
+    {
+      nextSeq = av.getAlignment().getSequenceAt(i);
+      if (nextSeq == null)
       {
-        int heightPosition = offset + ((i - startSeq) * av.getCharHeight());
-        drawSequence(s, g, startRes, endRes, heightPosition, i);
-        i++;
+        // occasionally, a race condition occurs such that the alignment row is
+        // empty
+        continue;
       }
-    }, startSeq, endSeq + 1);
-
-    // now selection groups
-    if (av.getSelectionGroup() != null
-            || av.getAlignment().getGroups().size() > 0)
-    {
-      drawGroupsBoundaries(g, startRes, endRes, startSeq, endSeq, offset);
-    }
-
-  }
-
-  /**
-   * Draw a single sequence
-   * 
-   * @param nextSeq
-   *          the next sequence to draw
-   * @param g
-   *          graphics context
-   * @param startRes
-   *          offset of the first column in the visible region (0..)
-   * @param endRes
-   *          offset of the last column in the visible region (0..)
-   * @param heightPosition
-   *          vertical location of the sequence in the alignment
-   * @param i
-   *          index of sequence
-   */
-  private void drawSequence(SequenceI nextSeq, Graphics g, int startRes,
-          int endRes, int heightPosition, int i)
-  {
-    int charWidth = av.getCharWidth();
-
-    if (nextSeq == null)
-    {
-      // occasionally, a race condition occurs such that the alignment row is
-      // empty
-      // TODO Don't think this will happen any more?
-      return;
-    }
-    seqRdr.drawSequence(nextSeq, av.getAlignment().findAllGroups(nextSeq),
-            startRes, endRes, heightPosition);
+      seqRdr.drawSequence(nextSeq, av.getAlignment().findAllGroups(nextSeq),
+              startRes, endRes, offset + ((i - startSeq) * charHeight));
 
-    if (av.isShowSequenceFeatures())
-    {
-      fr.drawSequence(g, nextSeq, startRes, endRes, heightPosition, false);
-    }
+      if (av.isShowSequenceFeatures())
+      {
+        fr.drawSequence(g, nextSeq, startRes, endRes,
+                offset + ((i - startSeq) * charHeight), false);
+      }
 
-    /*
-     * highlight search Results once sequence has been drawn
-     */
-    if (av.hasSearchResults())
-    {
-      SearchResultsI searchResults = av.getSearchResults();
-      int[] visibleResults = searchResults.getResults(nextSeq, startRes,
-              endRes);
-      if (visibleResults != null)
+      /*
+       * highlight search Results once sequence has been drawn
+       */
+      if (av.hasSearchResults())
       {
-        for (int r = 0; r < visibleResults.length; r += 2)
+        SearchResultsI searchResults = av.getSearchResults();
+        int[] visibleResults = searchResults.getResults(nextSeq, startRes,
+                endRes);
+        if (visibleResults != null)
         {
-          seqRdr.drawHighlightedText(nextSeq, visibleResults[r],
-                  visibleResults[r + 1],
-                  (visibleResults[r] - startRes) * charWidth,
-                  heightPosition);
+          for (int r = 0; r < visibleResults.length; r += 2)
+          {
+            seqRdr.drawHighlightedText(nextSeq, visibleResults[r],
+                    visibleResults[r + 1],
+                    (visibleResults[r] - startRes) * charWidth,
+                    offset + ((i - startSeq) * charHeight));
+          }
         }
       }
+
+      if (av.cursorMode && cursorY == i && cursorX >= startRes
+              && cursorX <= endRes)
+      {
+        seqRdr.drawCursor(nextSeq, cursorX,
+                (cursorX - startRes) * charWidth,
+                offset + ((i - startSeq) * charHeight));
+      }
     }
 
-    if (av.cursorMode && cursorY == i && cursorX >= startRes
-            && cursorX <= endRes)
+    if (av.getSelectionGroup() != null
+            || av.getAlignment().getGroups().size() > 0)
     {
-      seqRdr.drawCursor(nextSeq, cursorX, (cursorX - startRes) * charWidth,
-              heightPosition);
+      drawGroupsBoundaries(g, startRes, endRes, startSeq, endSeq, offset);
     }
+
   }
 
   void drawGroupsBoundaries(Graphics g1, int startRes, int endRes,