/******************************************************************************* * Copyright (c) 2006, 2012 Oracle Corporation 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: * Oracle Corporation *******************************************************************************/ package org.eclipse.bpel.ui.wizards; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import org.eclipse.bpel.ui.BPELUIPlugin; import org.eclipse.bpel.ui.wizards.NewBpelFileFirstPage.BpelCreationMode; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.operation.IRunnableWithProgress; 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.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard; /** * The creation wizard for a new BPEL process. * @author Michal Chmielewski - Oracle * @author Edwin Khodabakchian - Oracle * @author Vincent Zurczak - EBM WebSourcing */ public class NewBpelFileWizard extends Wizard implements INewWizard { static final String DIALOG_SETTINGS_PROCESS_NAME = "process-name"; static final String DIALOG_SETTINGS_PROCESS_TPL_KEY = "process-template-key"; private IStructuredSelection selection; private IWorkbench fWorkbench; private NewBpelFileFirstPage firstPage; private NewBpelFileLocationPage locationPage; private NewBpelFileTemplatePage wsdlPage; private NewBpelFilePortTypePage portTypePage; /** * Constructor. */ public NewBpelFileWizard() { this.setWindowTitle( Messages.NewFileWizard_1 ); setDialogSettings( BPELUIPlugin.INSTANCE.getDialogSettingsFor( this )); setHelpAvailable( false ); setNeedsProgressMonitor( true ); } /* * (non-Javadoc) * @see org.eclipse.ui.IWorkbenchWizard * #init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection) */ @Override public void init(IWorkbench workbench, IStructuredSelection currentSelection) { this.fWorkbench = workbench; this.selection = currentSelection; } /* * (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard * #addPages() */ @Override public void addPages() { this.firstPage = new NewBpelFileFirstPage(); this.locationPage = new NewBpelFileLocationPage( this.selection ); this.wsdlPage = new NewBpelFileTemplatePage(); this.portTypePage = new NewBpelFilePortTypePage(); // Add all the pages // The pages will then decide which one follows them addPage( this.firstPage ); addPage( this.portTypePage ); addPage( this.wsdlPage ); addPage( this.locationPage ); } /* * (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard * #canFinish() */ @Override public boolean canFinish() { boolean complete = this.firstPage.isPageComplete() && this.locationPage.isPageComplete(); if( complete ) { if( this.firstPage.getCreationMode() == BpelCreationMode.CREATE_NEW_BPEL ) complete = this.wsdlPage.isPageComplete(); else complete = this.portTypePage.isPageComplete(); } return complete; } /* * (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard * #performFinish() */ @Override public boolean performFinish() { // Prepare the operation IRunnableWithProgress runnable = new IRunnableWithProgress() { @Override public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException { try { monitor.beginTask( "Creating the process...", IProgressMonitor.UNKNOWN ); NewBpelFileWizardUtils utils = new NewBpelFileWizardUtils( NewBpelFileWizard.this.firstPage, NewBpelFileWizard.this.wsdlPage, NewBpelFileWizard.this.portTypePage, NewBpelFileWizard.this.locationPage.getProcessFile()); if( NewBpelFileWizard.this.firstPage.getCreationMode() == BpelCreationMode.GENERATE_BPEL_FROM_WSDL ) utils.createResourcesFromWsdl( monitor ); else utils.createResourcesFromTemplate( monitor ); } catch( IOException e ) { throw new InvocationTargetException( e ); } catch( CoreException e ) { throw new InvocationTargetException( e ); } finally { monitor.done(); } } }; // Execute it final IFile bpelFile = this.locationPage.getProcessFile(); boolean success = true; try { getContainer().run( false, true, runnable ); } catch( InvocationTargetException e ) { success = true; BPELUIPlugin.log( e ); } catch( InterruptedException e ) { success = true; BPELUIPlugin.log( e ); } finally { // Refresh the workspace try { bpelFile.getProject().refreshLocal( IResource.DEPTH_INFINITE, null ); } catch( CoreException e ) { BPELUIPlugin.log( e ); } } // Open the file? if( success ) { final IWorkbenchPage page = this.fWorkbench.getActiveWorkbenchWindow().getActivePage(); getShell().getDisplay().asyncExec( new Runnable() { @Override public void run() { try { IDE.openEditor( page, bpelFile ); } catch( PartInitException e ) { BPELUIPlugin.log( e ); } } }); BasicNewResourceWizard.selectAndReveal( bpelFile, page.getWorkbenchWindow()); } return success; } }