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.mapping; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.team.core.diff.IDiff; import org.eclipse.team.core.diff.IDiffChangeEvent; import org.eclipse.team.core.diff.IDiffTree;
Implementation of IDiffChangeEvent
/** * Implementation of {@link IDiffChangeEvent} */
public class DiffChangeEvent implements IDiffChangeEvent { private final IDiffTree tree; // List that accumulate changes // SyncInfo private Map<IPath, IDiff> changedResources = new HashMap<>(); private Set<IPath> removedResources = new HashSet<>(); private Map<IPath, IDiff> addedResources = new HashMap<>(); private boolean reset = false; private List<IStatus> errors = new ArrayList<>();
Create a diff change event
Params:
  • tree – the originating tree
/** * Create a diff change event * @param tree the originating tree */
public DiffChangeEvent(IDiffTree tree) { this.tree = tree; } @Override public IDiffTree getTree() { return tree; } @Override public IDiff[] getAdditions() { return addedResources.values().toArray(new IDiff[addedResources.size()]); } @Override public IPath[] getRemovals() { return removedResources.toArray(new IPath[removedResources.size()]); } @Override public IDiff[] getChanges() { return changedResources.values().toArray(new IDiff[changedResources.size()]); } public void added(IDiff delta) { if (removedResources.contains(delta.getPath())) { // A removal followed by an addition is treated as a change removedResources.remove(delta.getPath()); changed(delta); } else { addedResources.put(delta.getPath(), delta); } } public void removed(IPath path, IDiff delta) { if (changedResources.containsKey(path)) { // No use in reporting the change since it has subsequently been removed changedResources.remove(path); } else if (addedResources.containsKey(path)) { // An addition followed by a removal can be dropped addedResources.remove(path); return; } removedResources.add(path); } public void changed(IDiff delta) { if (addedResources.containsKey(delta.getPath())) { // An addition followed by a change is an addition addedResources.put(delta.getPath(), delta); return; } changedResources.put(delta.getPath(), delta); } public void reset() { reset = true; } public boolean isReset() { return reset; } public boolean isEmpty() { return changedResources.isEmpty() && removedResources.isEmpty() && addedResources.isEmpty(); } public void errorOccurred(IStatus status) { errors .add(status); } @Override public IStatus[] getErrors() { return errors.toArray(new IStatus[errors.size()]); } }