Changeset 2851 in josm for trunk


Ignore:
Timestamp:
2010-01-13T20:20:07+01:00 (14 years ago)
Author:
jttt
Message:

Added progress monitor to JpgImporter, allow to cancel importing

Location:
trunk/src/org/openstreetmap/josm
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java

    r2842 r2851  
    2323import org.openstreetmap.josm.io.AllFormatsImporter;
    2424import org.openstreetmap.josm.io.FileImporter;
    25 import org.openstreetmap.josm.io.IllegalDataException;
    2625import org.openstreetmap.josm.io.OsmTransferException;
    2726import org.openstreetmap.josm.tools.MultiMap;
     
    110109                chosenImporter = null;
    111110            }
    112             getProgressMonitor().setTicks(files.size());
     111            getProgressMonitor().setTicksCount(files.size());
    113112
    114113            if (chosenImporter != null) { // The importer was expicitely chosen, so use it.
     
    132131            else {    // find apropriate importer
    133132                MultiMap<FileImporter, File> map = new MultiMap<FileImporter, File>();
    134                 while (! files.isEmpty()) {
    135                     File f = files.get(0);
    136                     for (FileImporter importer : ExtensionFileFilter.importers) {
    137                         if (importer.acceptFile(f)) {
    138                             map.add(importer, f);
    139                             files.remove(f);
     133                FILES:
     134                    for (File f: files) {
     135                        for (FileImporter importer : ExtensionFileFilter.importers) {
     136                            if (importer.acceptFile(f)) {
     137                                map.add(importer, f);
     138                                continue FILES;
     139                            }
    140140                        }
     141                        throw new RuntimeException(); // no importer found
    141142                    }
    142                     if (files.contains(f))
    143                         throw new RuntimeException(); // no importer found
    144                 }
    145143                List<FileImporter> ims = new ArrayList<FileImporter>(map.keySet());
    146144                Collections.sort(ims);
     
    165163                }
    166164                getProgressMonitor().indeterminateSubTask(msg);
    167                 importer.importDataHandleExceptions(files);
    168                 getProgressMonitor().worked(files.size());
     165                importer.importDataHandleExceptions(files, getProgressMonitor().createSubTaskMonitor(files.size(), false));
    169166            } else {
    170167                for (File f : files) {
    171168                    if (cancelled) return;
    172169                    getProgressMonitor().indeterminateSubTask(tr("Opening file ''{0}'' ...", f.getAbsolutePath()));
    173                     importer.importDataHandleExceptions(f);
    174                     getProgressMonitor().worked(1);
     170                    importer.importDataHandleExceptions(f, getProgressMonitor().createSubTaskMonitor(1, false));
    175171                }
    176172            }
  • trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java

    r2850 r2851  
    6666import org.openstreetmap.josm.gui.layer.markerlayer.AudioMarker;
    6767import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
     68import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    6869import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
    6970import org.openstreetmap.josm.io.JpgImporter;
     
    284285                    MarkerLayer ml = new MarkerLayer(new GpxData(), tr("Audio markers from {0}", getName()) + names,
    285286                            getAssociatedFile(), me);
    286                     if (sel != null) {
    287                         double firstStartTime = sel[0].lastModified() / 1000.0 /* ms -> seconds */
    288                         - AudioUtil.getCalibratedDuration(sel[0]);
    289 
    290                         Markers m = new Markers();
    291                         for (int i = 0; i < sel.length; i++) {
    292                             importAudio(sel[i], ml, firstStartTime, m);
    293                         }
     287                    double firstStartTime = sel[0].lastModified() / 1000.0 /* ms -> seconds */
     288                    - AudioUtil.getCalibratedDuration(sel[0]);
     289
     290                    Markers m = new Markers();
     291                    for (int i = 0; i < sel.length; i++) {
     292                        importAudio(sel[i], ml, firstStartTime, m);
    294293                    }
    295294                    Main.main.addLayer(ml);
     
    334333                    return;
    335334                addRecursiveFiles(files, sel);
    336                 importer.importDataHandleExceptions(files);
     335                importer.importDataHandleExceptions(files, NullProgressMonitor.INSTANCE);
    337336            }
    338337
     
    526525         ****************************************************************/
    527526        if ((computeCacheMaxLineLengthUsed != maxLineLength) || (!neutralColor.equals(computeCacheColorUsed))
    528                         || (computeCacheColored != colored) || (computeCacheColorTracksTune != colorTracksTune)) {
     527                || (computeCacheColored != colored) || (computeCacheColorTracksTune != colorTracksTune)) {
    529528            // System.out.println("(re-)computing gpx line styles, reason: CCIS=" +
    530529            // computeCacheInSync + " CCMLLU=" + (computeCacheMaxLineLengthUsed != maxLineLength) +
  • trunk/src/org/openstreetmap/josm/io/FileImporter.java

    r2719 r2851  
    1212import org.openstreetmap.josm.Main;
    1313import org.openstreetmap.josm.actions.ExtensionFileFilter;
     14import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1415
    1516public abstract class FileImporter implements Comparable<FileImporter> {
    1617
    17     public ExtensionFileFilter filter;
     18    public final ExtensionFileFilter filter;
    1819
    1920    public FileImporter(ExtensionFileFilter filter) {
     
    3435    /**
    3536     * Needs to be implemented if isBatchImporter() returns false.
     37     * @throws IllegalDataException
    3638     */
    37     public void importData(File file) throws IOException, IllegalDataException {
     39    public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
    3840        throw new IOException(tr("Could not import ''{0}''.", file.getName()));
    3941    }
     
    4143    /**
    4244     * Needs to be implemented if isBatchImporter() returns true.
     45     * @throws IllegalDataException
    4346     */
    44     public void importData(List<File> files) throws IOException, IllegalDataException {
     47    public void importData(List<File> files, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
    4548        throw new IOException(tr("Could not import files."));
    4649    }
     
    4952     * Wrapper to give meaningful output if things go wrong.
    5053     */
    51     public void importDataHandleExceptions(File f) {
     54    public void importDataHandleExceptions(File f, ProgressMonitor progressMonitor) {
    5255        try {
    5356            System.out.println("Open file: " + f.getAbsolutePath() + " (" + f.length() + " bytes)");
    54             importData(f);
     57            importData(f, progressMonitor);
    5558        } catch (Exception e) {
    5659            e.printStackTrace();
     
    6366        }
    6467    }
    65     public void importDataHandleExceptions(List<File> files) {
     68    public void importDataHandleExceptions(List<File> files, ProgressMonitor progressMonitor) {
    6669        try {
    6770            System.out.println("Open "+files.size()+" files");
    68             importData(files);
     71            importData(files, progressMonitor);
    6972        } catch (Exception e) {
    7073            e.printStackTrace();
     
    9093        return (new Double(this.getPriority())).compareTo(other.getPriority());
    9194    }
     95
    9296}
  • trunk/src/org/openstreetmap/josm/io/GpxImporter.java

    r2795 r2851  
    1818import org.openstreetmap.josm.gui.layer.GpxLayer;
    1919import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
     20import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    2021import org.xml.sax.SAXException;
    2122
     
    2627    }
    2728
    28     @Override public void importData(final File file) throws IOException {
     29    @Override public void importData(final File file, ProgressMonitor progressMonitor) throws IOException {
    2930        final String fn = file.getName();
    3031
  • trunk/src/org/openstreetmap/josm/io/IllegalDataException.java

    r2512 r2851  
    66    public IllegalDataException() {
    77        super();
    8         // TODO Auto-generated constructor stub
    98    }
    109
    1110    public IllegalDataException(String message, Throwable cause) {
    1211        super(message, cause);
    13         // TODO Auto-generated constructor stub
    1412    }
    1513
    1614    public IllegalDataException(String message) {
    1715        super(message);
    18         // TODO Auto-generated constructor stub
    1916    }
    2017
    2118    public IllegalDataException(Throwable cause) {
    2219        super(cause);
    23         // TODO Auto-generated constructor stub
    2420    }
    2521
  • trunk/src/org/openstreetmap/josm/io/JpgImporter.java

    r2799 r2851  
    66import java.io.File;
    77import java.io.IOException;
     8import java.util.ArrayList;
    89import java.util.Arrays;
    9 import java.util.LinkedList;
     10import java.util.HashSet;
    1011import java.util.List;
     12import java.util.Set;
    1113
    1214import org.openstreetmap.josm.actions.ExtensionFileFilter;
    1315import org.openstreetmap.josm.gui.layer.GpxLayer;
    1416import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
     17import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1518
    1619public class JpgImporter extends FileImporter {
     
    3235
    3336    @Override
    34     public void importData(List<File> sel) throws IOException, IllegalDataException {
    35         if (sel == null || sel.size() == 0)
    36             return;
    37         LinkedList<File> files = new LinkedList<File>();
    38         addRecursiveFiles(files, sel);
    39         if(files.isEmpty()) throw new IOException(tr("No image files found."));
    40         GeoImageLayer.create(files, gpx);
     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.isCancelled())
     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        }
    4154    }
    4255
    43     private void addRecursiveFiles(LinkedList<File> files, List<File> sel) {
    44         for (File f : sel) {
    45             if (f.isDirectory()) {
    46                 addRecursiveFiles(files, Arrays.asList(f.listFiles()));
    47             } else if (f.getName().toLowerCase().endsWith(".jpg")) {
    48                 files.add(f);
     56    private void addRecursiveFiles(List<File> files, Set<String> visitedDirs, List<File> sel, ProgressMonitor progressMonitor) throws IOException {
     57
     58        if (progressMonitor.isCancelled())
     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                }
    4979            }
     80        } finally {
     81            progressMonitor.finishTask();
    5082        }
    5183    }
  • trunk/src/org/openstreetmap/josm/io/NMEAImporter.java

    r2290 r2851  
    1414import org.openstreetmap.josm.gui.layer.GpxLayer;
    1515import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
     16import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1617
    1718public class NMEAImporter extends FileImporter {
     
    2324    }
    2425
    25     @Override public void importData(File file) throws IOException {
     26    @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException {
    2627        String fn = file.getName();
    2728        NmeaReader r = new NmeaReader(new FileInputStream(file), file.getAbsoluteFile().getParentFile());
  • trunk/src/org/openstreetmap/josm/io/OsmBzip2Importer.java

    r2070 r2851  
    1111import org.apache.tools.bzip2.CBZip2InputStream;
    1212import org.openstreetmap.josm.actions.ExtensionFileFilter;
     13import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1314
    1415public class OsmBzip2Importer extends OsmImporter {
     
    2021
    2122    @Override
    22     public void importData(File file) throws IOException, IllegalDataException {
     23    public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
    2324        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
    2425        int b = bis.read();
  • trunk/src/org/openstreetmap/josm/io/OsmGzipImporter.java

    r2070 r2851  
    1010
    1111import org.openstreetmap.josm.actions.ExtensionFileFilter;
     12import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1213
    1314public class OsmGzipImporter extends OsmImporter {
     
    1819
    1920    @Override
    20     public void importData(File file) throws IOException, IllegalDataException {
     21    public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
    2122        GZIPInputStream in = new GZIPInputStream(new FileInputStream(file));
    2223        importData(in, file);
  • trunk/src/org/openstreetmap/josm/io/OsmImporter.java

    r2181 r2851  
    1717import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1818import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
     19import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1920
    2021public class OsmImporter extends FileImporter {
     
    2829    }
    2930
    30     @Override public void importData(File file) throws IOException, IllegalDataException {
     31    @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
    3132        try {
    3233            FileInputStream in = new FileInputStream(file);
Note: See TracChangeset for help on using the changeset viewer.