001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.io; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.io.File; 007import java.io.FileNotFoundException; 008import java.io.IOException; 009import java.io.InputStream; 010 011import javax.swing.JOptionPane; 012 013import org.openstreetmap.josm.Main; 014import org.openstreetmap.josm.actions.ExtensionFileFilter; 015import org.openstreetmap.josm.data.osm.DataSet; 016import org.openstreetmap.josm.gui.layer.OsmDataLayer; 017import org.openstreetmap.josm.gui.progress.ProgressMonitor; 018import org.openstreetmap.josm.gui.util.GuiHelper; 019 020public class OsmChangeImporter extends FileImporter { 021 022 public static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions( 023 "osc", "osc", tr("OsmChange File"), true); 024 025 /** 026 * Constructs a new {@code OsmChangeImporter}. 027 */ 028 public OsmChangeImporter() { 029 super(FILE_FILTER); 030 } 031 032 public OsmChangeImporter(ExtensionFileFilter filter) { 033 super(filter); 034 } 035 036 @Override 037 public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException { 038 try { 039 importData(Compression.getUncompressedFileInputStream(file), file, progressMonitor); 040 } catch (FileNotFoundException e) { 041 Main.error(e); 042 throw new IOException(tr("File ''{0}'' does not exist.", file.getName()), e); 043 } 044 } 045 046 protected void importData(InputStream in, final File associatedFile, ProgressMonitor progressMonitor) throws IllegalDataException { 047 final DataSet dataSet = OsmChangeReader.parseDataSet(in, progressMonitor); 048 final OsmDataLayer layer = new OsmDataLayer(dataSet, associatedFile.getName(), associatedFile); 049 addDataLayer(dataSet, layer, associatedFile.getPath()); 050 } 051 052 protected void addDataLayer(final DataSet dataSet, final OsmDataLayer layer, final String filePath) { 053 // FIXME: remove UI stuff from IO subsystem 054 // 055 GuiHelper.runInEDT(() -> { 056 if (dataSet.allPrimitives().isEmpty()) { 057 JOptionPane.showMessageDialog( 058 Main.parent, 059 tr("No data found in file {0}.", filePath), 060 tr("Open OsmChange file"), 061 JOptionPane.INFORMATION_MESSAGE); 062 } 063 Main.getLayerManager().addLayer(layer); 064 layer.onPostLoadFromFile(); 065 }); 066 } 067}