package org.appwork.utils.swing.table.columns; import java.util.regex.Pattern; import javax.swing.JComponent; import org.appwork.utils.swing.table.ExtColumn; import org.appwork.utils.swing.table.ExtDefaultRowSorter; import org.appwork.utils.swing.table.ExtTable; import org.appwork.utils.swing.table.ExtTableModel; public abstract class ExtCompoundColumn<T> extends ExtColumn<T> { /** * */ private static final long serialVersionUID = 1L; private ExtColumn<T> editor; private T editing; public ExtCompoundColumn(final String name) { this(name, null); } /** * @param name * @param table */ public ExtCompoundColumn(final String name, final ExtTableModel<T> table) { super(name, table); this.setRowSorter(new ExtDefaultRowSorter<T>() { @Override public int compare(final T o1, final T o2) { String o1s = ExtCompoundColumn.this.getSortString(o1); String o2s = ExtCompoundColumn.this.getSortString(o2); if (o1s == null) { o1s = ""; } if (o2s == null) { o2s = ""; } if (this.isSortOrderToggle()) { return o1s.compareTo(o2s); } else { return o2s.compareTo(o1s); } } }); } @Override public Object getCellEditorValue() { return this.editor.getCellEditorValue(); } @Override public JComponent getEditorComponent(final ExtTable<T> table, final T value, final boolean isSelected, final int row, final int column) { this.editing = value; this.editor = this.selectColumn(this.editing); return this.editor.getEditorComponent(table, value, isSelected, row, column); } @Override public JComponent getRendererComponent(final ExtTable<T> table, final T value, final boolean isSelected, final boolean hasFocus, final int row, final int column) { return this.selectColumn(value).getRendererComponent(table, value, isSelected, hasFocus, row, column); } @Override public ExtDefaultRowSorter<T> getRowSorter(final boolean sortOrderToggle) { return super.getRowSorter(sortOrderToggle); } /** * @param o1 * @return */ public abstract String getSortString(T o1); @Override public boolean isEditable(final T obj) { return false; } @Override public boolean isEnabled(final T obj) { return false; } @Override public boolean isSortable(final T obj) { return false; } @Override public boolean matchSearch(final T object, final Pattern pattern) { return this.selectColumn(object).matchSearch(object, pattern); } /** * @param object * @return */ abstract public ExtColumn<T> selectColumn(T object); @Override public void setModel(final ExtTableModel<T> model) { this.setModelToCompounds(model); super.setModel(model); } /** * @param model */ public abstract void setModelToCompounds(ExtTableModel<T> model); @Override public void setValue(final Object value, final T object) { this.selectColumn(object).setValue(value, object); } }