source: josm/trunk/src/org/openstreetmap/josm/io/JpgImporter.java@ 5361

Last change on this file since 5361 was 5361, checked in by Don-vip, 12 years ago

fix #7879 - Allow to open local and remote gzipped/bzipped osmChange files + remote osm.gz files + make some public constants of File filters to share between same importers/exporters

  • Property svn:eol-style set to native
File size: 3.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.io.File;
7import java.io.IOException;
8import java.util.ArrayList;
9import java.util.Arrays;
10import java.util.HashSet;
11import java.util.List;
12import java.util.Set;
13
14import org.openstreetmap.josm.actions.ExtensionFileFilter;
15import org.openstreetmap.josm.gui.layer.GpxLayer;
16import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
17import org.openstreetmap.josm.gui.progress.ProgressMonitor;
18
19public class JpgImporter extends FileImporter {
20 private GpxLayer gpx;
21
22 public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
23 "jpg", "jpg", tr("Image Files") + " (*.jpg, "+ tr("folder")+")");
24
25 public JpgImporter() {
26 super(FILE_FILTER);
27 }
28
29 public JpgImporter(GpxLayer gpx) {
30 this();
31 this.gpx = gpx;
32 }
33
34 @Override
35 public boolean acceptFile(File pathname) {
36 return super.acceptFile(pathname) || pathname.isDirectory();
37 }
38
39 @Override
40 public void importData(List<File> sel, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
41 progressMonitor.beginTask(tr("Looking for image files"), 1);
42 try {
43 List<File> files = new ArrayList<File>();
44 Set<String> visitedDirs = new HashSet<String>();
45 addRecursiveFiles(files, visitedDirs, sel, progressMonitor.createSubTaskMonitor(1, true));
46
47 if (progressMonitor.isCanceled())
48 return;
49
50 if (files.isEmpty())
51 throw new IOException(tr("No image files found."));
52
53 GeoImageLayer.create(files, gpx);
54 } finally {
55 progressMonitor.finishTask();
56 }
57 }
58
59 private void addRecursiveFiles(List<File> files, Set<String> visitedDirs, List<File> sel, ProgressMonitor progressMonitor) throws IOException {
60
61 if (progressMonitor.isCanceled())
62 return;
63
64 progressMonitor.beginTask(null, sel.size());
65 try {
66 for (File f : sel) {
67 if (f.isDirectory()) {
68 if (visitedDirs.add(f.getCanonicalPath())) { // Do not loop over symlinks
69 File[] dirFiles = f.listFiles(); // Can be null for some strange directories (like lost+found)
70 if (dirFiles != null) {
71 addRecursiveFiles(files, visitedDirs, Arrays.asList(dirFiles), progressMonitor.createSubTaskMonitor(1, true));
72 }
73 } else {
74 progressMonitor.worked(1);
75 }
76 } else {
77 if (f.getName().toLowerCase().endsWith(".jpg")) {
78 files.add(f);
79 }
80 progressMonitor.worked(1);
81 }
82 }
83 } finally {
84 progressMonitor.finishTask();
85 }
86 }
87
88 @Override
89 public boolean isBatchImporter() {
90 return true;
91 }
92
93 /**
94 * Needs to be the last, to avoid problems.
95 */
96 @Override
97 public double getPriority() {
98 return -1000;
99 }
100}
Note: See TracBrowser for help on using the repository browser.