| | 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.IOException; |
| | 9 | import java.io.InputStream; |
| | 10 | import java.util.List; |
| | 11 | |
| | 12 | import org.openstreetmap.josm.Main; |
| | 13 | import org.openstreetmap.josm.actions.ExtensionFileFilter; |
| | 14 | import org.openstreetmap.josm.data.notes.Note; |
| | 15 | import org.openstreetmap.josm.gui.layer.NoteLayer; |
| | 16 | import org.openstreetmap.josm.gui.progress.ProgressMonitor; |
| | 17 | import org.openstreetmap.josm.gui.util.GuiHelper; |
| | 18 | import org.openstreetmap.josm.tools.Utils; |
| | 19 | import org.xml.sax.SAXException; |
| | 20 | |
| | 21 | /** |
| | 22 | * File importer that reads note dump files (*.osn and .osn.bz2) |
| | 23 | */ |
| | 24 | public class NoteImporter extends FileImporter { |
| | 25 | |
| | 26 | private static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter( |
| | 27 | "osn,osn.bz2", "osn", tr("Note Files") + " (*.osn *.osn.bz2)"); |
| | 28 | |
| | 29 | /** Create an importer for note dump files */ |
| | 30 | public NoteImporter() { |
| | 31 | super(FILE_FILTER); |
| | 32 | } |
| | 33 | |
| | 34 | @Override |
| | 35 | public void importData(File file, ProgressMonitor progressMonitor) throws IOException { |
| | 36 | Main.debug("importing notes file " + file.getAbsolutePath()); |
| | 37 | final String fileName = file.getName(); |
| | 38 | InputStream is; |
| | 39 | if(fileName.endsWith(".bz2")) { |
| | 40 | is = Utils.getBZip2InputStream(new FileInputStream(file)); |
| | 41 | } else { |
| | 42 | is = new FileInputStream(file); |
| | 43 | } |
| | 44 | NoteReader reader = new NoteReader(is); |
| | 45 | try { |
| | 46 | final List<Note> fileNotes = reader.parse(); |
| | 47 | |
| | 48 | List<NoteLayer> noteLayers = null; |
| | 49 | if (Main.map != null) { |
| | 50 | noteLayers = Main.map.mapView.getLayersOfType(NoteLayer.class); |
| | 51 | } |
| | 52 | if (noteLayers != null && noteLayers.size() > 0) { |
| | 53 | NoteLayer layer = noteLayers.get(0); |
| | 54 | layer.addNotes(fileNotes); |
| | 55 | } else { |
| | 56 | GuiHelper.runInEDT(new Runnable() { |
| | 57 | @Override |
| | 58 | public void run() { |
| | 59 | NoteLayer layer = new NoteLayer(fileNotes, fileName); |
| | 60 | Main.main.addLayer(layer); |
| | 61 | } |
| | 62 | }); |
| | 63 | } |
| | 64 | } catch (SAXException e) { |
| | 65 | Main.error("error opening up notes file"); |
| | 66 | Main.error(e, true); |
| | 67 | throw new IOException(e.getMessage(), e); |
| | 68 | } |
| | 69 | finally { |
| | 70 | Utils.close(is); |
| | 71 | } |
| | 72 | } |
| | 73 | |
| | 74 | } |