JAL-4461 Change JalviewFileFilter to use LinkedHashSet for extensions. Add list of...
authorBen Soares <b.soares@dundee.ac.uk>
Fri, 13 Sep 2024 10:20:54 +0000 (11:20 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Fri, 13 Sep 2024 10:20:54 +0000 (11:20 +0100)
src/jalview/io/JalviewFileChooser.java
src/jalview/io/JalviewFileFilter.java

index 63c9a61..957e47c 100755 (executable)
@@ -34,6 +34,7 @@ import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
@@ -427,6 +428,8 @@ public class JalviewFileChooser extends JFileChooser
     setAccessory(multi);
   }
 
+  private static String byExtensionTooltip = null;
+
   private static void setByExtensionTooltip(JComboBox dd)
   {
     if (dd.getItemCount() > 0
@@ -434,8 +437,28 @@ public class JalviewFileChooser extends JFileChooser
     {
       if (((JalviewFileFilter) dd.getSelectedItem()).isMultiFormat())
       {
-        dd.setToolTipText(
-                MessageManager.getString("label.by_extension_tooltip"));
+        if (byExtensionTooltip == null)
+        {
+          StringBuilder sb = new StringBuilder(
+                  MessageManager.getString("label.by_extension_tooltip"));
+          JalviewFileFilter jvf = (JalviewFileFilter) dd.getSelectedItem();
+          Iterator<String> extensions = jvf.getExtensions();
+          if (extensions.hasNext())
+          {
+            sb.append(" (.");
+            while (extensions.hasNext())
+            {
+              sb.append(extensions.next());
+              if (extensions.hasNext())
+              {
+                sb.append(", .");
+              }
+            }
+            sb.append(")");
+          }
+          byExtensionTooltip = sb.toString();
+        }
+        dd.setToolTipText(byExtensionTooltip);
       }
       else
       {
index c24cbd4..47cca96 100755 (executable)
@@ -23,9 +23,9 @@ package jalview.io;
 import java.io.File;
 import java.util.Hashtable;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.Locale;
-import java.util.Map;
+import java.util.Set;
 import java.util.StringTokenizer;
 
 import javax.swing.filechooser.FileFilter;
@@ -34,7 +34,7 @@ public class JalviewFileFilter extends FileFilter
 {
   public static Hashtable suffixHash = new Hashtable();
 
-  private Map<String, JalviewFileFilter> filters = null;
+  private Set<String> filters = null;
 
   private String description = "no description";
 
@@ -79,7 +79,7 @@ public class JalviewFileFilter extends FileFilter
 
   public String getAcceptableExtension()
   {
-    return filters.keySet().iterator().next().toString();
+    return filters.iterator().next().toString();
   }
 
   // takes account of the fact that database is a directory
@@ -96,7 +96,7 @@ public class JalviewFileFilter extends FileFilter
         return true;
       }
 
-      if ((extension != null) && (filters.get(extension) != null))
+      if ((extension != null) && (filters.contains(extension)))
       {
         return true;
       }
@@ -105,7 +105,7 @@ public class JalviewFileFilter extends FileFilter
 
     if (parentJFC != null && parentJFC.includeBackupFiles)
     {
-      Iterator<String> it = filters.keySet().iterator();
+      Iterator<String> it = filters.iterator();
       EXTENSION: while (it.hasNext())
       {
         String ext = it.next();
@@ -150,10 +150,10 @@ public class JalviewFileFilter extends FileFilter
   {
     if (filters == null)
     {
-      filters = new LinkedHashMap<>(5);
+      filters = new LinkedHashSet<String>(5);
     }
 
-    filters.put(extension.toLowerCase(Locale.ROOT), this);
+    filters.add(extension.toLowerCase(Locale.ROOT));
     fullDescription = null;
   }
 
@@ -168,7 +168,7 @@ public class JalviewFileFilter extends FileFilter
                 : (description + " (");
 
         // build the description from the extension list
-        Iterator<String> extensions = filters.keySet().iterator();
+        Iterator<String> extensions = filters.iterator();
 
         if (extensions != null)
         {
@@ -222,4 +222,9 @@ public class JalviewFileFilter extends FileFilter
   {
     multiFormat = b;
   }
+
+  protected Iterator<String> getExtensions()
+  {
+    return filters.iterator();
+  }
 }