| /******************************************************************************* |
| * Copyright (c) 2007, 2017 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.internal.core.mapping; |
| |
| import java.util.*; |
| |
| import org.eclipse.core.resources.mapping.ResourceMapping; |
| import org.eclipse.core.resources.mapping.ResourceTraversal; |
| import org.eclipse.team.core.mapping.ISynchronizationScope; |
| |
| public class ScopeChangeEvent { |
| |
| private final ISynchronizationScope scope; |
| private final ResourceMapping[] originalMappings; |
| private final ResourceTraversal[] originalTraversals; |
| private boolean expanded; |
| private boolean contracted; |
| |
| public ScopeChangeEvent(ISynchronizationScope scope) { |
| this.scope = scope; |
| originalMappings = scope.getMappings(); |
| originalTraversals = scope.getTraversals(); |
| } |
| |
| public boolean hasAdditionalMappings() { |
| return scope.getMappings().length > originalMappings.length; |
| } |
| |
| public ResourceTraversal[] getUncoveredTraversals(CompoundResourceTraversal traversal) { |
| CompoundResourceTraversal originals = new CompoundResourceTraversal(); |
| originals.addTraversals(originalTraversals); |
| return originals.getUncoveredTraversals(traversal); |
| } |
| |
| public void setExpanded(boolean expanded) { |
| this.expanded = expanded; |
| } |
| |
| public boolean isExpanded() { |
| return expanded; |
| } |
| |
| public void setContracted(boolean contracted) { |
| this.contracted = contracted; |
| } |
| |
| public boolean isContracted() { |
| return contracted; |
| } |
| |
| public ResourceMapping[] getChangedMappings() { |
| ResourceMapping[] currentMappings = scope.getMappings(); |
| ResourceMapping[] changedMappings; |
| if (currentMappings.length > originalMappings.length) { |
| // The number of mappings has increased so we should report the new mappings |
| Set<ResourceMapping> originalSet = new HashSet<>(); |
| List<ResourceMapping> result = new ArrayList<>(); |
| for (int i = 0; i < originalMappings.length; i++) { |
| ResourceMapping mapping = originalMappings[i]; |
| originalSet.add(mapping); |
| } |
| for (int i = 0; i < currentMappings.length; i++) { |
| ResourceMapping mapping = currentMappings[i]; |
| if (!originalSet.contains(mapping)) { |
| result.add(mapping); |
| } |
| } |
| changedMappings = result.toArray(new ResourceMapping[result.size()]); |
| } else if (isContracted()) { |
| // The number of mappings may be smaller so report the removed mappings |
| Set<ResourceMapping> finalSet = new HashSet<>(); |
| List<ResourceMapping> result = new ArrayList<>(); |
| for (int i = 0; i < currentMappings.length; i++) { |
| ResourceMapping mapping = currentMappings[i]; |
| finalSet.add(mapping); |
| } |
| for (int i = 0; i < originalMappings.length; i++) { |
| ResourceMapping mapping = originalMappings[i]; |
| if (!finalSet.contains(mapping)) { |
| result.add(mapping); |
| } |
| } |
| changedMappings = result.toArray(new ResourceMapping[result.size()]); |
| } else { |
| changedMappings = new ResourceMapping[0]; |
| } |
| return changedMappings; |
| } |
| |
| public ResourceTraversal[] getChangedTraversals(CompoundResourceTraversal refreshTraversals) { |
| ResourceTraversal[] changesTraversals; |
| if (isExpanded()) { |
| changesTraversals = getUncoveredTraversals(refreshTraversals); |
| } else if (isContracted()) { |
| CompoundResourceTraversal finalTraversals = new CompoundResourceTraversal(); |
| finalTraversals.addTraversals(scope.getTraversals()); |
| changesTraversals = finalTraversals.getUncoveredTraversals(originalTraversals); |
| } else { |
| changesTraversals = new ResourceTraversal[0]; |
| } |
| return changesTraversals; |
| } |
| |
| public boolean shouldFireChange() { |
| return isExpanded() || isContracted() || hasAdditionalMappings(); |
| } |
| } |