Always return true for directories
[jalview.git] / src / jalview / io / JalviewFileFilter.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.io;\r
20 \r
21 import java.io.*;\r
22 import java.util.*;\r
23 \r
24 import javax.swing.filechooser.FileFilter;\r
25 \r
26 public class JalviewFileFilter\r
27     extends FileFilter\r
28 {\r
29   private static String TYPE_UNKNOWN = "Type Unknown";\r
30   private static String HIDDEN_FILE = "Hidden File";\r
31   public static Hashtable suffixHash = new Hashtable();\r
32   private Hashtable filters = null;\r
33   private String description = "no description";\r
34   private String fullDescription = "full description";\r
35   private boolean useExtensionsInDescription = true;\r
36 \r
37   public JalviewFileFilter(String extension, String description)\r
38   {\r
39     StringTokenizer st = new StringTokenizer(extension, ",");\r
40 \r
41     while (st.hasMoreElements())\r
42     {\r
43       addExtension(st.nextToken().trim());\r
44     }\r
45 \r
46     setDescription(description);\r
47   }\r
48 \r
49   public JalviewFileFilter(String[] filts)\r
50   {\r
51     this(filts, null);\r
52   }\r
53 \r
54   public JalviewFileFilter(String[] filts, String description)\r
55   {\r
56     for (int i = 0; i < filts.length; i++)\r
57     {\r
58       // add filters one by one\r
59       addExtension(filts[i]);\r
60     }\r
61 \r
62     if (description != null)\r
63     {\r
64       setDescription(description);\r
65     }\r
66   }\r
67 \r
68   public String getAcceptableExtension()\r
69   {\r
70     return filters.keys().nextElement().toString();\r
71   }\r
72 \r
73   // takes account of the fact that database is a directory\r
74   public boolean accept(File f)\r
75   {\r
76     if (f != null)\r
77     {\r
78       String extension = getExtension(f);\r
79 \r
80       if (f.isDirectory())\r
81       {\r
82           return true;\r
83       }\r
84 \r
85       if ( (extension != null) && (filters.get(getExtension(f)) != null))\r
86       {\r
87         return true;\r
88       }\r
89     }\r
90 \r
91     return false;\r
92   }\r
93 \r
94   public String getExtension(File f)\r
95   {\r
96     if (f != null)\r
97     {\r
98       String filename = f.getName();\r
99       int i = filename.lastIndexOf('.');\r
100 \r
101       if ( (i > 0) && (i < (filename.length() - 1)))\r
102       {\r
103         return filename.substring(i + 1).toLowerCase();\r
104       }\r
105 \r
106       ;\r
107     }\r
108 \r
109     return "";\r
110   }\r
111 \r
112   public void addExtension(String extension)\r
113   {\r
114     if (filters == null)\r
115     {\r
116       filters = new Hashtable(5);\r
117     }\r
118 \r
119     filters.put(extension.toLowerCase(), this);\r
120     fullDescription = null;\r
121   }\r
122 \r
123   public String getDescription()\r
124   {\r
125     if (fullDescription == null)\r
126     {\r
127       if ( (description == null) || isExtensionListInDescription())\r
128       {\r
129         fullDescription = (description == null) ? "(" : (description +\r
130             " (");\r
131 \r
132         // build the description from the extension list\r
133         Enumeration extensions = filters.keys();\r
134 \r
135         if (extensions != null)\r
136         {\r
137           fullDescription += ("." +\r
138                               (String) extensions.nextElement());\r
139 \r
140           while (extensions.hasMoreElements())\r
141           {\r
142             fullDescription += (", " +\r
143                                 (String) extensions.nextElement());\r
144           }\r
145         }\r
146 \r
147         fullDescription += ")";\r
148       }\r
149       else\r
150       {\r
151         fullDescription = description;\r
152       }\r
153     }\r
154 \r
155     return fullDescription;\r
156   }\r
157 \r
158   public void setDescription(String description)\r
159   {\r
160     this.description = description;\r
161     fullDescription = null;\r
162   }\r
163 \r
164   public void setExtensionListInDescription(boolean b)\r
165   {\r
166     useExtensionsInDescription = b;\r
167     fullDescription = null;\r
168   }\r
169 \r
170   public boolean isExtensionListInDescription()\r
171   {\r
172     return useExtensionsInDescription;\r
173   }\r
174 }\r