1 11 12 package org.eclipse.ui.internal.navigator; 13 14 import java.util.ArrayList ; 15 import java.util.Arrays ; 16 import java.util.HashMap ; 17 import java.util.HashSet ; 18 import java.util.Iterator ; 19 import java.util.List ; 20 import java.util.Map ; 21 import java.util.Set ; 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 36 public class NavigatorFilterService implements INavigatorFilterService { 37 38 private static final ViewerFilter[] NO_FILTERS = new ViewerFilter[0]; 39 40 private static final String ACTIVATION_KEY = ".filterActivation"; 42 private static final String DELIM = ":"; 44 private final NavigatorContentService contentService; 45 46 47 private final Map declaredViewerFilters = new HashMap (); 48 49 50 private final Set enforcedViewerFilters = new HashSet (); 51 52 53 private final Set activeFilters = new HashSet (); 54 55 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 activatedFiltersPreferenceValue = preferences 72 .getString(getFilterActivationPreferenceKey()); 73 String [] 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 e) { 89 NavigatorPlugin.logError(0, e.getMessage(), e); 90 } 91 92 } 93 94 99 public void persistFilterActivationState() { 100 101 try { 102 synchronized (activeFilters) { 103 104 105 StringBuffer activatedFiltersPreferenceValue = new StringBuffer (DELIM); 106 107 for (Iterator 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 e) { 121 NavigatorPlugin.logError(0, e.getMessage(), e); 122 } 123 124 } 125 126 130 private String getFilterActivationPreferenceKey() { 131 return contentService.getViewerId() + ACTIVATION_KEY; 132 } 133 134 139 public ViewerFilter[] getVisibleFilters(boolean toReturnOnlyActiveFilters) { 140 CommonFilterDescriptor[] descriptors = CommonFilterDescriptorManager 141 .getInstance().findVisibleFilters(contentService); 142 143 List filters = new ArrayList (); 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 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 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 189 public ICommonFilterDescriptor[] getVisibleFilterDescriptors() { 190 return CommonFilterDescriptorManager.getInstance().findVisibleFilters( 191 contentService); 192 } 193 194 199 public boolean isActive(String aFilterId) { 200 synchronized (activeFilters) { 201 return activeFilters.contains(aFilterId); 202 } 203 } 204 205 210 public void setActiveFilterIds(String [] theFilterIds) { 211 Assert.isNotNull(theFilterIds); 212 synchronized (activeFilters) { 213 activeFilters.clear(); 214 activeFilters.addAll(Arrays.asList(theFilterIds)); 215 } 216 } 217 218 224 public void addActiveFilterIds(String [] theFilterIds) { 225 Assert.isNotNull(theFilterIds); 226 synchronized (activeFilters) { 227 activeFilters.addAll(Arrays.asList(theFilterIds)); 228 } 229 } 230 231 236 public void setActive(String 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 |