new class
[jalview.git] / src / jalview / io / JalviewFileFilter.java
1 package jalview.io;\r
2 \r
3 import javax.swing.filechooser.*;\r
4 import java.io.File;\r
5 import java.util.*;\r
6 \r
7 public class JalviewFileFilter extends FileFilter\r
8 {\r
9       private static String TYPE_UNKNOWN = "Type Unknown";\r
10       private static String HIDDEN_FILE = "Hidden File";\r
11       public static Hashtable suffixHash = new Hashtable();\r
12 \r
13       private Hashtable filters = null;\r
14       private String description = "no description";\r
15       private String fullDescription = "full description";\r
16       private boolean useExtensionsInDescription = true;\r
17 \r
18       public JalviewFileFilter() {\r
19           this.filters = new Hashtable();\r
20       }\r
21 \r
22       public JalviewFileFilter(String extension) {\r
23           this(extension,null);\r
24       }\r
25 \r
26       public JalviewFileFilter(String extension, String description) {\r
27           this();\r
28           if(extension!=null) addExtension(extension);\r
29            if(description!=null) setDescription(description);\r
30       }\r
31 \r
32       public JalviewFileFilter(String[] filts) {\r
33           this(filts, null);\r
34       }\r
35 \r
36       public JalviewFileFilter(String[] filts, String description) {\r
37           this();\r
38           for (int i = 0; i < filts.length; i++) {\r
39               // add filters one by one\r
40               addExtension(filts[i]);\r
41           }\r
42            if(description!=null) setDescription(description);\r
43       }\r
44 \r
45       // takes account of the fact that database is a directory\r
46       public boolean accept(File f) {\r
47           if(f != null) {\r
48               String extension = getExtension(f);\r
49               if(f.isDirectory()) {\r
50                  if(extension == null || extension.equals("")) {\r
51                     return true;\r
52                  } else {\r
53                     if(filters.get(getExtension(f)) != null) {\r
54                        return true;\r
55                     }\r
56                  }\r
57               }\r
58               if(extension != null && filters.get(getExtension(f)) != null) {\r
59                   return true;\r
60               }\r
61           }\r
62           return false;\r
63       }\r
64 \r
65        public String getExtension(File f) {\r
66           if(f != null) {\r
67               String filename = f.getName();\r
68               int i = filename.lastIndexOf('.');\r
69               if(i>0 && i<filename.length()-1) {\r
70                   return filename.substring(i+1).toLowerCase();\r
71               };\r
72           }\r
73           return "";\r
74       }\r
75 \r
76       public void addExtension(String extension) {\r
77           if(filters == null) {\r
78               filters = new Hashtable(5);\r
79           }\r
80           filters.put(extension.toLowerCase(), this);\r
81           fullDescription = null;\r
82       }\r
83 \r
84 \r
85       public String getDescription() {\r
86           if(fullDescription == null) {\r
87               if(description == null || isExtensionListInDescription()) {\r
88                    fullDescription = description==null ? "(" : description + " (";\r
89                   // build the description from the extension list\r
90                   Enumeration extensions = filters.keys();\r
91                   if(extensions != null) {\r
92                       fullDescription += "." + (String) extensions.nextElement();\r
93                       while (extensions.hasMoreElements()) {\r
94                           fullDescription += ", " + (String) extensions.nextElement();\r
95                       }\r
96                   }\r
97                   fullDescription += ")";\r
98               } else {\r
99                   fullDescription = description;\r
100               }\r
101           }\r
102           return fullDescription;\r
103       }\r
104 \r
105       public void setDescription(String description) {\r
106           this.description = description;\r
107           fullDescription = null;\r
108       }\r
109 \r
110       public void setExtensionListInDescription(boolean b) {\r
111           useExtensionsInDescription = b;\r
112           fullDescription = null;\r
113       }\r
114 \r
115       public boolean isExtensionListInDescription() {\r
116           return useExtensionsInDescription;\r
117       }\r
118   }\r