JAL-2591 simplifying hidden columns usage
authorkiramt <k.mourao@dundee.ac.uk>
Wed, 7 Jun 2017 06:58:34 +0000 (07:58 +0100)
committerkiramt <k.mourao@dundee.ac.uk>
Wed, 7 Jun 2017 06:58:34 +0000 (07:58 +0100)
15 files changed:
src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/AnnotationColumnChooser.java
src/jalview/appletgui/AnnotationLabels.java
src/jalview/appletgui/ScalePanel.java
src/jalview/appletgui/SeqCanvas.java
src/jalview/datamodel/HiddenColumns.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/AnnotationColumnChooser.java
src/jalview/gui/AnnotationLabels.java
src/jalview/gui/Jalview2XML.java
src/jalview/gui/ScalePanel.java
src/jalview/gui/SeqCanvas.java
src/jalview/io/AnnotationFile.java
src/jalview/io/JSONFile.java
src/jalview/util/MappingUtils.java

index 2eed311..02d30bb 100644 (file)
@@ -1798,7 +1798,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   synchronized void slideSequences(boolean right, int size)
   {
-    List<SequenceI> sg = new Vector<SequenceI>();
+    List<SequenceI> sg = new Vector<>();
     if (viewport.cursorMode)
     {
       sg.add(viewport.getAlignment().getSequenceAt(
@@ -1911,7 +1911,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     SequenceGroup sg = viewport.getSelectionGroup();
     copiedSequences = new StringBuffer();
-    Map<Integer, SequenceI> orderedSeqs = new HashMap<Integer, SequenceI>();
+    Map<Integer, SequenceI> orderedSeqs = new HashMap<>();
     for (int i = 0; i < sg.getSize(); i++)
     {
       SequenceI seq = sg.getSequenceAt(i);
index 0a4748c..c49a5f3 100644 (file)
@@ -298,11 +298,9 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
         HiddenColumns oldHidden = av
                 .getAnnotationColumnSelectionState()
                 .getOldHiddenColumns();
-        if (oldHidden != null
-                && !oldHidden.getHiddenRegions().isEmpty())
+        if (oldHidden != null)
         {
-          for (Iterator<int[]> itr = oldHidden.getHiddenRegions()
-                  .iterator(); itr.hasNext();)
+          for (Iterator<int[]> itr = oldHidden.iterator(); itr.hasNext();)
           {
             int positions[] = itr.next();
             av.hideColumns(positions[0], positions[1]);
index 307301d..9ba9cce 100755 (executable)
@@ -50,7 +50,6 @@ import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Vector;
 
 public class AnnotationLabels extends Panel implements ActionListener,
         MouseListener, MouseMotionListener
@@ -838,13 +837,8 @@ public class AnnotationLabels extends Panel implements ActionListener,
             + sq.getSequenceAsString() + "\n");
     if (av.hasHiddenColumns())
     {
-      jalview.appletgui.AlignFrame.copiedHiddenColumns = new Vector();
-      for (int[] region : av.getAlignment().getHiddenColumns()
-              .getHiddenRegions())
-      {
-        jalview.appletgui.AlignFrame.copiedHiddenColumns
-                .addElement(new int[] { region[0], region[1] });
-      }
+      av.getAlignment().getHiddenColumns().getHiddenColumnsCopy(
+              jalview.appletgui.AlignFrame.copiedHiddenColumns);
     }
   }
 
index ec3e246..7ead681 100755 (executable)
@@ -337,8 +337,7 @@ public class ScalePanel extends Panel implements MouseMotionListener,
     res = av.getAlignment().getHiddenColumns().adjustForHiddenColumns(res);
 
     reveal = null;
-    for (int[] region : av.getAlignment().getHiddenColumns()
-            .getHiddenRegions())
+    for (int[] region : av.getAlignment().getHiddenColumns())
     {
       if (res + 1 == region[0] || res - 1 == region[1])
       {
index 46a908e..b96c491 100755 (executable)
@@ -570,7 +570,7 @@ public class SeqCanvas extends Panel implements ViewportListenerI
       if (av.hasHiddenColumns())
       {
         HiddenColumns hidden = av.getAlignment().getHiddenColumns();
-        for (int[] region : hidden.getHiddenRegions())
+        for (int[] region : hidden)
         {
           int hideStart = region[0];
           int hideEnd = region[1];
index da0b854..9722c0a 100644 (file)
@@ -6,11 +6,12 @@ import jalview.util.ShiftList;
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-public class HiddenColumns
+public class HiddenColumns implements Iterable<int[]>
 {
   private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
   
@@ -567,18 +568,7 @@ public class HiddenColumns
       {
         if (copy.hiddenColumns != null)
         {
-          hiddenColumns = new Vector<>(copy.hiddenColumns.size());
-          for (int i = 0, j = copy.hiddenColumns.size(); i < j; i++)
-          {
-            int[] rh, cp;
-            rh = copy.hiddenColumns.elementAt(i);
-            if (rh != null)
-            {
-              cp = new int[rh.length];
-              System.arraycopy(rh, 0, cp, 0, rh.length);
-              hiddenColumns.addElement(cp);
-            }
-          }
+          hiddenColumns = copy.copyHiddenRegions();
         }
       }
     }
@@ -588,6 +578,64 @@ public class HiddenColumns
     }
   }
 
+  private Vector<int[]> copyHiddenRegions()
+  {
+    Vector<int[]> copy = new Vector<>(hiddenColumns.size());
+    for (int i = 0, j = hiddenColumns.size(); i < j; i++)
+    {
+      int[] rh, cp;
+      rh = hiddenColumns.elementAt(i);
+      if (rh != null)
+      {
+        cp = new int[rh.length];
+        System.arraycopy(rh, 0, cp, 0, rh.length);
+        copy.addElement(cp);
+      }
+    }
+    return copy;
+  }
+
+  private ArrayList<int[]> copyHiddenRegionsToArrayList()
+  {
+    ArrayList<int[]> copy = new ArrayList<>(hiddenColumns.size());
+    for (int i = 0, j = hiddenColumns.size(); i < j; i++)
+    {
+      int[] rh, cp;
+      rh = hiddenColumns.elementAt(i);
+      if (rh != null)
+      {
+        cp = new int[rh.length];
+        System.arraycopy(rh, 0, cp, 0, rh.length);
+        copy.add(cp);
+      }
+    }
+    return copy;
+  }
+
+  public void getHiddenColumnsCopy(Vector<int[]> copy)
+  {
+    try
+    {
+      lock.readLock().lock();
+      copy = copyHiddenRegions();
+    } finally
+    {
+      lock.readLock().unlock();
+    }
+  }
+
+  public void getHiddenColumnsCopy(ArrayList<int[]> copy)
+  {
+    try
+    {
+      lock.readLock().lock();
+      copy = copyHiddenRegionsToArrayList();
+    } finally
+    {
+      lock.readLock().unlock();
+    }
+  }
+
   /**
    * propagate shift in alignment columns to column selection
    * 
@@ -1539,4 +1587,14 @@ public class HiddenColumns
     }
   }
 
+  @Override
+  public Iterator<int[]> iterator()
+  {
+    if (hiddenColumns == null)
+    {
+      return Collections.<int[]> emptyList().iterator();
+    }
+    return hiddenColumns.iterator();
+  }
+
 }
index a9a970f..5ec9db9 100644 (file)
@@ -167,7 +167,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   public AlignViewControllerI avc;
 
-  List<AlignmentPanel> alignPanels = new ArrayList<AlignmentPanel>();
+  List<AlignmentPanel> alignPanels = new ArrayList<>();
 
   /**
    * Last format used to load or save alignments in this window
@@ -396,8 +396,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     addKeyListener();
 
-    final List<AlignmentPanel> selviews = new ArrayList<AlignmentPanel>();
-    final List<AlignmentPanel> origview = new ArrayList<AlignmentPanel>();
+    final List<AlignmentPanel> selviews = new ArrayList<>();
+    final List<AlignmentPanel> origview = new ArrayList<>();
     final String menuLabel = MessageManager
             .getString("label.copy_format_from");
     ViewSelectionMenu vsel = new ViewSelectionMenu(menuLabel,
@@ -410,7 +410,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                 origview.clear();
                 origview.add(alignPanel);
                 // make an array of all alignment panels except for this one
-                List<AlignmentPanel> aps = new ArrayList<AlignmentPanel>(
+                List<AlignmentPanel> aps = new ArrayList<>(
                         Arrays.asList(Desktop.getAlignmentPanels(null)));
                 aps.remove(AlignFrame.this.alignPanel);
                 return aps.toArray(new AlignmentPanel[aps.size()]);
@@ -1732,7 +1732,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   synchronized void slideSequences(boolean right, int size)
   {
-    List<SequenceI> sg = new ArrayList<SequenceI>();
+    List<SequenceI> sg = new ArrayList<>();
     if (viewport.cursorMode)
     {
       sg.add(viewport.getAlignment().getSequenceAt(
@@ -1751,7 +1751,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       return;
     }
 
-    List<SequenceI> invertGroup = new ArrayList<SequenceI>();
+    List<SequenceI> invertGroup = new ArrayList<>();
 
     for (SequenceI seq : viewport.getAlignment().getSequences())
     {
@@ -1884,9 +1884,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     ArrayList<int[]> hiddenColumns = null;
     if (viewport.hasHiddenColumns())
     {
-      hiddenColumns = new ArrayList<int[]>();
-      int hiddenOffset = viewport.getSelectionGroup().getStartRes(), hiddenCutoff = viewport
-              .getSelectionGroup().getEndRes();
+      hiddenColumns = new ArrayList<>();
+      int hiddenOffset = viewport.getSelectionGroup().getStartRes(),
+              hiddenCutoff = viewport.getSelectionGroup().getEndRes();
       for (int[] region : viewport.getAlignment().getHiddenColumns()
               .getHiddenRegions())
       {
@@ -1994,7 +1994,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       }
 
       int alwidth = 0;
-      ArrayList<Integer> newGraphGroups = new ArrayList<Integer>();
+      ArrayList<Integer> newGraphGroups = new ArrayList<>();
       int fgroup = -1;
 
       if (newAlignment)
@@ -2826,7 +2826,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    */
   protected List<String> getExistingViewNames(List<Component> comps)
   {
-    List<String> existingNames = new ArrayList<String>();
+    List<String> existingNames = new ArrayList<>();
     for (Component comp : comps)
     {
       if (comp instanceof AlignmentPanel)
@@ -3760,7 +3760,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     List<Component> comps = PaintRefresher.components.get(viewport
             .getSequenceSetId());
-    List<TreePanel> treePanels = new ArrayList<TreePanel>();
+    List<TreePanel> treePanels = new ArrayList<>();
     for (Component comp : comps)
     {
       if (comp instanceof TreePanel)
@@ -4020,7 +4020,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       @Override
       public void run()
       {
-        final List<JMenuItem> legacyItems = new ArrayList<JMenuItem>();
+        final List<JMenuItem> legacyItems = new ArrayList<>();
         try
         {
           // System.err.println("Building ws menu again "
@@ -4035,7 +4035,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           // TODO: group services by location as well as function and/or
           // introduce
           // object broker mechanism.
-          final Vector<JMenu> wsmenu = new Vector<JMenu>();
+          final Vector<JMenu> wsmenu = new Vector<>();
           final IProgressIndicator af = me;
 
           /*
@@ -4403,8 +4403,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     // Java's Transferable for native dnd
     evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
     Transferable t = evt.getTransferable();
-    List<String> files = new ArrayList<String>();
-    List<DataSourceType> protocols = new ArrayList<DataSourceType>();
+    List<String> files = new ArrayList<>();
+    List<DataSourceType> protocols = new ArrayList<>();
 
     try
     {
@@ -4424,8 +4424,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         /**
          * Object[] { String,SequenceI}
          */
-        ArrayList<Object[]> filesmatched = new ArrayList<Object[]>();
-        ArrayList<String> filesnotmatched = new ArrayList<String>();
+        ArrayList<Object[]> filesmatched = new ArrayList<>();
+        ArrayList<String> filesnotmatched = new ArrayList<>();
         for (int i = 0; i < files.size(); i++)
         {
           String file = files.get(i).toString();
@@ -5416,7 +5416,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     {
       return;
     }
-    List<SequenceI> cdnaSeqs = new ArrayList<SequenceI>();
+    List<SequenceI> cdnaSeqs = new ArrayList<>();
     for (SequenceI aaSeq : alignment.getSequences())
     {
       for (AlignedCodonFrame acf : mappings)
index 5122f29..405b43b 100644 (file)
@@ -244,11 +244,9 @@ public class AnnotationColumnChooser extends AnnotationRowFilter implements
         HiddenColumns oldHidden = av
                 .getAnnotationColumnSelectionState()
                 .getOldHiddenColumns();
-        if (oldHidden != null
-                && !oldHidden.getHiddenRegions().isEmpty())
+        if (oldHidden != null)
         {
-          for (Iterator<int[]> itr = oldHidden.getHiddenRegions()
-                  .iterator(); itr.hasNext();)
+          for (Iterator<int[]> itr = oldHidden.iterator(); itr.hasNext();)
           {
             int positions[] = itr.next();
             av.hideColumns(positions[0], positions[1]);
index 8ca1a4e..07a5ad9 100755 (executable)
@@ -967,14 +967,11 @@ public class AnnotationLabels extends JPanel implements MouseListener,
             .setContents(new StringSelection(output), Desktop.instance);
 
     ArrayList<int[]> hiddenColumns = null;
+
     if (av.hasHiddenColumns())
     {
-      hiddenColumns = new ArrayList<int[]>();
-      for (int[] region : av.getAlignment().getHiddenColumns()
-              .getHiddenRegions())
-      {
-        hiddenColumns.add(new int[] { region[0], region[1] });
-      }
+      av.getAlignment().getHiddenColumns()
+              .getHiddenColumnsCopy(hiddenColumns);
     }
 
     Desktop.jalviewClipboard = new Object[] { seqs, ds, // what is the dataset
index 1675bf0..637b590 100644 (file)
@@ -1421,11 +1421,8 @@ public class Jalview2XML
         }
         else
         {
-          for (int c = 0; c < hidden.getHiddenRegions()
-                  .size(); c++)
+          for (int[] region : hidden)
           {
-            int[] region = hidden.getHiddenRegions()
-                    .get(c);
             HiddenColumns hc = new HiddenColumns();
             hc.setStart(region[0]);
             hc.setEnd(region[1]);
index 8a24937..81befd8 100755 (executable)
@@ -403,8 +403,7 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
 
     res = av.getAlignment().getHiddenColumns().adjustForHiddenColumns(res);
 
-    for (int[] region : av.getAlignment().getHiddenColumns()
-            .getHiddenRegions())
+    for (int[] region : av.getAlignment().getHiddenColumns())
     {
       if (res + 1 == region[0] || res - 1 == region[1])
       {
index 0e5e1b8..6f3ff58 100755 (executable)
@@ -40,7 +40,6 @@ import java.awt.RenderingHints;
 import java.awt.Shape;
 import java.awt.image.BufferedImage;
 import java.beans.PropertyChangeEvent;
-import java.util.List;
 
 import javax.swing.JComponent;
 
@@ -662,14 +661,11 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
     }
     else
     {
-      List<int[]> regions = av.getAlignment().getHiddenColumns()
-              .getHiddenRegions();
-
       int screenY = 0;
       int blockStart = startRes;
       int blockEnd = endRes;
 
-      for (int[] region : regions)
+      for (int[] region : av.getAlignment().getHiddenColumns())
       {
         int hideStart = region[0];
         int hideEnd = region[1];
index c3e71da..2b78cb6 100755 (executable)
@@ -171,9 +171,8 @@ public class AnnotationFile
     if (cs != null && cs.hasHiddenColumns())
     {
       text.append("VIEW_HIDECOLS\t");
-      List<int[]> hc = cs.getHiddenRegions();
       boolean comma = false;
-      for (int[] r : hc)
+      for (int[] r : cs.getHiddenRegions())
       {
         if (!comma)
         {
@@ -202,8 +201,8 @@ public class AnnotationFile
       StringBuffer colours = new StringBuffer();
       StringBuffer graphLine = new StringBuffer();
       StringBuffer rowprops = new StringBuffer();
-      Hashtable<Integer, String> graphGroup = new Hashtable<Integer, String>();
-      Hashtable<Integer, Object[]> graphGroup_refs = new Hashtable<Integer, Object[]>();
+      Hashtable<Integer, String> graphGroup = new Hashtable<>();
+      Hashtable<Integer, Object[]> graphGroup_refs = new Hashtable<>();
       BitSet graphGroupSeen = new BitSet();
 
       java.awt.Color color;
@@ -748,8 +747,8 @@ public class AnnotationFile
           BufferedReader in) throws Exception
   {
     nlinesread = 0;
-    ArrayList<Object[]> combineAnnotation_calls = new ArrayList<Object[]>();
-    ArrayList<Object[]> deferredAnnotation_calls = new ArrayList<Object[]>();
+    ArrayList<Object[]> combineAnnotation_calls = new ArrayList<>();
+    ArrayList<Object[]> deferredAnnotation_calls = new ArrayList<>();
     boolean modified = false;
     String groupRef = null;
     Hashtable groupRefRows = new Hashtable();
@@ -1112,7 +1111,7 @@ public class AnnotationFile
         modified = true;
       }
       // Resolve the groupRefs
-      Hashtable<String, SequenceGroup> groupRefLookup = new Hashtable<String, SequenceGroup>();
+      Hashtable<String, SequenceGroup> groupRefLookup = new Hashtable<>();
       Enumeration en = groupRefRows.keys();
 
       while (en.hasMoreElements())
index 816346a..a48ee33 100644 (file)
@@ -279,11 +279,8 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     // hidden column business
     if (getViewport().hasHiddenColumns())
     {
-      List<int[]> hiddenCols = getViewport().getAlignment()
-              .getHiddenColumns()
-              .getHiddenRegions();
       StringBuilder hiddenColsBuilder = new StringBuilder();
-      for (int[] range : hiddenCols)
+      for (int[] range : getViewport().getAlignment().getHiddenColumns())
       {
         hiddenColsBuilder.append(";").append(range[0]).append("-")
                 .append(range[1]);
@@ -323,7 +320,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
           SequenceI[] sqs, FeatureRenderer fr)
   {
     displayedFeatures = (fr == null) ? null : fr.getFeaturesDisplayed();
-    List<SequenceFeaturesPojo> sequenceFeaturesPojo = new ArrayList<SequenceFeaturesPojo>();
+    List<SequenceFeaturesPojo> sequenceFeaturesPojo = new ArrayList<>();
     if (sqs == null)
     {
       return sequenceFeaturesPojo;
@@ -374,7 +371,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   public static List<AlignmentAnnotationPojo> annotationToJsonPojo(
           Vector<AlignmentAnnotation> annotations)
   {
-    List<AlignmentAnnotationPojo> jsonAnnotations = new ArrayList<AlignmentAnnotationPojo>();
+    List<AlignmentAnnotationPojo> jsonAnnotations = new ArrayList<>();
     if (annotations == null)
     {
       return jsonAnnotations;
@@ -471,8 +468,8 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         parseHiddenCols(jvSettingsJsonObj);
       }
 
-      hiddenSequences = new ArrayList<SequenceI>();
-      seqMap = new Hashtable<String, Sequence>();
+      hiddenSequences = new ArrayList<>();
+      seqMap = new Hashtable<>();
       for (Iterator<JSONObject> sequenceIter = seqJsonArray.iterator(); sequenceIter
               .hasNext();)
       {
@@ -515,7 +512,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         int endRes = Integer.valueOf(seqGrpObj.get("endRes").toString());
         JSONArray sequenceRefs = (JSONArray) seqGrpObj.get("sequenceRefs");
 
-        ArrayList<SequenceI> grpSeqs = new ArrayList<SequenceI>();
+        ArrayList<SequenceI> grpSeqs = new ArrayList<>();
         if (sequenceRefs.size() > 0)
         {
           Iterator<String> seqHashIter = sequenceRefs.iterator();
@@ -649,7 +646,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
   public void parseHiddenSeqRefsAsList(JSONObject jvSettingsJson)
   {
-    hiddenSeqRefs = new ArrayList<String>();
+    hiddenSeqRefs = new ArrayList<>();
     String hiddenSeqs = (String) jvSettingsJson.get("hiddenSeqs");
     if (hiddenSeqs != null && !hiddenSeqs.isEmpty())
     {
index 926ccc7..f75286a 100644 (file)
@@ -108,7 +108,7 @@ public final class MappingUtils
      * Cache a copy of the target sequences so we can mimic successive edits on
      * them. This lets us compute mappings for all edits in the set.
      */
-    Map<SequenceI, SequenceI> targetCopies = new HashMap<SequenceI, SequenceI>();
+    Map<SequenceI, SequenceI> targetCopies = new HashMap<>();
     for (SequenceI seq : mapTo.getSequences())
     {
       SequenceI ds = seq.getDatasetSequence();
@@ -433,7 +433,7 @@ public final class MappingUtils
           boolean undo, AlignmentI mapTo, List<AlignedCodonFrame> mappings)
   {
     SequenceI[] sortOrder = command.getSequenceOrder(undo);
-    List<SequenceI> mappedOrder = new ArrayList<SequenceI>();
+    List<SequenceI> mappedOrder = new ArrayList<>();
     int j = 0;
 
     /*
@@ -540,7 +540,7 @@ public final class MappingUtils
               toSequences, fromGapChar);
     }
 
-    for (int[] hidden : hiddencols.getHiddenRegions())
+    for (int[] hidden : hiddencols)
     {
       mapHiddenColumns(hidden, codonFrames, newHidden, fromSequences,
               toSequences, fromGapChar);
@@ -696,7 +696,7 @@ public final class MappingUtils
   public static List<char[]> findCodonsFor(SequenceI seq, int col,
           List<AlignedCodonFrame> mappings)
   {
-    List<char[]> result = new ArrayList<char[]>();
+    List<char[]> result = new ArrayList<>();
     int dsPos = seq.findPosition(col);
     for (AlignedCodonFrame mapping : mappings)
     {
@@ -775,7 +775,7 @@ public final class MappingUtils
           SequenceI sequence, List<AlignedCodonFrame> mappings,
           List<SequenceI> filterList)
   {
-    List<AlignedCodonFrame> result = new ArrayList<AlignedCodonFrame>();
+    List<AlignedCodonFrame> result = new ArrayList<>();
     if (sequence == null || mappings == null)
     {
       return result;