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}