001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.util;
003
004import java.util.ArrayList;
005import java.util.LinkedList;
006import java.util.List;
007
008import javax.swing.event.CellEditorListener;
009import javax.swing.event.ChangeEvent;
010
011public class TableCellEditorSupport {
012    private Object editor;
013    private List<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}