package com.baselet.plugin.refactoring;
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.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
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.MoveParticipant;
import org.eclipse.text.edits.MultiTextEdit;
import org.eclipse.text.edits.ReplaceEdit;
import com.baselet.plugin.UmletPluginUtils;
import com.baselet.plugin.refactoring.JavaDocParser.SourceString;
public class MoveClassParticipant extends MoveParticipant {
ICompilationUnit cu;
@Override
protected boolean initialize(Object element) {
if (element instanceof ICompilationUnit) {
cu = (ICompilationUnit) element;
return true;
}
return false;
}
@Override
public String getName() {
return "Umlet Move Class Participant";
}
@Override
public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException {
return RefactoringStatus.create(Status.OK_STATUS);
}
@Override
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
return null;
}
@Override
public Change createPreChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
CompilationUnitChange change = new CompilationUnitChange(cu.getElementName(), cu);
change.setKeepPreviewEdits(true);
change.setEdit(new MultiTextEdit());
// parse javadocs and update references
for (ImageReference reference : UmletPluginUtils.collectUxfImgRefs(cu)) {
SourceString srcValue = reference.srcAttr.value;
if (UmletPluginUtils.isAbsoluteImageRef(srcValue.getValue())) {
continue;
}
IPackageFragment destinationPackage;
{
Object destination = getArguments().getDestination();
if (!(destination instanceof IPackageFragment)) {
continue;
}
destinationPackage = (IPackageFragment) destination;
}
IPath parentPath = UmletPluginUtils.getCompilationUnitParentPath(cu);
IPath imgPath = parentPath.append(new Path(srcValue.getValue()));
IPath destinationPath = UmletPluginUtils.getPackageFragmentRootRelativePath(cu.getJavaProject(), destinationPackage.getCorrespondingResource());
String newPath = UmletPluginUtils.calculateImageRef(destinationPath, imgPath);
change.addEdit(new ReplaceEdit(srcValue.start, srcValue.length(), newPath));
}
return change;
}
}