Formatting changes
[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         if ( (extension == null) || extension.equals(""))\r
83         {\r
84           return true;\r
85         }\r
86         else\r
87         {\r
88           if (filters.get(getExtension(f)) != null)\r
89           {\r
90             return true;\r
91           }\r
92         }\r
93       }\r
94 \r
95       if ( (extension != null) && (filters.get(getExtension(f)) != null))\r
96       {\r
97         return true;\r
98       }\r
99     }\r
100 \r
101     return false;\r
102   }\r
103 \r
104   public String getExtension(File f)\r
105   {\r
106     if (f != null)\r
107     {\r
108       String filename = f.getName();\r
109       int i = filename.lastIndexOf('.');\r
110 \r
111       if ( (i > 0) && (i < (filename.length() - 1)))\r
112       {\r
113         return filename.substring(i + 1).toLowerCase();\r
114       }\r
115 \r
116       ;\r
117     }\r
118 \r
119     return "";\r
120   }\r
121 \r
122   public void addExtension(String extension)\r
123   {\r
124     if (filters == null)\r
125     {\r
126       filters = new Hashtable(5);\r
127     }\r
128 \r
129     filters.put(extension.toLowerCase(), this);\r
130     fullDescription = null;\r
131   }\r
132 \r
133   public String getDescription()\r
134   {\r
135     if (fullDescription == null)\r
136     {\r
137       if ( (description == null) || isExtensionListInDescription())\r
138       {\r
139         fullDescription = (description == null) ? "(" : (description +\r
140             " (");\r
141 \r
142         // build the description from the extension list\r
143         Enumeration extensions = filters.keys();\r
144 \r
145         if (extensions != null)\r
146         {\r
147           fullDescription += ("." +\r
148                               (String) extensions.nextElement());\r
149 \r
150           while (extensions.hasMoreElements())\r
151           {\r
152             fullDescription += (", " +\r
153                                 (String) extensions.nextElement());\r
154           }\r
155         }\r
156 \r
157         fullDescription += ")";\r
158       }\r
159       else\r
160       {\r
161         fullDescription = description;\r
162       }\r
163     }\r
164 \r
165     return fullDescription;\r
166   }\r
167 \r
168   public void setDescription(String description)\r
169   {\r
170     this.description = description;\r
171     fullDescription = null;\r
172   }\r
173 \r
174   public void setExtensionListInDescription(boolean b)\r
175   {\r
176     useExtensionsInDescription = b;\r
177     fullDescription = null;\r
178   }\r
179 \r
180   public boolean isExtensionListInDescription()\r
181   {\r
182     return useExtensionsInDescription;\r
183   }\r
184 }\r