KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > team > internal > ui > synchronize > RefreshChangeListener


1 /*******************************************************************************
2  * Copyright (c) 2003, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.team.internal.ui.synchronize;
12
13 import java.util.ArrayList JavaDoc;
14 import java.util.Iterator JavaDoc;
15 import java.util.List JavaDoc;
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 JavaDoc changes = new ArrayList JavaDoc();
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 JavaDoc changedSyncInfos = new ArrayList JavaDoc();
44         SyncInfoSet set = collector.getSyncInfoSet();
45         for (Iterator JavaDoc 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