JAL-3107 update any group associated annotation rows when a new group is created
[jalview.git] / src / jalview / gui / PaintRefresher.java
index b6d5a41..ced5544 100755 (executable)
  */
 package jalview.gui;
 
-import java.util.*;
-import java.util.List;
-
-import java.awt.*;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
 
-import jalview.datamodel.*;
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Route datamodel/view update events for a sequence set to any display
@@ -36,39 +39,39 @@ import jalview.datamodel.*;
  */
 public class PaintRefresher
 {
-  static Hashtable components;
+  static Map<String, List<Component>> components = new HashMap<String, List<Component>>();
 
   /**
-   * DOCUMENT ME!
+   * Add the given component to those registered under the given sequence set
+   * id. Does nothing if already added.
    * 
    * @param comp
-   *          DOCUMENT ME!
    * @param al
-   *          DOCUMENT ME!
    */
   public static void Register(Component comp, String seqSetId)
   {
-    if (components == null)
-    {
-      components = new Hashtable();
-    }
-
     if (components.containsKey(seqSetId))
     {
-      Vector comps = (Vector) components.get(seqSetId);
+      List<Component> comps = components.get(seqSetId);
       if (!comps.contains(comp))
       {
-        comps.addElement(comp);
+        comps.add(comp);
       }
     }
     else
     {
-      Vector vcoms = new Vector();
-      vcoms.addElement(comp);
+      List<Component> vcoms = new ArrayList<Component>();
+      vcoms.add(comp);
       components.put(seqSetId, vcoms);
     }
   }
 
+  /**
+   * Remove this component from all registrations. Also removes a registered
+   * sequence set id if there are no remaining components registered against it.
+   * 
+   * @param comp
+   */
   public static void RemoveComponent(Component comp)
   {
     if (components == null)
@@ -76,15 +79,14 @@ public class PaintRefresher
       return;
     }
 
-    Enumeration en = components.keys();
-    while (en.hasMoreElements())
+    Iterator<String> it = components.keySet().iterator();
+    while (it.hasNext())
     {
-      String id = en.nextElement().toString();
-      Vector comps = (Vector) components.get(id);
+      List<Component> comps = components.get(it.next());
       comps.remove(comp);
-      if (comps.size() == 0)
+      if (comps.isEmpty())
       {
-        components.remove(id);
+        it.remove();
       }
     }
   }
@@ -97,24 +99,15 @@ public class PaintRefresher
   public static void Refresh(Component source, String id,
           boolean alignmentChanged, boolean validateSequences)
   {
-    if (components == null)
-    {
-      return;
-    }
-
-    Component comp;
-    Vector comps = (Vector) components.get(id);
+    List<Component> comps = components.get(id);
 
     if (comps == null)
     {
       return;
     }
 
-    Enumeration e = comps.elements();
-    while (e.hasMoreElements())
+    for (Component comp : comps)
     {
-      comp = (Component) e.nextElement();
-
       if (comp == source)
       {
         continue;
@@ -190,8 +183,8 @@ public class PaintRefresher
           {
             // raise an implementation warning here - not sure if this situation
             // will ever occur
-            System.err
-                    .println("IMPLEMENTATION PROBLEM: DATASET out of sync due to an insert whilst calling PaintRefresher.validateSequences(AlignmentI, ALignmentI)");
+            System.err.println(
+                    "IMPLEMENTATION PROBLEM: DATASET out of sync due to an insert whilst calling PaintRefresher.validateSequences(AlignmentI, ALignmentI)");
           }
           List<SequenceI> alsq;
           synchronized (alsq = comp.getSequences())
@@ -242,30 +235,20 @@ public class PaintRefresher
 
   static AlignmentPanel[] getAssociatedPanels(String id)
   {
-    if (components == null)
-    {
-      return new AlignmentPanel[0];
-    }
-    ;
-    Vector comps = (Vector) components.get(id);
+    List<Component> comps = components.get(id);
     if (comps == null)
     {
       return new AlignmentPanel[0];
     }
-    ;
-    Vector tmp = new Vector();
-    int i, iSize = comps.size();
-    for (i = 0; i < iSize; i++)
+    List<AlignmentPanel> tmp = new ArrayList<AlignmentPanel>();
+    for (Component comp : comps)
     {
-      if (comps.elementAt(i) instanceof AlignmentPanel)
+      if (comp instanceof AlignmentPanel)
       {
-        tmp.addElement(comps.elementAt(i));
+        tmp.add((AlignmentPanel) comp);
       }
     }
-    AlignmentPanel[] result = new AlignmentPanel[tmp.size()];
-    tmp.toArray(result);
-
-    return result;
+    return tmp.toArray(new AlignmentPanel[tmp.size()]);
   }
 
 }