KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ui > internal > navigator > NavigatorFilterService


1 /*******************************************************************************
2  * Copyright (c) 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
12 package org.eclipse.ui.internal.navigator;
13
14 import java.util.ArrayList JavaDoc;
15 import java.util.Arrays JavaDoc;
16 import java.util.HashMap JavaDoc;
17 import java.util.HashSet JavaDoc;
18 import java.util.Iterator JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Map JavaDoc;
21 import java.util.Set JavaDoc;
22
23 import org.eclipse.core.runtime.Assert;
24 import org.eclipse.core.runtime.Preferences;
25 import org.eclipse.jface.viewers.ViewerFilter;
26 import org.eclipse.ui.internal.navigator.filters.CommonFilterDescriptor;
27 import org.eclipse.ui.internal.navigator.filters.CommonFilterDescriptorManager;
28 import org.eclipse.ui.internal.navigator.filters.SkeletonViewerFilter;
29 import org.eclipse.ui.navigator.ICommonFilterDescriptor;
30 import org.eclipse.ui.navigator.INavigatorFilterService;
31
32 /**
33  * @since 3.2
34  *
35  */

36 public class NavigatorFilterService implements INavigatorFilterService {
37
38     private static final ViewerFilter[] NO_FILTERS = new ViewerFilter[0];
39
40     private static final String JavaDoc ACTIVATION_KEY = ".filterActivation"; //$NON-NLS-1$
41

42     private static final String JavaDoc DELIM = ":"; //$NON-NLS-1$
43

44     private final NavigatorContentService contentService;
45
46     /* Map of (ICommonFilterDescriptor, ViewerFilter)-pairs */
47     private final Map JavaDoc declaredViewerFilters = new HashMap JavaDoc();
48
49     /* Set of ViewerFilters enforced from visible/active content extensions */
50     private final Set JavaDoc enforcedViewerFilters = new HashSet JavaDoc();
51
52     /* A set of active filter String ids */
53     private final Set JavaDoc activeFilters = new HashSet JavaDoc();
54
55     /**
56      * @param aContentService
57      * The corresponding content service
58      */

59     public NavigatorFilterService(NavigatorContentService aContentService) {
60         contentService = aContentService;
61         restoreFilterActivation();
62     }
63
64     private synchronized void restoreFilterActivation() {
65
66         try {
67             Preferences preferences = NavigatorPlugin.getDefault()
68                     .getPluginPreferences();
69
70             if (preferences.contains(getFilterActivationPreferenceKey())) {
71                 String JavaDoc activatedFiltersPreferenceValue = preferences
72                         .getString(getFilterActivationPreferenceKey());
73                 String JavaDoc[] activeFilterIds = activatedFiltersPreferenceValue
74                         .split(DELIM);
75                 for (int i = 0; i < activeFilterIds.length; i++) {
76                     activeFilters.add(activeFilterIds[i]);
77                 }
78
79             } else {
80                 ICommonFilterDescriptor[] visibleFilterDescriptors = getVisibleFilterDescriptors();
81                 for (int i = 0; i < visibleFilterDescriptors.length; i++) {
82                     if (visibleFilterDescriptors[i].isActiveByDefault()) {
83                         activeFilters.add(visibleFilterDescriptors[i].getId());
84                     }
85                 }
86             }
87
88         } catch (RuntimeException JavaDoc e) {
89             NavigatorPlugin.logError(0, e.getMessage(), e);
90         }
91
92     }
93
94     /*
95      * (non-Javadoc)
96      *
97      * @see org.eclipse.ui.navigator.INavigatorFilterService#persistFilterActivationState()
98      */

99     public void persistFilterActivationState() {
100
101         try {
102             synchronized (activeFilters) {
103
104                 /* by creating a StringBuffer with DELIM, we ensure the string is not empty when persisted.*/
105                 StringBuffer JavaDoc activatedFiltersPreferenceValue = new StringBuffer JavaDoc(DELIM);
106
107                 for (Iterator JavaDoc activeItr = activeFilters.iterator(); activeItr
108                         .hasNext();) {
109                     activatedFiltersPreferenceValue.append(
110                             activeItr.next().toString()).append(DELIM);
111                 }
112
113                 Preferences preferences = NavigatorPlugin.getDefault()
114                         .getPluginPreferences();
115
116                 preferences.setValue(getFilterActivationPreferenceKey(),
117                         activatedFiltersPreferenceValue.toString());
118             }
119
120         } catch (RuntimeException JavaDoc e) {
121             NavigatorPlugin.logError(0, e.getMessage(), e);
122         }
123
124     }
125
126     /**
127      * @return The correct filter activation preference key for the
128      * corresponding content service.
129      */

130     private String JavaDoc getFilterActivationPreferenceKey() {
131         return contentService.getViewerId() + ACTIVATION_KEY;
132     }
133
134     /*
135      * (non-Javadoc)
136      *
137      * @see org.eclipse.ui.navigator.INavigatorFilterService#getVisibleFilters(boolean)
138      */

139     public ViewerFilter[] getVisibleFilters(boolean toReturnOnlyActiveFilters) {
140         CommonFilterDescriptor[] descriptors = CommonFilterDescriptorManager
141                 .getInstance().findVisibleFilters(contentService);
142
143         List JavaDoc filters = new ArrayList JavaDoc();
144
145         ViewerFilter instance;
146         for (int i = 0; i < descriptors.length; i++) {
147             if (!toReturnOnlyActiveFilters || isActive(descriptors[i].getId())) {
148                 instance = getViewerFilter(descriptors[i]);
149                 if (instance != null) {
150                     filters.add(instance);
151                 }
152             }
153         }
154
155         /* return the enforced viewer filters always */
156         filters.addAll(enforcedViewerFilters);
157
158         if (filters.size() == 0) {
159             return NO_FILTERS;
160         }
161         return (ViewerFilter[]) filters
162                 .toArray(new ViewerFilter[filters.size()]);
163     }
164
165     /**
166      * @param descriptor
167      * A key into the viewerFilters map.
168      * @return A non-null ViewerFilter from the extension (or
169      * {@link SkeletonViewerFilter#INSTANCE}).
170      */

171     public ViewerFilter getViewerFilter(ICommonFilterDescriptor descriptor) {
172         ViewerFilter filter = null;
173         synchronized (declaredViewerFilters) {
174             filter = (ViewerFilter) declaredViewerFilters.get(descriptor);
175             if (filter == null) {
176                 declaredViewerFilters.put(descriptor,
177                         (filter = ((CommonFilterDescriptor) descriptor)
178                                 .createFilter()));
179             }
180         }
181         return filter;
182     }
183
184     /*
185      * (non-Javadoc)
186      *
187      * @see org.eclipse.ui.navigator.INavigatorFilterService#getVisibleFilterIds()
188      */

189     public ICommonFilterDescriptor[] getVisibleFilterDescriptors() {
190         return CommonFilterDescriptorManager.getInstance().findVisibleFilters(
191                 contentService);
192     }
193
194     /*
195      * (non-Javadoc)
196      *
197      * @see org.eclipse.ui.navigator.INavigatorFilterService#isActive(java.lang.String)
198      */

199     public boolean isActive(String JavaDoc aFilterId) {
200         synchronized (activeFilters) {
201             return activeFilters.contains(aFilterId);
202         }
203     }
204
205     /*
206      * (non-Javadoc)
207      *
208      * @see org.eclipse.ui.navigator.INavigatorFilterService#activateFilters(java.lang.String[])
209      */

210     public void setActiveFilterIds(String JavaDoc[] theFilterIds) {
211         Assert.isNotNull(theFilterIds);
212         synchronized (activeFilters) {
213             activeFilters.clear();
214             activeFilters.addAll(Arrays.asList(theFilterIds));
215         }
216     }
217
218     /**
219      * Activate the given array without disabling all other filters.
220      *
221      * @param theFilterIds
222      * The filter ids to activate.
223      */

224     public void addActiveFilterIds(String JavaDoc[] theFilterIds) {
225         Assert.isNotNull(theFilterIds);
226         synchronized (activeFilters) {
227             activeFilters.addAll(Arrays.asList(theFilterIds));
228         }
229     }
230     
231     /**
232      *
233      * @param aFilterId The id of the filter to activate or deactivate
234      * @param toMakeActive True to make the filter active, false to make the filter inactive
235      */

236     public void setActive(String JavaDoc aFilterId, boolean toMakeActive) {
237
238         synchronized (activeFilters) {
239             boolean isActive = activeFilters.contains(aFilterId);
240             if(isActive ^ toMakeActive) {
241                 if(toMakeActive)
242                     activeFilters.remove(aFilterId);
243                 else
244                     activeFilters.add(aFilterId);
245                     
246             }
247                 
248         }
249     }
250  
251 }
252
Popular Tags