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

Last change on this file since 5361 was 5361, checked in by Don-vip, 12 years ago

fix #7879 - Allow to open local and remote gzipped/bzipped osmChange files + remote osm.gz files + make some public constants of File filters to share between same importers/exporters

  • Property svn:eol-style set to native
File size: 7.1 KB
Line 
1//License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.io.IOException;
7import java.io.InputStream;
8import java.util.zip.GZIPInputStream;
9
10import org.apache.tools.bzip2.CBZip2InputStream;
11import org.openstreetmap.josm.data.gpx.GpxData;
12import org.openstreetmap.josm.data.osm.DataSet;
13import org.openstreetmap.josm.gui.progress.ProgressMonitor;
14import org.xml.sax.SAXException;
15
16public class OsmServerLocationReader extends OsmServerReader {
17
18 protected final String url;
19
20 public OsmServerLocationReader(String url) {
21 this.url = url;
22 }
23
24 protected abstract class Parser<T> {
25 public InputStream in = null;
26 public abstract T parse() throws OsmTransferException, IllegalDataException, IOException, SAXException;
27 }
28
29 protected final <T> T doParse(Parser<T> parser, final ProgressMonitor progressMonitor) throws OsmTransferException {
30 progressMonitor.beginTask(tr("Contacting Server...", 10));
31 try {
32 return parser.parse();
33 } catch(OsmTransferException e) {
34 throw e;
35 } catch (Exception e) {
36 if (cancel)
37 return null;
38 throw new OsmTransferException(e);
39 } finally {
40 progressMonitor.finishTask();
41 try {
42 activeConnection = null;
43 if (parser.in != null) {
44 parser.in.close();
45 parser.in = null;
46 }
47 } catch(Exception e) {/* ignore it */}
48 }
49 }
50
51 /**
52 * Method to download OSM files from somewhere
53 */
54 @Override
55 public DataSet parseOsm(final ProgressMonitor progressMonitor) throws OsmTransferException {
56 return doParse(new Parser<DataSet>() {
57 @Override
58 public DataSet parse() throws OsmTransferException, IllegalDataException {
59 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
60 if (in == null)
61 return null;
62 progressMonitor.subTask(tr("Downloading OSM data..."));
63 return OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
64 }
65 }, progressMonitor);
66 }
67
68 /**
69 * Method to download BZip2-compressed OSM files from somewhere
70 */
71 @Override
72 public DataSet parseOsmBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
73 return doParse(new Parser<DataSet>() {
74 @Override
75 public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
76 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
77 if (in == null)
78 return null;
79 CBZip2InputStream bzin = FileImporter.getBZip2InputStream(in);
80 progressMonitor.subTask(tr("Downloading OSM data..."));
81 return OsmReader.parseDataSet(bzin, progressMonitor.createSubTaskMonitor(1, false));
82 }
83 }, progressMonitor);
84 }
85
86 /**
87 * Method to download GZip-compressed OSM files from somewhere
88 */
89 @Override
90 public DataSet parseOsmGzip(final ProgressMonitor progressMonitor) throws OsmTransferException {
91 return doParse(new Parser<DataSet>() {
92 @Override
93 public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
94 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
95 if (in == null)
96 return null;
97 GZIPInputStream gzin = FileImporter.getGZipInputStream(in);
98 progressMonitor.subTask(tr("Downloading OSM data..."));
99 return OsmReader.parseDataSet(gzin, progressMonitor.createSubTaskMonitor(1, false));
100 }
101 }, progressMonitor);
102 }
103
104 /* (non-Javadoc)
105 * @see org.openstreetmap.josm.io.OsmServerReader#parseOsmChange(org.openstreetmap.josm.gui.progress.ProgressMonitor)
106 */
107 @Override
108 public DataSet parseOsmChange(final ProgressMonitor progressMonitor)
109 throws OsmTransferException {
110 return doParse(new Parser<DataSet>() {
111 @Override
112 public DataSet parse() throws OsmTransferException, IllegalDataException {
113 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
114 if (in == null)
115 return null;
116 progressMonitor.subTask(tr("Downloading OSM data..."));
117 return OsmChangeReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
118 }
119 }, progressMonitor);
120 }
121
122 /**
123 * Method to download BZip2-compressed OSM Change files from somewhere
124 */
125 @Override
126 public DataSet parseOsmChangeBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
127 return doParse(new Parser<DataSet>() {
128 @Override
129 public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
130 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
131 if (in == null)
132 return null;
133 CBZip2InputStream bzin = FileImporter.getBZip2InputStream(in);
134 progressMonitor.subTask(tr("Downloading OSM data..."));
135 return OsmChangeReader.parseDataSet(bzin, progressMonitor.createSubTaskMonitor(1, false));
136 }
137 }, progressMonitor);
138 }
139
140 /**
141 * Method to download GZip-compressed OSM Change files from somewhere
142 */
143 @Override
144 public DataSet parseOsmChangeGzip(final ProgressMonitor progressMonitor) throws OsmTransferException {
145 return doParse(new Parser<DataSet>() {
146 @Override
147 public DataSet parse() throws OsmTransferException, IllegalDataException, IOException {
148 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false));
149 if (in == null)
150 return null;
151 GZIPInputStream gzin = FileImporter.getGZipInputStream(in);
152 progressMonitor.subTask(tr("Downloading OSM data..."));
153 return OsmChangeReader.parseDataSet(gzin, progressMonitor.createSubTaskMonitor(1, false));
154 }
155 }, progressMonitor);
156 }
157
158 @Override
159 public GpxData parseRawGps(final ProgressMonitor progressMonitor) throws OsmTransferException {
160 return doParse(new Parser<GpxData>() {
161 @Override
162 public GpxData parse() throws OsmTransferException, IllegalDataException, IOException, SAXException {
163 in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(1, true));
164 if (in == null)
165 return null;
166 progressMonitor.subTask(tr("Downloading OSM data..."));
167 GpxReader reader = new GpxReader(in);
168 reader.parse(false);
169 GpxData result = reader.data;
170 result.fromServer = true;
171 return result;
172 }
173 }, progressMonitor);
174 }
175}
Note: See TracBrowser for help on using the repository browser.