package net.sourceforge.pmd.eclipse.ui.preferences.br; import net.sourceforge.pmd.Rule; import net.sourceforge.pmd.eclipse.ui.preferences.AbstractTableLabelProvider; import net.sourceforge.pmd.util.StringUtil; import org.eclipse.swt.graphics.Image; /** * * @author Brian Remedios */ public class RuleLabelProvider extends AbstractTableLabelProvider { private RuleColumnDescriptor[] columnDescriptors; /** * Constructor for RuleLabelProvider. * @param columns RuleColumnDescriptor[] */ public RuleLabelProvider(RuleColumnDescriptor[] columns) { columnDescriptors = columns; } public String getDetailText(Object element, int columnIndex) { if (columnIndex <= 0) return ""; if (element instanceof Rule) { Rule rule = (Rule) element; String problem = rule.dysfunctionReason(); if (StringUtil.isNotEmpty(problem)) { return "Problem in " + rule.getName() + " rule: " + problem; } return columnDescriptors[columnIndex-1].detailStringFor(rule); } if (element instanceof RuleGroup) { RuleGroup group = (RuleGroup) element; return columnDescriptors[columnIndex-1].detailStringFor(group); } return "??"; } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(Object, int) */ public String getColumnText(Object element, int columnIndex) { if (columnIndex <= 0) return ""; if (element instanceof RuleCollection) { if (columnIndex == 1) { RuleGroup rg = (RuleGroup)element; String label = rg.label(); return standardized(label, rg.ruleCount()); } return columnDescriptors[columnIndex-1].stringValueFor((RuleCollection)element); } if (element instanceof Rule) { RuleColumnDescriptor rcd = columnDescriptors[columnIndex-1]; String text = rcd.stringValueFor((Rule) element); return columnIndex == 1 ? " " + text : text; } return "??"; } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(Object, int) */ public Image getColumnImage(Object element, int columnIndex) { if (columnIndex <= 0) return null; if (element instanceof RuleCollection) { return columnDescriptors[columnIndex-1].imageFor((RuleCollection)element); } if (element instanceof Rule) { return columnDescriptors[columnIndex-1].imageFor((Rule) element); } return null; // should never get here } /** * @param rawLabel String * @param count int * @return String */ private String standardized(String rawLabel, int count) { int rulesPos = rawLabel.indexOf(" Rules"); String filteredLabel = rulesPos > 0 ? rawLabel.substring(0, rulesPos) : rawLabel; return filteredLabel + " (" + count + ")"; } }