/** * Copyright (c) 2011 committers of YAKINDU and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * Contributors: * committers of YAKINDU - initial API and implementation * */ package org.yakindu.sct.generator.genmodel.ui.wizard; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchWizard; import com.google.inject.Inject; /** * * @author holger willebrandt - Initial contribution and API */ public class WorkspaceGeneratorProjectWizard extends Wizard implements IWorkbenchWizard { private IProjectWizardPage projectPage; @Inject private GeneratorProjectTemplate template; @Override public void init(IWorkbench workbench, IStructuredSelection selection) { setWindowTitle("New YAKINDU Workspace Generator Project"); setNeedsProgressMonitor(true); } public IProjectWizardPage getProjectPage() { WorkspaceGeneratorWizardPage1 projectPage = new WorkspaceGeneratorWizardPage1("project"); //$NON-NLS-1$ projectPage.setTitle("New YAKINDU Workspace Generator Project"); projectPage.setDescription("Configure the Generator Project"); return projectPage; } @Override public void addPages() { projectPage = getProjectPage(); addPage(projectPage); } @Override public boolean performFinish() { final ProjectData projectData = projectPage.getProjectData(); final IRunnableWithProgress op = new IRunnableWithProgress() { public void run(final IProgressMonitor monitor) throws InvocationTargetException { try { template.setMonitor(monitor); template.generate(projectData); } catch (Exception e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }; try { getContainer().run(true, false, op); } catch (final InterruptedException e) { return false; } catch (final InvocationTargetException e) { final Throwable realException = e.getTargetException(); realException.printStackTrace(); MessageDialog.openError(getShell(), "Failed to create project", realException.getMessage()); return false; } return true; } }