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