Changeset 18807 in josm for trunk/src/org


Ignore:
Timestamp:
2023-08-15T15:16:08+02:00 (11 months ago)
Author:
taylor.smock
Message:

Allow importing geojson files that were saved to a session file

  • GeoJSONImporter now extends OsmImporter instead of FileImporter and deprecates the parseDataSet(String) method.
Location:
trunk/src/org/openstreetmap/josm
Files:
2 edited

Legend:

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

    r18747 r18807  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
    6 import java.io.File;
    76import java.io.IOException;
    87import java.io.InputStream;
    98import java.util.Arrays;
    10 import java.util.Locale;
    119
    12 import javax.swing.JOptionPane;
    13 
    14 import jakarta.json.JsonException;
    1510import org.openstreetmap.josm.actions.ExtensionFileFilter;
    1611import org.openstreetmap.josm.data.osm.DataSet;
    17 import org.openstreetmap.josm.gui.MainApplication;
    18 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1912import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    2013import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    21 import org.openstreetmap.josm.gui.util.GuiHelper;
    2214import org.openstreetmap.josm.io.CachedFile;
    2315import org.openstreetmap.josm.io.Compression;
    2416import org.openstreetmap.josm.io.GeoJSONReader;
    2517import org.openstreetmap.josm.io.IllegalDataException;
    26 import org.openstreetmap.josm.tools.Logging;
    27 import org.openstreetmap.josm.tools.Utils;
    2818
    2919/**
    3020 * GeoJSON file importer.
    3121 * @author Ian Dees <ian.dees@gmail.com>
    32  * @author matthieun <https://github.com/matthieun>
    33  * @since 15424
     22 * @author <a href="https://github.com/matthieun">matthieun</a>
     23 * @since 15424, extends {@link OsmImporter} since 18807
    3424 */
    35 public class GeoJSONImporter extends FileImporter {
     25public class GeoJSONImporter extends OsmImporter {
    3626
    3727    private static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions(
     
    4636    }
    4737
    48     @Override
    49     public void importData(final File file, final ProgressMonitor progressMonitor) {
    50         progressMonitor.beginTask(tr("Loading json file…"));
    51         progressMonitor.setTicksCount(2);
    52         Logging.info("Parsing GeoJSON: {0}", file.getAbsolutePath());
    53         try (InputStream fileInputStream = Compression.getUncompressedFileInputStream(file)) {
    54             DataSet data = GeoJSONReader.parseDataSet(fileInputStream, progressMonitor);
    55             progressMonitor.worked(1);
    56             MainApplication.getLayerManager().addLayer(new OsmDataLayer(data, file.getName(), file));
    57         } catch (IOException | IllegalArgumentException | IllegalDataException | JsonException e) {
    58             Logging.error("Error while reading json file!");
    59             Logging.error(e);
    60             String message = tr("Error loading geojson file {0}", file.getAbsolutePath())
    61                     + tr(" ({0})", Utils.getSizeString(file.length(), Locale.getDefault()));
    62             GuiHelper.runInEDT(() -> JOptionPane.showMessageDialog(null, message, tr("Error"), JOptionPane.WARNING_MESSAGE));
    63         } finally {
    64             progressMonitor.finishTask();
    65         }
    66     }
    67 
    6838    /**
    6939     * Parse GeoJSON dataset.
     
    7242     * @throws IOException in case of I/O error
    7343     * @throws IllegalDataException if an error was found while parsing the data from the source
     44     * @deprecated since 18807, use {@link #parseDataSet(InputStream, ProgressMonitor)} instead
    7445     */
     46    @Deprecated
    7547    public DataSet parseDataSet(final String source) throws IOException, IllegalDataException {
    7648        try (CachedFile cf = new CachedFile(source)) {
    7749            InputStream fileInputStream = Compression.getUncompressedFileInputStream(cf.getFile()); // NOPMD
    78             return GeoJSONReader.parseDataSet(fileInputStream, NullProgressMonitor.INSTANCE);
     50            return this.parseDataSet(fileInputStream, NullProgressMonitor.INSTANCE);
    7951        }
    8052    }
     53
     54    @Override
     55    protected DataSet parseDataSet(InputStream in, ProgressMonitor progressMonitor) throws IllegalDataException {
     56        return GeoJSONReader.parseDataSet(in, progressMonitor);
     57    }
    8158}
  • trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java

    r18208 r18807  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.io.File;
    67import java.io.IOException;
    78import java.io.InputStream;
     
    1314import javax.xml.xpath.XPathFactory;
    1415
     16import org.openstreetmap.josm.actions.ExtensionFileFilter;
     17import org.openstreetmap.josm.gui.io.importexport.FileImporter;
    1518import org.openstreetmap.josm.gui.io.importexport.OsmImporter;
    1619import org.openstreetmap.josm.gui.layer.Layer;
     
    3134    public Layer load(Element elem, ImportSupport support, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
    3235        checkMetaVersion(elem);
    33         String fileStr = extractFileName(elem, support);
     36        final String fileStr = extractFileName(elem, support);
     37        final File file = new File(fileStr);
     38        for (FileImporter importer : ExtensionFileFilter.getImporters()) {
     39            if (importer instanceof OsmImporter && importer.acceptFile(file)) {
     40                return importData((OsmImporter) importer, support, fileStr, progressMonitor);
     41            }
     42        }
     43        // Fall back to the default OsmImporter, just in case. It will probably fail.
    3444        return importData(new OsmImporter(), support, fileStr, progressMonitor);
    3545    }
Note: See TracChangeset for help on using the changeset viewer.