filechooser has multiple filters
[jalview.git] / src / jalview / io / JalviewFileFilter.java
1 package jalview.io;\r
2 \r
3 import javax.swing.filechooser.*;\r
4 import java.io.File;\r
5 import java.util.*;\r
6 \r
7 public class JalviewFileFilter extends FileFilter\r
8 {\r
9       private static String TYPE_UNKNOWN = "Type Unknown";\r
10       private static String HIDDEN_FILE = "Hidden File";\r
11       public static Hashtable suffixHash = new Hashtable();\r
12 \r
13       private Hashtable filters = null;\r
14       private String description = "no description";\r
15       private String fullDescription = "full description";\r
16       private boolean useExtensionsInDescription = true;\r
17 \r
18 \r
19       public JalviewFileFilter(String extension, String description) {\r
20 \r
21        StringTokenizer st = new StringTokenizer(extension, ",");\r
22        while(st.hasMoreElements())\r
23        {\r
24          addExtension(st.nextToken().trim());\r
25        }\r
26        setDescription(description);\r
27       }\r
28 \r
29       public JalviewFileFilter(String[] filts) {\r
30           this(filts, null);\r
31       }\r
32 \r
33       public String getAcceptableExtension()\r
34       {\r
35         return filters.keys().nextElement().toString();\r
36       }\r
37 \r
38       public JalviewFileFilter(String[] filts, String description) {\r
39           for (int i = 0; i < filts.length; i++) {\r
40               // add filters one by one\r
41               addExtension(filts[i]);\r
42           }\r
43            if(description!=null) setDescription(description);\r
44       }\r
45 \r
46       // takes account of the fact that database is a directory\r
47       public boolean accept(File f) {\r
48           if(f != null) {\r
49               String extension = getExtension(f);\r
50               if(f.isDirectory()) {\r
51                  if(extension == null || extension.equals("")) {\r
52                     return true;\r
53                  } else {\r
54                     if(filters.get(getExtension(f)) != null) {\r
55                        return true;\r
56                     }\r
57                  }\r
58               }\r
59               if(extension != null && filters.get(getExtension(f)) != null) {\r
60                   return true;\r
61               }\r
62           }\r
63           return false;\r
64       }\r
65 \r
66        public String getExtension(File f) {\r
67           if(f != null) {\r
68               String filename = f.getName();\r
69               int i = filename.lastIndexOf('.');\r
70               if(i>0 && i<filename.length()-1) {\r
71                   return filename.substring(i+1).toLowerCase();\r
72               };\r
73           }\r
74           return "";\r
75       }\r
76 \r
77       public void addExtension(String extension) {\r
78           if(filters == null) {\r
79               filters = new Hashtable(5);\r
80           }\r
81           filters.put(extension.toLowerCase(), this);\r
82           fullDescription = null;\r
83       }\r
84 \r
85 \r
86       public String getDescription() {\r
87           if(fullDescription == null) {\r
88               if(description == null || isExtensionListInDescription()) {\r
89                    fullDescription = description==null ? "(" : description + " (";\r
90                   // build the description from the extension list\r
91                   Enumeration extensions = filters.keys();\r
92                   if(extensions != null) {\r
93                       fullDescription += "." + (String) extensions.nextElement();\r
94                       while (extensions.hasMoreElements()) {\r
95                           fullDescription += ", " + (String) extensions.nextElement();\r
96                       }\r
97                   }\r
98                   fullDescription += ")";\r
99               } else {\r
100                   fullDescription = description;\r
101               }\r
102           }\r
103           return fullDescription;\r
104       }\r
105 \r
106       public void setDescription(String description) {\r
107           this.description = description;\r
108           fullDescription = null;\r
109       }\r
110 \r
111       public void setExtensionListInDescription(boolean b) {\r
112           useExtensionsInDescription = b;\r
113           fullDescription = null;\r
114       }\r
115 \r
116       public boolean isExtensionListInDescription() {\r
117           return useExtensionsInDescription;\r
118       }\r
119   }\r