// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.layer;
import org.openstreetmap.josm.gui.io.AbstractIOTask;
import org.openstreetmap.josm.gui.io.AbstractUploadDialog;
import org.openstreetmap.josm.gui.progress.ProgressMonitor;
/**
* Interface for layers that can upload data.
* @since 9751
*/
public interface UploadToServer {
/**
* Determines if the layer is able to upload data and implements the
* {@code UploadToServer} interface. A layer that implements the
* {@code UploadToServer} interface must return {@code true}.
*
* @return {@code true} if the layer is able to upload data; {@code false}, otherwise
*/
boolean isUploadable();
/**
* Determines if the data managed by this layer needs to be uploaded to
* the server because it contains modified data.
*
* @return {@code true} if the data managed by this layer needs to be
* uploaded to the server because it contains modified data;
* {@code false}, otherwise
*/
boolean requiresUploadToServer();
/**
* Determines if upload of data managed by this layer is discouraged.
* This feature allows to use "private" data layers.
*
* @return {@code true} if upload is discouraged for this layer; {@code false}, otherwise
*/
boolean isUploadDiscouraged();
/**
* Initializes the layer after a successful upload to the server.
*/
void onPostUploadToServer();
/**
* Creates a new {@code AbstractIOTask} for uploading data.
* @param monitor The progress monitor
* @return a new {@code AbstractIOTask} for uploading data, or {@code null} if not applicable
*/
AbstractIOTask createUploadTask(ProgressMonitor monitor);
/**
* Returns the upload dialog for this layer.
* @return the upload dialog for this layer, or {@code null} if not applicable
*/
AbstractUploadDialog getUploadDialog();
}