001: /*******************************************************************************
002: * Copyright (c) 2000, 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.jdt.internal.ui.filters;
011:
012: import org.eclipse.core.runtime.IAdaptable;
013:
014: import org.eclipse.core.resources.IResource;
015: import org.eclipse.core.resources.IStorage;
016:
017: import org.eclipse.jface.viewers.Viewer;
018: import org.eclipse.jface.viewers.ViewerFilter;
019:
020: import org.eclipse.ui.IWorkingSet;
021: import org.eclipse.ui.model.IWorkbenchAdapter;
022:
023: import org.eclipse.jdt.core.IJavaElement;
024:
025: import org.eclipse.jdt.internal.ui.util.StringMatcher;
026:
027: /**
028: * The NamePatternFilter selects the elements which
029: * match the given string patterns.
030: * <p>
031: * The following characters have special meaning:
032: * ? => any character
033: * * => any string
034: * </p>
035: *
036: * @since 2.0
037: */
038: public class NamePatternFilter extends ViewerFilter {
039: private String[] fPatterns;
040: private StringMatcher[] fMatchers;
041:
042: /**
043: * Return the currently configured StringMatchers.
044: * @return returns the matchers
045: */
046: private StringMatcher[] getMatchers() {
047: return fMatchers;
048: }
049:
050: /**
051: * Gets the patterns for the receiver.
052: * @return returns the patterns to be filtered for
053: */
054: public String[] getPatterns() {
055: return fPatterns;
056: }
057:
058: /* (non-Javadoc)
059: * Method declared on ViewerFilter.
060: */
061: public boolean select(Viewer viewer, Object parentElement,
062: Object element) {
063: if (fMatchers.length == 0) {
064: return true;
065: }
066: String matchName = null;
067: if (element instanceof IJavaElement) {
068: matchName = ((IJavaElement) element).getElementName();
069: } else if (element instanceof IResource) {
070: matchName = ((IResource) element).getName();
071: } else if (element instanceof IStorage) {
072: matchName = ((IStorage) element).getName();
073: } else if (element instanceof IWorkingSet) {
074: matchName = ((IWorkingSet) element).getLabel();
075: } else if (element instanceof IAdaptable) {
076: IWorkbenchAdapter wbadapter = (IWorkbenchAdapter) ((IAdaptable) element)
077: .getAdapter(IWorkbenchAdapter.class);
078: if (wbadapter != null) {
079: matchName = wbadapter.getLabel(element);
080: }
081: }
082: if (matchName != null && matchName.length() > 0) {
083: StringMatcher[] testMatchers = getMatchers();
084: for (int i = 0; i < testMatchers.length; i++) {
085: if (testMatchers[i].match(matchName))
086: return false;
087: }
088: return true;
089: }
090: return true;
091: }
092:
093: /**
094: * Sets the patterns to filter out for the receiver.
095: * <p>
096: * The following characters have special meaning:
097: * ? => any character
098: * * => any string
099: * </p>
100: * @param newPatterns the new patterns
101: */
102: public void setPatterns(String[] newPatterns) {
103: fPatterns = newPatterns;
104: fMatchers = new StringMatcher[newPatterns.length];
105: for (int i = 0; i < newPatterns.length; i++) {
106: //Reset the matchers to prevent constructor overhead
107: fMatchers[i] = new StringMatcher(newPatterns[i], true,
108: false);
109: }
110: }
111: }
|