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}