Copyright (c) 2000, 2017 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.core.subscribers;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.resources.mapping.ResourceMappingContext;
import org.eclipse.core.resources.mapping.ResourceTraversal;
import org.eclipse.team.core.mapping.ISynchronizationScope;
import org.eclipse.team.internal.core.mapping.AbstractResourceMappingScope;
A synchronization scope for a set of resources.
/**
* A synchronization scope for a set of resources.
*/
public class RootResourceSynchronizationScope extends AbstractResourceMappingScope {
private IResource[] roots;
public RootResourceSynchronizationScope(IResource[] roots) {
this.roots = roots;
}
@Override
public ResourceTraversal[] getTraversals() {
return new ResourceTraversal[] {new ResourceTraversal(roots, IResource.DEPTH_INFINITE, IResource.NONE)};
}
Set the traversal of this scope to a single traversal
of infinite depth on the given resources.
Params: - roots – the new roots of the scope
/**
* Set the traversal of this scope to a single traversal
* of infinite depth on the given resources.
* @param roots the new roots of the scope
*/
public void setRoots(IResource[] roots) {
this.roots = roots;
fireTraversalsChangedEvent(getTraversals(), getMappings());
}
@Override
public ResourceMapping[] getInputMappings() {
return getMappings();
}
@Override
public ISynchronizationScope asInputScope() {
return this;
}
@Override
public ResourceMapping[] getMappings() {
List<ResourceMapping> result = new ArrayList<>();
for (IResource resource : roots) {
Object o = resource.getAdapter(ResourceMapping.class);
if (o instanceof ResourceMapping) {
result.add((ResourceMapping) o);
}
}
return result.toArray(new ResourceMapping[result.size()]);
}
@Override
public ResourceTraversal[] getTraversals(ResourceMapping mapping) {
Object object = mapping.getModelObject();
if (object instanceof IResource) {
IResource resource = (IResource) object;
return new ResourceTraversal[] {new ResourceTraversal(new IResource[] { resource }, IResource.DEPTH_INFINITE, IResource.NONE)};
}
return null;
}
@Override
public boolean hasAdditionalMappings() {
return false;
}
@Override
public boolean hasAdditonalResources() {
return false;
}
@Override
public IProject[] getProjects() {
return ResourcesPlugin.getWorkspace().getRoot().getProjects();
}
@Override
public ResourceMappingContext getContext() {
return ResourceMappingContext.LOCAL_CONTEXT;
}
@Override
public void refresh(ResourceMapping[] mappings) {
// Not supported
}
}