package org.eclipse.team.core.mapping.provider;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.resources.mapping.ResourceTraversal;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.team.core.ICache;
import org.eclipse.team.core.mapping.IResourceDiffTree;
import org.eclipse.team.core.mapping.ISynchronizationContext;
import org.eclipse.team.core.mapping.ISynchronizationScope;
import org.eclipse.team.core.mapping.ISynchronizationScopeManager;
import org.eclipse.team.internal.core.Cache;
import org.eclipse.team.internal.core.Policy;
public abstract class SynchronizationContext extends PlatformObject implements ISynchronizationContext {
private final int type;
private final IResourceDiffTree diffTree;
private Cache cache;
private final ISynchronizationScopeManager manager;
protected SynchronizationContext(ISynchronizationScopeManager manager, int type, IResourceDiffTree diffTree) {
this.manager = manager;
this.type = type;
this.diffTree = diffTree;
}
@Override
public ISynchronizationScope getScope() {
return getScopeManager().getScope();
}
public ISynchronizationScopeManager getScopeManager() {
return manager;
}
@Override
public int getType() {
return type;
}
@Override
public void dispose() {
if (cache != null) {
cache.dispose();
}
manager.dispose();
}
@Override
public synchronized ICache getCache() {
if (cache == null) {
cache = new Cache();
}
return cache;
}
@Override
public IResourceDiffTree getDiffTree() {
return diffTree;
}
@Override
public void refresh(ResourceMapping[] mappings, IProgressMonitor monitor) throws CoreException {
monitor.beginTask(null, 100);
ISynchronizationScopeManager manager = getScopeManager();
if (manager == null) {
refresh(getScope().getTraversals(), IResource.NONE, Policy.subMonitorFor(monitor, 50));
} else {
ResourceTraversal[] traversals = manager.refresh(mappings, Policy.subMonitorFor(monitor, 50));
if (traversals.length > 0)
refresh(traversals, IResource.NONE, Policy.subMonitorFor(monitor, 50));
}
monitor.done();
}
}