Copyright (c) 2007, 2008 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) 2007, 2008 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.ltk.internal.core.refactoring.resource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.resources.IResource; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.resource.DeleteResourceChange; import org.eclipse.ltk.core.refactoring.resource.ResourceChange; import org.eclipse.ltk.internal.core.refactoring.BasicElementLabels; import org.eclipse.ltk.internal.core.refactoring.Messages; import org.eclipse.ltk.internal.core.refactoring.RefactoringCoreMessages; import org.eclipse.ltk.internal.core.refactoring.RefactoringCorePlugin; import org.eclipse.ltk.internal.core.refactoring.resource.undostates.ResourceUndoState;
Undo a resource delete change. This uses the ResourceUndoState to reverse the change.
Since:3.4
/** * Undo a resource delete change. This uses the {@link ResourceUndoState} * to reverse the change. * * @since 3.4 */
public class UndoDeleteResourceChange extends Change { private final ResourceUndoState fResourceState; public UndoDeleteResourceChange(ResourceUndoState resourceDescription) { fResourceState= resourceDescription; } @Override public void initializeValidationData(IProgressMonitor pm) { } @Override public Object getModifiedElement() { return null; } @Override public String getName() { return Messages.format(RefactoringCoreMessages.UndoDeleteResourceChange_change_name, BasicElementLabels.getResourceName(fResourceState.getName())); } @Override public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException { if (!fResourceState.isValid()) { return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.UndoDeleteResourceChange_cannot_restore, BasicElementLabels.getResourceName(fResourceState.getName()))); } return new RefactoringStatus(); } @Override public Change perform(IProgressMonitor pm) throws CoreException { if (fResourceState.verifyExistence(true)) { String message= Messages.format(RefactoringCoreMessages.UndoDeleteResourceChange_already_exists, BasicElementLabels.getResourceName(fResourceState.getName())); throw new CoreException(new Status(IStatus.ERROR, RefactoringCorePlugin.getPluginId(), message)); } IResource created= fResourceState.createResource(pm); created.refreshLocal(IResource.DEPTH_INFINITE, new SubProgressMonitor(pm, 1)); DeleteResourceChange change= new DeleteResourceChange(created.getFullPath(), true, false); change.setValidationMethod(ResourceChange.VALIDATE_NOT_READ_ONLY | ResourceChange.VALIDATE_NOT_DIRTY); return change; } @Override public String toString() { return Messages.format(RefactoringCoreMessages.UndoDeleteResourceChange_revert_resource, fResourceState.getName()); } }