blob: 8fc7b5ac9e6e9208b1cd62227ea70ae826750d39 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2018 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.examples.model.ui;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.team.examples.model.ModelNature;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
import org.eclipse.ui.internal.wizards.newresource.ResourceMessages;
public class NewModelProjectWizard extends Wizard implements INewWizard {
private WizardNewProjectCreationPage mainPage;
public NewModelProjectWizard() {
super();
}
public void addPages() {
super.addPages();
mainPage = new WizardNewProjectCreationPage("basicNewProjectPage");//$NON-NLS-1$
mainPage.setTitle(ResourceMessages.NewProject_title);
mainPage.setDescription(ResourceMessages.NewProject_description);
this.addPage(mainPage);
}
public boolean performFinish() {
// get a project handle
final IProject newProjectHandle = mainPage.getProjectHandle();
// get a project descriptor
URI location = null;
if (!mainPage.useDefaults()) {
location = mainPage.getLocationURI();
}
IWorkspace workspace = ResourcesPlugin.getWorkspace();
final IProjectDescription description = workspace
.newProjectDescription(newProjectHandle.getName());
description.setLocationURI(location);
description.setNatureIds(new String[] {ModelNature.NATURE_ID});
// create the new project operation
WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
protected void execute(IProgressMonitor monitor)
throws CoreException {
createProject(description, newProjectHandle, monitor);
}
};
// run the new project creation operation
try {
getContainer().run(true, true, op);
} catch (InterruptedException e) {
return false;
} catch (InvocationTargetException e) {
// ie.- one of the steps resulted in a core exception
Throwable t = e.getTargetException();
if (t instanceof CoreException) {
ErrorDialog.openError(getShell(), null, null,
((CoreException) t).getStatus());
} else {
MessageDialog
.openError(
getShell(),
"Error occurred",
t.getMessage());
}
return false;
}
return true;
}
/**
* Creates a project resource given the project handle and description.
*
* @param description
* the project description to create a project resource for
* @param projectHandle
* the project handle to create a project resource for
* @param monitor
* the progress monitor to show visual progress with
*
* @exception CoreException
* if the operation fails
* @exception OperationCanceledException
* if the operation is canceled
*/
void createProject(IProjectDescription description, IProject projectHandle,
IProgressMonitor monitor) throws CoreException,
OperationCanceledException {
try {
monitor.beginTask("", 2000);//$NON-NLS-1$
projectHandle.create(description, SubMonitor.convert(monitor,
1000));
if (monitor.isCanceled()) {
throw new OperationCanceledException();
}
projectHandle.open(IResource.BACKGROUND_REFRESH, SubMonitor.convert(monitor, 1000));
} finally {
monitor.done();
}
}
public void init(IWorkbench workbench, IStructuredSelection selection) {
// Nothing to do
}
}