org.eclipse.bpel.ui.dialogs.EditPropertyAliasDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.bpel.ui.dialogs.EditPropertyAliasDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2005 IBM 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.bpel.ui.dialogs;

import java.util.Iterator;

import org.eclipse.bpel.model.messageproperties.MessagepropertiesFactory;
import org.eclipse.bpel.model.messageproperties.Property;
import org.eclipse.bpel.model.messageproperties.PropertyAlias;
import org.eclipse.bpel.model.messageproperties.Query;
import org.eclipse.bpel.ui.BPELEditor;
import org.eclipse.bpel.ui.IHelpContextIds;
import org.eclipse.bpel.ui.Messages;
import org.eclipse.bpel.ui.details.providers.ModelTreeContentProvider;
import org.eclipse.bpel.ui.details.providers.ModelTreeLabelProvider;
import org.eclipse.bpel.ui.details.providers.PartTreeContentProvider;
import org.eclipse.bpel.ui.details.tree.ITreeNode;
import org.eclipse.bpel.ui.details.tree.PartTreeNode;
import org.eclipse.bpel.ui.properties.DialogVariableTypeSelector;
import org.eclipse.bpel.ui.properties.VariableTypeSelector;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.Message;
import org.eclipse.wst.wsdl.Part;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDTypeDefinition;

/**
 * Dialog for creating or editing a property alias.
 */
public class EditPropertyAliasDialog extends Dialog {

    protected BPELEditor bpelEditor;
    protected Definition wsdlDefinition;
    protected Property property;
    protected PropertyAlias alias;

    protected DialogVariableTypeSelector variableTypeSelector;
    protected Tree messagePartTree;
    protected TreeViewer messagePartViewer;
    protected boolean createAlias;

    protected TabbedPropertySheetWidgetFactory wf;

    protected class PropertyAliasDialogCallback implements VariableTypeSelector.Callback {
        public void selectRadioButton(int index) {
        }

        public void selectXSDType(XSDTypeDefinition xsdType) {
        }

        public void selectXSDElement(XSDElementDeclaration xsdElement) {
        }

        public void selectMessageType(Message message) {
            variableTypeSelector.setVariableType(message);
            messagePartViewer.setInput(message);
            updateWidgets();
        }
    }

    public EditPropertyAliasDialog(Shell parentShell, Property property, PropertyAlias alias, BPELEditor bpelEditor,
            TabbedPropertySheetWidgetFactory wf) {
        super(parentShell);
        setShellStyle(getShellStyle() | SWT.RESIZE);
        this.createAlias = (alias == null);
        this.alias = alias;
        this.property = property;
        this.bpelEditor = bpelEditor;
        this.wf = wf;
        if (alias != null && alias.getMessageType() != null) {
            Resource resource = ((EObject) alias.getMessageType()).eResource();
            wsdlDefinition = (Definition) resource.getContents().get(0);
        }
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite composite = (Composite) super.createDialogArea(parent);
        GridLayout layout = (GridLayout) composite.getLayout();
        layout.makeColumnsEqualWidth = false;
        layout.numColumns = 2;

        // create widgets
        Label topLabel = new Label(composite, SWT.NONE);
        if (createAlias) {
            topLabel.setText(Messages.EditPropertyAliasDialog_3);
        } else {
            topLabel.setText(Messages.EditPropertyAliasDialog_4);
        }
        variableTypeSelector = new DialogVariableTypeSelector(composite, SWT.NONE, bpelEditor, getShell(),
                new PropertyAliasDialogCallback(), wf);
        variableTypeSelector.setVariableType(null);
        Label partLabel = new Label(composite, SWT.NONE);
        partLabel.setText(Messages.EditPropertyAliasDialog_8);
        messagePartTree = new Tree(composite, SWT.BORDER);
        messagePartViewer = new TreeViewer(messagePartTree);
        messagePartViewer.setContentProvider(new PartTreeContentProvider(true));
        messagePartViewer.setLabelProvider(new ModelTreeLabelProvider());
        messagePartViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                updateEnablement();
            }
        });

        // layout widgets
        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
        topLabel.setLayoutData(data);

        data = new GridData(GridData.FILL_HORIZONTAL);
        data.horizontalSpan = 2;
        variableTypeSelector.setLayoutData(data);

        data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
        partLabel.setLayoutData(data);
        data = new GridData(GridData.FILL_HORIZONTAL);
        data.verticalSpan = 3;
        data.heightHint = 70;
        messagePartTree.setLayoutData(data);

        updateWidgets();

        PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContextIds.PROPERTY_ALIAS_DIALOG);

        return composite;
    }

    protected void updateWidgets() {
        if (wsdlDefinition != null) {
            Message message = (Message) alias.getMessageType();
            messagePartViewer.setInput(message);
            variableTypeSelector.setVariableType(message);
            String partName = alias.getPart();
            if (partName != null) {
                Part part = null;
                for (Iterator iter = message.getEParts().iterator(); iter.hasNext();) {
                    Part temp = (Part) iter.next();
                    if (partName.equals(temp.getName())) {
                        part = temp;
                        break;
                    }
                }
                if (part != null) {
                    PartTreeNode node = new PartTreeNode(part, false);
                    messagePartViewer.setSelection(new StructuredSelection(node), true);
                }
            }
        } else {
            //variableTypeSelector.setVariableType(null);
        }
        updateEnablement();
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        if (createAlias) {
            newShell.setText(Messages.EditPropertyAliasDialog_9);
        } else {
            newShell.setText(Messages.EditPropertyAliasDialog_10);
        }
    }

    /**
     * @return Returns the alias.
     */
    public PropertyAlias getPropertyAlias() {
        return alias;
    }

    @Override
    protected void okPressed() {
        if (alias == null) {
            alias = MessagepropertiesFactory.eINSTANCE.createPropertyAlias();
        }
        Message message = (Message) variableTypeSelector.getVariableType();

        ModelTreeContentProvider tcp = (ModelTreeContentProvider) messagePartViewer.getContentProvider();
        String part = null;
        String query = ""; //$NON-NLS-1$
        ITreeNode result = (ITreeNode) ((IStructuredSelection) messagePartViewer.getSelection()).getFirstElement();
        while (result != null) {
            if (result instanceof PartTreeNode) {
                part = result.getLabel();
                break;
            }
            if (!query.equals("")) { //$NON-NLS-1$
                query = result.getLabel() + "/" + query; //$NON-NLS-1$
            } else {
                query = result.getLabel();
            }
            result = (ITreeNode) tcp.getParent(result);
        }
        if (query.length() > 0)
            query = "/" + query; //$NON-NLS-1$
        else
            query = null;

        alias.setPropertyName(property);
        alias.setMessageType(message);
        alias.setPart(part);
        Query queryObject = alias.getQuery();
        if (queryObject == null) {
            queryObject = MessagepropertiesFactory.eINSTANCE.createQuery();
        }
        queryObject.setValue(query);
        alias.setQuery(queryObject);
        super.okPressed();
    }

    @Override
    protected Control createContents(Composite parent) {
        Control result = super.createContents(parent);
        updateEnablement();
        return result;
    }

    protected void updateEnablement() {
        // update the OK button
        boolean isOK = true;
        if (variableTypeSelector.getVariableType() == null || (messagePartViewer.getSelection() == null)
                || (messagePartViewer.getSelection().isEmpty())) {
            isOK = false;
        }
        Button okButton = getButton(IDialogConstants.OK_ID);
        if (okButton != null) {
            okButton.setEnabled(isOK);
        }
    }
}