blob: 9954557ca87abc333b0083ba664880627311dbe5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 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.jdt.core.refactoring.descriptors;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.resources.IResource;
import org.eclipse.ltk.core.refactoring.RefactoringContribution;
import org.eclipse.ltk.core.refactoring.RefactoringCore;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
import org.eclipse.jdt.internal.core.refactoring.descriptors.DescriptorMessages;
import org.eclipse.jdt.internal.core.refactoring.descriptors.JavaRefactoringDescriptorUtil;
/**
* Refactoring descriptor for the rename resource refactoring.
* <p>
* An instance of this refactoring descriptor may be obtained by calling
* {@link RefactoringContribution#createDescriptor()} on a refactoring
* contribution requested by invoking
* {@link RefactoringCore#getRefactoringContribution(String)} with the
* appropriate refactoring id.
* </p>
* <p>
* Note: this class is not intended to be instantiated by clients.
* </p>
*
* @since 1.1
*
* @deprecated since 1.2, use {@link org.eclipse.ltk.core.refactoring.resource.RenameResourceDescriptor} from
* <code>org.eclipse.ltk.core.refactoring</code> instead.
*
* @noinstantiate This class is not intended to be instantiated by clients.
* @noextend This class is not intended to be subclassed by clients.
*/
public final class RenameResourceDescriptor extends JavaRefactoringDescriptor {
/** The name attribute */
private String fName= null;
/** The resource path attribute (full path) */
private IPath fResourcePath= null;
/**
* Creates a new refactoring descriptor.
*/
public RenameResourceDescriptor() {
super(IJavaRefactorings.RENAME_RESOURCE);
}
/**
* Creates a new refactoring descriptor.
*
* @param project
* the non-empty name of the project associated with this
* refactoring, or <code>null</code> for a workspace
* refactoring
* @param description
* a non-empty human-readable description of the particular
* refactoring instance
* @param comment
* the human-readable comment of the particular refactoring
* instance, or <code>null</code> for no comment
* @param arguments
* a map of arguments that will be persisted and describes
* all settings for this refactoring
* @param flags
* the flags of the refactoring descriptor
*
* @throws IllegalArgumentException if the argument map contains invalid keys/values
*
* @since 1.2
*/
public RenameResourceDescriptor(String project, String description, String comment, Map arguments, int flags) {
super(IJavaRefactorings.RENAME_RESOURCE, project, description, comment, arguments, flags);
fResourcePath= JavaRefactoringDescriptorUtil.getResourcePath(arguments, ATTRIBUTE_INPUT, project);
fName= JavaRefactoringDescriptorUtil.getString(arguments, ATTRIBUTE_NAME);
}
/**
* {@inheritDoc}
*/
protected void populateArgumentMap() {
super.populateArgumentMap();
JavaRefactoringDescriptorUtil.setResourcePath(fArguments, ATTRIBUTE_INPUT, getProject(), fResourcePath);
JavaRefactoringDescriptorUtil.setString(fArguments, ATTRIBUTE_NAME, fName);
}
/**
* Sets the new name to rename the resource to.
*
* @param name
* the non-empty new name to set
*/
public void setNewName(final String name) {
Assert.isNotNull(name);
Assert.isLegal(!"".equals(name), "Name must not be empty"); //$NON-NLS-1$//$NON-NLS-2$
fName= name;
}
/**
* Returns the new name to rename the resource to.
*
* @return
* the new name to rename the resource to
*
* @since 1.2
*/
public String getNewName() {
return fName;
}
/**
* Sets the project name of this refactoring.
* <p>
* Note: If the resource to be renamed is of type {@link IResource#PROJECT},
* clients are required to to set the project name to <code>null</code>.
* </p>
* <p>
* The default is to associate the refactoring with the workspace.
* </p>
*
* @param project
* the non-empty project name to set, or <code>null</code> for
* the workspace
*
* @see #getProject()
*/
public void setProject(final String project) {
super.setProject(project);
}
/**
* Sets the resource to be renamed.
* <p>
* Note: If the resource to be renamed is of type {@link IResource#PROJECT},
* clients are required to to set the project name to <code>null</code>.
* </p>
*
* @param resource
* the resource to be renamed
*/
public void setResource(final IResource resource) {
Assert.isNotNull(resource);
fResourcePath= resource.getFullPath();
}
/**
* Returns the path of the resource to rename.
*
* @return
* the path of the resource to rename
*
* @since 1.2
*/
public IPath getResourcePath() {
return fResourcePath;
}
/**
* {@inheritDoc}
*/
public RefactoringStatus validateDescriptor() {
RefactoringStatus status= super.validateDescriptor();
if (fResourcePath == null)
status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameResourceDescriptor_no_resource));
if (fName == null || "".equals(fName)) //$NON-NLS-1$
status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameResourceDescriptor_no_new_name));
if (fResourcePath.segmentCount() == 1 && getProject() != null)
status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameResourceDescriptor_project_constraint));
return status;
}
}