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.core.synchronize; 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.resources.IResource; import org.eclipse.team.core.ITeamStatus;
This event keeps track of the changes in a SyncInfoSet
See Also:
Since:3.5
/** * This event keeps track of the changes in a {@link SyncInfoSet} * * @see SyncInfoSet * @since 3.5 */
public class SyncInfoSetChangeEvent implements ISyncInfoSetChangeEvent { private SyncInfoSet set; // List that accumulate changes // SyncInfo private Map<IResource, SyncInfo> changedResources = new HashMap<>(); private Set<IResource> removedResources = new HashSet<>(); private Map<IResource, SyncInfo> addedResources = new HashMap<>(); private boolean reset = false; private List<ITeamStatus> errors = new ArrayList<>(); public SyncInfoSetChangeEvent(SyncInfoSet set) { super(); this.set = set; } public void added(SyncInfo info) { if (removedResources.contains(info.getLocal())) { // A removal followed by an addition is treated as a change removedResources.remove(info.getLocal()); changed(info); } else { addedResources.put(info.getLocal(), info); } } public void removed(IResource resource) { if (changedResources.containsKey(resource)) { // No use in reporting the change since it has subsequently been removed changedResources.remove(resource); } else if (addedResources.containsKey(resource)) { // An addition followed by a removal can be dropped addedResources.remove(resource); return; } removedResources.add(resource); } public void changed(SyncInfo info) { IResource resource = info.getLocal(); if (addedResources.containsKey(resource)) { // An addition followed by a change is an addition addedResources.put(resource, info); return; } changedResources.put(resource, info); } @Override public SyncInfo[] getAddedResources() { return addedResources.values().toArray(new SyncInfo[addedResources.size()]); } @Override public SyncInfo[] getChangedResources() { return changedResources.values().toArray(new SyncInfo[changedResources.size()]); } @Override public IResource[] getRemovedResources() { return removedResources.toArray(new IResource[removedResources.size()]); } @Override public SyncInfoSet getSet() { return set; } public void reset() { reset = true; } public boolean isReset() { return reset; } public boolean isEmpty() { return changedResources.isEmpty() && removedResources.isEmpty() && addedResources.isEmpty() && errors.isEmpty(); } public void errorOccurred(ITeamStatus status) { errors.add(status); } public ITeamStatus[] getErrors() { return errors.toArray(new ITeamStatus[errors.size()]); } }