package org.erlide.ui.editors.erl.outline.filters;
import java.util.Collection;
import java.util.Map;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.ui.dialogs.SearchPattern;
import org.erlide.engine.model.IErlElement;
import org.erlide.ui.editors.erl.outline.ErlangLabelProvider;
import com.google.common.collect.Maps;
public class PatternFilter extends ViewerFilter {
private final Map<String, SearchPattern> fPatterns = Maps.newHashMap();
@Override
public boolean select(final Viewer viewer, final Object parentElement,
final Object element) {
for (final SearchPattern pattern : fPatterns.values()) {
if (pattern.matches(getName(element))) {
return false;
}
}
return true;
}
private String getName(final Object element) {
if (element instanceof IErlElement) {
return ErlangLabelProvider.getLabelString(element);
} else if (element instanceof IResource) {
final IResource resource = (IResource) element;
return resource.getName();
}
return element.toString();
}
public void removePatterns(final Collection<String> patterns) {
for (final String pattern : patterns) {
fPatterns.remove(pattern);
}
}
public void addPatterns(final Collection<String> patterns) {
for (final String pattern : patterns) {
final SearchPattern searchPattern = new SearchPattern(
SearchPattern.RULE_PATTERN_MATCH);
searchPattern.setPattern(pattern);
fPatterns.put(pattern, searchPattern);
}
}
public boolean isEmpty() {
return fPatterns.isEmpty();
}
}