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

Last change on this file since 7722 was 7608, checked in by Don-vip, 10 years ago

fix #10554 - Add notes dialog (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"), progressMonitor, false);
75 this.reader = reader;
76 }
77
78 @Override
79 protected void finish() {
80 Main.debug("finish called in DownloadNotesTask");
81 if (isCanceled() || isFailed()) {
82 Main.debug("was cancelled or failed");
83 return;
84 }
85
86 if (notesData == null) {
87 return;
88 }
89 Main.debug("Notes downloaded: " + notesData.size());
90
91 List<NoteLayer> noteLayers = null;
92 if (Main.map != null) {
93 noteLayers = Main.map.mapView.getLayersOfType(NoteLayer.class);
94 }
95 NoteLayer layer;
96 if (noteLayers != null && noteLayers.size() > 0) {
97 layer = noteLayers.get(0);
98 layer.getNoteData().addNotes(notesData);
99 } else {
100 layer = new NoteLayer(notesData, "Notes");
101 Main.main.addLayer(layer);
102 }
103 }
104
105 @Override
106 protected void cancel() {
107 setCanceled(true);
108 if (reader != null) {
109 reader.cancel();
110 }
111 }
112
113 @Override
114 public abstract void realRun() throws IOException, SAXException, OsmTransferException;
115 }
116
117 class DownloadBoundingBoxTask extends DownloadTask {
118
119 public DownloadBoundingBoxTask(OsmServerReader reader, ProgressMonitor progressMonitor) {
120 super(reader, progressMonitor);
121 }
122
123 @Override
124 public void realRun() throws IOException, SAXException, OsmTransferException {
125 if (isCanceled()) {
126 return;
127 }
128 ProgressMonitor subMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
129 try {
130 notesData = reader.parseNotes(null, null, subMonitor);
131 } catch (Exception e) {
132 if (isCanceled())
133 return;
134 if (e instanceof OsmTransferException) {
135 rememberException(e);
136 } else {
137 rememberException(new OsmTransferException(e));
138 }
139 }
140 }
141 }
142
143 class DownloadRawUrlTask extends DownloadTask {
144
145 public DownloadRawUrlTask(OsmServerReader reader, ProgressMonitor progressMonitor) {
146 super(reader, progressMonitor);
147 }
148
149 @Override
150 public void realRun() throws IOException, SAXException, OsmTransferException {
151 if (isCanceled()) {
152 return;
153 }
154 ProgressMonitor subMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
155 try {
156 notesData = reader.parseRawNotes(subMonitor);
157 } catch (Exception e) {
158 if (isCanceled())
159 return;
160 if (e instanceof OsmTransferException) {
161 rememberException(e);
162 } else {
163 rememberException(new OsmTransferException(e));
164 }
165 }
166 }
167 }
168
169 class DownloadBzip2RawUrlTask extends DownloadTask {
170
171 public DownloadBzip2RawUrlTask(OsmServerReader reader, ProgressMonitor progressMonitor) {
172 super(reader, progressMonitor);
173 }
174
175 @Override
176 public void realRun() throws IOException, SAXException, OsmTransferException {
177 if (isCanceled()) {
178 return;
179 }
180 ProgressMonitor subMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
181 try {
182 notesData = reader.parseRawNotesBzip2(subMonitor);
183 } catch (Exception e) {
184 if (isCanceled())
185 return;
186 if (e instanceof OsmTransferException) {
187 rememberException(e);
188 } else {
189 rememberException(new OsmTransferException(e));
190 }
191 }
192 }
193 }
194
195}
Note: See TracBrowser for help on using the repository browser.