Bugfixes for file filters preference page

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@7581 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Brian Remedios
2011-12-16 08:34:01 +00:00
parent 33d0140f94
commit 71147ed42b
4 changed files with 434 additions and 396 deletions
pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui

@ -30,8 +30,8 @@ public interface FilterColumnUI {
};
ItemColumnDescriptor<String, FilterHolder> include = new ItemColumnDescriptor<String, FilterHolder>("", " Type", SWT.LEFT, 85, false, includeAcc);
ItemColumnDescriptor<String, FilterHolder> pmd = new ItemColumnDescriptor<String, FilterHolder>("", "PMD", SWT.LEFT, 55, false, pmdAcc);
ItemColumnDescriptor<String, FilterHolder> cpd = new ItemColumnDescriptor<String, FilterHolder>("", "CPD", SWT.LEFT, 55, false, cpdAcc);
ItemColumnDescriptor<String, FilterHolder> pmd = new ItemColumnDescriptor<String, FilterHolder>("", "PMD", SWT.CENTER, 55, false, pmdAcc);
ItemColumnDescriptor<String, FilterHolder> cpd = new ItemColumnDescriptor<String, FilterHolder>("", "CPD", SWT.CENTER, 55, false, cpdAcc);
ItemColumnDescriptor<String, FilterHolder> pattern = new ItemColumnDescriptor<String, FilterHolder>("", "Pattern", SWT.LEFT, 55, true, patternAcc);
@SuppressWarnings("rawtypes")

@ -48,12 +48,13 @@ class FilterHolder {
public static Boolean boolValueOf(Collection<FilterHolder> holders, Accessor boolAccessor) {
Set<Boolean> values = new HashSet<Boolean>();
for (FilterHolder fh : holders) values.add(boolAccessor.boolValueFor(fh));
return values.size() == 2 ? null : values.iterator().next();
int valueCount = values.size();
return (valueCount == 2 || valueCount == 0) ? null : values.iterator().next();
}
public static String textValueOf(Collection<FilterHolder> holders, Accessor textAccessor) {
Set<String> values = new HashSet<String>();
for (FilterHolder fh : holders) values.add(textAccessor.textValueFor(fh));
return values.size() > 1 ? "" : values.iterator().next();
return (values.size() == 1) ? values.iterator().next() : "";
}
}

@ -10,7 +10,7 @@ import java.util.Set;
import net.sourceforge.pmd.PropertyDescriptor;
import net.sourceforge.pmd.PropertySource;
import net.sourceforge.pmd.RuleSet;
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferencesManager;
import net.sourceforge.pmd.eclipse.ui.BasicTableLabelProvider;
import net.sourceforge.pmd.eclipse.ui.PMDUiConstants;
import net.sourceforge.pmd.eclipse.ui.Shape;
@ -69,16 +69,31 @@ public class FilterPreferencesPage extends AbstractPMDPreferencePage implements
private Text patternField;
private BasicTableManager reportTableMgr;
private static Image IncludeIcon;
private static Image ExcludeIcon;
private static final String NewFilterPattern = "<finish this>";
private static final RGB ProtoTransparentColour = new RGB(1,1,1); // almost full black, unlikely to be used
public static Image typeIconFor(FilterHolder holder) {
return holder.isInclude ? includeIcon() : excludeIcon();
}
private static Button createButton(Composite panel, int type, String label) {
Button butt = new Button(panel, type);
butt.setLayoutData( new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
butt.setText(label);
return butt;
}
private static Button createButton(Composite panel, int type, Image image, String tooltip) {
Button butt = new Button(panel, type);
butt.setLayoutData( new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
butt.setImage(image);
butt.setToolTipText(tooltip);
return butt;
}
private static Image includeIcon() {
if (IncludeIcon != null) return IncludeIcon;
@ -153,6 +168,19 @@ public class FilterPreferencesPage extends AbstractPMDPreferencePage implements
}
return holders.toArray(new FilterHolder[holders.size()]);
}
private List<String> tableFilters(boolean isInclude) {
List<String> filters = new ArrayList<String>();
for (TableItem ti : tableViewer.getTable().getItems()) {
FilterHolder fh = (FilterHolder)ti.getData();
if (fh.isInclude == isInclude) filters.add(fh.pattern);
}
return filters;
}
/**
* Build the group of priority preferences
* @param parent the parent composite
@ -193,6 +221,7 @@ public class FilterPreferencesPage extends AbstractPMDPreferencePage implements
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection)event.getSelection();
selectedPatterns(filtersIn(selection.toList()));
updateControls();
}
});
@ -316,21 +345,6 @@ public class FilterPreferencesPage extends AbstractPMDPreferencePage implements
});
}
private static Button createButton(Composite panel, int type, String label) {
Button butt = new Button(panel, type);
butt.setLayoutData( new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
butt.setText(label);
return butt;
}
private static Button createButton(Composite panel, int type, Image image, String tooltip) {
Button butt = new Button(panel, type);
butt.setLayoutData( new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
butt.setImage(image);
butt.setToolTipText(tooltip);
return butt;
}
/**
* Create buttons for rule table management
* @param parent Composite
@ -345,9 +359,7 @@ public class FilterPreferencesPage extends AbstractPMDPreferencePage implements
composite.setLayout(gridLayout);
addButton = buildAddButton(composite);
addButton.setEnabled(false);
removeButton = buildRemoveButton(composite);
removeButton.setEnabled(false);
GridData data = new GridData();
addButton.setLayoutData(data);
@ -486,7 +498,7 @@ removeButton.setEnabled(false);
*/
public Button buildAddButton(final Composite parent) {
Button button = newImageButton(parent, PMDUiConstants.ICON_BUTTON_ADD, StringKeys.PREF_RULESET_BUTTON_ADDRULE);
Button button = newImageButton(parent, PMDUiConstants.ICON_BUTTON_ADD, StringKeys.PREF_RULESET_BUTTON_ADDFILTER);
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
@ -497,10 +509,23 @@ removeButton.setEnabled(false);
return button;
}
private void addNewFilter() {
FilterHolder holder = new FilterHolder("<finish this>", true, false, false);
private FilterHolder[] tableFiltersWith(FilterHolder anotherOne) {
// TODO finish this
FilterHolder[] holders = new FilterHolder[ tableViewer.getTable().getItemCount() + (anotherOne == null ? 0 : 1) ];
TableItem[] items = tableViewer.getTable().getItems();
for (int i=0; i<items.length; i++) {
holders[i] = (FilterHolder)items[i].getData();
}
if (anotherOne != null) holders[holders.length-1] = anotherOne;
return holders;
}
private void addNewFilter() {
FilterHolder newHolder = new FilterHolder(NewFilterPattern, true, false, false);
tableViewer.setInput( tableFiltersWith(newHolder) );
}
/**
@ -510,7 +535,7 @@ removeButton.setEnabled(false);
*/
public Button buildRemoveButton(final Composite parent) {
Button button = newImageButton(parent, PMDUiConstants.ICON_BUTTON_DELETE, StringKeys.PREF_RULESET_BUTTON_REMOVERULE);
Button button = newImageButton(parent, PMDUiConstants.ICON_BUTTON_DELETE, StringKeys.PREF_RULESET_BUTTON_REMOVEFILTER);
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
@ -525,7 +550,8 @@ removeButton.setEnabled(false);
IStructuredSelection sel = (IStructuredSelection)tableViewer.getSelection();
if (sel.isEmpty()) return;
// TODO finish this
Object[] selections = sel.toArray();
tableViewer.remove(selections);
}
/**
@ -534,14 +560,18 @@ removeButton.setEnabled(false);
@Override
public boolean performOk() {
IPreferencesManager ipMgr = plugin.getPreferencesManager();
RuleSet ruleSet = ipMgr.getRuleSet();
ruleSet.setExcludePatterns( tableFilters(false) );
ruleSet.setIncludePatterns( tableFilters(true) );
Set<FilterHolder> filters = currentCheckedFilters();
preferences.activeExclusionPatterns( patternsIn(filters, false) );
preferences.activeInclusionPatterns( patternsIn(filters, true) );
preferences.sync();
PMDPlugin.getDefault().applyLogPreferences(preferences);
return true;
return super.performOk();
}
/**
@ -557,6 +587,11 @@ removeButton.setEnabled(false);
// TODO enable/disable save/cancel buttons
}
private void updateControls() {
removeButton.setEnabled( !selectedFilters().isEmpty() );
}
// ignore these
public void addedRows(int newRowCount) { }

@ -113,6 +113,8 @@ public class StringKeys {
public static final String PREF_RULESET_GROUPING_NONE = "preference.ruleset.grouping.none";
public static final String PREF_RULESET_GROUPING_PMD_VERSION = "preference.ruleset.grouping.pmd_version";
public static final String PREF_RULESET_GROUPING_REGEX = "preference.ruleset.grouping.regex";
public static final String PREF_RULESET_BUTTON_ADDFILTER = "preference.ruleset.button.addfilter";
public static final String PREF_RULESET_BUTTON_REMOVEFILTER = "preference.ruleset.button.removefilter";
public static final String PREF_RULESET_BUTTON_ADDRULE = "preference.ruleset.button.addrule";
public static final String PREF_RULESET_BUTTON_REMOVERULE = "preference.ruleset.button.removerule";
public static final String PREF_RULESET_BUTTON_EDITRULE = "preference.ruleset.button.editrule";