// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.io; import static org.openstreetmap.josm.tools.I18n.tr; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import javax.swing.SwingUtilities; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.ExtensionFileFilter; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.gui.layer.OsmDataLayer; import org.openstreetmap.josm.gui.progress.NullProgressMonitor; import org.openstreetmap.josm.gui.progress.ProgressMonitor; public class OsmImporter extends FileImporter { public OsmImporter() { super(new ExtensionFileFilter("osm,xml", "osm", tr("OSM Server Files") + " (*.osm *.xml)")); } public OsmImporter(ExtensionFileFilter filter) { super(filter); } @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException { try { FileInputStream in = new FileInputStream(file); importData(in, file); } catch (FileNotFoundException e) { e.printStackTrace(); throw new IOException(tr("File ''{0}'' does not exist.", file.getName())); } } protected void importData(InputStream in, File associatedFile) throws IllegalDataException { DataSet dataSet = OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE); final OsmDataLayer layer = new OsmDataLayer(dataSet, associatedFile.getName(), associatedFile); // FIXME: remove UI stuff from IO subsystem // Runnable uiStuff = new Runnable() { public void run() { Main.main.addLayer(layer); layer.fireDataChange(); layer.onPostLoadFromFile(); } }; if (SwingUtilities.isEventDispatchThread()) { uiStuff.run(); } else { SwingUtilities.invokeLater(uiStuff); } } }