001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.progress;
003    
004    import java.util.ArrayList;
005    import java.util.List;
006    
007    import org.openstreetmap.josm.gui.progress.ProgressMonitor.CancelListener;
008    
009    public class CancelHandler {
010    
011        private boolean isCanceled;
012        private List<CancelListener> listeners = new ArrayList<CancelListener>();
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    }