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

Revision 4533, 2.6 KB checked in by bastiK, 7 months ago (diff)

add importer for osmChange files (see #6653)

  • 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.FileInputStream;
8import java.io.FileNotFoundException;
9import java.io.IOException;
10import java.io.InputStream;
11
12import javax.swing.JOptionPane;
13import javax.swing.SwingUtilities;
14
15import org.openstreetmap.josm.Main;
16import org.openstreetmap.josm.actions.ExtensionFileFilter;
17import org.openstreetmap.josm.data.osm.DataSet;
18import org.openstreetmap.josm.gui.layer.OsmDataLayer;
19import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
20import org.openstreetmap.josm.gui.progress.ProgressMonitor;
21
22public class OsmChangeImporter extends FileImporter {
23
24    public OsmChangeImporter() {
25        super(new ExtensionFileFilter("osc", "osc", tr("OsmChange File") + " (*.osc)"));
26    }
27
28    public OsmChangeImporter(ExtensionFileFilter filter) {
29        super(filter);
30    }
31
32    @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
33        try {
34            FileInputStream in = new FileInputStream(file);
35            importData(in, file);
36        } catch (FileNotFoundException e) {
37            e.printStackTrace();
38            throw new IOException(tr("File ''{0}'' does not exist.", file.getName()));
39        }
40    }
41
42    protected void importData(InputStream in, final File associatedFile) throws IllegalDataException {
43        final DataSet dataSet = OsmChangeReader.parseDataSet(in, NullProgressMonitor.INSTANCE);
44        final OsmDataLayer layer = new OsmDataLayer(dataSet, associatedFile.getName(), associatedFile);
45        addDataLayer(dataSet, layer, associatedFile.getPath()); 
46    }
47       
48    protected void addDataLayer(final DataSet dataSet, final OsmDataLayer layer, final String filePath) { 
49        // FIXME: remove UI stuff from IO subsystem
50        //
51        Runnable uiStuff = new Runnable() {
52            @Override
53            public void run() {
54                if (dataSet.allPrimitives().isEmpty()) {
55                    JOptionPane.showMessageDialog(
56                            Main.parent,
57                            tr("No data found in file {0}.", filePath),
58                            tr("Open OsmChange file"),
59                            JOptionPane.INFORMATION_MESSAGE);
60                }
61                Main.main.addLayer(layer);
62                layer.onPostLoadFromFile();
63            }
64        };
65        if (SwingUtilities.isEventDispatchThread()) {
66            uiStuff.run();
67        } else {
68            SwingUtilities.invokeLater(uiStuff);
69        }
70    }
71}
Note: See TracBrowser for help on using the repository browser.