Java tutorial
/***************************************************************************** * Copyright (c) 2006, 2007 g-Eclipse Consortium * 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 * * Initial development of the original code was made for the * g-Eclipse project founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributors: * Mathias Stuempert - initial API and implementation * Harald Kornmayer * Pawel Wolniewicz *****************************************************************************/ package eu.geclipse.ui.wizards; import java.lang.reflect.InvocationTargetException; import java.net.URL; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation; import org.eclipse.ui.dialogs.WizardNewProjectCreationPage; import org.eclipse.ui.dialogs.WizardNewProjectReferencePage; import eu.geclipse.ui.internal.Activator; import eu.geclipse.ui.internal.preference.PerspectivePreferencePage; /** * Wizard to create Grid Project in the Eclipse workspace. * * @author korn */ public class NewGridProjectWizard extends Wizard implements INewWizard { private WizardNewProjectCreationPage creationPage; private VoSelectionWizardPage voPage; private GridProjectStructureWizardPage structurePage; private WizardNewProjectReferencePage referencePage; private IProject project = null; /** * when the wizard is finished, the Grid project is created. */ @Override public boolean performFinish() { IProject proj = createNewProject(); if (proj != null) { switchPerspective(); } return proj != null; } private void switchPerspective() { final IWorkbench workBench = Activator.getDefault().getWorkbench(); Display display = workBench.getDisplay(); display.asyncExec(new Runnable() { public void run() { IWorkbenchPage page = null; IWorkbenchWindow window = workBench.getActiveWorkbenchWindow(); if (window != null) { page = window.getActivePage(); if (page != null) { IPreferenceStore ps = Activator.getDefault().getPreferenceStore(); String newPerspectiveId = ps.getString(PerspectivePreferencePage.KEY_DEFAULT_PERSPECTIVE); if (newPerspectiveId == null) { return; } IPerspectiveDescriptor perspectiveDescriptor = page.getPerspective(); if (perspectiveDescriptor != null && !perspectiveDescriptor.getId().equals(newPerspectiveId)) { //check if we are in one of g-Eclipse perspectives if (perspectiveDescriptor.getId().equals(Activator.ID_USER_PERSPECTIVE) || perspectiveDescriptor.getId().equals(Activator.ID_OPERATOR_PERSPECTIVE) || perspectiveDescriptor.getId().equals(Activator.ID_DEVELOPER_PERSPECTIVE)) { //check if it is allowed to switch from g-Eclipse perspective if (ps.getBoolean( PerspectivePreferencePage.KEY_NOT_SWITCH_FROM_GECLIPSE_PERSPECTIVE)) { return; } } try { String newLine = System.getProperty("line.separator"); //$NON-NLS-1$ String message = Messages .getString("NewGridProjectWizard.PerspectiveSwitchingInfo_line1"); //$NON-NLS-1$ message += newLine + newLine; message += Messages .getString("NewGridProjectWizard.PerspectiveSwitchingInfo_line2"); //$NON-NLS-1$ message += newLine + newLine; message += Messages .getString("NewGridProjectWizard.PerspectiveSwitchingInfo_line3"); //$NON-NLS-1$ String toggleMessage = Messages.getString("NewGridProjectWizard.RememberQuestion"); //$NON-NLS-1$ String ask = ps.getString(PerspectivePreferencePage.KEY_REMEMBER_SWITCHING); if (MessageDialogWithToggle.NEVER.equalsIgnoreCase(ask)) { return; } if (MessageDialogWithToggle.ALWAYS.equalsIgnoreCase(ask) || MessageDialogWithToggle .openYesNoQuestion(window.getShell(), Messages.getString( "NewGridProjectWizard.ConfirmPerpectiveSwitch"), //$NON-NLS-1$ message, toggleMessage, false, ps, PerspectivePreferencePage.KEY_REMEMBER_SWITCHING) .getReturnCode() == IDialogConstants.YES_ID) { String pId = ps.getString(PerspectivePreferencePage.KEY_DEFAULT_PERSPECTIVE); window.getWorkbench().showPerspective(pId, window); } } catch (Exception e) { Status status = new Status(Status.ERROR, Activator.PLUGIN_ID, Messages.getString("NewGridProjectWizard.PerspectiveSwitchingError"), //$NON-NLS-1$ e); ErrorDialog.openError(window.getShell(), Messages.getString("NewGridProjectWizard.PerspectiveSwitchingError"), //$NON-NLS-1$ Messages.getString("NewGridProjectWizard.ManualPerspectiveSwitching"), //$NON-NLS-1$ status); } } } } } }); } /** * Initialize the Grid project in the Grid project in the workspace */ public void init(final IWorkbench workbench, final IStructuredSelection selection) { setWindowTitle(Messages.getString("NewGridProjectWizard.windowTitle")); //$NON-NLS-1$ URL imgUrl = Activator.getDefault().getBundle().getEntry("icons/wizban/newgridprj_wiz.gif"); //$NON-NLS-1$ setDefaultPageImageDescriptor(ImageDescriptor.createFromURL(imgUrl)); } /** * Adds the different pages for the wizard i.e. for VO selection, Project Structure, * reference projects. */ @Override public void addPages() { this.creationPage = new WizardNewProjectCreationPage("newGridProjectBasicPage"); //$NON-NLS-1$ this.creationPage.setTitle(Messages.getString("NewGridProjectWizard.basic_page_title")); //$NON-NLS-1$ this.creationPage.setDescription(Messages.getString("NewGridProjectWizard.basic_page_description")); //$NON-NLS-1$ addPage(this.creationPage); this.voPage = new VoSelectionWizardPage(false); addPage(this.voPage); this.structurePage = new GridProjectStructureWizardPage(); addPage(this.structurePage); if (ResourcesPlugin.getWorkspace().getRoot().getProjects().length > 0) { this.referencePage = new WizardNewProjectReferencePage("newGridProjectReferencePage"); //$NON-NLS-1$ this.referencePage.setTitle(Messages.getString("NewGridProjectWizard.reference_page_title")); //$NON-NLS-1$ this.referencePage .setDescription(Messages.getString("NewGridProjectWizard.reference_page_description")); //$NON-NLS-1$ addPage(this.referencePage); } } @Override public boolean canFinish() { boolean result = false; IWizardPage currentPage = getContainer().getCurrentPage(); if (currentPage != this.creationPage) { result = super.canFinish(); } return result; } /** * Creates the Grid Project in the workspace and * @return */ private IProject createNewProject() { if ((this.project == null) && (this.creationPage != null)) { GridProjectProperties properties = new GridProjectProperties(); properties.setProjectName(this.creationPage.getProjectName()); properties.setProjectLocation( this.creationPage.useDefaults() ? null : this.creationPage.getLocationPath()); properties.setProjectVo(this.voPage.getSelectedVos()[0]); properties.addProjectFolders(this.structurePage.getProjectFolders()); if (this.referencePage != null) { properties.setReferencesProjects(this.referencePage.getReferencedProjects()); } GridProjectCreationOperation creationOp = new GridProjectCreationOperation(properties); WorkspaceModifyDelegatingOperation modifyOp = new WorkspaceModifyDelegatingOperation(creationOp); // Create the new project try { getContainer().run(true, true, modifyOp); this.project = creationOp.getProject(); } catch (InterruptedException intExc) { eu.geclipse.ui.internal.Activator.logException(intExc); } catch (InvocationTargetException itExc) { eu.geclipse.ui.internal.Activator.logException(itExc); } } return this.project; } }