org.bonitasoft.studio.properties.sections.message.wizards.AddMessageEventWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for org.bonitasoft.studio.properties.sections.message.wizards.AddMessageEventWizardPage.java

Source

/**
 * Copyright (C) 2009-2012 BonitaSoft S.A.
 * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2.0 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.bonitasoft.studio.properties.sections.message.wizards;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.bonitasoft.studio.common.ExpressionConstants;
import org.bonitasoft.studio.common.emf.tools.ModelHelper;
import org.bonitasoft.studio.common.repository.RepositoryManager;
import org.bonitasoft.studio.diagram.custom.repository.DiagramRepositoryStore;
import org.bonitasoft.studio.expression.editor.filter.AvailableExpressionTypeFilter;
import org.bonitasoft.studio.expression.editor.provider.IExpressionNatureProvider;
import org.bonitasoft.studio.expression.editor.viewer.ExpressionCollectionViewer;
import org.bonitasoft.studio.expression.editor.viewer.ExpressionViewer;
import org.bonitasoft.studio.expression.editor.viewer.LineTableCreator;
import org.bonitasoft.studio.model.expression.Expression;
import org.bonitasoft.studio.model.expression.ExpressionFactory;
import org.bonitasoft.studio.model.expression.ListExpression;
import org.bonitasoft.studio.model.expression.TableExpression;
import org.bonitasoft.studio.model.process.AbstractProcess;
import org.bonitasoft.studio.model.process.CorrelationTypeActive;
import org.bonitasoft.studio.model.process.MainProcess;
import org.bonitasoft.studio.model.process.Message;
import org.bonitasoft.studio.model.process.ProcessFactory;
import org.bonitasoft.studio.model.process.ProcessPackage;
import org.bonitasoft.studio.model.process.ThrowMessageEvent;
import org.bonitasoft.studio.pics.Pics;
import org.bonitasoft.studio.properties.i18n.Messages;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.ValidationStatusProvider;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.databinding.wizard.WizardPageSupport;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;

/**
 * @author Romain Bioteau
 * @author Aurelien Pupier - integrate Correlation andf use databinding
 * @author Aurelie Zara -integrate MessageContent Id and validation
 */
public class AddMessageEventWizardPage extends WizardPage implements IWizardPage {

    private final ThrowMessageEvent element;
    private final Message originalMessage;
    private String throwEvent;
    private GridData gd;

    private ExpressionViewer elementExpressionViewer;
    private ExpressionViewer processExpressionViewer;

    private final Message workingCopyMessage;
    protected DataBindingContext databindingContext;
    protected boolean allowSortOnCorrelation = true;
    private CatchMessageEventNamesExpressionNatureProvider catchEventNatureProvider;

    private WizardPageSupport pageSupport;

    protected MainProcess diagram;
    private Text nameText;

    /**
     * @param performer
     * @param pageName
     */
    protected AddMessageEventWizardPage(MainProcess diagram, final ThrowMessageEvent element,
            Message originalMessage, Message workingCopyMessage) {
        super(Messages.messageEventAddWizardPageName, Messages.messageEventAddWizardPageTitle, Pics.getWizban());
        setDescription(Messages.messageEventAddWizardPageDesc);
        this.element = element;
        this.originalMessage = originalMessage;
        if (originalMessage != null) {
            if (originalMessage.getCorrelation() == null) {
                originalMessage.setCorrelation(ProcessFactory.eINSTANCE.createCorrelation());
            }
        }
        if (workingCopyMessage == null) {
            workingCopyMessage = ProcessFactory.eINSTANCE.createMessage();
        }
        if (workingCopyMessage.getCorrelation() == null) {
            workingCopyMessage.setCorrelation(ProcessFactory.eINSTANCE.createCorrelation());
        }
        this.workingCopyMessage = workingCopyMessage;
        this.diagram = diagram;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
     * .Composite)
     */
    @Override
    public void createControl(Composite parent) {
        databindingContext = new DataBindingContext();

        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).spacing(15, 10).create());

        createNameLine(composite);

        createDescriptionLine(composite);

        createProcessExpressionViewer(composite);

        createComboEventLine(composite);

        createTableFolder(composite);

        pageSupport = WizardPageSupport.create(this, databindingContext);
        setControl(composite);
    }

    private void createTableFolder(Composite composite) {
        final TabFolder messageAndCorrelationFolder = new TabFolder(composite, SWT.NONE);
        messageAndCorrelationFolder.setLayout(GridLayoutFactory.fillDefaults().create());
        messageAndCorrelationFolder
                .setLayoutData(GridDataFactory.fillDefaults().grab(true, true).span(2, 1).create());

        final TabItem messageContentTableItem = new TabItem(messageAndCorrelationFolder, SWT.NONE);
        messageContentTableItem.setText(Messages.addMessageContent);
        final Composite messageContentComposite = new Composite(messageAndCorrelationFolder, SWT.NONE);
        createMessageContentComposite(messageContentComposite);
        messageContentTableItem.setControl(messageContentComposite);

        final TabItem correlationTableItem = new TabItem(messageAndCorrelationFolder, SWT.NONE);
        correlationTableItem.setText(Messages.correlation);
        final Composite correlationComposite = new Composite(messageAndCorrelationFolder, SWT.NONE);
        createcorrelationComposite(correlationComposite);
        correlationTableItem.setControl(correlationComposite);

    }

    private void createMessageContentComposite(Composite composite) {
        composite.setLayout(GridLayoutFactory.fillDefaults().margins(5, 10).create());
        composite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

        final Label messageContentDescriptionLabel = new Label(composite, SWT.NONE | SWT.WRAP);
        messageContentDescriptionLabel
                .setLayoutData(GridDataFactory.fillDefaults().grab(true, false).indent(12, 0).create());
        messageContentDescriptionLabel.setText(Messages.addMessageContentDescription);
        final List<String> captions = new ArrayList<String>(2);
        captions.add(Messages.messageContentID);
        captions.add(Messages.expressionName);

        final ExpressionCollectionViewer ecv = new ExpressionCollectionViewer(composite, 0, false, 2, true,
                captions, false, false);
        ecv.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
        ecv.setAddRowLabel(Messages.addMessageContentButton);
        ecv.setRemoveRowLabel(Messages.removeMessageContent);
        ecv.setLineTableCreator(new LineTableCreator() {
            public ListExpression createListExpressionForNewLineInTable(int size) {
                ListExpression rowExp = ExpressionFactory.eINSTANCE.createListExpression();
                EList<Expression> expressions = rowExp.getExpressions();
                for (int i = 0; i < size; i++) {
                    final Expression cellExpression = ExpressionFactory.eINSTANCE.createExpression();
                    if (i == 0) {
                        cellExpression.setReturnTypeFixed(true);
                    }
                    expressions.add(cellExpression);
                }
                return rowExp;
            }
        });
        addMessageContentFilters(ecv);
        ecv.setInput(element);

        final TableExpression messageContent = getMessageContentTable();
        ecv.setSelection(messageContent);

        ecv.addModifyListener(new Listener() {
            @Override
            public void handleEvent(Event event) {
                final IStatus status = AddMessageEventWizardPage.this
                        .validateId(workingCopyMessage.getMessageContent(), Messages.addMessageContent);
                updateValidationStatus(status);
            }
        });
        ecv.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    }

    private void addMessageContentFilters(final ExpressionCollectionViewer ecv) {
        final List<ViewerFilter> filters = new ArrayList<ViewerFilter>(2);
        filters.add(new AvailableExpressionTypeFilter(new String[] { ExpressionConstants.CONSTANT_TYPE }) {

        });
        filters.add(new AvailableExpressionTypeFilter(
                new String[] { ExpressionConstants.CONSTANT_TYPE, ExpressionConstants.SCRIPT_TYPE,
                        ExpressionConstants.PARAMETER_TYPE, ExpressionConstants.VARIABLE_TYPE }));
        ecv.setViewerFilters(filters);
    }

    private void createcorrelationComposite(Composite composite) {
        composite.setLayout(GridLayoutFactory.fillDefaults().margins(5, 10).create());
        composite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
        final Label correlationDescriptionLabel = new Label(composite, SWT.NONE | SWT.WRAP);
        correlationDescriptionLabel
                .setLayoutData(GridDataFactory.fillDefaults().grab(true, false).indent(12, 0).create());
        correlationDescriptionLabel.setText(Messages.correlationDescription);
        final Button useCorrelationCheckbox = new Button(composite, SWT.CHECK);
        useCorrelationCheckbox
                .setLayoutData(GridDataFactory.fillDefaults().grab(false, false).indent(12, 0).create());

        final ControlDecoration correlationHelp = new ControlDecoration(useCorrelationCheckbox,
                SWT.LEFT | SWT.CENTER);
        correlationHelp
                .setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_INFO_TSK));
        correlationHelp.setDescriptionText(Messages.correlationKeyHelp);

        useCorrelationCheckbox.setText(Messages.useCorrelationkeys);
        useCorrelationCheckbox.setSelection(false);
        useCorrelationCheckbox.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                super.widgetSelected(e);
                if (!useCorrelationCheckbox.getSelection()) {
                    workingCopyMessage.getCorrelation().setCorrelationType(CorrelationTypeActive.INACTIVE);
                } else {
                    workingCopyMessage.getCorrelation().setCorrelationType(CorrelationTypeActive.KEYS);
                    updateValidationStatus(AddMessageEventWizardPage.this.hasAtLeastOneCorrelation(
                            workingCopyMessage.getCorrelation().getCorrelationAssociation()));
                }
            }
        });
        if (CorrelationTypeActive.KEYS.equals(workingCopyMessage.getCorrelation().getCorrelationType())) {
            useCorrelationCheckbox.setSelection(true);
            updateValidationStatus(AddMessageEventWizardPage.this
                    .hasAtLeastOneCorrelation(workingCopyMessage.getCorrelation().getCorrelationAssociation()));
        } else {
            useCorrelationCheckbox.setSelection(false);
        }

        final Composite correlationComposite = new Composite(composite, SWT.NONE);
        correlationComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
        correlationComposite.setLayout(GridLayoutFactory.fillDefaults().create());

        final List<String> captions = new ArrayList<String>(2);
        captions.add(Messages.correlationKey);
        captions.add(Messages.correlationValue);

        final ExpressionCollectionViewer ecv = new ExpressionCollectionViewer(correlationComposite, 5, false, 2,
                true, captions, false, true);
        ecv.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).hint(SWT.DEFAULT, 140).create());

        ecv.setAddRowLabel(Messages.AddCorrelation);
        ecv.setRemoveRowLabel(Messages.removeCorrelation);
        final List<ViewerFilter> filters = new ArrayList<ViewerFilter>(2);
        filters.add(new AvailableExpressionTypeFilter(new String[] { ExpressionConstants.CONSTANT_TYPE }));
        filters.add(new AvailableExpressionTypeFilter(
                new String[] { ExpressionConstants.CONSTANT_TYPE, ExpressionConstants.PARAMETER_TYPE,
                        ExpressionConstants.SCRIPT_TYPE, ExpressionConstants.VARIABLE_TYPE })); // Second column has
        // everything except
        // Form field and
        // simulation type
        ecv.setViewerFilters(filters);
        ecv.setInput(element);

        final TableExpression correlationAssociation = getCorrelationTable();
        ecv.setSelection(correlationAssociation);
        ecv.addModifyListener(new Listener() {
            @Override
            public void handleEvent(Event event) {
                IStatus status = AddMessageEventWizardPage.this.validateId(
                        workingCopyMessage.getCorrelation().getCorrelationAssociation(), Messages.correlation);
                updateValidationStatus(status);
            }
        });

        final ISWTObservableValue observeSelectionUseCorrelation = SWTObservables
                .observeSelection(useCorrelationCheckbox);
        databindingContext.bindValue(SWTObservables.observeEnabled(ecv.getViewer().getControl()),
                observeSelectionUseCorrelation);
        databindingContext.bindValue(SWTObservables.observeEnabled(ecv.getAddRowButton()),
                observeSelectionUseCorrelation);
        databindingContext.bindValue(SWTObservables.observeEnabled(ecv.getRemoveRowButton()),
                observeSelectionUseCorrelation);
    }

    protected TableExpression getCorrelationTable() {
        TableExpression correlationAssociation = workingCopyMessage.getCorrelation().getCorrelationAssociation();
        if (correlationAssociation == null) {
            workingCopyMessage.getCorrelation()
                    .setCorrelationAssociation(ExpressionFactory.eINSTANCE.createTableExpression());
            correlationAssociation = workingCopyMessage.getCorrelation().getCorrelationAssociation();
        }
        return correlationAssociation;
    }

    protected void updateValidationStatus(IStatus status) {
        if (status.isOK()) {
            setErrorMessage(null);
            Iterator<?> it = databindingContext.getValidationStatusProviders().iterator();
            while (it.hasNext()) {
                final ValidationStatusProvider provider = (ValidationStatusProvider) it.next();
                final IStatus iStatus = (IStatus) provider.getValidationStatus().getValue();
                if (!iStatus.isOK()) {
                    setErrorMessage(iStatus.getMessage());
                } else {
                    setPageComplete(true);
                }
            }
            setPageComplete(isPageComplete());
        } else {
            setErrorMessage(status.getMessage());
            setPageComplete(false);
        }
    }

    protected TableExpression getMessageContentTable() {
        TableExpression messageContent = workingCopyMessage.getMessageContent();
        if (messageContent == null) {
            workingCopyMessage.setMessageContent(ExpressionFactory.eINSTANCE.createTableExpression());
            messageContent = workingCopyMessage.getMessageContent();
        }
        return messageContent;
    }

    protected IStatus hasAtLeastOneCorrelation(TableExpression expTable) {
        if (expTable == null) {
            return ValidationStatus.error(Messages.oneCorrelationAtLeastNeeded);
        } else if (expTable.getExpressions().isEmpty()) {
            return ValidationStatus.error(Messages.oneCorrelationAtLeastNeeded);
        }
        return Status.OK_STATUS;
    }

    protected IStatus validateId(TableExpression expTable, String tableName) {
        final Set<String> ids = new HashSet<String>();
        String duplicateId = null;

        for (ListExpression row : expTable.getExpressions()) {
            if (row.getExpressions().size() > 0) {
                final Expression expr = row.getExpressions().get(0);
                final Expression value = row.getExpressions().get(1);
                if (ExpressionConstants.CONSTANT_TYPE.equals(expr.getType())) {
                    final String id = expr.getName();
                    if (id != null && ids.contains(id)) {
                        duplicateId = id;
                        return ValidationStatus
                                .error(Messages.bind(Messages.dublicateIdErrorMessage, duplicateId, tableName));
                    } else {
                        if (ids != null && id != null && !id.isEmpty()) {
                            ids.add(id);
                        }
                        if (id != null && !id.isEmpty() && value.getName() == null) {
                            return ValidationStatus.error(Messages.bind(Messages.valueShouldBeDefined, id));
                        }
                        if ((id == null || id.isEmpty()) && value.getName() != null) {
                            return ValidationStatus
                                    .error(Messages.bind(Messages.idShouldBeDefined, value.getName()));
                        }
                    }
                }
            }
            if (tableName.equals(Messages.correlation)) {
                if (CorrelationTypeActive.KEYS.equals(workingCopyMessage.getCorrelation().getCorrelationType())) {
                    if (ids.isEmpty()) {
                        return ValidationStatus.error(Messages.oneCorrelationAtLeastNeeded);
                    }
                }
            }
            if (elementExpressionViewer == null || elementExpressionViewer.getTextControl().getText().isEmpty()) {
                return ValidationStatus.error(Messages.eventNameLabel + " " + Messages.isMandatory);
            }
            if (processExpressionViewer == null || processExpressionViewer.getTextControl().getText().isEmpty()) {
                return ValidationStatus.error(Messages.processNameLabel + " " + Messages.isMandatory);
            }
            if (nameText.getText() == null || nameText.getText().isEmpty()) {
                return ValidationStatus.error(Messages.emptyName);
            }
        }

        return Status.OK_STATUS;
    }

    private void createComboEventLine(Composite composite) {
        Label eventNameLabel = new Label(composite, SWT.NONE);
        eventNameLabel.setText(Messages.eventNameLabel + " *");
        eventNameLabel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).create());

        elementExpressionViewer = new ExpressionViewer(composite, SWT.BORDER,
                ProcessPackage.Literals.MESSAGE__TARGET_ELEMENT_EXPRESSION);
        elementExpressionViewer.getControl().setLayoutData(gd);
        elementExpressionViewer.addFilter(new AvailableExpressionTypeFilter(
                new String[] { ExpressionConstants.CONSTANT_TYPE, ExpressionConstants.SCRIPT_TYPE,
                        ExpressionConstants.PARAMETER_TYPE, ExpressionConstants.VARIABLE_TYPE }));
        elementExpressionViewer.setMessage(Messages.targetEventMessageHint, IStatus.INFO);
        elementExpressionViewer.setMandatoryField(Messages.eventNameLabel, databindingContext);
        elementExpressionViewer.setContext(element);
        catchEventNatureProvider = new CatchMessageEventNamesExpressionNatureProvider();
        catchEventNatureProvider.setThrowMessage(element);
        elementExpressionViewer.setExpressionNatureProvider(catchEventNatureProvider);

        if (workingCopyMessage.getTargetElementExpression() == null) {
            final Expression createExpression = ExpressionFactory.eINSTANCE.createExpression();
            createExpression.setReturnTypeFixed(true);
            createExpression.setReturnType(String.class.getName());
            workingCopyMessage.setTargetElementExpression(createExpression);
        }
        elementExpressionViewer.setInput(workingCopyMessage);

        refreshTargetEventContent();

        databindingContext.bindValue(ViewersObservables.observeSingleSelection(elementExpressionViewer),
                EMFObservables.observeValue(workingCopyMessage,
                        ProcessPackage.Literals.MESSAGE__TARGET_ELEMENT_EXPRESSION));

    }

    private void createProcessExpressionViewer(Composite composite) {
        final Label processNameLabel = new Label(composite, SWT.NONE);
        processNameLabel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).create());
        processNameLabel.setText(Messages.processNameLabel + " *");

        processExpressionViewer = new ExpressionViewer(composite, SWT.BORDER,
                ProcessPackage.Literals.MESSAGE__TARGET_PROCESS_EXPRESSION);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        processExpressionViewer.getControl().setLayoutData(gd);
        processExpressionViewer.addFilter(new AvailableExpressionTypeFilter(
                new String[] { ExpressionConstants.CONSTANT_TYPE, ExpressionConstants.SCRIPT_TYPE,
                        ExpressionConstants.PARAMETER_TYPE, ExpressionConstants.VARIABLE_TYPE }));
        processExpressionViewer.setMandatoryField(Messages.processNameLabel, databindingContext);
        processExpressionViewer.setMessage(Messages.targetProcessMessageHint, IStatus.INFO);
        final IExpressionNatureProvider provider = new ProcessNamesExpressionNatureProviderForMessage();
        provider.setContext(element);
        processExpressionViewer.setExpressionNatureProvider(provider);
        processExpressionViewer.setContext(element);
        if (workingCopyMessage.getTargetProcessExpression() == null) {
            final Expression createExpression = ExpressionFactory.eINSTANCE.createExpression();
            createExpression.setReturnTypeFixed(true);
            createExpression.setReturnType(String.class.getName());
            workingCopyMessage.setTargetProcessExpression(createExpression);
        }
        processExpressionViewer.setInput(workingCopyMessage);

        databindingContext.bindValue(ViewersObservables.observeSingleSelection(processExpressionViewer),
                EMFObservables.observeValue(workingCopyMessage,
                        ProcessPackage.Literals.MESSAGE__TARGET_PROCESS_EXPRESSION));
        processExpressionViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                refreshTargetEventContent();
            }
        });
    }

    private Text createDescriptionLine(Composite composite) {
        Label descLabel = new Label(composite, SWT.NONE);
        descLabel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.END, SWT.TOP).create());
        descLabel.setText(Messages.dataDescriptionLabel);
        final Text descText = new Text(composite, SWT.MULTI | SWT.BORDER);
        gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gd.heightHint = 45;
        descText.setLayoutData(gd);
        databindingContext.bindValue(
                SWTObservables.observeDelayedValue(200, SWTObservables.observeText(descText, SWT.Modify)),
                EMFObservables.observeValue(workingCopyMessage, ProcessPackage.Literals.ELEMENT__DOCUMENTATION));
        return descText;
    }

    private Text createNameLine(Composite composite) {
        Label nameLabel = new Label(composite, SWT.NONE);
        nameLabel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).create());
        nameLabel.setText(Messages.dataNameLabel);

        nameText = new Text(composite, SWT.BORDER);
        nameText.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());

        IValidator nameValidator = new IValidator() {

            @Override
            public IStatus validate(Object arg0) {
                if (arg0 instanceof String) {
                    String s = (String) arg0;
                    if (s == null || s.isEmpty()) {
                        return ValidationStatus.error(Messages.emptyName);
                    } else {
                        List<Message> events = ModelHelper.getAllItemsOfType(ModelHelper.getMainProcess(element),
                                ProcessPackage.eINSTANCE.getMessage());
                        for (Message ev : events) {
                            if (!ev.equals(originalMessage) && ev.getName().equals(s)) {
                                return ValidationStatus.error(Messages.messageEventAddWizardNameAlreadyExists);
                            }
                        }
                    }
                }
                return ValidationStatus.ok();
            }
        };

        UpdateValueStrategy uvs = new UpdateValueStrategy(/*
                                                          * UpdateValueStrategy.
                                                          * POLICY_CONVERT
                                                          */);
        uvs.setBeforeSetValidator(nameValidator);
        databindingContext.bindValue(
                SWTObservables.observeDelayedValue(200, SWTObservables.observeText(nameText, SWT.Modify)),
                EMFObservables.observeValue(workingCopyMessage, ProcessPackage.Literals.ELEMENT__NAME), uvs, null);
        return nameText;
    }

    /**
     * Refresh target combo content
     */
    private void refreshTargetEventContent() {
        if (processExpressionViewer.getSelection() != null && !processExpressionViewer.getSelection().isEmpty()) {
            Expression procName = (Expression) ((StructuredSelection) processExpressionViewer.getSelection())
                    .getFirstElement();
            if (procName.getType().equals(ExpressionConstants.CONSTANT_TYPE)) {
                AbstractProcess proc = getProcessOnDiagram(ModelHelper.getMainProcess(element),
                        procName.getContent());
                DiagramRepositoryStore store = (DiagramRepositoryStore) RepositoryManager.getInstance()
                        .getRepositoryStore(DiagramRepositoryStore.class);
                List<AbstractProcess> processes = store.findProcesses(procName.getContent());
                if (proc != null) {
                    processes.add(proc);
                }
                catchEventNatureProvider.setFoundProcesses(processes);
            } else {
                catchEventNatureProvider.setFoundProcesses(null);
            }

            elementExpressionViewer.updateAutocompletionProposals();
        }
    }

    private AbstractProcess getProcessOnDiagram(MainProcess mainProcess, String procName) {
        for (AbstractProcess proc : ModelHelper.getAllProcesses(mainProcess)) {
            if (proc.getName().equals(procName)) {
                return proc;
            }
        }
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.DialogPage#dispose()
     */
    @Override
    public void dispose() {
        super.dispose();
        if (pageSupport != null) {
            pageSupport.dispose();
        }
        if (databindingContext != null) {
            databindingContext.dispose();
        }
    }

    public String getThrowEvent() {
        return throwEvent;
    }

}