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

Last change on this file since 4701 was 4533, checked in by bastiK, 13 years ago

add importer for osmChange files (see #6653)

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