/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.xpathchooser; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.ComboBoxCellEditor; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import de.rcenvironment.core.utils.common.variables.legacy.VariableType; /** * Provides the editor for the variable table (name and xpath). * * @author Arne Bachmann * @author Markus Kunde */ public class VariableEditingSupport extends EditingSupport { /** * Central logger instance. */ private static final Log LOGGER = LogFactory.getLog(VariableEditingSupport.class); /** * Allowed values for the type column. */ private static final String[] VALUES = new String[] { VariableType.Integer.toString(), VariableType.Logic.toString(), VariableType.Real.toString(), VariableType.String.toString() }; /** * Reference to the calling class. */ private final XPathChooserHelper helper; /** * The table. */ private final Table table; /** * The column (1 = attribute name, 2 = attribute value). */ private final int column; /** * Constructor. * @param parent The creating class * @param viewer The tree column viewer * @param aColumn The column number (1..2) */ public VariableEditingSupport(final XPathChooserHelper parent, final ColumnViewer viewer, final int aColumn) { super(viewer); assert parent != null; assert viewer != null; assert aColumn > 0; this.helper = parent; this.column = aColumn; table = ((TableViewer) viewer).getTable(); } @Override protected boolean canEdit(final Object element) { assert element instanceof VariableEntry; return (element != null) && (column >= 1); } @Override protected CellEditor getCellEditor(final Object element) { assert element instanceof VariableEntry; assert column >= 1; final VariableEntry variable = (VariableEntry) element; helper.updateTreeAttributesFromTableEntry(variable); final CellEditor editor; if (column == 1) { editor = new TextCellEditor(table); final Text control = ((Text) editor.getControl()); control.setText(variable.getName()); control.setEditable(true); control.selectAll(); control.setFocus(); } else if (column == 2) { editor = new TextCellEditor(table); final Text control = ((Text) editor.getControl()); control.setText(variable.getXpath()); control.setEditable(true); control.selectAll(); control.setFocus(); } else if (column == 3) { editor = new ComboBoxCellEditor(table, VALUES); final CCombo control = ((CCombo) editor.getControl()); control.setText(variable.getType().toString()); control.setListVisible(true); control.setEditable(true); control.setFocus(); } else { editor = null; } return editor; } @Override protected Object getValue(final Object element) { assert element instanceof VariableEntry; assert column >= 1; final VariableEntry variable = (VariableEntry) element; if (column == 1) { return variable.getName(); } else if (column == 2) { return variable.getXpath(); } else if (column == 3) { int x = 0; for (int i = 0; i < VALUES.length; i ++) { if (VALUES[i].equals(variable.getType().toString())) { x = i; break; } } return x; // fallback } throw new RuntimeException("This should never happen! Missing column?"); } @Override protected void setValue(final Object element, final Object value) { assert element instanceof VariableEntry; assert value instanceof Integer; assert column >= 1; final VariableEntry variable = (VariableEntry) element; if (column == 1) { variable.setName((String) value); } else if (column == 2) { variable.setXpath((String) value); } else if (column == 3) { try { variable.setType(VariableType.valueOf(VALUES[((Integer) value).intValue()])); } catch (final IllegalArgumentException e) { LOGGER.error(e); } } helper.copyNewEntryIfNecessary(variable); } }