source: josm/trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java@ 9621

Last change on this file since 9621 was 9070, checked in by Don-vip, 8 years ago

Sonar - squid:S2293 - The diamond operator ("<>") should be used

  • Property svn:eol-style set to native
File size: 7.2 KB
RevLine 
[8378]1// License: GPL. For details, see LICENSE file.
[1146]2package org.openstreetmap.josm.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
[5317]6import java.io.IOException;
[1146]7import java.io.InputStream;
[7531]8import java.util.ArrayList;
9import java.util.List;
[1146]10
[5745]11import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask;
[4521]12import org.openstreetmap.josm.data.gpx.GpxData;
[7531]13import org.openstreetmap.josm.data.notes.Note;
[1146]14import org.openstreetmap.josm.data.osm.DataSet;
[1811]15import org.openstreetmap.josm.gui.progress.ProgressMonitor;
[5874]16import org.openstreetmap.josm.tools.Utils;
[5317]17import org.xml.sax.SAXException;
[1146]18
[6244]19/**
20 * Read content from OSM server for a given URL
21 * @since 1146
22 */
[1146]23public class OsmServerLocationReader extends OsmServerReader {
[1169]24
[5317]25 protected final String url;
[1169]26
[6244]27 /**
28 * Constructs a new {@code OsmServerLocationReader}.
29 * @param url The URL to fetch
30 */
[1146]31 public OsmServerLocationReader(String url) {
32 this.url = url;
33 }
[1169]34
[5317]35 protected abstract class Parser<T> {
[6244]36 protected final ProgressMonitor progressMonitor;
37 protected final Compression compression;
[8840]38 protected InputStream in;
[6244]39
40 public Parser(ProgressMonitor progressMonitor, Compression compression) {
41 this.progressMonitor = progressMonitor;
42 this.compression = compression;
43 }
[7509]44
[5317]45 public abstract T parse() throws OsmTransferException, IllegalDataException, IOException, SAXException;
46 }
47
48 protected final <T> T doParse(Parser<T> parser, final ProgressMonitor progressMonitor) throws OsmTransferException {
[1811]49 progressMonitor.beginTask(tr("Contacting Server...", 10));
[1146]50 try {
[5317]51 return parser.parse();
[8510]52 } catch (OsmTransferException e) {
[1146]53 throw e;
54 } catch (Exception e) {
55 if (cancel)
56 return null;
[1670]57 throw new OsmTransferException(e);
[1790]58 } finally {
[1811]59 progressMonitor.finishTask();
[5874]60 activeConnection = null;
61 Utils.close(parser.in);
62 parser.in = null;
[4521]63 }
64 }
65
[5317]66 @Override
67 public DataSet parseOsm(final ProgressMonitor progressMonitor) throws OsmTransferException {
[6244]68 return doParse(new OsmParser(progressMonitor, Compression.NONE), progressMonitor);
[5317]69 }
70
71 @Override
72 public DataSet parseOsmBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
[6244]73 return doParse(new OsmParser(progressMonitor, Compression.BZIP2), progressMonitor);
[5317]74 }
[6070]75
[5361]76 @Override
77 public DataSet parseOsmGzip(final ProgressMonitor progressMonitor) throws OsmTransferException {
[6244]78 return doParse(new OsmParser(progressMonitor, Compression.GZIP), progressMonitor);
[5361]79 }
[5317]80
[4521]81 @Override
[6882]82 public DataSet parseOsmZip(final ProgressMonitor progressMonitor) throws OsmTransferException {
83 return doParse(new OsmParser(progressMonitor, Compression.ZIP), progressMonitor);
84 }
85
86 @Override
[6244]87 public DataSet parseOsmChange(final ProgressMonitor progressMonitor) throws OsmTransferException {
88 return doParse(new OsmChangeParser(progressMonitor, Compression.NONE), progressMonitor);
[4530]89 }
[6070]90
[5361]91 @Override
92 public DataSet parseOsmChangeBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
[6244]93 return doParse(new OsmChangeParser(progressMonitor, Compression.BZIP2), progressMonitor);
[5361]94 }
[6070]95
[5361]96 @Override
97 public DataSet parseOsmChangeGzip(final ProgressMonitor progressMonitor) throws OsmTransferException {
[6244]98 return doParse(new OsmChangeParser(progressMonitor, Compression.GZIP), progressMonitor);
[5361]99 }
[4530]100
101 @Override
[5317]102 public GpxData parseRawGps(final ProgressMonitor progressMonitor) throws OsmTransferException {
[6244]103 return doParse(new GpxParser(progressMonitor, Compression.NONE), progressMonitor);
[1146]104 }
[6244]105
106 @Override
107 public GpxData parseRawGpsBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
108 return doParse(new GpxParser(progressMonitor, Compression.BZIP2), progressMonitor);
109 }
110
[7531]111 @Override
112 public List<Note> parseRawNotes(final ProgressMonitor progressMonitor) throws OsmTransferException {
113 return doParse(new NoteParser(progressMonitor, Compression.NONE), progressMonitor);
114 }
115
116 @Override
117 public List<Note> parseRawNotesBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
118 return doParse(new NoteParser(progressMonitor, Compression.BZIP2), progressMonitor);
119 }
120
[6244]121 protected class OsmParser extends Parser<DataSet> {
122 protected OsmParser(ProgressMonitor progressMonitor, Compression compression) {
123 super(progressMonitor, compression);
124 }
125
126 @Override
127 public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
128 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
129 if (in == null)
130 return null;
131 progressMonitor.subTask(tr("Downloading OSM data..."));
[6716]132 return OsmReader.parseDataSet(compression.getUncompressedInputStream(in), progressMonitor.createSubTaskMonitor(1, false));
[6244]133 }
134 }
[7509]135
[6244]136 protected class OsmChangeParser extends Parser<DataSet> {
137 protected OsmChangeParser(ProgressMonitor progressMonitor, Compression compression) {
138 super(progressMonitor, compression);
139 }
140
141 @Override
142 public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
143 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
144 if (in == null)
145 return null;
146 progressMonitor.subTask(tr("Downloading OSM data..."));
[6716]147 return OsmChangeReader.parseDataSet(compression.getUncompressedInputStream(in), progressMonitor.createSubTaskMonitor(1, false));
[6244]148 }
149 }
150
151 protected class GpxParser extends Parser<GpxData> {
152 protected GpxParser(ProgressMonitor progressMonitor, Compression compression) {
153 super(progressMonitor, compression);
154 }
[7509]155
[6244]156 @Override
157 public GpxData parse() throws OsmTransferException, IllegalDataException, IOException, SAXException {
[6803]158 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(1, true), null, true);
[6244]159 if (in == null)
160 return null;
161 progressMonitor.subTask(tr("Downloading OSM data..."));
[6716]162 GpxReader reader = new GpxReader(compression.getUncompressedInputStream(in));
[6244]163 gpxParsedProperly = reader.parse(false);
164 GpxData result = reader.getGpxData();
165 result.fromServer = DownloadGpsTask.isFromServer(url);
166 return result;
167 }
168 }
[7531]169
170 protected class NoteParser extends Parser<List<Note>> {
171
172 public NoteParser(ProgressMonitor progressMonitor, Compression compression) {
173 super(progressMonitor, compression);
174 }
175
176 @Override
177 public List<Note> parse() throws OsmTransferException, IllegalDataException, IOException, SAXException {
178 in = getInputStream(url, progressMonitor.createSubTaskMonitor(1, true));
179 if (in == null) {
[9070]180 return new ArrayList<>();
[7531]181 }
182 progressMonitor.subTask(tr("Downloading OSM notes..."));
183 NoteReader reader = new NoteReader(compression.getUncompressedInputStream(in));
184 return reader.parse();
185 }
186 }
[1146]187}
Note: See TracBrowser for help on using the repository browser.