/**
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.internal.ui.refactoring;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
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.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.RefactoringChangeDescriptor;
import org.eclipse.ltk.core.refactoring.RefactoringDescriptor;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.resource.RenameResourceDescriptor;
import com.hundsun.ares.studio.core.IARESElement;
import com.hundsun.ares.studio.core.IARESProject;
/**
*
* @author liaogc
*/
public class RenameProjectProcessor extends ARESRenameProcessor implements IReferenceUpdating {
/**
* @param element
*/
public RenameProjectProcessor(IARESElement element) {
super(element);
}
/* (non-Javadoc)
* @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
*/
@Override
public String getIdentifier() {
return "com.hundsun.ares.stuido.ui.refactor.processor.rename.project";
}
/* (non-Javadoc)
* @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
*/
@Override
public String getProcessorName() {
return "��������Ŀ";
}
/* (non-Javadoc)
* @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
*/
@Override
public boolean isApplicable() throws CoreException {
return true;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.internal.ui.refactoring.INameUpdating#chechNewElementName(java.lang.String)
*/
public RefactoringStatus checkNewElementName(String name) {
RefactoringStatus status = super.checkNewElementName(name);
if (!status.hasFatalError()) {
IProject[] projects = getEnableProjects();
for(IProject project :projects){
if(StringUtils.equals(project.getName(), name)){
status.addError("��Ŀ���Ѿ�����");
break;
}
}
}
return status;
}
/* (non-Javadoc)
* @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
pm.beginTask("", 1); //$NON-NLS-1$
try {
RenamePorjectChange change= new RenamePorjectChange(getResource().getFullPath(),getNewElementName());
change.setDescriptor(new RefactoringChangeDescriptor(createDescriptor()));
return change;
} finally {
pm.done();
}
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.internal.ui.refactoring.INameUpdating#getCurrentElementName()
*/
public String getCurrentElementName() {
return ((IARESProject) element).getElementName();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.internal.ui.refactoring.INameUpdating#getNewElement()
*/
@Override
public IARESElement getNewElement() {
return null;
}
private RenameResourceDescriptor createDescriptor() {
IResource resource= getResource();
RenameResourceDescriptor descriptor= new RenameResourceDescriptor();
descriptor.setProject(resource instanceof IProject ? null : resource.getProject().getName());
descriptor.setDescription("��������Ŀ:"+this.getResource().getName()+"��Ϊ:"+this.getNewElementName());
descriptor.setComment("��������Ŀ:"+this.getResource().getName()+"��Ϊ:"+this.getNewElementName());
descriptor.setFlags(RefactoringDescriptor.STRUCTURAL_CHANGE | RefactoringDescriptor.MULTI_CHANGE | RefactoringDescriptor.BREAKING_CHANGE);
descriptor.setResourcePath(resource.getFullPath());
descriptor.setNewName(getNewElementName());
descriptor.setUpdateReferences(false);
return descriptor;
}
private IResource getResource(){
return ((IARESElement)getElements()[0]).getResource();
}
private IProject[] getEnableProjects(){
List<IProject> pros = new ArrayList<IProject>();
IProject[] iprojects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for(IProject p : iprojects){
pros.add(p);
}
return pros.toArray(new IProject[0]);
}
}