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.IOException;
007import java.io.InputStream;
008
009import org.openstreetmap.josm.data.osm.DataSet;
010import org.openstreetmap.josm.gui.progress.ProgressMonitor;
011import org.xml.sax.SAXException;
012
013/**
014 * GeoJson server reader.
015 * @author Omar Vega Ramos <ovruni@riseup.net>
016 * @since 15424
017 */
018public class GeoJSONServerReader extends OsmServerLocationReader {
019
020    /**
021     * Constructs a new {@code GeoJSONServerReader}.
022     * @param url geojson URL
023     */
024    public GeoJSONServerReader(String url) {
025        super(url);
026    }
027
028    protected class GeoJsonParser extends Parser<DataSet> {
029        protected GeoJsonParser(ProgressMonitor progressMonitor, Compression compression) {
030            super(progressMonitor, compression);
031        }
032
033        @Override
034        public DataSet parse() throws OsmTransferException, IllegalDataException, IOException, SAXException {
035            in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
036            if (in == null)
037                return null;
038            progressMonitor.subTask(tr("Downloading OSM data..."));
039            InputStream uncompressedInputStream = compression.getUncompressedInputStream(in); // NOPMD
040            ProgressMonitor subTaskMonitor = progressMonitor.createSubTaskMonitor(1, false);
041            return GeoJSONReader.parseDataSet(uncompressedInputStream, subTaskMonitor);
042        }
043    }
044
045    @Override
046    public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
047        return parseOsm(progressMonitor, Compression.NONE);
048    }
049
050    @Override
051    public DataSet parseOsm(ProgressMonitor progressMonitor, Compression compression) throws OsmTransferException {
052        return doParse(new GeoJsonParser(progressMonitor, compression), progressMonitor);
053    }
054}