package net.sourceforge.pmd.eclipse.ui.preferences.br;
import java.util.List;
import java.util.Map;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.eclipse.ui.AbstractColumnDescriptor;
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;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
/**
* Retains all values necessary to hydrate a table column for holding a set of rules. Invoke the buildTreeColumn()
* method to constitute one. As descriptors they can be held as static items since they they're immutable.
*
* @author Brian Remedios
*/
public abstract class AbstractRuleColumnDescriptor extends AbstractColumnDescriptor implements RuleColumnDescriptor {
private final RuleFieldAccessor accessor;
protected AbstractRuleColumnDescriptor(String theId, String labelKey, int theAlignment, int theWidth, RuleFieldAccessor theAccessor, boolean resizableFlag, String theImagePath) {
super(theId, labelKey, theAlignment, theWidth, resizableFlag, theImagePath);
accessor = theAccessor;
}
protected TreeColumn buildTreeColumn(Tree parent, final SortListener sortListener) {
TreeColumn tc = super.buildTreeColumn(parent);
tc.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
sortListener.sortBy(accessor(), e.widget);
}
});
return tc;
}
protected 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;
}
protected Object valueFor(Rule rule) {
return accessor.valueFor(rule);
}
protected Object valueFor(RuleCollection collection) {
return accessor.valueFor(collection);
}
public RuleFieldAccessor accessor() { return accessor; }
public String detailStringFor(Rule rule) {
return accessor.labelFor(rule);
}
public String detailStringFor(RuleGroup group) {
return "TODO in AbstractRuleColumnDescriptor";
}
public Image imageFor(RuleCollection collection) {
return null; // override in subclasses
}
public String stringValueFor(RuleCollection collection) {
return null; // override in subclasses
}
public TableColumn newTableColumnFor(Table parent, int columnIndex, SortListener sortListener, Map<Integer, List<Listener>> paintListeners) {
TableColumn tc = buildTableColumn(parent, sortListener);
tc.setText(label());
return tc;
}
}