| 1 | // License: GPL. For details, see LICENSE file. |
|---|
| 2 | package org.openstreetmap.josm.io; |
|---|
| 3 | |
|---|
| 4 | import static org.openstreetmap.josm.tools.I18n.tr; |
|---|
| 5 | |
|---|
| 6 | import java.io.File; |
|---|
| 7 | import java.io.FileInputStream; |
|---|
| 8 | import java.io.FileNotFoundException; |
|---|
| 9 | import java.io.IOException; |
|---|
| 10 | import java.io.InputStream; |
|---|
| 11 | |
|---|
| 12 | import javax.swing.JOptionPane; |
|---|
| 13 | import javax.swing.SwingUtilities; |
|---|
| 14 | |
|---|
| 15 | import org.openstreetmap.josm.Main; |
|---|
| 16 | import org.openstreetmap.josm.actions.ExtensionFileFilter; |
|---|
| 17 | import org.openstreetmap.josm.data.osm.DataSet; |
|---|
| 18 | import org.openstreetmap.josm.gui.layer.OsmDataLayer; |
|---|
| 19 | import org.openstreetmap.josm.gui.progress.NullProgressMonitor; |
|---|
| 20 | import org.openstreetmap.josm.gui.progress.ProgressMonitor; |
|---|
| 21 | |
|---|
| 22 | public 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 | } |
|---|