1 11 package org.eclipse.team.internal.ui.synchronize; 12 13 import java.util.ArrayList ; 14 import java.util.Iterator ; 15 import java.util.List ; 16 17 import org.eclipse.core.resources.IResource; 18 import org.eclipse.team.core.subscribers.ISubscriberChangeEvent; 19 import org.eclipse.team.core.subscribers.ISubscriberChangeListener; 20 import org.eclipse.team.core.synchronize.SyncInfo; 21 import org.eclipse.team.core.synchronize.SyncInfoSet; 22 import org.eclipse.team.internal.core.subscribers.SubscriberSyncInfoCollector; 23 import org.eclipse.team.internal.ui.synchronize.RefreshParticipantJob.IChangeDescription; 24 25 public class RefreshChangeListener implements ISubscriberChangeListener, IChangeDescription { 26 private List changes = new ArrayList (); 27 private SubscriberSyncInfoCollector collector; 28 private IResource[] resources; 29 30 public RefreshChangeListener(IResource[] resources, SubscriberSyncInfoCollector collector) { 31 this.resources = resources; 32 this.collector = collector; 33 } 34 public void subscriberResourceChanged(ISubscriberChangeEvent[] deltas) { 35 for (int i = 0; i < deltas.length; i++) { 36 ISubscriberChangeEvent delta = deltas[i]; 37 if (delta.getFlags() == ISubscriberChangeEvent.SYNC_CHANGED) { 38 changes.add(delta); 39 } 40 } 41 } 42 public SyncInfo[] getChanges() { 43 List changedSyncInfos = new ArrayList (); 44 SyncInfoSet set = collector.getSyncInfoSet(); 45 for (Iterator it = changes.iterator(); it.hasNext();) { 46 ISubscriberChangeEvent delta = (ISubscriberChangeEvent) it.next(); 47 SyncInfo info = set.getSyncInfo(delta.getResource()); 48 if (info != null && interestingChange(info)) { 49 changedSyncInfos.add(info); 50 } 51 } 52 return (SyncInfo[]) changedSyncInfos.toArray(new SyncInfo[changedSyncInfos.size()]); 53 } 54 55 private boolean interestingChange(SyncInfo info) { 56 int kind = info.getKind(); 57 if(isThreeWay()) { 58 int direction = SyncInfo.getDirection(kind); 59 return (direction == SyncInfo.INCOMING || direction == SyncInfo.CONFLICTING); 60 } else { 61 return SyncInfo.getChange(kind) != SyncInfo.IN_SYNC; 62 } 63 } 64 65 private boolean isThreeWay() { 66 return collector.getSubscriber().getResourceComparator().isThreeWay(); 67 } 68 public int getChangeCount() { 69 return getChanges().length; 70 } 71 public IResource[] getResources() { 72 return resources; 73 } 74 } 75 | Popular Tags |