blob: 1c04a4ae1da8c5828b73ee1fe03bb58867f05043 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2008 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.core.mapping;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.mapping.ModelProvider;
import org.eclipse.core.resources.mapping.RemoteResourceMappingContext;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.resources.mapping.ResourceMappingContext;
import org.eclipse.core.resources.mapping.ResourceTraversal;
/**
* Interface which defines the protocol for translating a set of
* <code>ResourceMapping</code> objects representing a view selection into the
* complete set of resources to be operated on.
*
* @see org.eclipse.core.resources.mapping.ResourceMapping
* @see ISynchronizationScopeManager
*
* @since 3.2
* @noimplement This interface is not intended to be implemented by clients.
* Instead, clients should use a
* {@link ISynchronizationScopeManager} to generate a resource
* mapping scope from a set of input resource mappings.
*/
public interface ISynchronizationScope {
/**
* Return the projects that bound this scope.
* The projects returned will depend on the type of context used
* to generate this scope. If the context is a local context,
* all workspace projects are returned. If it is a remote context,
* the projects are the same as those returned from
* {@link RemoteResourceMappingContext#getProjects()}
* @return the projects that bound this scope
*/
IProject[] getProjects();
/**
* Return the resource mapping context that the scope
* uses to obtain traversals from resource mappings
* in order to determine what resources are in the scope.
*
* @see ResourceMapping#getTraversals(ResourceMappingContext, org.eclipse.core.runtime.IProgressMonitor)
*
* @return the resource mapping context that the scope
* uses to obtain traversals from resource mappings
*/
ResourceMappingContext getContext();
/**
* Return the array of mappings that acted as the input to the scope builder
* that was used to build this scope. This set usually come from a view
* selection but could come from another source. In most cases, clients will
* want to call the {@link #getMappings()} method instead of this one as it
* returns the complete set of mappings to be operated on.
*
* @return the set of mappings that acted as the input to the scope builder
* that was used to build this scope
*/
public ResourceMapping[] getInputMappings();
/**
* Return a scope that only contains the input mappings of this
* scope.
* @return a scope that only contains the input mappings of this
* scope
*/
public ISynchronizationScope asInputScope();
/**
* Return an array of all of the mappings to be operated on. The returned
* mappings were included in the operation during the scope building
* process. The returned mappings may be the same as the input mappings but
* may also be a super set. Clients can call the
* {@link #hasAdditionalMappings()} method to determine if the two sets are
* the same or not.
*
* @return an array of all of the mappings to be operated on.
*/
public ResourceMapping[] getMappings();
/**
* Return an array of traversals that cover the resource mappings to be
* operated on as returned by the {@link #getMappings()} method. The
* traversals were calculated during the scope building process and cached
* with the scope.
*
* @return the complete set of mappings to be operated on
*/
public ResourceTraversal[] getTraversals();
/**
* Return the resources that are the roots of this scope.
* The roots are determined by collecting the roots of
* the traversals that define this scope.
* @return the resources that are the roots of this scope
*/
public IResource[] getRoots();
/**
* Return whether the given resource is contained in this scope.
* A resource is contained by the scope if it is contained in at
* least one of the traversals that define this scope.
* @param resource the resource to be tested
* @return whether the given resource is contained in this scope
*/
public boolean contains(IResource resource);
/**
* Add a scope change listener that will get invoked when a
* property of the receiver changes. Adding a listener that is
* already added has no effect.
*
* @param listener the listener to be added
*/
public void addScopeChangeListener(ISynchronizationScopeChangeListener listener);
/**
* Remove a scope change listener. Removing an unregistered listener
* has no effect.
*
* @param listener the listener to be removed
*/
public void removeScopeChangeListener(ISynchronizationScopeChangeListener listener);
/**
* Return an array of traversals that cover the given resource mapping to be
* operated on. The traversals were calculated during the scope building
* process and cached with the scope.
*
* @param mapping a resource mapping being operated on
* @return the traversals that cover the given resource mapping (or
* <code>null</code> if the mapping is not contained in the input)
*/
public ResourceTraversal[] getTraversals(ResourceMapping mapping);
/**
* Return whether the scope has additional mappings added to the input
* mappings during the scope building process.
*
* @return whether the input has additional mappings added to the seed
* mappings
*/
public boolean hasAdditionalMappings();
/**
* Return whether the scope has additional resources added due to additional
* resource mappings.
*
* @return whether the input has additional resources added due to
* additional resource mappings
*/
public boolean hasAdditonalResources();
/**
* Return all the model providers that have mappings in this scope.
*
* @return all the model providers that have mappings in this scope
*/
public ModelProvider[] getModelProviders();
/**
* Return all the mappings to be operated on for the given model provider
* id.
*
* @param modelProviderId the id of the model provider
* @return all the mappings for the given model provider id
*/
public ResourceMapping[] getMappings(String modelProviderId);
/**
* Return the set of traversals that cover the mappings for
* the given model provider.
* @param modelProviderId the model provider id
* @return the set of traversals that cover the mappings for
* the given model provider
*/
public ResourceTraversal[] getTraversals(String modelProviderId);
/**
* Return the resource mapping in the scope associated with the given model
* object or <code>null</code> if there isn't one. This method has no knowledge
* of hierarchical models so it only matches directly against the mappings
* that are contained in the scope.
* @param modelObject the model object
* @return the mapping for the model object that is contained in this scope
*/
public ResourceMapping getMapping(Object modelObject);
/**
* Refresh the given mapping asynchronously. This method
* is called by {@link ISynchronizationScopeParticipant}
* instances when they detect changes that require the scope
* to be adjusted.
* @param mappings the mappings to be refreshed.
*/
void refresh(ResourceMapping[] mappings);
}