Formatted source
[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.File;\r
22 \r
23 import java.util.*;\r
24 \r
25 import javax.swing.filechooser.*;\r
26 \r
27 \r
28 public class JalviewFileFilter extends FileFilter {\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         StringTokenizer st = new StringTokenizer(extension, ",");\r
39 \r
40         while (st.hasMoreElements()) {\r
41             addExtension(st.nextToken().trim());\r
42         }\r
43 \r
44         setDescription(description);\r
45     }\r
46 \r
47     public JalviewFileFilter(String[] filts) {\r
48         this(filts, null);\r
49     }\r
50 \r
51     public JalviewFileFilter(String[] filts, String description) {\r
52         for (int i = 0; i < filts.length; i++) {\r
53             // add filters one by one\r
54             addExtension(filts[i]);\r
55         }\r
56 \r
57         if (description != null) {\r
58             setDescription(description);\r
59         }\r
60     }\r
61 \r
62     public String getAcceptableExtension() {\r
63         return filters.keys().nextElement().toString();\r
64     }\r
65 \r
66     // takes account of the fact that database is a directory\r
67     public boolean accept(File f) {\r
68         if (f != null) {\r
69             String extension = getExtension(f);\r
70 \r
71             if (f.isDirectory()) {\r
72                 if ((extension == null) || extension.equals("")) {\r
73                     return true;\r
74                 } else {\r
75                     if (filters.get(getExtension(f)) != null) {\r
76                         return true;\r
77                     }\r
78                 }\r
79             }\r
80 \r
81             if ((extension != null) && (filters.get(getExtension(f)) != null)) {\r
82                 return true;\r
83             }\r
84         }\r
85 \r
86         return false;\r
87     }\r
88 \r
89     public String getExtension(File f) {\r
90         if (f != null) {\r
91             String filename = f.getName();\r
92             int i = filename.lastIndexOf('.');\r
93 \r
94             if ((i > 0) && (i < (filename.length() - 1))) {\r
95                 return filename.substring(i + 1).toLowerCase();\r
96             }\r
97 \r
98             ;\r
99         }\r
100 \r
101         return "";\r
102     }\r
103 \r
104     public void addExtension(String extension) {\r
105         if (filters == null) {\r
106             filters = new Hashtable(5);\r
107         }\r
108 \r
109         filters.put(extension.toLowerCase(), this);\r
110         fullDescription = null;\r
111     }\r
112 \r
113     public String getDescription() {\r
114         if (fullDescription == null) {\r
115             if ((description == null) || isExtensionListInDescription()) {\r
116                 fullDescription = (description == null) ? "(" : (description +\r
117                     " (");\r
118 \r
119                 // build the description from the extension list\r
120                 Enumeration extensions = filters.keys();\r
121 \r
122                 if (extensions != null) {\r
123                     fullDescription += ("." +\r
124                     (String) extensions.nextElement());\r
125 \r
126                     while (extensions.hasMoreElements()) {\r
127                         fullDescription += (", " +\r
128                         (String) extensions.nextElement());\r
129                     }\r
130                 }\r
131 \r
132                 fullDescription += ")";\r
133             } else {\r
134                 fullDescription = description;\r
135             }\r
136         }\r
137 \r
138         return fullDescription;\r
139     }\r
140 \r
141     public void setDescription(String description) {\r
142         this.description = description;\r
143         fullDescription = null;\r
144     }\r
145 \r
146     public void setExtensionListInDescription(boolean b) {\r
147         useExtensionsInDescription = b;\r
148         fullDescription = null;\r
149     }\r
150 \r
151     public boolean isExtensionListInDescription() {\r
152         return useExtensionsInDescription;\r
153     }\r
154 }\r