JAL-1117 alleviate lock starvation
authorjprocter <jprocter@compbio.dundee.ac.uk>
Sun, 1 Jul 2012 16:02:51 +0000 (17:02 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Sun, 1 Jul 2012 16:02:51 +0000 (17:02 +0100)
src/jalview/gui/FeatureRenderer.java
src/jalview/gui/FeatureSettings.java
src/jalview/gui/Jalview2XML.java
src/jalview/io/FeaturesFile.java

index 2db75bf..0aee327 100755 (executable)
@@ -18,6 +18,7 @@
 package jalview.gui;
 
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 import java.awt.*;
 import java.awt.event.*;
@@ -52,12 +53,12 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
   FontMetrics fm;
 
   int charOffset;
-
-  Hashtable featureColours = new Hashtable();
+  Map featureColours = new ConcurrentHashMap();
 
   // A higher level for grouping features of a
   // particular type
-  Hashtable featureGroups = new Hashtable();
+  Map featureGroups = new ConcurrentHashMap();
 
   // This is actually an Integer held in the hashtable,
   // Retrieved using the key feature type
@@ -85,13 +86,13 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
   {
     String[] renderOrder;
 
-    Hashtable featureGroups;
+    Map featureGroups;
 
-    Hashtable featureColours;
+    Map featureColours;
 
     float transparency;
 
-    Hashtable featureOrder;
+    Map featureOrder;
 
     public FeatureRendererSettings(String[] renderOrder,
             Hashtable featureGroups, Hashtable featureColours,
@@ -113,9 +114,9 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
     public FeatureRendererSettings(FeatureRenderer fr)
     {
       renderOrder = null;
-      featureGroups = new Hashtable();
-      featureColours = new Hashtable();
-      featureOrder = new Hashtable();
+      featureGroups = new ConcurrentHashMap();
+      featureColours = new ConcurrentHashMap();
+      featureOrder = new ConcurrentHashMap();
       if (fr.renderOrder != null)
       {
         this.renderOrder = new String[fr.renderOrder.length];
@@ -124,16 +125,16 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
       }
       if (fr.featureGroups != null)
       {
-        this.featureGroups = new Hashtable(fr.featureGroups);
+        this.featureGroups = new ConcurrentHashMap(fr.featureGroups);
       }
       if (fr.featureColours != null)
       {
-        this.featureColours = new Hashtable(fr.featureColours);
+        this.featureColours = new ConcurrentHashMap(fr.featureColours);
       }
-      Enumeration en = fr.featureColours.keys();
-      while (en.hasMoreElements())
+      Iterator en = fr.featureColours.keySet().iterator();
+      while (en.hasNext())
       {
-        Object next = en.nextElement();
+        Object next = en.next();
         Object val = featureColours.get(next);
         if (val instanceof GraduatedColor)
         {
@@ -144,7 +145,7 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
       this.transparency = fr.transparency;
       if (fr.featureOrder != null)
       {
-        this.featureOrder = new Hashtable(fr.featureOrder);
+        this.featureOrder = new ConcurrentHashMap(fr.featureOrder);
       }
     }
   }
@@ -1403,7 +1404,7 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
 
   }
 
-  Hashtable featureOrder = null;
+  Map featureOrder = null;
 
   /**
    * analogous to colour - store a normalized ordering for all feature types in
index 35690a9..1928382 100755 (executable)
@@ -714,13 +714,13 @@ public class FeatureSettings extends JPanel
         PrintWriter out = new PrintWriter(new OutputStreamWriter(
                 new FileOutputStream(choice), "UTF-8"));
 
-        Enumeration e = fr.featureColours.keys();
+        Iterator e = fr.featureColours.keySet().iterator();
         float[] sortOrder = new float[fr.featureColours.size()];
         String[] sortTypes = new String[fr.featureColours.size()];
         int i = 0;
-        while (e.hasMoreElements())
+        while (e.hasNext())
         {
-          sortTypes[i] = e.nextElement().toString();
+          sortTypes[i] = e.next().toString();
           sortOrder[i] = fr.getOrder(sortTypes[i]);
           i++;
         }
@@ -1134,13 +1134,13 @@ public class FeatureSettings extends JPanel
 
       if (fr.featureGroups != null)
       {
-        Enumeration en = fr.featureGroups.keys();
+        Iterator en = fr.featureGroups.keySet().iterator();
         gps = new String[fr.featureColours.size()];
         int g = 0;
         boolean valid = false;
-        while (en.hasMoreElements())
+        while (en.hasNext())
         {
-          String gp = (String) en.nextElement();
+          String gp = (String) en.next();
           Boolean on = (Boolean) fr.featureGroups.get(gp);
           if (on != null && on.booleanValue())
           {
index 14650a9..45bab7c 100644 (file)
@@ -1162,11 +1162,11 @@ public class Jalview2XML
       }
 
       // Make sure we save none displayed feature settings
-      Enumeration en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureColours
-              .keys();
-      while (en.hasMoreElements())
+      Iterator en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureColours
+              .keySet().iterator();
+      while (en.hasNext())
       {
-        String key = en.nextElement().toString();
+        String key = en.next().toString();
         if (settingsAdded.contains(key))
         {
           continue;
@@ -1187,11 +1187,11 @@ public class Jalview2XML
         fs.addSetting(setting);
         settingsAdded.addElement(key);
       }
-      en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups.keys();
+      en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups.keySet().iterator();
       Vector groupsAdded = new Vector();
-      while (en.hasMoreElements())
+      while (en.hasNext())
       {
-        String grp = en.nextElement().toString();
+        String grp = en.next().toString();
         if (groupsAdded.contains(grp))
         {
           continue;
index 2ac0e13..23723c7 100755 (executable)
@@ -92,7 +92,7 @@ public class FeaturesFile extends AlignFile
    * @return true if features were added\r
    */\r
   public boolean parse(AlignmentI align, \r
-          Hashtable colours, boolean removeHTML, boolean relaxedIdMatching)\r
+          Map colours, boolean removeHTML, boolean relaxedIdMatching)\r
   {\r
     return parse(align, colours, null, removeHTML, relaxedIdMatching);\r
   }\r
@@ -105,8 +105,8 @@ public class FeaturesFile extends AlignFile
    * @param removeHTML - process html strings into plain text\r
    * @return true if features were added\r
    */\r
-  public boolean parse(AlignmentI align, Hashtable colours,\r
-          Hashtable featureLink, boolean removeHTML)\r
+  public boolean parse(AlignmentI align, Map colours,\r
+          Map featureLink, boolean removeHTML)\r
   {\r
     return parse(align, colours, featureLink, removeHTML, false);\r
   }\r
@@ -122,7 +122,7 @@ public class FeaturesFile extends AlignFile
    * @return true if features were added\r
    */\r
   public boolean parse(AlignmentI align,\r
-          Hashtable colours, Hashtable featureLink, boolean removeHTML, boolean relaxedIdmatching)\r
+          Map colours, Map featureLink, boolean removeHTML, boolean relaxedIdmatching)\r
   {\r
 \r
     String line = null;\r
@@ -136,7 +136,7 @@ public class FeaturesFile extends AlignFile
       StringTokenizer st;\r
       SequenceFeature sf;\r
       String featureGroup = null, groupLink = null;\r
-      Hashtable typeLink = new Hashtable();\r
+      Map typeLink = new Hashtable();\r
       /**\r
        * when true, assume GFF style features rather than Jalview style.\r
        */\r