1 11 package org.eclipse.jdt.internal.ui.filters; 12 13 import com.ibm.icu.text.Collator; 14 15 import java.util.ArrayList ; 16 import java.util.HashSet ; 17 import java.util.List ; 18 import java.util.Set ; 19 20 import org.eclipse.core.runtime.Assert; 21 import org.eclipse.core.runtime.IConfigurationElement; 22 import org.eclipse.core.runtime.IExtensionRegistry; 23 import org.eclipse.core.runtime.ISafeRunnable; 24 import org.eclipse.core.runtime.Platform; 25 import org.eclipse.core.runtime.SafeRunner; 26 27 import org.eclipse.jface.util.SafeRunnable; 28 import org.eclipse.jface.viewers.ViewerFilter; 29 30 import org.eclipse.ui.IPluginContribution; 31 import org.eclipse.ui.activities.WorkbenchActivityHelper; 32 33 import org.eclipse.jdt.internal.corext.util.Messages; 34 35 import org.eclipse.jdt.ui.JavaUI; 36 37 43 public class FilterDescriptor implements Comparable , IPluginContribution { 44 45 private static String PATTERN_FILTER_ID_PREFIX= "_patternFilterId_"; 47 48 private static final String EXTENSION_POINT_NAME= "javaElementFilters"; 50 private static final String FILTER_TAG= "filter"; 52 private static final String PATTERN_ATTRIBUTE= "pattern"; private static final String ID_ATTRIBUTE= "id"; 57 private static final String VIEW_ID_ATTRIBUTE= "viewId"; private static final String TARGET_ID_ATTRIBUTE= "targetId"; private static final String CLASS_ATTRIBUTE= "class"; private static final String NAME_ATTRIBUTE= "name"; private static final String ENABLED_ATTRIBUTE= "enabled"; private static final String DESCRIPTION_ATTRIBUTE= "description"; 66 private static final String SELECTED_ATTRIBUTE= "selected"; 68 private static FilterDescriptor[] fgFilterDescriptors; 69 70 71 private IConfigurationElement fElement; 72 73 76 public static FilterDescriptor[] getFilterDescriptors() { 77 if (fgFilterDescriptors == null) { 78 IExtensionRegistry registry= Platform.getExtensionRegistry(); 79 IConfigurationElement[] elements= registry.getConfigurationElementsFor(JavaUI.ID_PLUGIN, EXTENSION_POINT_NAME); 80 fgFilterDescriptors= createFilterDescriptors(elements); 81 } 82 return fgFilterDescriptors; 83 } 84 88 public static FilterDescriptor[] getFilterDescriptors(String targetId) { 89 FilterDescriptor[] filterDescs= FilterDescriptor.getFilterDescriptors(); 90 List result= new ArrayList (filterDescs.length); 91 for (int i= 0; i < filterDescs.length; i++) { 92 String tid= filterDescs[i].getTargetId(); 93 if (WorkbenchActivityHelper.filterItem(filterDescs[i])) 94 continue; 95 if (tid == null || tid.equals(targetId)) 96 result.add(filterDescs[i]); 97 } 98 return (FilterDescriptor[])result.toArray(new FilterDescriptor[result.size()]); 99 } 100 101 104 private FilterDescriptor(IConfigurationElement element) { 105 fElement= element; 106 Assert.isTrue(isPatternFilter() ^ isCustomFilter(), "An extension for extension-point org.eclipse.jdt.ui.javaElementFilters does not specify a correct filter"); Assert.isNotNull(getId(), "An extension for extension-point org.eclipse.jdt.ui.javaElementFilters does not provide a valid ID"); Assert.isNotNull(getName(), "An extension for extension-point org.eclipse.jdt.ui.javaElementFilters does not provide a valid name"); } 111 112 116 public ViewerFilter createViewerFilter() { 117 if (!isCustomFilter()) 118 return null; 119 120 final ViewerFilter[] result= new ViewerFilter[1]; 121 String message= Messages.format(FilterMessages.FilterDescriptor_filterCreationError_message, getId()); 122 ISafeRunnable code= new SafeRunnable(message) { 123 126 public void run() throws Exception { 127 result[0]= (ViewerFilter)fElement.createExecutableExtension(CLASS_ATTRIBUTE); 128 } 129 130 }; 131 SafeRunner.run(code); 132 return result[0]; 133 } 134 135 137 145 public String getId() { 146 if (isPatternFilter()) { 147 String targetId= getTargetId(); 148 if (targetId == null) 149 return PATTERN_FILTER_ID_PREFIX + getPattern(); 150 else 151 return targetId + PATTERN_FILTER_ID_PREFIX + getPattern(); 152 } else 153 return fElement.getAttribute(ID_ATTRIBUTE); 154 } 155 156 163 public String getName() { 164 String name= fElement.getAttribute(NAME_ATTRIBUTE); 165 if (name == null && isPatternFilter()) 166 name= getPattern(); 167 return name; 168 } 169 170 175 public String getPattern() { 176 return fElement.getAttribute(PATTERN_ATTRIBUTE); 177 } 178 179 185 public String getTargetId() { 186 String tid= fElement.getAttribute(TARGET_ID_ATTRIBUTE); 187 188 if (tid != null) 189 return tid; 190 191 return fElement.getAttribute(VIEW_ID_ATTRIBUTE); 193 194 } 195 196 201 public String getDescription() { 202 String description= fElement.getAttribute(DESCRIPTION_ATTRIBUTE); 203 if (description == null) 204 description= ""; return description; 206 } 207 208 211 public boolean isPatternFilter() { 212 return getPattern() != null; 213 } 214 215 218 public boolean isCustomFilter() { 219 return fElement.getAttribute(CLASS_ATTRIBUTE) != null; 220 } 221 222 228 public boolean isEnabled() { 229 String strVal= fElement.getAttribute(ENABLED_ATTRIBUTE); 230 if (strVal == null) 231 strVal= fElement.getAttribute(SELECTED_ATTRIBUTE); 233 return strVal == null || Boolean.valueOf(strVal).booleanValue(); 234 } 235 236 239 public int compareTo(Object o) { 240 if (o instanceof FilterDescriptor) 241 return Collator.getInstance().compare(getName(), ((FilterDescriptor)o).getName()); 242 else 243 return Integer.MIN_VALUE; 244 } 245 246 248 251 private static FilterDescriptor[] createFilterDescriptors(IConfigurationElement[] elements) { 252 List result= new ArrayList (5); 253 Set descIds= new HashSet (5); 254 for (int i= 0; i < elements.length; i++) { 255 final IConfigurationElement element= elements[i]; 256 if (FILTER_TAG.equals(element.getName())) { 257 258 final FilterDescriptor[] desc= new FilterDescriptor[1]; 259 SafeRunner.run(new SafeRunnable(FilterMessages.FilterDescriptor_filterDescriptionCreationError_message) { 260 public void run() throws Exception { 261 desc[0]= new FilterDescriptor(element); 262 } 263 }); 264 265 if (desc[0] != null && !descIds.contains(desc[0].getId())) { 266 result.add(desc[0]); 267 descIds.add(desc[0].getId()); 268 } 269 } 270 } 271 return (FilterDescriptor[])result.toArray(new FilterDescriptor[result.size()]); 272 } 273 274 public String getLocalId() { 275 return fElement.getAttribute(ID_ATTRIBUTE); 276 } 277 278 public String getPluginId() { 279 return fElement.getContributor().getName(); 280 } 281 } 282 | Popular Tags |