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

Revision 4310, 3.1 KB checked in by stoecker, 10 months ago (diff)

fix #6680, fix #6677 - i18n issues

  • Property svn:eol-style set to native
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 JpgImporter() {
23        super(new ExtensionFileFilter("jpg", "jpg", tr("Image Files") + " (*.jpg, "+ tr("folder")+")"));
24    }
25
26    public JpgImporter(GpxLayer gpx) {
27        this();
28        this.gpx = gpx;
29    }
30
31    @Override
32    public boolean acceptFile(File pathname) {
33        return super.acceptFile(pathname) || pathname.isDirectory();
34    }
35
36    @Override
37    public void importData(List<File> sel, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
38        progressMonitor.beginTask(tr("Looking for image files"), 1);
39        try {
40            List<File> files = new ArrayList<File>();
41            Set<String> visitedDirs = new HashSet<String>();
42            addRecursiveFiles(files, visitedDirs, sel, progressMonitor.createSubTaskMonitor(1, true));
43
44            if (progressMonitor.isCanceled())
45                return;
46
47            if (files.isEmpty())
48                throw new IOException(tr("No image files found."));
49
50            GeoImageLayer.create(files, gpx);
51        } finally {
52            progressMonitor.finishTask();
53        }
54    }
55
56    private void addRecursiveFiles(List<File> files, Set<String> visitedDirs, List<File> sel, ProgressMonitor progressMonitor) throws IOException {
57
58        if (progressMonitor.isCanceled())
59            return;
60
61        progressMonitor.beginTask(null, sel.size());
62        try {
63            for (File f : sel) {
64                if (f.isDirectory()) {
65                    if (visitedDirs.add(f.getCanonicalPath())) { // Do not loop over symlinks
66                        File[] dirFiles = f.listFiles(); // Can be null for some strange directories (like lost+found)
67                        if (dirFiles != null) {
68                            addRecursiveFiles(files, visitedDirs, Arrays.asList(dirFiles), progressMonitor.createSubTaskMonitor(1, true));
69                        }
70                    } else {
71                        progressMonitor.worked(1);
72                    }
73                } else {
74                    if (f.getName().toLowerCase().endsWith(".jpg")) {
75                        files.add(f);
76                    }
77                    progressMonitor.worked(1);
78                }
79            }
80        } finally {
81            progressMonitor.finishTask();
82        }
83    }
84
85    @Override
86    public boolean isBatchImporter() {
87        return true;
88    }
89
90    /**
91     * Needs to be the last, to avoid problems.
92     */
93    @Override
94    public double getPriority() {
95        return -1000;
96    }
97}
Note: See TracBrowser for help on using the repository browser.