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.IOException; 008import java.io.InputStream; 009import java.util.List; 010 011import org.openstreetmap.josm.Main; 012import org.openstreetmap.josm.actions.ExtensionFileFilter; 013import org.openstreetmap.josm.data.notes.Note; 014import org.openstreetmap.josm.gui.layer.NoteLayer; 015import org.openstreetmap.josm.gui.progress.ProgressMonitor; 016import org.openstreetmap.josm.gui.util.GuiHelper; 017import org.xml.sax.SAXException; 018 019/** 020 * File importer that reads note dump files (*.osn and .osn.bz2) 021 * @since 7538 022 */ 023public class NoteImporter extends FileImporter { 024 025 private static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter( 026 "osn,osn.bz2", "osn", tr("Note Files") + " (*.osn *.osn.bz2)"); 027 028 /** Create an importer for note dump files */ 029 public NoteImporter() { 030 super(FILE_FILTER); 031 } 032 033 @Override 034 public void importData(final File file, ProgressMonitor progressMonitor) throws IOException { 035 if (Main.isDebugEnabled()) { 036 Main.debug("importing notes file " + file.getAbsolutePath()); 037 } 038 try (InputStream is = Compression.getUncompressedFileInputStream(file)) { 039 final List<Note> fileNotes = new NoteReader(is).parse(); 040 041 List<NoteLayer> noteLayers = null; 042 if (Main.map != null) { 043 noteLayers = Main.map.mapView.getLayersOfType(NoteLayer.class); 044 } 045 if (noteLayers != null && !noteLayers.isEmpty()) { 046 noteLayers.get(0).getNoteData().addNotes(fileNotes); 047 } else { 048 GuiHelper.runInEDT(new Runnable() { 049 @Override 050 public void run() { 051 Main.main.addLayer(new NoteLayer(fileNotes, file.getName())); 052 } 053 }); 054 } 055 } catch (SAXException e) { 056 Main.error("error opening up notes file"); 057 Main.error(e, true); 058 throw new IOException(e.getMessage(), e); 059 } 060 } 061}