package net.sourceforge.pmd.eclipse.ui.filters; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * * @author Brian Remedios */ class FilterHolder { public String pattern; public boolean forPMD; public boolean forCPD; public boolean isInclude; public static final FilterHolder[] EMPTY_HOLDERS = new FilterHolder[0]; public static final Accessor ExcludeAccessor = new BasicAccessor() { public boolean boolValueFor(FilterHolder fh) { return !fh.isInclude; } }; public static final Accessor IncludeAccessor = new BasicAccessor() { public boolean boolValueFor(FilterHolder fh) { return fh.isInclude; } }; public static final Accessor PMDAccessor = new BasicAccessor() { public boolean boolValueFor(FilterHolder fh) { return fh.forPMD; } }; public static final Accessor CPDAccessor = new BasicAccessor() { public boolean boolValueFor(FilterHolder fh) { return fh.forCPD; } }; public static final Accessor PatternAccessor = new BasicAccessor() { public String textValueFor(FilterHolder fh) { return fh.pattern; } }; public FilterHolder(String thePattern, boolean pmdFlag, boolean cpdFlag, boolean isIncludeFlag) { pattern = thePattern; forPMD = pmdFlag; forCPD = cpdFlag; isInclude = isIncludeFlag; } public interface Accessor { boolean boolValueFor(FilterHolder fh); String textValueFor(FilterHolder fh); } public static Boolean boolValueOf(Collection<FilterHolder> holders, Accessor boolAccessor) { Set<Boolean> values = new HashSet<Boolean>(); for (FilterHolder fh : holders) values.add(boolAccessor.boolValueFor(fh)); 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() : ""; } }