/*******************************************************************************
* Copyright (c) 2007, 2008 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.ltk.internal.core.refactoring.resource.undostates;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
/**
* {@link ResourceUndoState} is a lightweight state object that describes the common
* attributes of a resource to be created.
*
* This class is not intended to be extended by clients.
*
* @since 3.4
*
*/
public abstract class ResourceUndoState {
/**
* Create a {@link ResourceUndoState} object given the specified resource. The resource
* is assumed to exist.
*
* @param resource
* the resource from which a state should be created
* @return the resource state
*/
public static ResourceUndoState fromResource(IResource resource) {
if (resource.getType() == IResource.PROJECT) {
return new ProjectUndoState((IProject) resource);
} else if (resource.getType() == IResource.FOLDER) {
return new FolderUndoState((IFolder) resource);
} else if (resource.getType() == IResource.FILE) {
return new FileUndoState((IFile) resource);
} else {
throw new IllegalArgumentException();
}
}
/**
* Create a resource handle that can be used to create a resource from this
* resource state. This handle can be used to create the actual
* resource, or to describe the creation to a resource delta factory.
*
* @return the resource handle that can be used to create a resource from
* this state object
*/
public abstract IResource createResourceHandle();
/**
* Get the name of this resource.
*
* @return the name of the Resource
*/
public abstract String getName();
/**
* Create an existent resource from this resource state.
*
* @param monitor
* the progress monitor to use
* @return a resource that has the attributes of this resource state
* @throws CoreException if creation failed
*/
public abstract IResource createResource(IProgressMonitor monitor) throws CoreException;
/**
* Given a resource handle, create an actual resource with the attributes of
* the receiver resource state.
*
* @param resource
* the resource handle
* @param monitor
* the progress monitor to be used when creating the resource
* @throws CoreException if creation failed
*/
public abstract void createExistentResourceFromHandle(IResource resource, IProgressMonitor monitor) throws CoreException;
/**
* Return a boolean indicating whether this resource state has enough
* information to create a resource.
*
* @return <code>true</code> if the resource can be created, and
* <code>false</code> if it does not have enough information
*/
public abstract boolean isValid();
/**
* Record the appropriate state of this resource state using
* any available resource history.
*
* @param resource
* the resource whose state is to be recorded.
* @param monitor
* the progress monitor to be used
* @throws CoreException if history could not be read
*/
public abstract void recordStateFromHistory(IResource resource, IProgressMonitor monitor) throws CoreException;
/**
* Return a boolean indicating whether this state represents an
* existent resource.
*
* @param checkMembers
* Use <code>true</code> if members should also exist in order
* for this state to be considered existent. A value of
* <code>false</code> indicates that the existence of members
* does not matter.
*
* @return a boolean indicating whether this state represents an
* existent resource.
*/
public abstract boolean verifyExistence(boolean checkMembers);
}