| /******************************************************************************* |
| * 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.util.Date; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.bpel.common.ui.details.viewers.ComboViewer; |
| import org.eclipse.bpel.model.util.BPELConstants; |
| import org.eclipse.bpel.ui.BPELUIPlugin; |
| import org.eclipse.bpel.ui.IBPELUIConstants; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.viewers.ArrayContentProvider; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.LabelProvider; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.wizard.IWizardPage; |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.plugin.AbstractUIPlugin; |
| |
| /** |
| * The first page of the wizard to create a new BPEL process. |
| * <p> |
| * This page deals with the creation mode and the general properties of the BPEL to create. |
| * </p> |
| * |
| * @author Michal Chmielewski - Oracle |
| * @author Vincent Zurczak - EBM WebSourcing |
| */ |
| public class NewBpelFileFirstPage extends WizardPage { |
| |
| /** |
| * The page's name, so that it can be referenced from other pages. |
| */ |
| public static final String PAGE_NAME = "bpel-first-page"; |
| |
| /** |
| * The creation mode. |
| */ |
| private BpelCreationMode creationMode; |
| |
| /** |
| * The process name and name space. |
| */ |
| private String processName, processNamespace; |
| |
| /** |
| * True to create an abstract process, false otherwise. |
| */ |
| private boolean abstractProcess; |
| |
| /** |
| * The properties to pass to the template. |
| */ |
| private final Map<String,Object> processTemplateProperties; |
| |
| /** |
| * Images used in the wizard. |
| */ |
| private Image wsdlImg, arrowImg, bpelImg, tplImg; |
| |
| |
| /** |
| * Constructor. |
| */ |
| public NewBpelFileFirstPage() { |
| super( PAGE_NAME ); |
| |
| setTitle( Messages.NewFileWizardPage1_2 ); |
| setDescription( Messages.NewFileWizardPage1_3 ); |
| setImageDescriptor( BPELUIPlugin.INSTANCE.getImageDescriptor( IBPELUIConstants.ICON_WIZARD_BANNER )); |
| |
| this.processTemplateProperties = new HashMap<String,Object> (); |
| try { |
| ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin( BPELUIPlugin.PLUGIN_ID, "icons/misc/wsdl.png" ); |
| this.wsdlImg = desc.createImage(); |
| |
| } catch( Exception e ) { |
| BPELUIPlugin.log( e, IStatus.WARNING ); |
| } |
| |
| try { |
| ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin( BPELUIPlugin.PLUGIN_ID, "icons/misc/bpel-skeleton-2.png" ); |
| this.bpelImg = desc.createImage(); |
| |
| } catch( Exception e ) { |
| BPELUIPlugin.log( e, IStatus.WARNING ); |
| } |
| |
| try { |
| ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin( BPELUIPlugin.PLUGIN_ID, "icons/misc/arrow.png" ); |
| this.arrowImg = desc.createImage(); |
| |
| } catch( Exception e ) { |
| BPELUIPlugin.log( e, IStatus.WARNING ); |
| } |
| |
| try { |
| ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin( BPELUIPlugin.PLUGIN_ID, "icons/misc/templates.png" ); |
| this.tplImg = desc.createImage(); |
| |
| } catch( Exception e ) { |
| BPELUIPlugin.log( e, IStatus.WARNING ); |
| } |
| } |
| |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.jface.dialogs.DialogPage |
| * #dispose() |
| */ |
| @Override |
| public void dispose() { |
| |
| if( this.wsdlImg != null && ! this.wsdlImg.isDisposed()) |
| this.wsdlImg.dispose(); |
| |
| if( this.arrowImg != null && ! this.arrowImg.isDisposed()) |
| this.arrowImg.dispose(); |
| |
| if( this.bpelImg != null && ! this.bpelImg.isDisposed()) |
| this.bpelImg.dispose(); |
| |
| if( this.tplImg != null && ! this.tplImg.isDisposed()) |
| this.tplImg.dispose(); |
| |
| super.dispose(); |
| } |
| |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.jface.wizard.WizardPage |
| * #getNextPage() |
| */ |
| @Override |
| public IWizardPage getNextPage() { |
| |
| IWizardPage nextPage; |
| if( this.creationMode == BpelCreationMode.CREATE_NEW_BPEL ) |
| nextPage = getWizard().getPage( NewBpelFileTemplatePage.PAGE_NAME ); |
| else |
| nextPage = getWizard().getPage( NewBpelFilePortTypePage.PAGE_NAME ); |
| |
| nextPage.setPreviousPage( this ); |
| return nextPage; |
| } |
| |
| |
| /** |
| * @return the abstractProcess |
| */ |
| public boolean isAbstractProcess() { |
| return this.abstractProcess; |
| } |
| |
| |
| /** |
| * @return the properties for the templates |
| */ |
| public Map<String,Object> getProcessTemplateProperties() { |
| return this.processTemplateProperties; |
| } |
| |
| |
| /** |
| * @return the creationMode |
| */ |
| public BpelCreationMode getCreationMode() { |
| return this.creationMode; |
| } |
| |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.jface.dialogs.IDialogPage |
| * #createControl(org.eclipse.swt.widgets.Composite) |
| */ |
| @Override |
| public void createControl( Composite parent ) { |
| |
| // Create the container |
| final Composite container = new Composite( parent, SWT.NONE ); |
| container.setFont( parent.getFont()); |
| initializeDialogUnits( parent ); |
| container.setLayout( new GridLayout( 2, false )); |
| container.setLayoutData( new GridData( GridData.FILL_BOTH )); |
| setControl( container ); |
| |
| |
| // Add a combo to select the creation mode |
| Label label = new Label( container, SWT.NONE ); |
| label.setText( "Creation Mode:" ); |
| label.setToolTipText( "Select the way to create a new BPEL process" ); |
| |
| final ComboViewer creationViewer = new ComboViewer( container, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY ); |
| creationViewer.setContentProvider( new ArrayContentProvider()); |
| creationViewer.setLabelProvider( new LabelProvider()); |
| creationViewer.setInput( BpelCreationMode.values()); |
| |
| |
| // Add the other common widgets |
| Label l = new Label( container, SWT.NONE ); |
| l.setText( Messages.NewFileWizardPage1_5 ); |
| l.setToolTipText( "The name of the BPEL process" ); |
| |
| Text processNameText = new Text( container, SWT.BORDER | SWT.SINGLE ); |
| processNameText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); |
| if( this.processName != null ) |
| processNameText.setText( this.processName ); |
| |
| processNameText.addModifyListener( new ModifyListener() { |
| @Override |
| public void modifyText( ModifyEvent e ) { |
| NewBpelFileFirstPage.this.processName = ((Text) e.widget).getText(); |
| updateStatus(); |
| } |
| }); |
| |
| |
| l = new Label( container, SWT.NONE ); |
| l.setText( Messages.NewFileWizardPage1_6 ); |
| l.setToolTipText( "The target namespace of the BPEL process" ); |
| |
| Combo processNamespaceCombo = new Combo( container, SWT.DROP_DOWN | SWT.SIMPLE ); |
| processNamespaceCombo.setLayoutData( new GridData( GridData.FILL_HORIZONTAL )); |
| processNamespaceCombo.setItems( BPELUIPlugin.INSTANCE.getTemplates().getNamespaceNames()); |
| if( this.processNamespace != null ) |
| processNamespaceCombo.setText( this.processNamespace ); |
| |
| processNamespaceCombo.addModifyListener( new ModifyListener() { |
| @Override |
| public void modifyText( ModifyEvent e ) { |
| NewBpelFileFirstPage.this.processNamespace = ((Combo) e.widget).getText(); |
| updateStatus(); |
| } |
| }); |
| |
| |
| new Label( container, SWT.NONE ); |
| final Button abstractProcessButton = new Button( container, SWT.CHECK ); |
| abstractProcessButton.setText( "Abstract Process" ); |
| abstractProcessButton.setToolTipText( "Make the created process abstract" ); |
| abstractProcessButton.addSelectionListener( new SelectionListener() { |
| @Override |
| public void widgetSelected( SelectionEvent e ) { |
| widgetDefaultSelected( e ); |
| } |
| |
| @Override |
| public void widgetDefaultSelected( SelectionEvent e ) { |
| NewBpelFileFirstPage.this.abstractProcess = ((Button) e.widget).getSelection(); |
| updateStatus(); |
| } |
| }); |
| |
| |
| // Add an image to illustrate the creation mode |
| Composite imageContainer = new Composite( container, SWT.BORDER ); |
| imageContainer.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WHITE )); |
| GridLayout layout = new GridLayout( 3, false ); |
| layout.horizontalSpacing = 0; |
| layout.marginTop = 12; |
| imageContainer.setLayout( layout ); |
| |
| GridData layoutData = new GridData( GridData.FILL_HORIZONTAL ); |
| layoutData.horizontalSpan = 2; |
| layoutData.verticalIndent = 21; |
| imageContainer.setLayoutData( layoutData ); |
| |
| final Label imgLeftLabel = new Label( imageContainer, SWT.NONE ); |
| imgLeftLabel.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WHITE )); |
| |
| Label imgCenterLabel = new Label( imageContainer, SWT.NONE ); |
| imgCenterLabel.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WHITE )); |
| imgCenterLabel.setLayoutData( new GridData( SWT.CENTER, SWT.CENTER, true, true )); |
| imgCenterLabel.setImage( this.arrowImg ); |
| |
| Label imgRightLabel = new Label( imageContainer, SWT.NONE ); |
| imgRightLabel.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WHITE )); |
| imgRightLabel.setImage( this.bpelImg ); |
| |
| final Text explainationText = new Text( imageContainer, SWT.MULTI | SWT.READ_ONLY | SWT.WRAP ); |
| explainationText.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WHITE )); |
| layoutData = new GridData( GridData.FILL_HORIZONTAL ); |
| layoutData.horizontalSpan = 3; |
| layoutData.verticalIndent = 21; |
| explainationText.setLayoutData( layoutData ); |
| |
| |
| // Detect when the creation mode changes |
| creationViewer.addSelectionChangedListener( new ISelectionChangedListener() { |
| @Override |
| public void selectionChanged( SelectionChangedEvent event ) { |
| NewBpelFileFirstPage.this.creationMode = (BpelCreationMode) ((IStructuredSelection) creationViewer.getSelection()).getFirstElement(); |
| explainationText.setText( NewBpelFileFirstPage.this.creationMode.getDescription()); |
| if( NewBpelFileFirstPage.this.creationMode == BpelCreationMode.GENERATE_BPEL_FROM_WSDL ) |
| imgLeftLabel.setImage( NewBpelFileFirstPage.this.wsdlImg ); |
| else |
| imgLeftLabel.setImage( NewBpelFileFirstPage.this.tplImg ); |
| |
| imgLeftLabel.getParent().layout(); |
| imgLeftLabel.getParent().getParent().layout(); |
| updateStatus(); |
| } |
| }); |
| |
| |
| // Initialize all the stuff |
| creationViewer.setSelection( new StructuredSelection( BpelCreationMode.CREATE_NEW_BPEL )); |
| creationViewer.getCombo().notifyListeners( SWT.Selection, new Event()); |
| if( getErrorMessage() != null ) { |
| setPageComplete( false ); |
| setErrorMessage( null ); |
| } |
| } |
| |
| |
| /** |
| * Validates the page data and updates the page state in consequence. |
| */ |
| private void updateStatus() { |
| String errorMsg = validatePage(); |
| setPageComplete( errorMsg == null ); |
| setErrorMessage( errorMsg ); |
| } |
| |
| |
| /** |
| * Validates the page data and stores valid values for further use. |
| * @return an error message or null if everything is right |
| */ |
| private String validatePage() { |
| |
| String errorMsg = null; |
| |
| // Validate the page fields |
| IStatus nameStatus; |
| if( this.processName == null || this.processName.trim().length() == 0 ) |
| errorMsg = "You have to specify the process name."; |
| |
| else if( this.processName.matches( "\\s" )) |
| errorMsg = "The process name cannot contain spaces or white characters."; |
| |
| else if( ! ( nameStatus = ResourcesPlugin.getWorkspace().validateName( this.processName, IResource.FILE )).isOK()) |
| errorMsg = nameStatus.getMessage(); |
| |
| else if( this.processNamespace == null || this.processNamespace.trim().length() == 0 ) |
| errorMsg = "You have to specify the process namespace."; |
| |
| |
| // No error => store properties for the templates |
| if( errorMsg == null |
| && this.creationMode == BpelCreationMode.CREATE_NEW_BPEL ) { |
| |
| String bpelNamespace = this.abstractProcess ? BPELConstants.NAMESPACE_ABSTRACT_2007 : BPELConstants.NAMESPACE; |
| this.processTemplateProperties.put( "processName", this.processName ); //$NON-NLS-1$ |
| this.processTemplateProperties.put( "namespace", this.processNamespace ); //$NON-NLS-1$ |
| this.processTemplateProperties.put( "bpelNamespace", bpelNamespace ); //$NON-NLS-1$ |
| this.processTemplateProperties.put( "date", new Date()); //$NON-NLS-1$ |
| } |
| |
| |
| // Save some fields for further use |
| IDialogSettings settings = getWizard().getDialogSettings(); |
| if( settings != null ) |
| settings.put( NewBpelFileWizard.DIALOG_SETTINGS_PROCESS_NAME, this.processName ); |
| |
| return errorMsg; |
| } |
| |
| |
| /** |
| * The different modes to create a new BPEL to edit. |
| */ |
| public static enum BpelCreationMode { |
| CREATE_NEW_BPEL, GENERATE_BPEL_FROM_WSDL; |
| |
| /* |
| * (non-Javadoc) |
| * @see java.lang.Enum#toString() |
| */ |
| @Override |
| public String toString() { |
| |
| String result; |
| switch( this ) { |
| case CREATE_NEW_BPEL: |
| result = "Create a BPEL process from a template"; |
| break; |
| case GENERATE_BPEL_FROM_WSDL: |
| result = "Create a BPEL process from a service description"; |
| break; |
| default: |
| result = ""; |
| } |
| |
| return result; |
| }; |
| |
| |
| /** |
| * @return a more detailed description |
| */ |
| public String getDescription() { |
| |
| String result; |
| switch( this ) { |
| case CREATE_NEW_BPEL: |
| result = "This will generate a skeleton of BPEL process.\nThis skeleton is based on pre-defined templates."; |
| break; |
| |
| case GENERATE_BPEL_FROM_WSDL: |
| result = "This will generate a skeleton of BPEL process to implement a given WSDL contract.\n" |
| + "\t \u2666 \tThe resulting process starts with a pick activity.\n" |
| + "\t \u2666 \tMessage dispatching depends on the invoked operation."; |
| break; |
| default: |
| result = ""; |
| } |
| |
| return result; |
| } |
| } |
| } |