001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.progress;
003
004import java.util.ArrayList;
005import java.util.List;
006
007import org.openstreetmap.josm.gui.progress.ProgressMonitor.CancelListener;
008
009public class CancelHandler {
010
011    private boolean isCanceled;
012    private List<CancelListener> listeners = new ArrayList<>();
013
014    public synchronized void cancel() {
015        if (!isCanceled) {
016            isCanceled = true;
017            for (CancelListener listener:listeners) {
018                listener.operationCanceled();
019            }
020        }
021    }
022
023    public synchronized boolean isCanceled() {
024        return isCanceled;
025    }
026
027    public synchronized void addCancelListener(CancelListener listener) {
028        listeners.add(listener);
029    }
030
031    public synchronized void removeCancelListener(CancelListener listener) {
032        listeners.remove(listener);
033    }
034
035}