source: josm/trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java@ 3779

Last change on this file since 3779 was 2990, checked in by jttt, 14 years ago

Fix some eclipse warnings

  • Property svn:eol-style set to native
File size: 8.9 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.actions;
3
4import java.io.File;
5import java.util.ArrayList;
6import java.util.Collections;
7import java.util.Comparator;
8import java.util.LinkedList;
9import java.util.List;
10
11import javax.swing.JFileChooser;
12import javax.swing.filechooser.FileFilter;
13
14import org.openstreetmap.josm.io.AllFormatsImporter;
15import org.openstreetmap.josm.io.FileExporter;
16import org.openstreetmap.josm.io.FileImporter;
17
18/**
19 * A file filter that filters after the extension. Also includes a list of file
20 * filters used in JOSM.
21 *
22 */
23public class ExtensionFileFilter extends FileFilter {
24
25 /**
26 * list of supported formats
27 */
28 public static ArrayList<FileImporter> importers;
29
30 public static ArrayList<FileExporter> exporters;
31
32 // add some file types only if the relevant classes are there;
33 // this gives us the option to painlessly drop them from the .jar
34 // and build JOSM versions without support for these formats
35
36 static {
37
38 importers = new ArrayList<FileImporter>();
39
40 String[] importerNames = {
41 "org.openstreetmap.josm.io.OsmImporter",
42 "org.openstreetmap.josm.io.OsmGzipImporter",
43 "org.openstreetmap.josm.io.GpxImporter",
44 "org.openstreetmap.josm.io.NMEAImporter",
45 "org.openstreetmap.josm.io.OsmBzip2Importer",
46 "org.openstreetmap.josm.io.JpgImporter",
47 "org.openstreetmap.josm.io.AllFormatsImporter"
48 };
49
50 for (String classname : importerNames) {
51 try {
52 Class<?> klass = Class.forName(classname);
53 importers.add((FileImporter) klass.newInstance());
54 } catch (Exception e) {}
55 }
56
57 exporters = new ArrayList<FileExporter>();
58
59 String[] exporterNames = {
60 "org.openstreetmap.josm.io.GpxExporter",
61 "org.openstreetmap.josm.io.OsmExporter",
62 "org.openstreetmap.josm.io.OsmGzipExporter",
63 "org.openstreetmap.josm.io.OsmBzip2Exporter"
64 };
65
66 for (String classname : exporterNames) {
67 try {
68 Class<?> klass = Class.forName(classname);
69 exporters.add((FileExporter)klass.newInstance());
70 } catch (Exception e) {}
71 }
72 }
73
74 private final String extensions;
75 private final String description;
76 private final String defaultExtension;
77
78 static protected void sort(List<ExtensionFileFilter> filters) {
79 Collections.sort(
80 filters,
81 new Comparator<ExtensionFileFilter>() {
82 private AllFormatsImporter all = new AllFormatsImporter();
83 public int compare(ExtensionFileFilter o1, ExtensionFileFilter o2) {
84 if (o1.getDescription().equals(all.filter.getDescription())) return 1;
85 if (o2.getDescription().equals(all.filter.getDescription())) return -1;
86 return o1.getDescription().compareTo(o2.getDescription());
87 }
88 }
89 );
90 }
91
92 /**
93 * Replies an ordered list of {@see ExtensionFileFilter}s for importing.
94 * The list is ordered according to their description, an {@see AllFormatsImporter}
95 * is append at the end.
96 *
97 * @return an ordered list of {@see ExtensionFileFilter}s for importing.
98 */
99 public static List<ExtensionFileFilter> getImportExtensionFileFilters() {
100 LinkedList<ExtensionFileFilter> filters = new LinkedList<ExtensionFileFilter>();
101 for (FileImporter importer : importers) {
102 filters.add(importer.filter);
103 }
104 sort(filters);
105 return filters;
106 }
107
108 /**
109 * Replies an ordered list of {@see ExtensionFileFilter}s for exporting.
110 * The list is ordered according to their description, an {@see AllFormatsImporter}
111 * is append at the end.
112 *
113 * @return an ordered list of {@see ExtensionFileFilter}s for exporting.
114 */
115 public static List<ExtensionFileFilter> getExportExtensionFileFilters() {
116 LinkedList<ExtensionFileFilter> filters = new LinkedList<ExtensionFileFilter>();
117 for (FileExporter exporter : exporters) {
118 if (filters.contains(exporter.filter)) {
119 continue;
120 }
121 filters.add(exporter.filter);
122 }
123 sort(filters);
124 return filters;
125 }
126
127 /**
128 * Replies the default {@see ExtensionFileFilter} for a given extension
129 *
130 * @param extension the extension
131 * @return the default {@see ExtensionFileFilter} for a given extension
132 */
133 public static ExtensionFileFilter getDefaultImportExtensionFileFilter(String extension) {
134 if (extension == null) return new AllFormatsImporter().filter;
135 for (FileImporter importer : importers) {
136 if (extension.equals(importer.filter.getDefaultExtension()))
137 return importer.filter;
138 }
139 return new AllFormatsImporter().filter;
140 }
141
142 /**
143 * Replies the default {@see ExtensionFileFilter} for a given extension
144 *
145 * @param extension the extension
146 * @return the default {@see ExtensionFileFilter} for a given extension
147 */
148 public static ExtensionFileFilter getDefaultExportExtensionFileFilter(String extension) {
149 if (extension == null) return new AllFormatsImporter().filter;
150 for (FileExporter exporter : exporters) {
151 if (extension.equals(exporter.filter.getDefaultExtension()))
152 return exporter.filter;
153 }
154 return new AllFormatsImporter().filter;
155 }
156
157 /**
158 * Applies the choosable {@see FileFilter} to a {@see JFileChooser} before using the
159 * file chooser for selecting a file for reading.
160 *
161 * @param fileChooser the file chooser
162 * @param extension the default extension
163 */
164 public static void applyChoosableImportFileFilters(JFileChooser fileChooser, String extension) {
165 for (ExtensionFileFilter filter: getImportExtensionFileFilters()) {
166 fileChooser.addChoosableFileFilter(filter);
167 }
168 fileChooser.setFileFilter(getDefaultImportExtensionFileFilter(extension));
169 }
170
171 /**
172 * Applies the choosable {@see FileFilter} to a {@see JFileChooser} before using the
173 * file chooser for selecting a file for writing.
174 *
175 * @param fileChooser the file chooser
176 * @param extension the default extension
177 */
178 public static void applyChoosableExportFileFilters(JFileChooser fileChooser, String extension) {
179 for (ExtensionFileFilter filter: getExportExtensionFileFilters()) {
180 fileChooser.addChoosableFileFilter(filter);
181 }
182 fileChooser.setFileFilter(getDefaultExportExtensionFileFilter(extension));
183 }
184
185 /**
186 * Construct an extension file filter by giving the extension to check after.
187 */
188 public ExtensionFileFilter(String extension, String defaultExtension, String description) {
189 this.extensions = extension;
190 this.defaultExtension = defaultExtension;
191 this.description = description;
192 }
193
194 public boolean acceptName(String filename) {
195 String name = filename.toLowerCase();
196 for (String ext : extensions.split(","))
197 if (name.endsWith("."+ext))
198 return true;
199 return false;
200 }
201
202 @Override public boolean accept(File pathname) {
203 if (pathname.isDirectory())
204 return true;
205 return acceptName(pathname.getName());
206 }
207
208 @Override public String getDescription() {
209 return description;
210 }
211
212 public String getDefaultExtension() {
213 return defaultExtension;
214 }
215
216 @Override
217 public int hashCode() {
218 final int prime = 31;
219 int result = 1;
220 result = prime * result + ((defaultExtension == null) ? 0 : defaultExtension.hashCode());
221 result = prime * result + ((description == null) ? 0 : description.hashCode());
222 result = prime * result + ((extensions == null) ? 0 : extensions.hashCode());
223 return result;
224 }
225
226 @Override
227 public boolean equals(Object obj) {
228 if (this == obj)
229 return true;
230 if (obj == null)
231 return false;
232 if (getClass() != obj.getClass())
233 return false;
234 ExtensionFileFilter other = (ExtensionFileFilter) obj;
235 if (defaultExtension == null) {
236 if (other.defaultExtension != null)
237 return false;
238 } else if (!defaultExtension.equals(other.defaultExtension))
239 return false;
240 if (description == null) {
241 if (other.description != null)
242 return false;
243 } else if (!description.equals(other.description))
244 return false;
245 if (extensions == null) {
246 if (other.extensions != null)
247 return false;
248 } else if (!extensions.equals(other.extensions))
249 return false;
250 return true;
251 }
252}
Note: See TracBrowser for help on using the repository browser.