source: josm/trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java@ 7531

Last change on this file since 7531 was 7531, checked in by bastiK, 10 years ago

applied #10503 - Note download code (patch by ToeBee)

  • Property svn:eol-style set to native
File size: 6.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions.downloadtasks;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.io.IOException;
7import java.net.URL;
8import java.util.List;
9import java.util.concurrent.Future;
10
11import org.openstreetmap.josm.Main;
12import org.openstreetmap.josm.data.Bounds;
13import org.openstreetmap.josm.data.notes.Note;
14import org.openstreetmap.josm.gui.PleaseWaitRunnable;
15import org.openstreetmap.josm.gui.layer.NoteLayer;
16import org.openstreetmap.josm.gui.progress.ProgressMonitor;
17import org.openstreetmap.josm.io.BoundingBoxDownloader;
18import org.openstreetmap.josm.io.OsmServerLocationReader;
19import org.openstreetmap.josm.io.OsmServerReader;
20import org.openstreetmap.josm.io.OsmTransferException;
21import org.xml.sax.SAXException;
22
23/** Task for downloading notes */
24public class DownloadNotesTask extends AbstractDownloadTask {
25
26 private static final String PATTERN_API_URL = "https?://.*/api/0.6/notes.*";
27 private static final String PATTERN_DUMP_FILE = "https?://.*/(.*\\.osn(.bz2)?)";
28
29 private DownloadTask downloadTask;
30
31 @Override
32 public Future<?> download(boolean newLayer, Bounds downloadArea, ProgressMonitor progressMonitor) {
33 downloadTask = new DownloadBoundingBoxTask(new BoundingBoxDownloader(downloadArea), progressMonitor);
34 return Main.worker.submit(downloadTask);
35 }
36
37 @Override
38 public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) {
39 if (url.endsWith(".bz2")) {
40 downloadTask = new DownloadBzip2RawUrlTask(new OsmServerLocationReader(url), progressMonitor);
41 } else {
42 downloadTask = new DownloadRawUrlTask(new OsmServerLocationReader(url), progressMonitor);
43 }
44 return Main.worker.submit(downloadTask);
45 }
46
47 @Override
48 public void cancel() {
49 if (downloadTask != null) {
50 downloadTask.cancel();
51 }
52 }
53
54 @Override
55 public String getConfirmationMessage(URL url) {
56 return null;
57 }
58
59 @Override
60 public String getTitle() {
61 return "Download OSM Notes";
62 }
63
64 @Override
65 public String[] getPatterns() {
66 return new String[] {PATTERN_API_URL, PATTERN_DUMP_FILE};
67 }
68
69 abstract class DownloadTask extends PleaseWaitRunnable {
70 protected OsmServerReader reader;
71 protected List<Note> notesData;
72
73 public DownloadTask(OsmServerReader reader, ProgressMonitor progressMonitor) {
74 super(tr("Downloading Notes"));
75 this.reader = reader;
76 }
77
78
79 @Override
80 protected void finish() {
81 Main.debug("finish called in DownloadNotesTask");
82 if (isCanceled() || isFailed()) {
83 Main.debug("was cancelled or failed");
84 return;
85 }
86
87 if (notesData == null) {
88 return;
89 }
90 Main.debug("Notes downloaded: " + notesData.size());
91
92 List<NoteLayer> noteLayers = null;
93 if (Main.map != null) {
94 noteLayers = Main.map.mapView.getLayersOfType(NoteLayer.class);
95 }
96 NoteLayer layer;
97 if (noteLayers != null && noteLayers.size() > 0) {
98 layer = noteLayers.get(0);
99 layer.addNotes(notesData);
100 } else {
101 layer = new NoteLayer(notesData, "Notes");
102 Main.main.addLayer(layer);
103 }
104 }
105
106 @Override
107 protected void cancel() {
108 setCanceled(true);
109 if (reader != null) {
110 reader.cancel();
111 }
112 }
113
114 @Override
115 public abstract void realRun() throws IOException, SAXException, OsmTransferException;
116 }
117
118 class DownloadBoundingBoxTask extends DownloadTask {
119
120 public DownloadBoundingBoxTask(OsmServerReader reader, ProgressMonitor progressMonitor) {
121 super(reader, progressMonitor);
122 }
123
124 @Override
125 public void realRun() throws IOException, SAXException, OsmTransferException {
126 if (isCanceled()) {
127 return;
128 }
129 ProgressMonitor subMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
130 try {
131 notesData = reader.parseNotes(null, null, subMonitor);
132 } catch (Exception e) {
133 if (isCanceled())
134 return;
135 if (e instanceof OsmTransferException) {
136 rememberException(e);
137 } else {
138 rememberException(new OsmTransferException(e));
139 }
140 }
141 }
142 }
143
144 class DownloadRawUrlTask extends DownloadTask {
145
146 public DownloadRawUrlTask(OsmServerReader reader, ProgressMonitor progressMonitor) {
147 super(reader, progressMonitor);
148 }
149
150 @Override
151 public void realRun() throws IOException, SAXException, OsmTransferException {
152 if (isCanceled()) {
153 return;
154 }
155 ProgressMonitor subMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
156 try {
157 notesData = reader.parseRawNotes(subMonitor);
158 } catch (Exception e) {
159 if (isCanceled())
160 return;
161 if (e instanceof OsmTransferException) {
162 rememberException(e);
163 } else {
164 rememberException(new OsmTransferException(e));
165 }
166 }
167 }
168 }
169
170 class DownloadBzip2RawUrlTask extends DownloadTask {
171
172 public DownloadBzip2RawUrlTask(OsmServerReader reader, ProgressMonitor progressMonitor) {
173 super(reader, progressMonitor);
174 }
175
176 @Override
177 public void realRun() throws IOException, SAXException, OsmTransferException {
178 if (isCanceled()) {
179 return;
180 }
181 ProgressMonitor subMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
182 try {
183 notesData = reader.parseRawNotesBzip2(subMonitor);
184 } catch (Exception e) {
185 if (isCanceled())
186 return;
187 if (e instanceof OsmTransferException) {
188 rememberException(e);
189 } else {
190 rememberException(new OsmTransferException(e));
191 }
192 }
193 }
194 }
195
196}
Note: See TracBrowser for help on using the repository browser.