1 11 package org.eclipse.ui; 12 13 import org.eclipse.core.resources.IResource; 14 import org.eclipse.core.runtime.IAdaptable; 15 import org.eclipse.core.runtime.IPath; 16 import org.eclipse.jface.viewers.Viewer; 17 import org.eclipse.jface.viewers.ViewerFilter; 18 19 25 public class ResourceWorkingSetFilter extends ViewerFilter { 26 private IWorkingSet workingSet = null; 27 28 private IAdaptable[] cachedWorkingSet = null; 29 30 35 public IWorkingSet getWorkingSet() { 36 return workingSet; 37 } 38 39 44 public void setWorkingSet(IWorkingSet workingSet) { 45 this.workingSet = workingSet; 46 } 47 48 53 public boolean select(Viewer viewer, Object parentElement, Object element) { 54 IResource resource = null; 55 56 if (workingSet == null) { 57 return true; 58 } 59 if (element instanceof IResource) { 60 resource = (IResource) element; 61 } else if (element instanceof IAdaptable) { 62 IAdaptable adaptable = (IAdaptable) element; 63 resource = (IResource) adaptable.getAdapter(IResource.class); 64 } 65 if (resource != null) { 66 return isEnclosed(resource); 67 } 68 return true; 69 } 70 71 82 private boolean isEnclosed(IResource element) { 83 IPath elementPath = element.getFullPath(); 84 IAdaptable[] workingSetElements = cachedWorkingSet; 85 86 if (workingSetElements == null) { 89 workingSetElements = workingSet.getElements(); 90 } 91 92 for (int i = 0; i < workingSetElements.length; i++) { 93 IAdaptable workingSetElement = workingSetElements[i]; 94 IContainmentAdapter containmentAdapter = (IContainmentAdapter) workingSetElement 95 .getAdapter(IContainmentAdapter.class); 96 97 if (containmentAdapter != null) { 101 if (containmentAdapter.contains(workingSetElement, element, 102 IContainmentAdapter.CHECK_CONTEXT 103 | IContainmentAdapter.CHECK_IF_CHILD 104 | IContainmentAdapter.CHECK_IF_ANCESTOR 105 | IContainmentAdapter.CHECK_IF_DESCENDANT)) { 106 return true; 107 } 108 } else if (isEnclosedResource(element, elementPath, 109 workingSetElement)) { 110 return true; 111 } 112 } 113 return false; 114 } 115 116 130 private boolean isEnclosedResource(IResource element, IPath elementPath, 131 IAdaptable workingSetElement) { 132 IResource workingSetResource = null; 133 134 if (workingSetElement.equals(element)) { 135 return true; 136 } 137 if (workingSetElement instanceof IResource) { 138 workingSetResource = (IResource) workingSetElement; 139 } else { 140 workingSetResource = (IResource) workingSetElement 141 .getAdapter(IResource.class); 142 } 143 if (workingSetResource != null) { 144 IPath resourcePath = workingSetResource.getFullPath(); 145 if (resourcePath.isPrefixOf(elementPath)) { 146 return true; 147 } 148 if (elementPath.isPrefixOf(resourcePath)) { 149 return true; 150 } 151 } 152 return false; 153 } 154 155 161 public Object [] filter(Viewer viewer, Object parent, Object [] elements) { 162 Object [] result = null; 163 if (workingSet != null) { 164 cachedWorkingSet = workingSet.getElements(); 165 } 166 try { 167 result = super.filter(viewer, parent, elements); 168 } finally { 169 cachedWorkingSet = null; 170 } 171 return result; 172 } 173 } 174
| Popular Tags
|