package net.sourceforge.pmd.eclipse.ui; import net.sourceforge.pmd.eclipse.ui.preferences.br.SortListener; import net.sourceforge.pmd.eclipse.ui.preferences.br.ValueFormatter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; /** * * @author Brian Remedios */ public class ItemColumnDescriptor<T extends Object, V extends Object> extends AbstractColumnDescriptor { private final ItemFieldAccessor<T, V> accessor; private final ValueFormatter[] formatters; public ItemColumnDescriptor(String theId, String labelKey, int theAlignment, int theWidth, boolean resizableFlag, ItemFieldAccessor<T, V> theAccessor) { this(theId, labelKey, theAlignment, theWidth, resizableFlag, theAccessor, null); } public ItemColumnDescriptor(String theId, String labelKey, int theAlignment, int theWidth, boolean resizableFlag, ItemFieldAccessor<T, V> theAccessor, ValueFormatter[] theFormatters) { super(theId, labelKey, theAlignment, theWidth, resizableFlag, null); accessor = theAccessor; formatters = theFormatters; } public T valueFor(V item) { return accessor.valueFor(item); } // TODO - provide preference value private int preferredFormatter() { return formatters != null && formatters.length == 1 ? 0 : -1; } public String textFor(V item) { return textFor(item, preferredFormatter()); } public String textFor(V item, int formatterIndex) { T value = valueFor(item); return formatterIndex < 0 ? value == null ? "" : String.valueOf(value) : formatters[formatterIndex].format(value); } public Image imageFor(V item) { return accessor.imageFor(item); } public TableColumn buildTableColumn(Table parent, final SortListener sortListener) { TableColumn tc = super.buildTableColumn(parent); tc.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { sortListener.sortBy(accessor, e.widget); } }); return tc; } public ValueFormatter[] formatters() { return formatters; } public ItemFieldAccessor<T, V> getAccessor() { return accessor; } }