1 11 package org.eclipse.debug.internal.ui.launchConfigurations; 12 13 import java.util.ArrayList ; 14 15 import org.eclipse.core.resources.IResource; 16 import org.eclipse.core.runtime.CoreException; 17 import org.eclipse.core.runtime.IAdaptable; 18 import org.eclipse.debug.core.ILaunchConfiguration; 19 import org.eclipse.debug.core.ILaunchConfigurationType; 20 import org.eclipse.debug.internal.ui.DebugUIPlugin; 21 import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; 22 import org.eclipse.jface.viewers.Viewer; 23 import org.eclipse.jface.viewers.ViewerFilter; 24 import org.eclipse.ui.IWorkbenchPage; 25 import org.eclipse.ui.IWorkbenchWindow; 26 import org.eclipse.ui.IWorkingSet; 27 28 34 public class WorkingSetsFilter extends ViewerFilter { 35 36 39 public boolean select(Viewer viewer, Object parentElement, Object element) { 40 if(element instanceof ILaunchConfigurationType) { 41 return true; 42 } 43 if(element instanceof ILaunchConfiguration) { 44 ILaunchConfiguration config = (ILaunchConfiguration)element; 45 try { 46 IResource[] resources = config.getMappedResources(); 47 if(resources == null) { 48 return true; 49 } 50 IWorkbenchWindow window = DebugUIPlugin.getActiveWorkbenchWindow(); 51 if(window == null) { 52 return true; 53 } 54 IWorkbenchPage page = window.getActivePage(); 55 if(page == null) { 56 return true; 57 } 58 IWorkingSet[] wsets = page.getWorkingSets(); 59 if(wsets.length < 1) { 60 return true; 61 } 62 ArrayList ws = new ArrayList (); 64 for (int i = 0; i < wsets.length; i++) { 65 if(!IInternalDebugUIConstants.ID_BREAKPOINT_WORKINGSET.equals(wsets[i].getId())) { 66 ws.add(wsets[i]); 67 } 68 } 69 if(ws.isEmpty()) { 70 return true; 71 } 72 for (int i = 0; i < resources.length; i++) { 73 if(workingSetContains((IWorkingSet[]) ws.toArray(new IWorkingSet[ws.size()]), resources[i])) { 74 return true; 75 } 76 } 77 } 78 catch (CoreException e) {} 79 } 80 return false; 81 } 82 83 90 public static boolean workingSetContains(IWorkingSet[] wsets, IResource res) { 91 ArrayList parents = new ArrayList (); 92 parents.add(res); 93 while(res != null) { 94 res = res.getParent(); 95 if(res != null) { 96 parents.add(res); 97 } 98 } 99 IResource lres = null; 100 for(int i = 0; i < wsets.length; i++) { 101 IAdaptable[] elements = wsets[i].getElements(); 102 for(int j = 0; j < elements.length; j++) { 103 lres = (IResource)elements[j].getAdapter(IResource.class); 104 if(lres != null) { 105 if(parents.contains(lres)) { 106 return true; 107 } 108 } 109 } 110 } 111 return false; 112 } 113 114 } 115 | Popular Tags |