blob: 01fb28f212683ee2124a80965097056ec8542b9d [file] [log] [blame]
package org.eclipse.egf.emf.wrapper.ui;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.egf.common.ui.helper.ThrowableHandler;
import org.eclipse.egf.core.pde.tools.ConvertProjectOperation;
import org.eclipse.egf.emf.wrapper.CreateFcoreUtil;
import org.eclipse.egf.emf.wrapper.l10n.EMFWrapperMessages;
import org.eclipse.egf.model.fcore.presentation.FcoreModelWizard;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.ISetSelectionTarget;
public class CreateFcoreFileWizard extends FcoreModelWizard {
private IFile _genModel;
public CreateFcoreFileWizard(IFile genModel) {
_genModel = genModel;
}
@Override
public void addPage(IWizardPage page) {
if (page == newFileCreationPage)
super.addPage(page);
}
@Override
public void addPages() {
super.addPages();
newFileCreationPage.setFileName(getFileName());
}
@Override
public boolean performFinish() {
// Nothing to do
if (_genModel == null) {
return true;
}
final Throwable[] throwable = new Throwable[1];
final IFile fcore = getFcore();
// Convert and Process current Project
WorkspaceModifyOperation convertOperation = new ConvertProjectOperation(_genModel.getProject(), false, false) {
@Override
public List<String> addDependencies() {
return Collections.emptyList();
}
@Override
public List<String> addSourceFolders() {
return Collections.emptyList();
}
};
try {
getContainer().run(false, false, convertOperation);
} catch (Throwable t) {
throwable[0] = t;
}
// Save resource
if (throwable[0] == null) {
WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
@Override
protected void execute(IProgressMonitor monitor) {
try {
SubMonitor.convert(monitor, EMFWrapperMessages.CreateFcoreFileWizard_Create_EMF_Wrapper, 1000);
try {
new CreateFcoreUtil().createFcoreFile(_genModel, fcore);
} catch (IOException ioe) {
throwable[0] = ioe;
}
} finally {
monitor.done();
}
}
};
try {
getContainer().run(false, true, operation);
} catch (Throwable t) {
throwable[0] = t;
}
}
// Select the new file resource in the current view.
if (throwable[0] == null) {
IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
IWorkbenchPage page = workbenchWindow.getActivePage();
final IWorkbenchPart activePart = page.getActivePart();
if (activePart instanceof ISetSelectionTarget) {
final ISelection targetSelection = new StructuredSelection(_genModel);
getShell().getDisplay().asyncExec(new Runnable() {
public void run() {
((ISetSelectionTarget) activePart).selectReveal(targetSelection);
}
});
}
// Open an editor on the new file.
try {
page.openEditor(new FileEditorInput(fcore), workbench.getEditorRegistry().getDefaultEditor(fcore.getFullPath().toString()).getId());
} catch (Throwable t) {
throwable[0] = t;
}
}
// Display errors if any
if (throwable[0] != null && throwable[0] instanceof InterruptedException == false) {
ThrowableHandler.handleThrowable(Activator.getDefault().getPluginID(), throwable[0]);
return false;
}
return true;
}
private String getFileName() {
return _genModel.getFullPath().removeFileExtension().addFileExtension(FILE_EXTENSIONS.get(0)).lastSegment();
}
private IFile getFcore() {
return _genModel.getProject().getFile(newFileCreationPage.getContainerFullPath().removeFirstSegments(1).append(newFileCreationPage.getFileName()));
}
}