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}