JAL-845 linked protein/dna 'slave' further PoC functionality
[jalview.git] / src / jalview / gui / Desktop.java
index 6eeb0c2..e2a57af 100644 (file)
@@ -68,6 +68,7 @@ import java.lang.reflect.Constructor;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.StringTokenizer;
 import java.util.Vector;
 import java.util.concurrent.ExecutorService;
@@ -1638,39 +1639,41 @@ public class Desktop extends jalview.jbgui.GDesktop implements
    */
   public static AlignmentPanel[] getAlignmentPanels(String alignmentId)
   {
-    int count = 0;
     if (Desktop.desktop == null)
     {
       // no frames created and in headless mode
       // TODO: verify that frames are recoverable when in headless mode
       return null;
     }
-    JInternalFrame[] frames = Desktop.desktop.getAllFrames();
-    ArrayList aps = new ArrayList();
-    for (int t = 0; t < frames.length; t++)
+    List<AlignmentPanel> aps = new ArrayList<AlignmentPanel>();
+    AlignFrame[] frames = getAlignFrames();
+    if (frames == null)
+    {
+      return null;
+    }
+    for (AlignFrame af : frames)
     {
-      if (frames[t] instanceof AlignFrame)
+      for (AlignmentPanel ap : af.alignPanels)
       {
-        AlignFrame af = (AlignFrame) frames[t];
-        for (int a = 0; a < af.alignPanels.size(); a++)
+        if (alignmentId.equals(ap.av.getSequenceSetId()))
         {
-          if (alignmentId.equals(((AlignmentPanel) af.alignPanels
-                  .elementAt(a)).av.getSequenceSetId()))
-          {
-            aps.add(af.alignPanels.elementAt(a));
-          }
+          aps.add(ap);
         }
       }
+      // for (int a = 0; a < af.alignPanels.size(); a++)
+      // {
+      // if (alignmentId.equals(af.alignPanels
+      // .get(a).av.getSequenceSetId()))
+      // {
+      // aps.add(af.alignPanels.get(a));
+      // }
+      // }
     }
     if (aps.size() == 0)
     {
       return null;
     }
-    AlignmentPanel[] vap = new AlignmentPanel[aps.size()];
-    for (int t = 0; t < vap.length; t++)
-    {
-      vap[t] = (AlignmentPanel) aps.get(t);
-    }
+    AlignmentPanel[] vap = aps.toArray(new AlignmentPanel[aps.size()]);
     return vap;
   }
 
@@ -1699,11 +1702,10 @@ public class Desktop extends jalview.jbgui.GDesktop implements
             {
               for (int a = 0; a < afr.alignPanels.size(); a++)
               {
-                if (sequenceSetId.equals(((AlignmentPanel) afr.alignPanels
-                        .elementAt(a)).av.getSequenceSetId()))
+                if (sequenceSetId.equals(afr.alignPanels.get(a).av
+                        .getSequenceSetId()))
                 {
-                  viewp.addElement(((AlignmentPanel) afr.alignPanels
-                          .elementAt(a)).av);
+                  viewp.addElement(afr.alignPanels.get(a).av);
                 }
               }
             }
@@ -1734,7 +1736,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
 
     for (int i = 0; i < size; i++)
     {
-      AlignmentPanel ap = (AlignmentPanel) af.alignPanels.elementAt(i);
+      AlignmentPanel ap = af.alignPanels.get(i);
       AlignFrame newaf = new AlignFrame(ap);
       if (ap.av.explodedPosition != null
               && !ap.av.explodedPosition.equals(af.getBounds()))
@@ -1768,7 +1770,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
         boolean gatherThis = false;
         for (int a = 0; a < af.alignPanels.size(); a++)
         {
-          AlignmentPanel ap = (AlignmentPanel) af.alignPanels.elementAt(a);
+          AlignmentPanel ap = af.alignPanels.get(a);
           if (viewId.equals(ap.av.getSequenceSetId()))
           {
             gatherThis = true;
@@ -2277,7 +2279,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
   /**
    * Accessor method to quickly get all the AlignmentFrames loaded.
    */
-  public static AlignFrame[] getAlignframes()
+  public static AlignFrame[] getAlignFrames()
   {
     JInternalFrame[] frames = Desktop.desktop.getAllFrames();
 
@@ -2285,35 +2287,43 @@ public class Desktop extends jalview.jbgui.GDesktop implements
     {
       return null;
     }
-    Vector avp = new Vector();
-    try
+    List<AlignFrame> avp = new ArrayList<AlignFrame>();
+    // REVERSE ORDER
+    for (int i = frames.length - 1; i > -1; i--)
     {
-      // REVERSE ORDER
-      for (int i = frames.length - 1; i > -1; i--)
+      if (frames[i] instanceof AlignFrame)
       {
-        if (frames[i] instanceof AlignFrame)
+        avp.add((AlignFrame) frames[i]);
+      }
+      else if (frames[i] instanceof SplitFrame)
+      {
+        /*
+         * Also check for a split frame containing an AlignFrame
+         */
+        SplitFrame sf = (SplitFrame) frames[i];
+        if (sf.getTopComponent() instanceof AlignFrame)
         {
-          AlignFrame af = (AlignFrame) frames[i];
-          avp.addElement(af);
+          avp.add((AlignFrame) sf.getTopComponent());
+        }
+        if (sf.getBottomComponent() instanceof AlignFrame)
+        {
+          avp.add((AlignFrame) sf.getBottomComponent());
         }
       }
-    } catch (Exception ex)
-    {
-      ex.printStackTrace();
     }
     if (avp.size() == 0)
     {
       return null;
     }
-    AlignFrame afs[] = new AlignFrame[avp.size()];
-    for (int i = 0, j = avp.size(); i < j; i++)
-    {
-      afs[i] = (AlignFrame) avp.elementAt(i);
-    }
-    avp.clear();
+    AlignFrame afs[] = avp.toArray(new AlignFrame[avp.size()]);
     return afs;
   }
 
+  /**
+   * Returns an array of any AppJmol frames in the Desktop (or null if none).
+   * 
+   * @return
+   */
   public AppJmol[] getJmols()
   {
     JInternalFrame[] frames = Desktop.desktop.getAllFrames();
@@ -2322,32 +2332,21 @@ public class Desktop extends jalview.jbgui.GDesktop implements
     {
       return null;
     }
-    Vector avp = new Vector();
-    try
+    List<AppJmol> avp = new ArrayList<AppJmol>();
+    // REVERSE ORDER
+    for (int i = frames.length - 1; i > -1; i--)
     {
-      // REVERSE ORDER
-      for (int i = frames.length - 1; i > -1; i--)
+      if (frames[i] instanceof AppJmol)
       {
-        if (frames[i] instanceof AppJmol)
-        {
-          AppJmol af = (AppJmol) frames[i];
-          avp.addElement(af);
-        }
+        AppJmol af = (AppJmol) frames[i];
+        avp.add(af);
       }
-    } catch (Exception ex)
-    {
-      ex.printStackTrace();
     }
     if (avp.size() == 0)
     {
       return null;
     }
-    AppJmol afs[] = new AppJmol[avp.size()];
-    for (int i = 0, j = avp.size(); i < j; i++)
-    {
-      afs[i] = (AppJmol) avp.elementAt(i);
-    }
-    avp.clear();
+    AppJmol afs[] = avp.toArray(new AppJmol[avp.size()]);
     return afs;
   }
 
@@ -2471,7 +2470,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
 
   /**
    * This will return the first AlignFrame viewing AlignViewport av. It will
-   * break if there are more than one AlignFrames viewing a particular av. This
+   * break if there are more than one AlignFrames viewing a particular av.
    * 
    * @param av
    * @return alignFrame for av