package com.redhat.ceylon.eclipse.code.wizard;
import static com.redhat.ceylon.eclipse.code.editor.Navigation.gotoLocation;
import static com.redhat.ceylon.eclipse.code.refactor.MoveUtil.escapePackageName;
import static com.redhat.ceylon.eclipse.code.wizard.WizardUtil.runOperation;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
import com.redhat.ceylon.eclipse.ui.CeylonPlugin;
public class NewPackageWizard extends Wizard implements INewWizard {
private IStructuredSelection selection;
private NewUnitWizardPage page;
private IWorkbench workbench;
private boolean created = false;
public NewPackageWizard() {
setDialogSettings(CeylonPlugin.getInstance()
.getDialogSettings());
setWindowTitle("New Ceylon Package");
}
public IPackageFragment getPackageFragment() {
return page.getPackageFragment();
}
public IPackageFragmentRoot getSourceFolder() {
return page.getSourceDir();
}
public boolean isCreated() {
return created;
}
public boolean isShared() {
return page.isShared();
}
@Override
public void init(IWorkbench workbench,
IStructuredSelection selection) {
this.selection = selection;
this.workbench=workbench;
}
@Override
public boolean performFinish() {
CeylonPlugin.getInstance()
.getDialogSettings()
.put("sharedPackage", page.isShared());
IPackageFragment pf = page.getPackageFragment();
CreateSourceFileOperation op = packageDescriptorOp(pf);
created = runOperation(op, getContainer());
if (created) {
BasicNewResourceWizard.selectAndReveal(op.getFile(),
workbench.getActiveWorkbenchWindow());
gotoLocation(op.getFile().getFullPath(), 0);
return true;
}
else {
return false;
}
}
private CreateSourceFileOperation packageDescriptorOp(
IPackageFragment pf) {
StringBuilder packageDescriptor =
new StringBuilder();
if (page.isShared()) {
packageDescriptor.append("shared ");
}
String name =
escapePackageName(pf.getElementName());
packageDescriptor
.append("package ")
.append(name)
.append(";")
.append(System.lineSeparator());
return new CreateSourceFileOperation(
page.getSourceDir(),
pf, "package",
page.isIncludePreamble(),
packageDescriptor.toString());
}
@Override
public void addPages() {
super.addPages();
if (page == null) {
boolean shared =
getDialogSettings()
.getBoolean("sharedPackage");
page = new NewPackageWizardPage(shared);
page.init(workbench, selection);
}
addPage(page);
}
}