Package org.enhydra.jawe.base.panel.panels

Source Code of org.enhydra.jawe.base.panel.panels.XMLTransitionPanel

package org.enhydra.jawe.base.panel.panels;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.swing.JOptionPane;
import org.enhydra.jawe.ResourceManager;
import org.enhydra.jawe.base.panel.PanelContainer;
import org.enhydra.shark.xpdl.XMLElement;
import org.enhydra.shark.xpdl.XMLUtil;
import org.enhydra.shark.xpdl.XPDLConstants;
import org.enhydra.shark.xpdl.elements.Condition;
import org.enhydra.shark.xpdl.elements.DataField;
import org.enhydra.shark.xpdl.elements.DataFields;
import org.enhydra.shark.xpdl.elements.Transition;
import org.enhydra.shark.xpdl.elements.WorkflowProcess;

public class XMLTransitionPanel extends XMLGroupPanel {

   public XMLTransitionPanel(PanelContainer pc,
                        XMLElement myOwnerL,
                        Object[] elements,
                        String title,
                        boolean isVertical,
                        boolean hasBorder,
                        boolean hasEmptyBorder) {
      super(pc,
           myOwnerL,
           Arrays.asList(elements),
           title,
           isVertical,
           hasBorder,
           hasEmptyBorder);
   }

   public XMLTransitionPanel(PanelContainer pc,
                        XMLElement myOwnerL,
                        List elements,
                        String title,
                        boolean isVertical,
                        boolean hasBorder,
                        boolean hasEmptyBorder) {

      super(pc, myOwnerL, elements, title, isVertical, hasBorder, hasEmptyBorder);
   }

   public static final String DEFAULT_VARIABLE = "status";

    @Override
    public void setElements() {
        super.setElements();
        suggestCondition();
    }

    /**
     * Suggest to automatically add a Condition if a name is specified
     */
    protected void suggestCondition() {
        Transition transition = (Transition)getOwner();
        String name = transition.getName();
        Condition condition = transition.getCondition();
        String conditionType = (condition != null) ? condition.getType() : "";
        String expression = (condition != null) ? condition.toValue() : "";

        // check when transition name is specified and no existing condition
        if (name != null && name.trim().length() > 0
                && conditionType.trim().length() == 0 || conditionType.equals(XPDLConstants.CONDITION_TYPE_CONDITION)
                && expression.trim().length() == 0) {

            // check for existing variable
            String variableName = checkDefaultVariable(transition);

            if (variableName != null) {
                // prompt to auto generate condition
                String message = "<html>"
                        + "<font size=\"3\">"
                        + ResourceManager.getLanguageDependentString("GUIDE_AUTO_CONDITION")
                        + "</font>"
                        + "</html>";
                int result = JOptionPane.showConfirmDialog(this.getRootPane(), message, ResourceManager.getLanguageDependentString("GUIDE_TITLE"), JOptionPane.YES_NO_OPTION);
                if (result == JOptionPane.YES_OPTION) {
                    // create default variable
                    createDefaultVariable(transition, variableName);
                    // set condition expression
                    populateExpression(transition, variableName, name);
                }
            }
        }
    }

    /**
     * Check for existence of the default variable
     * @return name of the default variable, null if not created
     */
    protected String checkDefaultVariable(Transition transition) {
        String variableName = null;
        // check for existing variables
        WorkflowProcess process = (WorkflowProcess) transition.getParent().getParent();
        Map dataFieldMap = XMLUtil.getPossibleDataFields(process);
        if (dataFieldMap.isEmpty() || dataFieldMap.get(DEFAULT_VARIABLE) != null) {
            variableName = DEFAULT_VARIABLE;
        }
        return variableName;
    }

    /**
     * Create default variable if no existing variables
     * @return name of the created variable, null if not created
     */
    protected void createDefaultVariable(Transition transition, String variableName) {
        WorkflowProcess process = (WorkflowProcess) transition.getParent().getParent();
        Map dataFieldMap = XMLUtil.getPossibleDataFields(process);
        if (dataFieldMap.isEmpty() || dataFieldMap.get(variableName) == null) {
            // default variable does not exist, create new one
            DataFields dfs = process.getDataFields();
            DataField df = (DataField)dfs.generateNewElement();
            df.setId(variableName);
            dfs.add(df);
        }
    }

    /**
     * Add condition expression variable == 'value'
     * @param variable
     * @param value
     */
    protected void populateExpression(Transition transition, String variable, String value) {
        // set expression
        String expression = variable + "=='" + value + "'";
        Condition condition = transition.getCondition();
        condition.setTypeCONDITION();
        condition.setValue(expression);

        // reset name to blank
        transition.setName("");
    }

}
TOP

Related Classes of org.enhydra.jawe.base.panel.panels.XMLTransitionPanel

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.