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

Last change on this file since 4996 was 4886, checked in by simon04, 12 years ago

see #7307 - basic version of GeoJSON export

  • Property svn:eol-style set to native
File size: 9.0 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 final ArrayList<FileImporter> importers;
29
30 public static final 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.OsmChangeImporter",
44 "org.openstreetmap.josm.io.GpxImporter",
45 "org.openstreetmap.josm.io.NMEAImporter",
46 "org.openstreetmap.josm.io.OsmBzip2Importer",
47 "org.openstreetmap.josm.io.JpgImporter",
48 "org.openstreetmap.josm.io.AllFormatsImporter"
49 };
50
51 for (String classname : importerNames) {
52 try {
53 Class<?> klass = Class.forName(classname);
54 importers.add((FileImporter) klass.newInstance());
55 } catch (Exception e) {}
56 }
57
58 exporters = new ArrayList<FileExporter>();
59
60 String[] exporterNames = {
61 "org.openstreetmap.josm.io.GpxExporter",
62 "org.openstreetmap.josm.io.OsmExporter",
63 "org.openstreetmap.josm.io.OsmGzipExporter",
64 "org.openstreetmap.josm.io.OsmBzip2Exporter",
65 "org.openstreetmap.josm.io.GeoJSONExporter",
66 };
67
68 for (String classname : exporterNames) {
69 try {
70 Class<?> klass = Class.forName(classname);
71 exporters.add((FileExporter)klass.newInstance());
72 } catch (Exception e) {}
73 }
74 }
75
76 private final String extensions;
77 private final String description;
78 private final String defaultExtension;
79
80 static protected void sort(List<ExtensionFileFilter> filters) {
81 Collections.sort(
82 filters,
83 new Comparator<ExtensionFileFilter>() {
84 private AllFormatsImporter all = new AllFormatsImporter();
85 public int compare(ExtensionFileFilter o1, ExtensionFileFilter o2) {
86 if (o1.getDescription().equals(all.filter.getDescription())) return 1;
87 if (o2.getDescription().equals(all.filter.getDescription())) return -1;
88 return o1.getDescription().compareTo(o2.getDescription());
89 }
90 }
91 );
92 }
93
94 /**
95 * Replies an ordered list of {@see ExtensionFileFilter}s for importing.
96 * The list is ordered according to their description, an {@see AllFormatsImporter}
97 * is append at the end.
98 *
99 * @return an ordered list of {@see ExtensionFileFilter}s for importing.
100 */
101 public static List<ExtensionFileFilter> getImportExtensionFileFilters() {
102 LinkedList<ExtensionFileFilter> filters = new LinkedList<ExtensionFileFilter>();
103 for (FileImporter importer : importers) {
104 filters.add(importer.filter);
105 }
106 sort(filters);
107 return filters;
108 }
109
110 /**
111 * Replies an ordered list of {@see ExtensionFileFilter}s for exporting.
112 * The list is ordered according to their description, an {@see AllFormatsImporter}
113 * is append at the end.
114 *
115 * @return an ordered list of {@see ExtensionFileFilter}s for exporting.
116 */
117 public static List<ExtensionFileFilter> getExportExtensionFileFilters() {
118 LinkedList<ExtensionFileFilter> filters = new LinkedList<ExtensionFileFilter>();
119 for (FileExporter exporter : exporters) {
120 if (filters.contains(exporter.filter)) {
121 continue;
122 }
123 filters.add(exporter.filter);
124 }
125 sort(filters);
126 return filters;
127 }
128
129 /**
130 * Replies the default {@see ExtensionFileFilter} for a given extension
131 *
132 * @param extension the extension
133 * @return the default {@see ExtensionFileFilter} for a given extension
134 */
135 public static ExtensionFileFilter getDefaultImportExtensionFileFilter(String extension) {
136 if (extension == null) return new AllFormatsImporter().filter;
137 for (FileImporter importer : importers) {
138 if (extension.equals(importer.filter.getDefaultExtension()))
139 return importer.filter;
140 }
141 return new AllFormatsImporter().filter;
142 }
143
144 /**
145 * Replies the default {@see ExtensionFileFilter} for a given extension
146 *
147 * @param extension the extension
148 * @return the default {@see ExtensionFileFilter} for a given extension
149 */
150 public static ExtensionFileFilter getDefaultExportExtensionFileFilter(String extension) {
151 if (extension == null) return new AllFormatsImporter().filter;
152 for (FileExporter exporter : exporters) {
153 if (extension.equals(exporter.filter.getDefaultExtension()))
154 return exporter.filter;
155 }
156 return new AllFormatsImporter().filter;
157 }
158
159 /**
160 * Applies the choosable {@see FileFilter} to a {@see JFileChooser} before using the
161 * file chooser for selecting a file for reading.
162 *
163 * @param fileChooser the file chooser
164 * @param extension the default extension
165 */
166 public static void applyChoosableImportFileFilters(JFileChooser fileChooser, String extension) {
167 for (ExtensionFileFilter filter: getImportExtensionFileFilters()) {
168 fileChooser.addChoosableFileFilter(filter);
169 }
170 fileChooser.setFileFilter(getDefaultImportExtensionFileFilter(extension));
171 }
172
173 /**
174 * Applies the choosable {@see FileFilter} to a {@see JFileChooser} before using the
175 * file chooser for selecting a file for writing.
176 *
177 * @param fileChooser the file chooser
178 * @param extension the default extension
179 */
180 public static void applyChoosableExportFileFilters(JFileChooser fileChooser, String extension) {
181 for (ExtensionFileFilter filter: getExportExtensionFileFilters()) {
182 fileChooser.addChoosableFileFilter(filter);
183 }
184 fileChooser.setFileFilter(getDefaultExportExtensionFileFilter(extension));
185 }
186
187 /**
188 * Construct an extension file filter by giving the extension to check after.
189 */
190 public ExtensionFileFilter(String extension, String defaultExtension, String description) {
191 this.extensions = extension;
192 this.defaultExtension = defaultExtension;
193 this.description = description;
194 }
195
196 public boolean acceptName(String filename) {
197 String name = filename.toLowerCase();
198 for (String ext : extensions.split(","))
199 if (name.endsWith("."+ext))
200 return true;
201 return false;
202 }
203
204 @Override public boolean accept(File pathname) {
205 if (pathname.isDirectory())
206 return true;
207 return acceptName(pathname.getName());
208 }
209
210 @Override public String getDescription() {
211 return description;
212 }
213
214 public String getDefaultExtension() {
215 return defaultExtension;
216 }
217
218 @Override
219 public int hashCode() {
220 final int prime = 31;
221 int result = 1;
222 result = prime * result + ((defaultExtension == null) ? 0 : defaultExtension.hashCode());
223 result = prime * result + ((description == null) ? 0 : description.hashCode());
224 result = prime * result + ((extensions == null) ? 0 : extensions.hashCode());
225 return result;
226 }
227
228 @Override
229 public boolean equals(Object obj) {
230 if (this == obj)
231 return true;
232 if (obj == null)
233 return false;
234 if (getClass() != obj.getClass())
235 return false;
236 ExtensionFileFilter other = (ExtensionFileFilter) obj;
237 if (defaultExtension == null) {
238 if (other.defaultExtension != null)
239 return false;
240 } else if (!defaultExtension.equals(other.defaultExtension))
241 return false;
242 if (description == null) {
243 if (other.description != null)
244 return false;
245 } else if (!description.equals(other.description))
246 return false;
247 if (extensions == null) {
248 if (other.extensions != null)
249 return false;
250 } else if (!extensions.equals(other.extensions))
251 return false;
252 return true;
253 }
254}
Note: See TracBrowser for help on using the repository browser.