Copyright (c) 2000, 2015 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 Lars Vogel - Bug 473427
/******************************************************************************* * Copyright (c) 2000, 2015 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 * Lars Vogel <Lars.Vogel@vogella.com> - Bug 473427 *******************************************************************************/
package org.eclipse.core.internal.localstore; import java.util.ArrayList; import java.util.List; import org.eclipse.core.internal.resources.*; import org.eclipse.core.internal.utils.Messages; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.*; import org.eclipse.osgi.util.NLS; //
Visits a unified tree, and collects local sync information in a multi-status. At the end of the visit, the resource tree will NOT be synchronized with the file system, but all discrepancies between the two will be recorded in the returned status.
/** * Visits a unified tree, and collects local sync information in * a multi-status. At the end of the visit, the resource tree will NOT * be synchronized with the file system, but all discrepancies between * the two will be recorded in the returned status. */
public class CollectSyncStatusVisitor extends RefreshLocalVisitor { protected List<Resource> affectedResources;
Determines how to treat cases where the resource is missing from the local file system. When performing a deletion with force=false, we don't care about files that are out of sync because they do not exist in the file system.
/** * Determines how to treat cases where the resource is missing from * the local file system. When performing a deletion with force=false, * we don't care about files that are out of sync because they do not * exist in the file system. */
private boolean ignoreLocalDeletions = false; protected MultiStatus status;
Creates a new visitor, whose sync status will have the given title.
/** * Creates a new visitor, whose sync status will have the given title. */
public CollectSyncStatusVisitor(String multiStatusTitle, IProgressMonitor monitor) { super(monitor); status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IStatus.INFO, multiStatusTitle, null); } protected void changed(Resource target) { String message = NLS.bind(Messages.localstore_resourceIsOutOfSync, target.getFullPath()); status.add(new ResourceStatus(IResourceStatus.OUT_OF_SYNC_LOCAL, target.getFullPath(), message)); if (affectedResources == null) affectedResources = new ArrayList<>(20); affectedResources.add(target); resourceChanged = true; } @Override protected void createResource(UnifiedTreeNode node, Resource target) { changed(target); } @Override protected void deleteResource(UnifiedTreeNode node, Resource target) { if (!ignoreLocalDeletions) changed(target); } @Override protected void fileToFolder(UnifiedTreeNode node, Resource target) { changed(target); } @Override protected void folderToFile(UnifiedTreeNode node, Resource target) { changed(target); }
Returns the list of resources that were not synchronized with the local file system, or null if all resources are synchronized.
/** * Returns the list of resources that were not synchronized with * the local file system, or <code>null</code> if all resources * are synchronized. */
public List<Resource> getAffectedResources() { return affectedResources; }
Returns the sync status that has been collected as a result of this visit.
/** * Returns the sync status that has been collected as a result of this visit. */
public MultiStatus getSyncStatus() { return status; } @Override protected void makeLocal(UnifiedTreeNode node, Resource target) { changed(target); } @Override protected void refresh(Container parent) { changed(parent); } @Override protected void resourceChanged(UnifiedTreeNode node, Resource target) { changed(target); }
Instructs this visitor to ignore changes due to local deletions in the file system.
/** * Instructs this visitor to ignore changes due to local deletions * in the file system. */
public void setIgnoreLocalDeletions(boolean value) { this.ignoreLocalDeletions = value; } }