blob: e6aee80568a5018728fcd6f5a4a1ea0e61d57893 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.core.mapping;
import java.util.EventListener;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.resources.mapping.ResourceTraversal;
/**
* Listener for synchronization scope changes.
* <p>
* Clients may implement this interface.
* </p>
*
* @see ISynchronizationScope
*
* @since 3.2
*/
public interface ISynchronizationScopeChangeListener extends EventListener {
/**
* Notification that the scope has changed. The change may be the inclusion
* of new resource mappings, new resource traversals or both or the removal
* of mappings (in which case the given traversals will cover the set of
* resources that are no longer in the scope). This can be due to changes to
* the resource mappings used to calculate the traversals of the scope or
* because new resources have come under the control of the repository
* provider (or other entity) that generated the scope in the first place.
* Clients can determine whether a given mappings were removed by querying
* the scope for traversals. If the mapping has no traversals, the mapping
* represents a removal.
* <p>
* Clients can use the following rules to interpret the change:
* <ol>
* <li>If the mappings are not empty, clients should check to see if the
* the scope contains traversals for the any of the mappings. If it does,
* the given mappings have been added to the scope. If it doesn't the
* mappings represent removals. A change event will never include both new
* and removed mappings.
* <li>If the mappings are added mappings, and the traversals are empty,
* then the addition of the mappings did not change the resources covered by
* the scope.
* <li>If the mappings are added mappings, and the traversals are not
* empty, then the additional mappings also caused additional resources to
* be included in the scope. The given traversals cover the resources that
* have been added to the scope.
* <li>If the mappings are removed mappings, and the traversals are not
* empty, then the removed mappings also caused resources to be removed from
* the scope. The given traversals cover the resources that have been
* removed to the scope.
* <li>If the mappings are empty and the traversals are not, the traversals
* cover resources that have been added to the scope due to a change in the
* logical model or the resource under the control of the repository
* providers that manages the scope.
* </ol>
*
* @param scope
* the scope that has changed
* @param mappings
* the new mappings or removed mappings (may be empty)
* @param traversals
* the new traversals or removed traversals (may be empty)
*/
void scopeChanged(ISynchronizationScope scope, ResourceMapping[] mappings,
ResourceTraversal[] traversals);
}