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