Package org.jbpm.ui.custom

Source Code of org.jbpm.ui.custom.SwimlaneAssignerCellEditorProvider

package org.jbpm.ui.custom;

import java.io.ByteArrayInputStream;
import java.util.List;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
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.Label;
import org.eclipse.swt.widgets.Text;
import org.jbpm.ui.DesignerLogger;
import org.jbpm.ui.PluginConstants;
import org.jbpm.ui.common.model.Delegable;
import org.jbpm.ui.common.model.GraphElement;
import org.jbpm.ui.common.model.ProcessDefinition;
import org.jbpm.ui.common.model.Swimlane;
import org.jbpm.ui.dialog.DelegableConfigurationDialog;
import org.jbpm.ui.dialog.SwimlaneConfigDialog;
import org.jbpm.ui.dialog.XmlHighlightTextStyling;
import org.jbpm.ui.resource.Messages;
import org.jbpm.ui.util.XmlUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class SwimlaneAssignerCellEditorProvider extends DelegableProvider {
    private ProcessDefinition definition;

    @Override
    protected DelegableConfigurationDialog createConfigurationDialog(Delegable delegable) {
        definition = ((GraphElement) delegable).getProcessDefinition();
        return new SwimlaneAssignerConfigurationDialog(
                delegable.getDelegationConfiguration(),
                definition.getSwimlaneNames());
    }

    @Override
    public boolean validateValue(Delegable delegable) {
        try {
            XmlUtil.parseDocument(new ByteArrayInputStream(delegable.getDelegationConfiguration().getBytes(PluginConstants.UTF_ENCODING)));
            return true;
        } catch (Exception e) {
            DesignerLogger.logErrorWithoutDialog("SwimlaneAssignerActionHandler; invalid configuration", e);
            return false;
        }
    }

    public class SwimlaneAssignerConfigurationDialog extends DelegableConfigurationDialog {
        private final List<String> swimlaneNames;
        private Combo swimlaneNameCombo;
        private Text swimlaneInitializerText;
        private Button swimlaneInitializerButton;
       
        public SwimlaneAssignerConfigurationDialog(String initialValue, List<String> swimlaneNames) {
            super(initialValue);
            this.swimlaneNames = swimlaneNames;
        }

        @Override
        protected Point getInitialSize() {
            return new Point(500, 300);
        }

        @Override
        protected void createDialogHeader(Composite composite) {
            Composite gui = new Composite(composite, SWT.NONE);
            gui.setLayout(new GridLayout(3, false));
            gui.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
           
            String initialSwimlaneName = "";
            String initialSwimlaneInitializer = "";
            try {
                Document document = XmlUtil.parseDocument(new ByteArrayInputStream(initialValue.getBytes(PluginConstants.UTF_ENCODING)));
                Element root = document.getDocumentElement();
                initialSwimlaneName = root.getAttribute("swimlaneName");
                initialSwimlaneInitializer = root.getAttribute("swimlaneInititalizer");
            } catch (Exception e) {
            }
           
            {
                Label label = new Label(gui, SWT.NONE);
                label.setText(Messages.getString("swimlane.name"));
            }
            swimlaneNameCombo = new Combo(gui, SWT.READ_ONLY);
            GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
            gridData.horizontalSpan = 2;
            swimlaneNameCombo.setLayoutData(gridData);
            swimlaneNameCombo.setItems(swimlaneNames.toArray(new String[swimlaneNames.size()]));
            swimlaneNameCombo.setText(initialSwimlaneName);
            swimlaneNameCombo.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    updateText();
                }
            });
           
            {
                Label label = new Label(gui, SWT.NONE);
                label.setText(Messages.getString("swimlane.initializer"));
            }

            swimlaneInitializerText = new Text(gui, SWT.BORDER);
            swimlaneInitializerText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
            swimlaneInitializerText.setText(initialSwimlaneInitializer);
            swimlaneInitializerText.addModifyListener(new ModifyListener() {
                public void modifyText(ModifyEvent e) {
                    updateText();
                }
            });
           
            swimlaneInitializerButton = new Button(gui, SWT.NONE);
            swimlaneInitializerButton.setText("...");
            swimlaneInitializerButton.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    Swimlane swimlane = new Swimlane();
                    swimlane.setName("TEST");
                    swimlane.setDelegationConfiguration(swimlaneInitializerText.getText());
                    SwimlaneConfigDialog dialog = new SwimlaneConfigDialog(definition, swimlane, "");
                    if (dialog.open() == IDialogConstants.OK_ID) {
                        swimlaneInitializerText.setText(dialog.getConfiguration());
                    }
                }
            });
           
            super.createDialogHeader(composite);
        }
       
        public void updateText() {
            String xml = "<Assign swimlaneName=\"" + swimlaneNameCombo.getText() + "\" ";
            xml += "swimlaneInititalizer=\"" + swimlaneInitializerText.getText() + "\"/>";
            styledText.setText(xml);
        }

        @Override
        protected void createDialogFooter(Composite composite) {
            styledText.addLineStyleListener(new XmlHighlightTextStyling());
        }

    }
}
TOP

Related Classes of org.jbpm.ui.custom.SwimlaneAssignerCellEditorProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.