source: josm/trunk/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java@ 2181

Last change on this file since 2181 was 2181, checked in by stoecker, 15 years ago

lots of i18n fixes

File size: 3.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.Collection;
7
8import org.openstreetmap.josm.data.APIDataSet;
9import org.openstreetmap.josm.data.osm.Changeset;
10import org.openstreetmap.josm.data.osm.DataSet;
11import org.openstreetmap.josm.data.osm.OsmPrimitive;
12import org.openstreetmap.josm.gui.layer.OsmDataLayer;
13import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
14import org.openstreetmap.josm.gui.progress.ProgressMonitor;
15import org.openstreetmap.josm.io.ChangesetProcessingType;
16import org.openstreetmap.josm.io.OsmServerWriter;
17
18/**
19 * UploadLayerTask uploads the data managed by an {@see OsmDataLayer} asynchronously.
20 *
21 * <pre>
22 * ExecutorService executorService = ...
23 * UploadLayerTask task = new UploadLayerTask(layer, monitor);
24 * Future<?> taskFuture = executorServce.submit(task)
25 * try {
26 * // wait for the task to complete
27 * taskFuture.get();
28 * } catch(Exception e) {
29 * e.printStackTracek();
30 * }
31 * </pre>
32 */
33class UploadLayerTask extends AbstractIOTask implements Runnable {
34 private OsmServerWriter writer;
35 private OsmDataLayer layer;
36 private ProgressMonitor monitor;
37 private Changeset changeset;
38 private boolean closeChangesetAfterUpload;
39
40 /**
41 *
42 * @param layer the layer. Must not be null.
43 * @param monitor a progress monitor. If monitor is null, uses {@see NullProgressMonitor#INSTANCE}
44 * @param changeset the changeset to be used if <code>changesetProcessingType</code> indicates that a new
45 * changeset is to be used
46 * @param closeChangesetAfterUpload true, if the changeset should be closed after the upload
47 * @throws IllegalArgumentException thrown, if layer is null
48 */
49 public UploadLayerTask(OsmDataLayer layer, ProgressMonitor monitor, Changeset changeset, boolean closeChangesetAfterUpload) {
50 if (layer == null)
51 throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null.", layer));
52 if (monitor == null) {
53 monitor = NullProgressMonitor.INSTANCE;
54 }
55 this.layer = layer;
56 this.monitor = monitor;
57 this.changeset = changeset;
58 this.closeChangesetAfterUpload = closeChangesetAfterUpload;
59 }
60
61 @Override
62 public void run() {
63 monitor.subTask(tr("Preparing primitives to upload ..."));
64 Collection<OsmPrimitive> toUpload = new APIDataSet(layer.data).getPrimitives();
65 if (toUpload.isEmpty())
66 return;
67 writer = new OsmServerWriter();
68 try {
69 ProgressMonitor m = monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
70 if (isCancelled()) return;
71 writer.uploadOsm(layer.data.version, toUpload, changeset, closeChangesetAfterUpload, m);
72 } catch (Exception sxe) {
73 if (isCancelled()) {
74 System.out.println("Ignoring exception caught because upload is cancelled. Exception is: " + sxe.toString());
75 return;
76 }
77 setLastException(sxe);
78 }
79
80 if (isCancelled())
81 return;
82 layer.cleanupAfterUpload(writer.getProcessedPrimitives());
83 DataSet.fireSelectionChanged(layer.data.getSelected());
84 layer.fireDataChange();
85 layer.onPostUploadToServer();
86 }
87
88 @Override
89 public void cancel() {
90 // make sure the the softCancel operation is serialized with
91 // blocks which can be interrupted.
92 setCancelled(true);
93 if (writer != null) {
94 writer.cancel();
95 }
96 }
97}
Note: See TracBrowser for help on using the repository browser.