package com.redhat.ceylon.eclipse.code.refactor;
import static org.eclipse.ltk.core.refactoring.RefactoringStatus.createErrorStatus;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
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.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.resource.DeleteResourceChange;
import org.eclipse.ltk.core.refactoring.resource.ResourceChange;
import com.redhat.ceylon.eclipse.code.wizard.CeylonSourceStream;
public final class CreateUnitChange extends ResourceChange {
private final IFile file;
private final boolean preamble;
private final String text;
private final IProject project;
private String name;
public CreateUnitChange(IFile file, boolean preamble, String text,
IProject project, String name) {
this.file = file;
this.preamble = preamble;
this.text = text;
this.project = project;
this.name = name;
}
@Override
public RefactoringStatus isValid(IProgressMonitor pm)
throws CoreException,
OperationCanceledException {
if (file.exists()) {
return createErrorStatus("file already exists");
}
else {
return new RefactoringStatus();
}
}
@Override
public Change perform(IProgressMonitor pm)
throws CoreException {
file.create(new CeylonSourceStream(project, preamble, text), true, pm);
return new DeleteResourceChange(file.getFullPath(), true);
}
@Override
public String getName() {
return name;
}
@Override
protected IResource getModifiedResource() {
return file;
}
@Override
public Object[] getAffectedObjects() {
return new Object[]{file};
}
}