001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.relation;
003
004import java.awt.Component;
005
006import javax.swing.AbstractCellEditor;
007import javax.swing.BorderFactory;
008import javax.swing.JTable;
009import javax.swing.table.TableCellEditor;
010
011import org.openstreetmap.josm.data.osm.DataSet;
012import org.openstreetmap.josm.data.osm.Relation;
013import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
014import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
015
016public class MemberRoleCellEditor extends AbstractCellEditor implements TableCellEditor {
017    private AutoCompletingTextField editor = null;
018    private final DataSet ds;
019    private final Relation relation;
020
021    /** user input is matched against this list of auto completion items */
022    private AutoCompletionList autoCompletionList = null;
023
024    /**
025     * Constructs a new {@code MemberRoleCellEditor}.
026     * @param ds the data set. Must not be null
027     * @param relation the relation. Can be null
028     */
029    public MemberRoleCellEditor(DataSet ds, Relation relation) {
030        this.ds = ds;
031        this.relation = relation;
032        editor = new AutoCompletingTextField();
033        editor.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
034        autoCompletionList = new AutoCompletionList();
035        editor.setAutoCompletionList(autoCompletionList);
036    }
037
038    @Override
039    public Component getTableCellEditorComponent(JTable table,
040            Object value, boolean isSelected, int row, int column) {
041
042        String role = (String)value;
043        editor.setText(role);
044        autoCompletionList.clear();
045        ds.getAutoCompletionManager().populateWithMemberRoles(autoCompletionList, relation);
046        return editor;
047    }
048
049    @Override
050    public Object getCellEditorValue() {
051        return editor.getText();
052    }
053
054    /** Returns the edit field for this cell editor. */
055    public AutoCompletingTextField getEditor() {
056        return editor;
057    }
058}