package org.zend.php.zendserver.deployment.core.refactoring;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
import org.eclipse.ltk.core.refactoring.participants.RenameArguments;
import org.eclipse.ltk.core.refactoring.participants.RenameParticipant;
import org.zend.php.zendserver.deployment.core.descriptor.DescriptorContainerManager;
import org.zend.php.zendserver.deployment.core.descriptor.IDeploymentDescriptor;
import org.zend.php.zendserver.deployment.core.descriptor.IDescriptorContainer;
public class DescriptorRenameParticipant extends RenameParticipant {
private IResource affectedResource;
@Override
protected boolean initialize(Object element) {
if (element instanceof IResource) {
affectedResource = (IResource) element;
}
return true;
}
@Override
public String getName() {
return Messages.Application_Deployment;
}
@Override
public RefactoringStatus checkConditions(IProgressMonitor pm,
CheckConditionsContext context) throws OperationCanceledException {
return new RefactoringStatus();
}
@Override
public Change createChange(IProgressMonitor pm) throws CoreException,
OperationCanceledException {
RenameArguments args = getArguments();
String newName = args.getNewName();
IPath projectRelativePath = affectedResource.getProjectRelativePath();
String oldFullPath = projectRelativePath.toString();
String newFullPath = projectRelativePath.removeLastSegments(1).append(newName).toString();
IProject project = affectedResource.getProject();
IDescriptorContainer container = DescriptorContainerManager.getService().openDescriptorContainer(project);
IFile fileToChange = container.getFile();
if (! fileToChange.exists()) {
return null;
}
if (affectedResource.getType() == IResource.PROJECT) { // project rename - get the new project
fileToChange = ResourcesPlugin.getWorkspace().getRoot().getProject(newFullPath).getFile(DescriptorContainerManager.DESCRIPTOR_PATH);
}
IDeploymentDescriptor descriptor = container.getDescriptorModel();
DeploymentRefactoring r = new DeploymentRefactoring("rename"); //$NON-NLS-1$
boolean hasChanged = false;
if (container.getFile().exists()) {
hasChanged = r.updatePathInDescriptor(oldFullPath, newFullPath, descriptor);
}
// on project rename do to update project name in descriptor
if (affectedResource.getType() == IResource.PROJECT) {
hasChanged |= r.updateProjectName(affectedResource.getName(), newFullPath, descriptor);
}
if (! hasChanged) {
return null;
}
Change change = r.createDescriptorPHPTextChange(container.getFile(),fileToChange, container);
// Change change = r.createDescriptorTextChange(fileToChange, container);
return change;
}
}