Ignore:
Timestamp:
2018-08-07T00:24:36+02:00 (6 years ago)
Author:
Don-vip
Message:

see #8765, fix #11086 - Support notes in osmChange (.osc) files created by OsmAnd

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/io/importexport/OsmChangeImporter.java

    r12671 r14101  
    1414import org.openstreetmap.josm.actions.ExtensionFileFilter;
    1515import org.openstreetmap.josm.data.osm.DataSet;
     16import org.openstreetmap.josm.data.osm.NoteData;
    1617import org.openstreetmap.josm.gui.MainApplication;
     18import org.openstreetmap.josm.gui.layer.Layer;
     19import org.openstreetmap.josm.gui.layer.NoteLayer;
    1720import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1821import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    2225import org.openstreetmap.josm.io.OsmChangeReader;
    2326import org.openstreetmap.josm.tools.Logging;
     27import org.openstreetmap.josm.tools.Pair;
    2428
    2529/**
     
    2933public class OsmChangeImporter extends FileImporter {
    3034
     35    /**
     36     * File filter for OsmChange files.
     37     */
    3138    public static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions(
    3239            "osc", "osc", tr("OsmChange File"), true);
    3340
    3441    /**
    35      * Constructs a new {@code OsmChangeImporter}.
     42     * Constructs a new {@code OsmChangeImporter} with default file filter.
    3643     */
    3744    public OsmChangeImporter() {
     
    3946    }
    4047
     48    /**
     49     * Constructs a new {@code OsmChangeImporter} with custom file filter.
     50     * @param filter file filter
     51     */
    4152    public OsmChangeImporter(ExtensionFileFilter filter) {
    4253        super(filter);
     
    5465
    5566    protected void importData(InputStream in, final File associatedFile, ProgressMonitor progressMonitor) throws IllegalDataException {
    56         final DataSet dataSet = OsmChangeReader.parseDataSet(in, progressMonitor);
    57         final OsmDataLayer layer = new OsmDataLayer(dataSet, associatedFile.getName(), associatedFile);
    58         addDataLayer(dataSet, layer, associatedFile.getPath());
     67        final Pair<DataSet, NoteData> p = OsmChangeReader.parseDataSetAndNotes(in, progressMonitor);
     68        final boolean hasOsmData = p.a != null && !p.a.allPrimitives().isEmpty();
     69        final boolean hasNotes = p.b != null && !p.b.getNotes().isEmpty();
     70        if (hasOsmData) {
     71            addLayer(new OsmDataLayer(p.a, associatedFile.getName(), associatedFile));
     72        }
     73        if (hasNotes) {
     74            addLayer(new NoteLayer(p.b, associatedFile.getName()));
     75        }
     76        if (!hasOsmData && !hasNotes) {
     77            // FIXME: remove UI stuff from IO subsystem
     78            GuiHelper.runInEDT(() -> {
     79                JOptionPane.showMessageDialog(
     80                        Main.parent,
     81                        tr("No data found in file {0}.", associatedFile.getPath()),
     82                        tr("Open OsmChange file"),
     83                        JOptionPane.INFORMATION_MESSAGE);
     84            });
     85        }
    5986    }
    6087
    61     protected void addDataLayer(final DataSet dataSet, final OsmDataLayer layer, final String filePath) {
     88    protected void addLayer(final Layer layer) {
    6289        // FIXME: remove UI stuff from IO subsystem
    63         //
    6490        GuiHelper.runInEDT(() -> {
    65             if (dataSet.allPrimitives().isEmpty()) {
    66                 JOptionPane.showMessageDialog(
    67                         Main.parent,
    68                         tr("No data found in file {0}.", filePath),
    69                         tr("Open OsmChange file"),
    70                         JOptionPane.INFORMATION_MESSAGE);
    71             }
    7291            MainApplication.getLayerManager().addLayer(layer);
    7392            layer.onPostLoadFromFile();
  • trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java

    r13852 r14101  
    102102    }
    103103
     104    /**
     105     * Create a new note layer with a notes data
     106     * @param noteData Notes data
     107     * @param name The name of the layer. Typically "Notes"
     108     * @since 14101
     109     */
     110    public NoteLayer(NoteData noteData, String name) {
     111        super(name);
     112        this.noteData = noteData;
     113        this.noteData.addNoteDataUpdateListener(this);
     114    }
     115
    104116    /** Convenience constructor that creates a layer with an empty note list */
    105117    public NoteLayer() {
Note: See TracChangeset for help on using the changeset viewer.