Formatting
[jalview.git] / src / jalview / io / JalviewFileFilter.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 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   public static Hashtable suffixHash = new Hashtable();\r
30   private Hashtable filters = null;\r
31   private String description = "no description";\r
32   private String fullDescription = "full description";\r
33   private boolean useExtensionsInDescription = true;\r
34 \r
35   public JalviewFileFilter(String extension, String description)\r
36   {\r
37     StringTokenizer st = new StringTokenizer(extension, ",");\r
38 \r
39     while (st.hasMoreElements())\r
40     {\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   {\r
49     this(filts, null);\r
50   }\r
51 \r
52   public JalviewFileFilter(String[] filts, String description)\r
53   {\r
54     for (int i = 0; i < filts.length; i++)\r
55     {\r
56       // add filters one by one\r
57       addExtension(filts[i]);\r
58     }\r
59 \r
60     if (description != null)\r
61     {\r
62       setDescription(description);\r
63     }\r
64   }\r
65 \r
66   public String getAcceptableExtension()\r
67   {\r
68     return filters.keys().nextElement().toString();\r
69   }\r
70 \r
71   // takes account of the fact that database is a directory\r
72   public boolean accept(File f)\r
73   {\r
74     if (f != null)\r
75     {\r
76       String extension = getExtension(f);\r
77 \r
78       if (f.isDirectory())\r
79       {\r
80         return true;\r
81       }\r
82 \r
83       if ( (extension != null) && (filters.get(getExtension(f)) != null))\r
84       {\r
85         return true;\r
86       }\r
87     }\r
88 \r
89     return false;\r
90   }\r
91 \r
92   public String getExtension(File f)\r
93   {\r
94     if (f != null)\r
95     {\r
96       String filename = f.getName();\r
97       int i = filename.lastIndexOf('.');\r
98 \r
99       if ( (i > 0) && (i < (filename.length() - 1)))\r
100       {\r
101         return filename.substring(i + 1).toLowerCase();\r
102       }\r
103 \r
104       ;\r
105     }\r
106 \r
107     return "";\r
108   }\r
109 \r
110   public void addExtension(String extension)\r
111   {\r
112     if (filters == null)\r
113     {\r
114       filters = new Hashtable(5);\r
115     }\r
116 \r
117     filters.put(extension.toLowerCase(), this);\r
118     fullDescription = null;\r
119   }\r
120 \r
121   public String getDescription()\r
122   {\r
123     if (fullDescription == null)\r
124     {\r
125       if ( (description == null) || isExtensionListInDescription())\r
126       {\r
127         fullDescription = (description == null) ? "(" : (description +\r
128             " (");\r
129 \r
130         // build the description from the extension list\r
131         Enumeration extensions = filters.keys();\r
132 \r
133         if (extensions != null)\r
134         {\r
135           fullDescription += ("." +\r
136                               (String) extensions.nextElement());\r
137 \r
138           while (extensions.hasMoreElements())\r
139           {\r
140             fullDescription += (", " +\r
141                                 (String) extensions.nextElement());\r
142           }\r
143         }\r
144 \r
145         fullDescription += ")";\r
146       }\r
147       else\r
148       {\r
149         fullDescription = description;\r
150       }\r
151     }\r
152 \r
153     return fullDescription;\r
154   }\r
155 \r
156   public void setDescription(String description)\r
157   {\r
158     this.description = description;\r
159     fullDescription = null;\r
160   }\r
161 \r
162   public void setExtensionListInDescription(boolean b)\r
163   {\r
164     useExtensionsInDescription = b;\r
165     fullDescription = null;\r
166   }\r
167 \r
168   public boolean isExtensionListInDescription()\r
169   {\r
170     return useExtensionsInDescription;\r
171   }\r
172 }\r