001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.util;
003    
004    import java.util.ArrayList;
005    import java.util.LinkedList;
006    import java.util.List;
007    
008    import javax.swing.event.CellEditorListener;
009    import javax.swing.event.ChangeEvent;
010    
011    public class TableCellEditorSupport {
012        private Object editor;
013        private LinkedList<CellEditorListener> listeners;
014    
015        public TableCellEditorSupport(Object editor) {
016            this.editor = editor;
017            listeners = new LinkedList<CellEditorListener>();
018        }
019    
020        protected List<CellEditorListener> getListeners() {
021            synchronized (this) {
022                return new ArrayList<CellEditorListener>(listeners);
023            }
024        }
025    
026        public void addCellEditorListener(CellEditorListener l) {
027            synchronized (this) {
028                if (l != null && ! listeners.contains(l)) {
029                    listeners.add(l);
030                }
031            }
032        }
033        public void removeCellEditorListener(CellEditorListener l) {
034            synchronized (this) {
035                if (l != null &&listeners.contains(l)) {
036                    listeners.remove(l);
037                }
038            }
039        }
040    
041        public void fireEditingCanceled() {
042            for (CellEditorListener listener: getListeners()) {
043                listener.editingCanceled(new ChangeEvent(editor));
044            }
045        }
046    
047        public void fireEditingStopped() {
048            for (CellEditorListener listener: getListeners()) {
049                listener.editingStopped(new ChangeEvent(editor));
050            }
051        }
052    }