/*******************************************************************************
* Copyright (c) 2011 IBM Corporation and others. All rights reserved. This program and the
* accompanying materials are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html Contributors: IBM Corporation - initial API and
* implementation
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.filter;
import org.eclipse.jface.viewers.ContentViewer;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
/**
* The NamePatternFilter selects the elements which match the given string patterns.
* <p>
* The following characters have special meaning: ? => any character * => any string
* </p>
*/
public class OutlineNamePatternFilter extends ViewerFilter {
private String[] fPatterns;
private StringMatcher[] fMatchers;
/**
* Gets the patterns for the receiver.
*
* @return returns the patterns to be filtered for
*/
public String[] getPatterns() {
return fPatterns;
}
/*
* (non-Javadoc) Method declared on ViewerFilter.
*/
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (getPatterns().length == 0) {
return true;
}
String matchName = null;
if (viewer instanceof ContentViewer) {
final IBaseLabelProvider labelProvider = ((ContentViewer) viewer).getLabelProvider();
if (labelProvider instanceof ILabelProvider) {
matchName = ((ILabelProvider) labelProvider).getText(element);
}
}
if (matchName != null && matchName.length() > 0) {
String[] fPatterns = getPatterns();
for (int i = 0; i < fPatterns.length; i++) {
if (new StringMatcher(fPatterns[i], true, false).match(matchName))
return false;
}
return true;
}
return true;
}
/**
* Sets the patterns to filter out for the receiver.
* <p>
* The following characters have special meaning: ? => any character * => any string
* </p>
*
* @param newPatterns the new patterns
*/
public void setPatterns(String[] newPatterns) {
fPatterns = newPatterns;
fMatchers = new StringMatcher[newPatterns.length];
for (int i = 0; i < newPatterns.length; i++) {
//Reset the matchers to prevent constructor overhead
fMatchers[i] = new StringMatcher(newPatterns[i], true, false);
}
}
}