001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.io;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import org.openstreetmap.josm.actions.upload.UploadNotesTask;
007import org.openstreetmap.josm.gui.layer.NoteLayer;
008import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
009import org.openstreetmap.josm.gui.progress.ProgressMonitor;
010import org.openstreetmap.josm.tools.CheckParameterUtil;
011
012/**
013 * UploadNoteLayerTask uploads the data managed by an {@link NoteLayer} asynchronously.
014 * @since 8474
015 */
016public class UploadNoteLayerTask extends AbstractIOTask {
017
018    private final NoteLayer layer;
019    private final ProgressMonitor monitor;
020
021    /**
022     * Creates the upload task.
023     *
024     * @param layer the layer. Must not be null.
025     * @param monitor  a progress monitor. If monitor is null, uses {@link NullProgressMonitor#INSTANCE}
026     * @throws IllegalArgumentException if layer is null
027     * @throws IllegalArgumentException if strategy is null
028     */
029    public UploadNoteLayerTask(NoteLayer layer, ProgressMonitor monitor) {
030        CheckParameterUtil.ensureParameterNotNull(layer, "layer");
031        if (monitor == null) {
032            monitor = NullProgressMonitor.INSTANCE;
033        }
034        this.layer = layer;
035        this.monitor = monitor;
036    }
037
038    @Override
039    public void run() {
040        monitor.indeterminateSubTask(tr("Uploading notes to server"));
041        new UploadNotesTask().uploadNotes(layer.getNoteData(), monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
042        if (isCanceled())
043            return;
044        layer.onPostUploadToServer();
045    }
046
047    @Override
048    public void cancel() {
049        setCanceled(true);
050    }
051}