KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ui > views > navigator > ResourcePatternFilter


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.ui.views.navigator;
12
13 import java.util.ArrayList JavaDoc;
14 import java.util.List JavaDoc;
15 import java.util.StringTokenizer JavaDoc;
16
17 import org.eclipse.core.resources.IResource;
18 import org.eclipse.core.runtime.IAdaptable;
19 import org.eclipse.jface.preference.IPreferenceStore;
20 import org.eclipse.jface.viewers.Viewer;
21 import org.eclipse.jface.viewers.ViewerFilter;
22 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
23 import org.eclipse.ui.internal.util.PrefUtil;
24
25 /**
26  * Filter used to determine whether resources are to be shown or not.
27  *
28  * @since 2.0
29  */

30 public class ResourcePatternFilter extends ViewerFilter {
31     private String JavaDoc[] patterns;
32
33     private StringMatcher[] matchers;
34
35     static final String JavaDoc COMMA_SEPARATOR = ",";//$NON-NLS-1$
36

37     static final String JavaDoc FILTERS_TAG = "resourceFilters";//$NON-NLS-1$
38

39     /**
40      * Creates a new resource pattern filter.
41      */

42     public ResourcePatternFilter() {
43         super();
44     }
45
46     /**
47      * Return the currently configured StringMatchers. If there aren't any look
48      * them up.
49      */

50     private StringMatcher[] getMatchers() {
51
52         if (this.matchers == null) {
53             initializeFromPreferences();
54         }
55
56         return this.matchers;
57     }
58
59     /**
60      * Gets the patterns for the receiver. Returns the cached values if there
61      * are any - if not look it up.
62      */

63     public String JavaDoc[] getPatterns() {
64
65         if (this.patterns == null) {
66             initializeFromPreferences();
67         }
68
69         return this.patterns;
70
71     }
72
73     /**
74      * Initializes the filters from the preference store.
75      */

76     private void initializeFromPreferences() {
77         // get the filters that were saved by ResourceNavigator.setFiltersPreference
78
IPreferenceStore viewsPrefs = IDEWorkbenchPlugin.getDefault()
79                 .getPreferenceStore();
80         String JavaDoc storedPatterns = viewsPrefs.getString(FILTERS_TAG);
81
82         if (storedPatterns.length() == 0) {
83             // try to migrate patterns from old workbench preference store location
84
IPreferenceStore workbenchPrefs = PrefUtil.getInternalPreferenceStore();
85             storedPatterns = workbenchPrefs.getString(FILTERS_TAG);
86             if (storedPatterns.length() > 0) {
87                 viewsPrefs.setValue(FILTERS_TAG, storedPatterns);
88                 workbenchPrefs.setValue(FILTERS_TAG, ""); //$NON-NLS-1$
89
}
90         }
91
92         if (storedPatterns.length() == 0) {
93             // revert to all filter extensions with selected == "true"
94
// if there are no filters in the preference store
95
List JavaDoc defaultFilters = FiltersContentProvider.getDefaultFilters();
96             String JavaDoc[] patterns = new String JavaDoc[defaultFilters.size()];
97             defaultFilters.toArray(patterns);
98             setPatterns(patterns);
99             return;
100         }
101
102         //Get the strings separated by a comma and filter them from the currently
103
//defined ones
104
List JavaDoc definedFilters = FiltersContentProvider.getDefinedFilters();
105         StringTokenizer JavaDoc entries = new StringTokenizer JavaDoc(storedPatterns,
106                 COMMA_SEPARATOR);
107         List JavaDoc patterns = new ArrayList JavaDoc();
108
109         while (entries.hasMoreElements()) {
110             String JavaDoc nextToken = entries.nextToken();
111             if (definedFilters.indexOf(nextToken) > -1) {
112                 patterns.add(nextToken);
113             }
114         }
115
116         //Convert to an array of Strings
117
String JavaDoc[] patternArray = new String JavaDoc[patterns.size()];
118         patterns.toArray(patternArray);
119         setPatterns(patternArray);
120
121     }
122
123     /* (non-Javadoc)
124      * Method declared on ViewerFilter.
125      */

126     public boolean select(Viewer viewer, Object JavaDoc parentElement, Object JavaDoc element) {
127         IResource resource = null;
128         if (element instanceof IResource) {
129             resource = (IResource) element;
130         } else if (element instanceof IAdaptable) {
131             IAdaptable adaptable = (IAdaptable) element;
132             resource = (IResource) adaptable.getAdapter(IResource.class);
133         }
134         if (resource != null) {
135             String JavaDoc name = resource.getName();
136             StringMatcher[] testMatchers = getMatchers();
137             for (int i = 0; i < testMatchers.length; i++) {
138                 if (testMatchers[i].match(name)) {
139                     return false;
140                 }
141             }
142             return true;
143         }
144         return true;
145     }
146
147     /**
148      * Sets the patterns to filter out for the receiver.
149      */

150     public void setPatterns(String JavaDoc[] newPatterns) {
151
152         this.patterns = newPatterns;
153         this.matchers = new StringMatcher[newPatterns.length];
154         for (int i = 0; i < newPatterns.length; i++) {
155             //Reset the matchers to prevent constructor overhead
156
matchers[i] = new StringMatcher(newPatterns[i], true, false);
157         }
158     }
159 }
160
Popular Tags