X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPaintRefresher.java;h=d3be0f2efa29af91e2d1a93be76243f38005ca31;hb=c19d2a91ca05e052e3408bf5852d88eb5d0608f1;hp=a723662528d6c605e807e6e227ac81052a381cdb;hpb=47168f025aefdaa044802bd5f8f510ffe43a4808;p=jalview.git diff --git a/src/jalview/gui/PaintRefresher.java b/src/jalview/gui/PaintRefresher.java index a723662..d3be0f2 100755 --- a/src/jalview/gui/PaintRefresher.java +++ b/src/jalview/gui/PaintRefresher.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2) + * Copyright (C) 2015 The Jalview Authors * * This file is part of Jalview. * @@ -20,73 +20,80 @@ */ 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.List; +import java.util.Map; +import java.util.Map.Entry; /** - * Route datamodel/view update events for a sequence set to any display components involved - * TODO: JV3 refactor to abstract gui/view package + * Route datamodel/view update events for a sequence set to any display + * components involved TODO: JV3 refactor to abstract gui/view package * * @author $author$ * @version $Revision$ */ public class PaintRefresher { - static Hashtable components; + static Map> components = new HashMap>(); /** - * 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 comps = components.get(seqSetId); if (!comps.contains(comp)) { - comps.addElement(comp); + comps.add(comp); } } else { - Vector vcoms = new Vector(); - vcoms.addElement(comp); + List vcoms = new ArrayList(); + 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) - { - return; - } - - Enumeration en = components.keys(); - while (en.hasMoreElements()) + List emptied = new ArrayList(); + for (Entry> registered : components.entrySet()) { - String id = en.nextElement().toString(); - Vector comps = (Vector) components.get(id); + String id = registered.getKey(); + List comps = components.get(id); comps.remove(comp); - if (comps.size() == 0) + if (comps.isEmpty()) { - components.remove(id); + emptied.add(id); } } + + /* + * Remove now empty ids after the above (to avoid + * ConcurrentModificationException). + */ + for (String id : emptied) + { + components.remove(id); + } } public static void Refresh(Component source, String id) @@ -97,24 +104,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 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; @@ -242,30 +240,20 @@ public class PaintRefresher static AlignmentPanel[] getAssociatedPanels(String id) { - if (components == null) - { - return new AlignmentPanel[0]; - } - ; - Vector comps = (Vector) components.get(id); + List 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 tmp = new ArrayList(); + 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()]); } }