1 11 package org.eclipse.team.internal.core.subscribers; 12 13 import java.util.*; 14 15 import org.eclipse.core.resources.IResource; 16 import org.eclipse.team.core.TeamException; 17 import org.eclipse.team.core.subscribers.*; 18 import org.eclipse.team.core.synchronize.*; 19 import org.eclipse.team.internal.core.TeamPlugin; 20 21 24 public class SyncInfoWorkingSetFilter extends FastSyncInfoFilter { 25 26 private IResource[] resources; 27 28 31 public boolean select(SyncInfo info) { 32 if (isEmpty()) return true; 34 return isIncluded(info.getLocal()); 35 } 36 37 40 private boolean isIncluded(IResource resource) { 41 for (int i = 0; i < resources.length; i++) { 44 IResource setResource = resources[i]; 45 if (isParent(setResource, resource)) { 46 return true; 47 } 48 } 49 return false; 50 } 51 52 private boolean isParent(IResource parent, IResource child) { 53 return (parent.getFullPath().isPrefixOf(child.getFullPath())); 54 } 55 56 59 public IResource[] getRoots(Subscriber subscriber) { 60 IResource[] roots = subscriber.roots(); 61 if (isEmpty()) return roots; 62 63 Set result = new HashSet(); 65 for (int i = 0; i < roots.length; i++) { 66 IResource resource = roots[i]; 67 result.addAll(Arrays.asList(getIntersectionWithSet(subscriber, resource))); 68 } 69 return (IResource[]) result.toArray(new IResource[result.size()]); 70 } 71 72 76 private IResource[] getIntersectionWithSet(Subscriber subscriber, IResource resource) { 77 List result = new ArrayList(); 78 for (int i = 0; i < resources.length; i++) { 79 IResource setResource = resources[i]; 80 if (setResource != null) { 81 if (isParent(resource, setResource)) { 82 try { 83 if (subscriber.isSupervised(setResource)) { 84 result.add(setResource); 85 } 86 } catch (TeamException e) { 87 TeamPlugin.log(e); 89 result.add(setResource); 90 } 91 } else if (isParent(setResource, resource)) { 92 result.add(resource); 93 } 94 } 95 } 96 return (IResource[]) result.toArray(new IResource[result.size()]); 97 } 98 99 public void setWorkingSet(IResource[] resources) { 100 this.resources = resources; 101 } 102 103 public IResource[] getWorkingSet() { 104 return this.resources; 105 } 106 107 private boolean isEmpty() { 108 return resources == null || resources.length == 0; 109 } 110 } 111 | Popular Tags |