Search in sources :

Example 1 with Assignment

use of org.eclipse.bpmn2.Assignment in project kie-wb-common by kiegroup.

the class BPMNFormModelGeneratorImpl method readTaskVariables.

protected void readTaskVariables(UserTask userTask, ProcessTaskFormsGenerationResult result) {
    TaskFormVariables formVariables = new TaskFormVariables(userTask);
    List<DataInputAssociation> dataInputAssociations = userTask.getDataInputAssociations();
    if (dataInputAssociations != null) {
        for (DataInputAssociation inputAssociation : dataInputAssociations) {
            if (inputAssociation.getTargetRef() != null) {
                String name = ((DataInput) inputAssociation.getTargetRef()).getName();
                if (BPMNVariableUtils.isValidInputName(name)) {
                    String type = Optional.ofNullable(inputAssociation.getTargetRef().getItemSubjectRef()).map(ItemDefinition::getStructureRef).orElse(inputAssociation.getTargetRef().getAnyAttribute().get(0).getValue().toString());
                    type = BPMNVariableUtils.getRealTypeForInput(type);
                    Variable variable = new Variable(name, type);
                    variable.setInput(true);
                    formVariables.addVariable(variable);
                } else if (BPMNVariableUtils.TASK_FORM_VARIABLE.equals(name)) {
                    List<Assignment> assignments = inputAssociation.getAssignment();
                    for (Iterator<Assignment> it = assignments.iterator(); it.hasNext() && StringUtils.isEmpty(formVariables.getTaskName()); ) {
                        Assignment assignment = it.next();
                        if (assignment.getFrom() != null) {
                            String taskName = ((FormalExpression) assignment.getFrom()).getBody();
                            if (!StringUtils.isEmpty(taskName)) {
                                // Parsing taskName... it comes in a <![CDATA[]]>
                                taskName = Parser.xmlParser().parseInput(taskName, "").toString();
                                formVariables.setTaskName(taskName);
                            }
                        }
                    }
                }
            }
        }
    }
    List<DataOutputAssociation> dataOutputAssociations = userTask.getDataOutputAssociations();
    if (dataOutputAssociations != null) {
        dataOutputAssociations.forEach(outputAssociation -> {
            if (outputAssociation.getSourceRef() != null && outputAssociation.getSourceRef().size() == 1) {
                DataOutput output = (DataOutput) outputAssociation.getSourceRef().get(0);
                String name = output.getName();
                String type = Optional.ofNullable(output.getItemSubjectRef()).map(ItemDefinition::getStructureRef).orElse(output.getAnyAttribute().get(0).getValue().toString());
                type = BPMNVariableUtils.getRealTypeForInput(type);
                Variable variable = new Variable(name, type);
                variable.setOutput(true);
                formVariables.addVariable(variable);
            }
        });
    }
    if (!StringUtils.isEmpty(formVariables.getTaskName())) {
        result.registerTaskFormVariables(userTask.getId(), formVariables);
    } else {
        logger.warn("Cannot generate a form for task '{}' since it has no form name.", userTask.getName());
    }
}
Also used : DataInput(org.eclipse.bpmn2.DataInput) Assignment(org.eclipse.bpmn2.Assignment) DataOutput(org.eclipse.bpmn2.DataOutput) Iterator(java.util.Iterator) List(java.util.List) DataOutputAssociation(org.eclipse.bpmn2.DataOutputAssociation) DataInputAssociation(org.eclipse.bpmn2.DataInputAssociation)

Example 2 with Assignment

use of org.eclipse.bpmn2.Assignment in project kie-wb-common by kiegroup.

the class Bpmn2JsonUnmarshaller method applyCallActivityProperties.

protected void applyCallActivityProperties(CallActivity callActivity, Map<String, String> properties) {
    if (properties.get("name") != null) {
        callActivity.setName(StringEscapeUtils.escapeXml(properties.get("name")).replaceAll("\\r\\n|\\r|\\n", " "));
        // add unescaped and untouched name value as extension element as well
        Utils.setMetaDataExtensionValue(callActivity, "elementname", wrapInCDATABlock(properties.get("name").replaceAll("\\\\n", "\n")));
    } else {
        callActivity.setName("");
    }
    if (properties.get("independent") != null && properties.get("independent").length() > 0) {
        ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
        EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "independent", false, false);
        SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, properties.get("independent"));
        callActivity.getAnyAttribute().add(extensionEntry);
    }
    if (properties.get("waitforcompletion") != null && properties.get("waitforcompletion").length() > 0) {
        ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
        EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "waitForCompletion", false, false);
        SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, properties.get("waitforcompletion"));
        callActivity.getAnyAttribute().add(extensionEntry);
    }
    if (properties.get("calledelement") != null && properties.get("calledelement").length() > 0) {
        callActivity.setCalledElement(properties.get("calledelement"));
    }
    // isAsync metadata
    if (properties.get("isasync") != null && properties.get("isasync").length() > 0 && properties.get("isasync").equals("true")) {
        Utils.setMetaDataExtensionValue(callActivity, "customAsync", wrapInCDATABlock(properties.get("isasync")));
    }
    parseAssignmentsInfo(properties);
    // callActivity data input set
    applyDataInputProperties(callActivity, properties, new HashMap<String, DataInput>());
    // callActivity data output set
    applyDataOutputProperties(callActivity, properties);
    // callActivity assignments
    if (properties.get("assignments") != null && properties.get("assignments").length() > 0) {
        String[] allAssignments = properties.get("assignments").split(",\\s*");
        for (String assignment : allAssignments) {
            if (assignment.contains("=")) {
                String[] assignmentParts = assignment.split("=\\s*");
                DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
                String fromPart = assignmentParts[0];
                if (fromPart.startsWith("[din]")) {
                    fromPart = fromPart.substring(5, fromPart.length());
                }
                boolean foundTaskName = false;
                if (callActivity.getIoSpecification() != null && callActivity.getIoSpecification().getDataOutputs() != null) {
                    List<DataInput> dataInputs = callActivity.getIoSpecification().getDataInputs();
                    for (DataInput di : dataInputs) {
                        if (di.getId().equals(callActivity.getId() + "_" + fromPart + "InputX")) {
                            dia.setTargetRef(di);
                            if (di.getName().equals("TaskName")) {
                                foundTaskName = true;
                                break;
                            }
                        }
                    }
                }
                Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
                FormalExpression fromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
                if (assignmentParts.length > 1) {
                    String replacer = decodeAssociationValue(assignmentParts[1]);
                    fromExpression.setBody(wrapInCDATABlock(replacer));
                } else {
                    fromExpression.setBody("");
                }
                FormalExpression toExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
                toExpression.setBody(dia.getTargetRef().getId());
                a.setFrom(fromExpression);
                a.setTo(toExpression);
                dia.getAssignment().add(a);
                callActivity.getDataInputAssociations().add(dia);
            // } else if(assignment.contains("<->")) {
            // String[] assignmentParts = assignment.split( "<->\\s*" );
            // DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            // DataOutputAssociation doa = Bpmn2Factory.eINSTANCE.createDataOutputAssociation();
            // 
            // ItemAwareElement ie = Bpmn2Factory.eINSTANCE.createItemAwareElement();
            // ie.setId(assignmentParts[0]);
            // dia.getSourceRef().add(ie);
            // doa.setTargetRef(ie);
            // 
            // List<DataInput> dataInputs = callActivity.getIoSpecification().getDataInputs();
            // for(DataInput di : dataInputs) {
            // if(di.getId().equals(callActivity.getId() + "_" + assignmentParts[1] + "InputX")) {
            // dia.setTargetRef(di);
            // break;
            // }
            // }
            // List<DataOutput> dataOutputs = callActivity.getIoSpecification().getDataOutputs();
            // for(DataOutput dout : dataOutputs) {
            // if(dout.getId().equals(callActivity.getId() + "_" + assignmentParts[1] + "OutputX")) {
            // doa.getSourceRef().add(dout);
            // break;
            // }
            // }
            // 
            // callActivity.getDataInputAssociations().add(dia);
            // callActivity.getDataOutputAssociations().add(doa);
            } else if (assignment.contains("->")) {
                String[] assignmentParts = assignment.split("->\\s*");
                String fromPart = assignmentParts[0];
                boolean isDataInput = false;
                boolean isDataOutput = false;
                if (fromPart.startsWith("[din]")) {
                    fromPart = fromPart.substring(5, fromPart.length());
                    isDataInput = true;
                }
                if (fromPart.startsWith("[dout]")) {
                    fromPart = fromPart.substring(6, fromPart.length());
                    isDataOutput = true;
                }
                List<DataOutput> dataOutputs = callActivity.getIoSpecification().getDataOutputs();
                if (isDataOutput) {
                    // doing data output
                    DataOutputAssociation doa = Bpmn2Factory.eINSTANCE.createDataOutputAssociation();
                    for (DataOutput dout : dataOutputs) {
                        if (dout.getId().equals(callActivity.getId() + "_" + fromPart + "OutputX")) {
                            doa.getSourceRef().add(dout);
                            break;
                        }
                    }
                    ItemAwareElement ie = Bpmn2Factory.eINSTANCE.createItemAwareElement();
                    ie.setId(assignmentParts[1]);
                    doa.setTargetRef(ie);
                    callActivity.getDataOutputAssociations().add(doa);
                } else if (isDataInput) {
                    // doing data input
                    DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
                    // association from process var to dataInput var
                    ItemAwareElement ie = Bpmn2Factory.eINSTANCE.createItemAwareElement();
                    ie.setId(fromPart);
                    dia.getSourceRef().add(ie);
                    List<DataInput> dataInputs = callActivity.getIoSpecification().getDataInputs();
                    for (DataInput di : dataInputs) {
                        if (di.getId().equals(callActivity.getId() + "_" + assignmentParts[1] + "InputX")) {
                            dia.setTargetRef(di);
                            break;
                        }
                    }
                    callActivity.getDataInputAssociations().add(dia);
                }
            } else {
            // TODO throw exception here?
            }
        }
    }
    // process on-entry and on-exit actions as custom elements
    applyOnEntryActions(callActivity, properties);
    applyOnExitActions(callActivity, properties);
    // simulation
    if (properties.get("distributiontype") != null && properties.get("distributiontype").length() > 0) {
        TimeParameters timeParams = BpsimFactory.eINSTANCE.createTimeParameters();
        Parameter processingTimeParam = BpsimFactory.eINSTANCE.createParameter();
        if (properties.get("distributiontype").equals("normal")) {
            NormalDistributionType normalDistributionType = BpsimFactory.eINSTANCE.createNormalDistributionType();
            normalDistributionType.setStandardDeviation(Double.valueOf(properties.get("standarddeviation")));
            normalDistributionType.setMean(Double.valueOf(properties.get("mean")));
            processingTimeParam.getParameterValue().add(normalDistributionType);
        } else if (properties.get("distributiontype").equals("uniform")) {
            UniformDistributionType uniformDistributionType = BpsimFactory.eINSTANCE.createUniformDistributionType();
            uniformDistributionType.setMax(Double.valueOf(properties.get("max")));
            uniformDistributionType.setMin(Double.valueOf(properties.get("min")));
            processingTimeParam.getParameterValue().add(uniformDistributionType);
        // random distribution not supported in bpsim 1.0
        // } else if(properties.get("distributiontype").equals("random")) {
        // RandomDistributionType randomDistributionType = BpsimFactory.eINSTANCE.createRandomDistributionType();
        // randomDistributionType.setMax(Double.valueOf(properties.get("max")));
        // randomDistributionType.setMin(Double.valueOf(properties.get("min")));
        // processingTimeParam.getParameterValue().add(randomDistributionType);
        } else if (properties.get("distributiontype").equals("poisson")) {
            PoissonDistributionType poissonDistributionType = BpsimFactory.eINSTANCE.createPoissonDistributionType();
            poissonDistributionType.setMean(Double.valueOf(properties.get("mean")));
            processingTimeParam.getParameterValue().add(poissonDistributionType);
        }
        // }
        if (properties.get("waittime") != null) {
            Parameter waittimeParam = BpsimFactory.eINSTANCE.createParameter();
            FloatingParameterType waittimeParamValue = BpsimFactory.eINSTANCE.createFloatingParameterType();
            DecimalFormat twoDForm = new DecimalFormat("#.##");
            waittimeParamValue.setValue(Double.valueOf(twoDForm.format(Double.valueOf(properties.get("waittime")))));
            waittimeParam.getParameterValue().add(waittimeParamValue);
            timeParams.setWaitTime(waittimeParam);
        }
        timeParams.setProcessingTime(processingTimeParam);
        if (_simulationElementParameters.containsKey(callActivity.getId())) {
            _simulationElementParameters.get(callActivity.getId()).add(timeParams);
        } else {
            List<EObject> values = new ArrayList<EObject>();
            values.add(timeParams);
            _simulationElementParameters.put(callActivity.getId(), values);
        }
    }
    CostParameters costParameters = BpsimFactory.eINSTANCE.createCostParameters();
    if (properties.get("unitcost") != null && properties.get("unitcost").length() > 0) {
        Parameter unitcostParam = BpsimFactory.eINSTANCE.createParameter();
        FloatingParameterType unitCostParameterValue = BpsimFactory.eINSTANCE.createFloatingParameterType();
        unitCostParameterValue.setValue(new Double(properties.get("unitcost")));
        unitcostParam.getParameterValue().add(unitCostParameterValue);
        costParameters.setUnitCost(unitcostParam);
    }
    // }
    if (_simulationElementParameters.containsKey(callActivity.getId())) {
        _simulationElementParameters.get(callActivity.getId()).add(costParameters);
    } else {
        List<EObject> values = new ArrayList<EObject>();
        values.add(costParameters);
        _simulationElementParameters.put(callActivity.getId(), values);
    }
}
Also used : DataOutput(org.eclipse.bpmn2.DataOutput) CostParameters(bpsim.CostParameters) NormalDistributionType(bpsim.NormalDistributionType) DecimalFormat(java.text.DecimalFormat) ArrayList(java.util.ArrayList) Assignment(org.eclipse.bpmn2.Assignment) EAttributeImpl(org.eclipse.emf.ecore.impl.EAttributeImpl) EObject(org.eclipse.emf.ecore.EObject) SimpleFeatureMapEntry(org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.SimpleFeatureMapEntry) ArrayList(java.util.ArrayList) List(java.util.List) DataOutputAssociation(org.eclipse.bpmn2.DataOutputAssociation) UniformDistributionType(bpsim.UniformDistributionType) ItemAwareElement(org.eclipse.bpmn2.ItemAwareElement) FormalExpression(org.eclipse.bpmn2.FormalExpression) FloatingParameterType(bpsim.FloatingParameterType) DataInput(org.eclipse.bpmn2.DataInput) PoissonDistributionType(bpsim.PoissonDistributionType) Parameter(bpsim.Parameter) ExtendedMetaData(org.eclipse.emf.ecore.util.ExtendedMetaData) TimeParameters(bpsim.TimeParameters) DataInputAssociation(org.eclipse.bpmn2.DataInputAssociation)

Example 3 with Assignment

use of org.eclipse.bpmn2.Assignment in project kie-wb-common by kiegroup.

the class Bpmn2JsonUnmarshaller method applyUserTaskProperties.

protected void applyUserTaskProperties(UserTask task, Map<String, String> properties) {
    setLastUserTaskID(task);
    if (properties.get("actors") != null && properties.get("actors").length() > 0) {
        String[] allActors = properties.get("actors").split(",\\s*");
        for (String actor : allActors) {
            PotentialOwner po = Bpmn2Factory.eINSTANCE.createPotentialOwner();
            ResourceAssignmentExpression rae = Bpmn2Factory.eINSTANCE.createResourceAssignmentExpression();
            FormalExpression fe = Bpmn2Factory.eINSTANCE.createFormalExpression();
            fe.setBody(actor);
            rae.setExpression(fe);
            po.setResourceAssignmentExpression(rae);
            task.getResources().add(po);
        }
    }
    if (properties.get("script_language") != null && properties.get("script_language").length() > 0) {
        String scriptLanguage = getScriptLanguageFormat(properties);
        ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
        EAttributeImpl scriptLanguageElement = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "scriptFormat", false, false);
        SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(scriptLanguageElement, scriptLanguage);
        task.getAnyAttribute().add(extensionEntry);
    }
    if (properties.get("groupid") != null && properties.get("groupid").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundGroupIdInput = false;
        DataInput foundInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("GroupId")) {
                foundGroupIdInput = true;
                foundInput = din;
                break;
            }
        }
        if (!foundGroupIdInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "GroupId" + "InputX");
            d.setName("GroupId");
            task.getIoSpecification().getDataInputs().add(d);
            foundInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundGroupIdAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundInput.getId())) {
                foundGroupIdAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(wrapInCDATABlock(properties.get("groupid")));
            }
        }
        if (!foundGroupIdAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression groupFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            groupFromExpression.setBody(wrapInCDATABlock(properties.get("groupid")));
            FormalExpression groupToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            groupToExpression.setBody(foundInput.getId());
            a.setFrom(groupFromExpression);
            a.setTo(groupToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    // default to true if not set
    String skippableStr = (properties.get("skippable") == null ? "true" : properties.get("skippable"));
    if (skippableStr.length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundSkippableInput = false;
        DataInput foundInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("Skippable")) {
                foundSkippableInput = true;
                foundInput = din;
                break;
            }
        }
        if (!foundSkippableInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "Skippable" + "InputX");
            d.setName("Skippable");
            task.getIoSpecification().getDataInputs().add(d);
            foundInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundSkippableAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundInput.getId())) {
                foundSkippableAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(skippableStr);
            }
        }
        if (!foundSkippableAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression skippableFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            skippableFromExpression.setBody(skippableStr);
            FormalExpression skippableToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            skippableToExpression.setBody(foundInput.getId());
            a.setFrom(skippableFromExpression);
            a.setTo(skippableToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    if (properties.get("subject") != null && properties.get("subject").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundCommentInput = false;
        DataInput foundInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("Comment")) {
                foundCommentInput = true;
                foundInput = din;
                break;
            }
        }
        if (!foundCommentInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "Comment" + "InputX");
            d.setName("Comment");
            task.getIoSpecification().getDataInputs().add(d);
            foundInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundCommentAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundInput.getId())) {
                foundCommentAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(wrapInCDATABlock(properties.get("subject")));
            }
        }
        if (!foundCommentAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression commentFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            commentFromExpression.setBody(wrapInCDATABlock(properties.get("subject")));
            FormalExpression commentToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            commentToExpression.setBody(foundInput.getId());
            a.setFrom(commentFromExpression);
            a.setTo(commentToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    if (properties.get("description") != null && properties.get("description").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundDescriptionInput = false;
        DataInput foundInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("Description")) {
                foundDescriptionInput = true;
                foundInput = din;
                break;
            }
        }
        if (!foundDescriptionInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "Description" + "InputX");
            d.setName("Description");
            task.getIoSpecification().getDataInputs().add(d);
            foundInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundDescriptionAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundInput.getId())) {
                foundDescriptionAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(wrapInCDATABlock(properties.get("description")));
            }
        }
        if (!foundDescriptionAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression descriptionFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            descriptionFromExpression.setBody(wrapInCDATABlock(properties.get("description")));
            FormalExpression descriptionToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            descriptionToExpression.setBody(foundInput.getId());
            a.setFrom(descriptionFromExpression);
            a.setTo(descriptionToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    if (properties.get("priority") != null && properties.get("priority").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundPriorityInput = false;
        DataInput foundInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("Priority")) {
                foundPriorityInput = true;
                foundInput = din;
                break;
            }
        }
        if (!foundPriorityInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "Priority" + "InputX");
            d.setName("Priority");
            task.getIoSpecification().getDataInputs().add(d);
            foundInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundPriorityAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundInput.getId())) {
                foundPriorityAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(properties.get("priority"));
            }
        }
        if (!foundPriorityAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression priorityFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            priorityFromExpression.setBody(properties.get("priority"));
            FormalExpression priorityToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            priorityToExpression.setBody(foundInput.getId());
            a.setFrom(priorityFromExpression);
            a.setTo(priorityToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    if (properties.get("content") != null && properties.get("content").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            OutputSet outSet = Bpmn2Factory.eINSTANCE.createOutputSet();
            iospec.getOutputSets().add(outSet);
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundContentInput = false;
        DataInput foundInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("Content")) {
                foundContentInput = true;
                foundInput = din;
                break;
            }
        }
        if (!foundContentInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "Content" + "InputX");
            d.setName("Content");
            task.getIoSpecification().getDataInputs().add(d);
            foundInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundContentAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundInput.getId())) {
                foundContentAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(wrapInCDATABlock(properties.get("content")));
            }
        }
        if (!foundContentAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression contentFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            contentFromExpression.setBody(wrapInCDATABlock(properties.get("content")));
            FormalExpression contentToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            contentToExpression.setBody(foundInput.getId());
            a.setFrom(contentFromExpression);
            a.setTo(contentToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    if (properties.get("locale") != null && properties.get("locale").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundLocaleInput = false;
        DataInput foundInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("Locale")) {
                foundLocaleInput = true;
                foundInput = din;
                break;
            }
        }
        if (!foundLocaleInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "Locale" + "InputX");
            d.setName("Locale");
            task.getIoSpecification().getDataInputs().add(d);
            foundInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundLocaleAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundInput.getId())) {
                foundLocaleAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(wrapInCDATABlock(properties.get("locale")));
            }
        }
        if (!foundLocaleAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression localeFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            localeFromExpression.setBody(wrapInCDATABlock(properties.get("locale")));
            FormalExpression localeToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            localeToExpression.setBody(foundInput.getId());
            a.setFrom(localeFromExpression);
            a.setTo(localeToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    if (properties.get("createdby") != null && properties.get("createdby").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundCreatedByInput = false;
        DataInput foundInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("CreatedBy")) {
                foundCreatedByInput = true;
                foundInput = din;
                break;
            }
        }
        if (!foundCreatedByInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "CreatedBy" + "InputX");
            d.setName("CreatedBy");
            task.getIoSpecification().getDataInputs().add(d);
            foundInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundCreatedByAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundInput.getId())) {
                foundCreatedByAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(wrapInCDATABlock(properties.get("createdby")));
            }
        }
        if (!foundCreatedByAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression createdByFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            createdByFromExpression.setBody(wrapInCDATABlock(properties.get("createdby")));
            FormalExpression createdByToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            createdByToExpression.setBody(foundInput.getId());
            a.setFrom(createdByFromExpression);
            a.setTo(createdByToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    // reassignments
    if (properties.get("reassignment") != null && properties.get("reassignment").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundNotCompletedReassignmentsInput = false;
        boolean foundNotStartedReassignmentsInput = false;
        DataInput foundNotCompletedDataInput = null;
        DataInput foundNotStartedDataInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("NotCompletedReassign")) {
                foundNotCompletedReassignmentsInput = true;
                foundNotCompletedDataInput = din;
            }
            if (din.getName().equals("NotStartedReassign")) {
                foundNotStartedReassignmentsInput = true;
                foundNotStartedDataInput = din;
            }
        }
        if (!foundNotCompletedReassignmentsInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "NotCompletedReassign" + "InputX");
            d.setName("NotCompletedReassign");
            task.getIoSpecification().getDataInputs().add(d);
            foundNotCompletedDataInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        if (!foundNotStartedReassignmentsInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "NotStartedReassign" + "InputX");
            d.setName("NotStartedReassign");
            task.getIoSpecification().getDataInputs().add(d);
            foundNotStartedDataInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundNotCompletedReassignmentAssociation = false;
        boolean foundNotStartedReassignmentAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundNotCompletedDataInput.getId())) {
                foundNotCompletedReassignmentAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(getReassignmentsAndNotificationsForType(properties.get("reassignment"), "not-completed"));
            }
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundNotStartedDataInput.getId())) {
                foundNotStartedReassignmentAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(getReassignmentsAndNotificationsForType(properties.get("reassignment"), "not-started"));
            }
        }
        if (!foundNotCompletedReassignmentAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundNotCompletedDataInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression notCompletedFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            notCompletedFromExpression.setBody(getReassignmentsAndNotificationsForType(properties.get("reassignment"), "not-completed"));
            FormalExpression notCompletedToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            notCompletedToExpression.setBody(foundNotCompletedDataInput.getId());
            a.setFrom(notCompletedFromExpression);
            a.setTo(notCompletedToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
        if (!foundNotStartedReassignmentAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundNotStartedDataInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression notStartedFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            notStartedFromExpression.setBody(getReassignmentsAndNotificationsForType(properties.get("reassignment"), "not-started"));
            FormalExpression notStartedToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            notStartedToExpression.setBody(foundNotStartedDataInput.getId());
            a.setFrom(notStartedFromExpression);
            a.setTo(notStartedToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    // start notifications
    if (properties.get("notifications") != null && properties.get("notifications").length() > 0) {
        if (task.getIoSpecification() == null) {
            InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
            task.setIoSpecification(iospec);
        }
        List<DataInput> dataInputs = task.getIoSpecification().getDataInputs();
        boolean foundNotCompletedNotificationsInput = false;
        boolean foundNotStartedNotificationsInput = false;
        DataInput foundNotCompletedDataInput = null;
        DataInput foundNotStartedDataInput = null;
        for (DataInput din : dataInputs) {
            if (din.getName().equals("NotCompletedNotify")) {
                foundNotCompletedNotificationsInput = true;
                foundNotCompletedDataInput = din;
            }
            if (din.getName().equals("NotStartedNotify")) {
                foundNotStartedNotificationsInput = true;
                foundNotStartedDataInput = din;
            }
        }
        if (!foundNotCompletedNotificationsInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "NotCompletedNotify" + "InputX");
            d.setName("NotCompletedNotify");
            task.getIoSpecification().getDataInputs().add(d);
            foundNotCompletedDataInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        if (!foundNotStartedNotificationsInput) {
            DataInput d = Bpmn2Factory.eINSTANCE.createDataInput();
            d.setId(task.getId() + "_" + "NotStartedNotify" + "InputX");
            d.setName("NotStartedNotify");
            task.getIoSpecification().getDataInputs().add(d);
            foundNotStartedDataInput = d;
            if (task.getIoSpecification().getInputSets() == null || task.getIoSpecification().getInputSets().size() < 1) {
                InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
                task.getIoSpecification().getInputSets().add(inset);
            }
            task.getIoSpecification().getInputSets().get(0).getDataInputRefs().add(d);
        }
        boolean foundNotCompletedNotificationAssociation = false;
        boolean foundNotStartedNotificationAssociation = false;
        List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
        for (DataInputAssociation da : inputAssociations) {
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundNotCompletedDataInput.getId())) {
                foundNotCompletedNotificationAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(getReassignmentsAndNotificationsForType(properties.get("notifications"), "not-completed"));
            }
            if (da.getTargetRef() != null && da.getTargetRef().getId().equals(foundNotStartedDataInput.getId())) {
                foundNotStartedNotificationAssociation = true;
                ((FormalExpression) da.getAssignment().get(0).getFrom()).setBody(getReassignmentsAndNotificationsForType(properties.get("notifications"), "not-started"));
            }
        }
        if (!foundNotCompletedNotificationAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundNotCompletedDataInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression notCompletedFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            notCompletedFromExpression.setBody(getReassignmentsAndNotificationsForType(properties.get("notifications"), "not-completed"));
            FormalExpression notCompletedToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            notCompletedToExpression.setBody(foundNotCompletedDataInput.getId());
            a.setFrom(notCompletedFromExpression);
            a.setTo(notCompletedToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
        if (!foundNotStartedNotificationAssociation) {
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            dia.setTargetRef(foundNotStartedDataInput);
            Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
            FormalExpression notStartedFromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            notStartedFromExpression.setBody(getReassignmentsAndNotificationsForType(properties.get("notifications"), "not-started"));
            FormalExpression notStartedToExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
            notStartedToExpression.setBody(foundNotStartedDataInput.getId());
            a.setFrom(notStartedFromExpression);
            a.setTo(notStartedToExpression);
            dia.getAssignment().add(a);
            task.getDataInputAssociations().add(dia);
        }
    }
    // revisit data assignments
    if (task.getDataInputAssociations() != null) {
        List<DataInputAssociation> dataInputAssociations = task.getDataInputAssociations();
        List<DataInputAssociation> incompleteAssociations = new ArrayList<DataInputAssociation>();
        for (DataInputAssociation dia : dataInputAssociations) {
            DataInput targetInput = (DataInput) dia.getTargetRef();
            if (targetInput != null && targetInput.getName() != null) {
                if (targetInput.getName().equals("GroupId") && (properties.get("groupid") == null || properties.get("groupid").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("Skippable") && (skippableStr == null || skippableStr.length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("Comment") && (properties.get("subject") == null || properties.get("subject").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("Description") && (properties.get("description") == null || properties.get("description").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("Priority") && (properties.get("priority") == null || properties.get("priority").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("Content") && (properties.get("content") == null || properties.get("content").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("Locale") && (properties.get("locale") == null || properties.get("locale").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("CreatedBy") && (properties.get("createdby") == null || properties.get("createdby").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("NotCompletedReassign") && (properties.get("reassignment") == null || properties.get("reassignment").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("NotStartedReassign") && (properties.get("reassignment") == null || properties.get("reassignment").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("NotCompletedNotify") && (properties.get("notifications") == null || properties.get("notifications").length() == 0)) {
                    incompleteAssociations.add(dia);
                } else if (targetInput.getName().equalsIgnoreCase("NotStartedNotify") && (properties.get("notifications") == null || properties.get("notifications").length() == 0)) {
                    incompleteAssociations.add(dia);
                }
            }
        }
        for (DataInputAssociation tr : incompleteAssociations) {
            if (task.getDataInputAssociations() != null) {
                task.getDataInputAssociations().remove(tr);
            }
        }
    }
    List<DataInput> toRemoveDataInputs = new ArrayList<DataInput>();
    if (task.getIoSpecification() != null && task.getIoSpecification().getDataInputs() != null) {
        List<DataInput> taskDataInputs = task.getIoSpecification().getDataInputs();
        for (DataInput din : taskDataInputs) {
            if (din.getName().equals("GroupId") && (properties.get("groupid") == null || properties.get("groupid").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("Skippable") && (skippableStr == null || skippableStr.length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("Comment") && (properties.get("subject") == null || properties.get("subject").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("Description") && (properties.get("description") == null || properties.get("description").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("Priority") && (properties.get("priority") == null || properties.get("priority").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("Content") && (properties.get("content") == null || properties.get("content").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("Locale") && (properties.get("locale") == null || properties.get("locale").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("CreatedBy") && (properties.get("createdby") == null || properties.get("createdby").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("NotCompletedReassign") && (properties.get("reassignment") == null || properties.get("reassignment").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("NotStartedReassign") && (properties.get("reassignment") == null || properties.get("reassignment").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("NotCompletedNotify") && (properties.get("notifications") == null || properties.get("notifications").length() == 0)) {
                toRemoveDataInputs.add(din);
            } else if (din.getName().equalsIgnoreCase("NotStartedNotify") && (properties.get("notifications") == null || properties.get("notifications").length() == 0)) {
                toRemoveDataInputs.add(din);
            }
        }
    }
    for (DataInput trdin : toRemoveDataInputs) {
        if (task.getIoSpecification() != null && task.getIoSpecification().getDataInputs() != null) {
            if (task.getIoSpecification().getInputSets().size() > 0) {
                task.getIoSpecification().getInputSets().get(0).getDataInputRefs().remove(trdin);
            }
        }
        task.getIoSpecification().getDataInputs().remove(trdin);
    }
    // simulation properties
    ResourceParameters resourceParameters = BpsimFactory.eINSTANCE.createResourceParameters();
    if (properties.get("quantity") != null && properties.get("quantity").length() > 0) {
        Parameter quantityParam = BpsimFactory.eINSTANCE.createParameter();
        FloatingParameterType quantityValueParam = BpsimFactory.eINSTANCE.createFloatingParameterType();
        DecimalFormat twoDForm = new DecimalFormat("#.##");
        quantityValueParam.setValue(Double.valueOf(twoDForm.format(Double.valueOf(properties.get("quantity")))));
        quantityParam.getParameterValue().add(quantityValueParam);
        resourceParameters.setQuantity(quantityParam);
    }
    if (properties.get("workinghours") != null && properties.get("workinghours").length() > 0) {
        Parameter workingHoursParam = BpsimFactory.eINSTANCE.createParameter();
        FloatingParameterType workingHoursValueParam = BpsimFactory.eINSTANCE.createFloatingParameterType();
        DecimalFormat twoDForm = new DecimalFormat("#.##");
        workingHoursValueParam.setValue(Double.valueOf(twoDForm.format(Double.valueOf(properties.get("workinghours")))));
        workingHoursParam.getParameterValue().add(workingHoursValueParam);
        resourceParameters.setAvailability(workingHoursParam);
    }
    if (_simulationElementParameters.containsKey(task.getId())) {
        _simulationElementParameters.get(task.getId()).add(resourceParameters);
    } else {
        List<EObject> values = new ArrayList<EObject>();
        values.add(resourceParameters);
        _simulationElementParameters.put(task.getId(), values);
    }
}
Also used : OutputSet(org.eclipse.bpmn2.OutputSet) ResourceAssignmentExpression(org.eclipse.bpmn2.ResourceAssignmentExpression) InputOutputSpecification(org.eclipse.bpmn2.InputOutputSpecification) DecimalFormat(java.text.DecimalFormat) PotentialOwner(org.eclipse.bpmn2.PotentialOwner) ArrayList(java.util.ArrayList) FormalExpression(org.eclipse.bpmn2.FormalExpression) ResourceParameters(bpsim.ResourceParameters) FloatingParameterType(bpsim.FloatingParameterType) DataInput(org.eclipse.bpmn2.DataInput) InputSet(org.eclipse.bpmn2.InputSet) Assignment(org.eclipse.bpmn2.Assignment) EAttributeImpl(org.eclipse.emf.ecore.impl.EAttributeImpl) EObject(org.eclipse.emf.ecore.EObject) Parameter(bpsim.Parameter) SimpleFeatureMapEntry(org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.SimpleFeatureMapEntry) ExtendedMetaData(org.eclipse.emf.ecore.util.ExtendedMetaData) DataInputAssociation(org.eclipse.bpmn2.DataInputAssociation)

Example 4 with Assignment

use of org.eclipse.bpmn2.Assignment in project kie-wb-common by kiegroup.

the class Bpmn2JsonUnmarshaller method applySubProcessProperties.

protected void applySubProcessProperties(SubProcess sp, Map<String, String> properties) {
    if (properties.get("name") != null) {
        sp.setName(StringEscapeUtils.escapeXml(properties.get("name")).replaceAll("\\r\\n|\\r|\\n", " "));
        // add unescaped and untouched name value as extension element as well
        Utils.setMetaDataExtensionValue(sp, "elementname", wrapInCDATABlock(properties.get("name").replaceAll("\\\\n", "\n")));
    } else {
        sp.setName("");
    }
    // process on-entry and on-exit actions as custom elements
    applyOnEntryActions(sp, properties);
    applyOnExitActions(sp, properties);
    // isAsync metadata
    if (properties.get("isasync") != null && properties.get("isasync").length() > 0 && properties.get("isasync").equals("true")) {
        Utils.setMetaDataExtensionValue(sp, "customAsync", wrapInCDATABlock(properties.get("isasync")));
    }
    if (sp.getIoSpecification() == null) {
        InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
        sp.setIoSpecification(iospec);
    }
    parseAssignmentsInfo(properties);
    // data input set
    applyDataInputProperties(sp, properties, new HashMap<String, DataInput>());
    // data output set
    applyDataOutputProperties(sp, properties);
    // assignments
    if (properties.get("assignments") != null && properties.get("assignments").length() > 0 && sp.getIoSpecification() != null) {
        String[] allAssignments = properties.get("assignments").split(",\\s*");
        for (String assignment : allAssignments) {
            if (assignment.contains("=")) {
                String[] assignmentParts = assignment.split("=\\s*");
                String fromPart = assignmentParts[0];
                if (fromPart.startsWith("[din]")) {
                    fromPart = fromPart.substring(5, fromPart.length());
                }
                DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
                if (sp.getIoSpecification() != null && sp.getIoSpecification().getDataOutputs() != null) {
                    List<DataInput> dataInputs = sp.getIoSpecification().getDataInputs();
                    for (DataInput di : dataInputs) {
                        if (di.getId().equals(sp.getId() + "_" + fromPart + "InputX")) {
                            dia.setTargetRef(di);
                            if (di.getName().equals("TaskName")) {
                                break;
                            }
                        }
                    }
                }
                Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
                FormalExpression fromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
                if (assignmentParts.length > 1) {
                    String replacer = decodeAssociationValue(assignmentParts[1]);
                    fromExpression.setBody(wrapInCDATABlock(replacer));
                } else {
                    fromExpression.setBody("");
                }
                FormalExpression toExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
                toExpression.setBody(dia.getTargetRef().getId());
                a.setFrom(fromExpression);
                a.setTo(toExpression);
                dia.getAssignment().add(a);
                sp.getDataInputAssociations().add(dia);
            // } else if(assignment.contains("<->")) {
            // String[] assignmentParts = assignment.split( "<->\\s*" );
            // DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            // DataOutputAssociation doa = Bpmn2Factory.eINSTANCE.createDataOutputAssociation();
            // 
            // ItemAwareElement ie = Bpmn2Factory.eINSTANCE.createItemAwareElement();
            // ie.setId(assignmentParts[0]);
            // dia.getSourceRef().add(ie);
            // doa.setTargetRef(ie);
            // 
            // List<DataInput> dataInputs = sp.getIoSpecification().getDataInputs();
            // for(DataInput di : dataInputs) {
            // if(di.getId().equals(sp.getId() + "_" + assignmentParts[1] + "InputX")) {
            // dia.setTargetRef(di);
            // break;
            // }
            // }
            // List<DataOutput> dataOutputs = sp.getIoSpecification().getDataOutputs();
            // for(DataOutput dout : dataOutputs) {
            // if(dout.getId().equals(sp.getId() + "_" + assignmentParts[1] + "OutputX")) {
            // doa.getSourceRef().add(dout);
            // break;
            // }
            // }
            // 
            // sp.getDataInputAssociations().add(dia);
            // sp.getDataOutputAssociations().add(doa);
            } else if (assignment.contains("->")) {
                String[] assignmentParts = assignment.split("->\\s*");
                String fromPart = assignmentParts[0];
                boolean isDataInput = false;
                boolean isDataOutput = false;
                if (fromPart.startsWith("[din]")) {
                    fromPart = fromPart.substring(5, fromPart.length());
                    isDataInput = true;
                }
                if (fromPart.startsWith("[dout]")) {
                    fromPart = fromPart.substring(6, fromPart.length());
                    isDataOutput = true;
                }
                List<DataOutput> dataOutputs = sp.getIoSpecification().getDataOutputs();
                if (isDataOutput) {
                    DataOutputAssociation doa = Bpmn2Factory.eINSTANCE.createDataOutputAssociation();
                    for (DataOutput dout : dataOutputs) {
                        if (dout.getId().equals(sp.getId() + "_" + fromPart + "OutputX")) {
                            doa.getSourceRef().add(dout);
                            break;
                        }
                    }
                    ItemAwareElement ie = Bpmn2Factory.eINSTANCE.createItemAwareElement();
                    ie.setId(assignmentParts[1]);
                    doa.setTargetRef(ie);
                    sp.getDataOutputAssociations().add(doa);
                } else if (isDataInput) {
                    DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
                    // association from process var to dataInput var
                    ItemAwareElement ie = Bpmn2Factory.eINSTANCE.createItemAwareElement();
                    ie.setId(fromPart);
                    dia.getSourceRef().add(ie);
                    List<DataInput> dataInputs = sp.getIoSpecification().getDataInputs();
                    for (DataInput di : dataInputs) {
                        if (di.getId().equals(sp.getId() + "_" + assignmentParts[1] + "InputX")) {
                            dia.setTargetRef(di);
                            break;
                        }
                    }
                    sp.getDataInputAssociations().add(dia);
                }
            } else {
            // TODO throw exception here?
            }
        }
    }
    // loop characteristics input
    if (properties.get("mitrigger") != null && properties.get("mitrigger").equals("true")) {
        if (properties.get("multipleinstancecollectioninput") != null && properties.get("multipleinstancecollectioninput").length() > 0) {
            String miDataInputStr = properties.get("multipleinstancedatainput");
            if (miDataInputStr == null || miDataInputStr.length() < 1) {
                miDataInputStr = "defaultDataInput";
            }
            if (sp.getIoSpecification() == null) {
                InputOutputSpecification iospec = Bpmn2Factory.eINSTANCE.createInputOutputSpecification();
                sp.setIoSpecification(iospec);
            } else {
                sp.getIoSpecification().getDataInputs().clear();
                sp.getIoSpecification().getDataOutputs().clear();
                sp.getDataInputAssociations().clear();
                sp.getDataOutputAssociations().clear();
            }
            InputSet inset = sp.getIoSpecification().getInputSets().get(0);
            DataInput multiInput = Bpmn2Factory.eINSTANCE.createDataInput();
            multiInput.setId(sp.getId() + "_" + "input");
            multiInput.setName(properties.get("multipleinstancecollectioninput"));
            sp.getIoSpecification().getDataInputs().add(multiInput);
            inset.getDataInputRefs().add(multiInput);
            DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
            ItemAwareElement ie = Bpmn2Factory.eINSTANCE.createItemAwareElement();
            ie.setId(properties.get("multipleinstancecollectioninput"));
            dia.getSourceRef().add(ie);
            dia.setTargetRef(multiInput);
            sp.getDataInputAssociations().add(dia);
            MultiInstanceLoopCharacteristics loopCharacteristics = Bpmn2Factory.eINSTANCE.createMultiInstanceLoopCharacteristics();
            loopCharacteristics.setLoopDataInputRef(multiInput);
            DataInput din = Bpmn2Factory.eINSTANCE.createDataInput();
            din.setId(miDataInputStr);
            ItemDefinition itemDef = Bpmn2Factory.eINSTANCE.createItemDefinition();
            itemDef.setId(sp.getId() + "_" + "multiInstanceItemType");
            din.setItemSubjectRef(itemDef);
            _subprocessItemDefs.put(itemDef.getId(), itemDef);
            loopCharacteristics.setInputDataItem(din);
            // loop characteristics output
            if (properties.get("multipleinstancecollectionoutput") != null && properties.get("multipleinstancecollectionoutput").length() > 0) {
                String miDataOutputStr = properties.get("multipleinstancedataoutput");
                if (miDataOutputStr == null || miDataOutputStr.length() < 1) {
                    miDataOutputStr = "defaultDataOutput";
                }
                OutputSet outset = sp.getIoSpecification().getOutputSets().get(0);
                DataOutput multiOutput = Bpmn2Factory.eINSTANCE.createDataOutput();
                multiOutput.setId(sp.getId() + "_" + "output");
                multiOutput.setName(properties.get("multipleinstancecollectionoutput"));
                sp.getIoSpecification().getDataOutputs().add(multiOutput);
                outset.getDataOutputRefs().add(multiOutput);
                DataOutputAssociation doa = Bpmn2Factory.eINSTANCE.createDataOutputAssociation();
                ItemAwareElement ie2 = Bpmn2Factory.eINSTANCE.createItemAwareElement();
                ie2.setId(properties.get("multipleinstancecollectionoutput"));
                doa.getSourceRef().add(multiOutput);
                doa.setTargetRef(ie2);
                sp.getDataOutputAssociations().add(doa);
                loopCharacteristics.setLoopDataOutputRef(multiOutput);
                DataOutput don = Bpmn2Factory.eINSTANCE.createDataOutput();
                don.setId(miDataOutputStr);
                ItemDefinition itemDef2 = Bpmn2Factory.eINSTANCE.createItemDefinition();
                itemDef2.setId(sp.getId() + "_" + "multiInstanceItemType");
                don.setItemSubjectRef(itemDef2);
                _subprocessItemDefs.put(itemDef2.getId(), itemDef2);
                loopCharacteristics.setOutputDataItem(don);
            }
            // loop characteristics completion condition
            if (properties.get("multipleinstancecompletioncondition") != null && !properties.get("multipleinstancecompletioncondition").isEmpty()) {
                FormalExpression expr = Bpmn2Factory.eINSTANCE.createFormalExpression();
                expr.setBody(properties.get("multipleinstancecompletioncondition"));
                loopCharacteristics.setCompletionCondition(expr);
            }
            sp.setLoopCharacteristics(loopCharacteristics);
        } else {
            MultiInstanceLoopCharacteristics loopCharacteristics = Bpmn2Factory.eINSTANCE.createMultiInstanceLoopCharacteristics();
            sp.setLoopCharacteristics(loopCharacteristics);
        }
    }
    // properties
    if (properties.get("vardefs") != null && properties.get("vardefs").length() > 0) {
        String[] vardefs = properties.get("vardefs").split(",\\s*");
        for (String vardef : vardefs) {
            Property prop = Bpmn2Factory.eINSTANCE.createProperty();
            ItemDefinition itemdef = Bpmn2Factory.eINSTANCE.createItemDefinition();
            // check if we define a structure ref in the definition
            if (vardef.contains(":")) {
                String[] vardefParts = vardef.split(":\\s*");
                prop.setId(vardefParts[0]);
                itemdef.setId("_" + prop.getId() + "Item");
                boolean haveKPI = false;
                String kpiValue = "";
                if (vardefParts.length == 3) {
                    itemdef.setStructureRef(vardefParts[1]);
                    if (vardefParts[2].equals("true")) {
                        haveKPI = true;
                        kpiValue = vardefParts[2];
                    }
                }
                if (vardefParts.length == 2) {
                    if (vardefParts[1].equals("true") || vardefParts[1].equals("false")) {
                        if (vardefParts[1].equals("true")) {
                            haveKPI = true;
                            kpiValue = vardefParts[1];
                        }
                    } else {
                        itemdef.setStructureRef(vardefParts[1]);
                    }
                }
                if (haveKPI) {
                    Utils.setMetaDataExtensionValue(prop, "customKPI", wrapInCDATABlock(kpiValue));
                }
            } else {
                prop.setId(vardef);
                itemdef.setId("_" + prop.getId() + "Item");
            }
            prop.setItemSubjectRef(itemdef);
            sp.getProperties().add(prop);
            _subprocessItemDefs.put(itemdef.getId(), itemdef);
        }
    }
    // event subprocess
    if (sp instanceof EventSubprocess) {
        sp.setTriggeredByEvent(true);
    }
    // simulation
    if (properties.get("distributiontype") != null && properties.get("distributiontype").length() > 0) {
        TimeParameters timeParams = BpsimFactory.eINSTANCE.createTimeParameters();
        Parameter processingTimeParam = BpsimFactory.eINSTANCE.createParameter();
        if (properties.get("distributiontype").equals("normal")) {
            NormalDistributionType normalDistributionType = BpsimFactory.eINSTANCE.createNormalDistributionType();
            normalDistributionType.setStandardDeviation(Double.valueOf(properties.get("standarddeviation")));
            normalDistributionType.setMean(Double.valueOf(properties.get("mean")));
            processingTimeParam.getParameterValue().add(normalDistributionType);
        } else if (properties.get("distributiontype").equals("uniform")) {
            UniformDistributionType uniformDistributionType = BpsimFactory.eINSTANCE.createUniformDistributionType();
            uniformDistributionType.setMax(Double.valueOf(properties.get("max")));
            uniformDistributionType.setMin(Double.valueOf(properties.get("min")));
            processingTimeParam.getParameterValue().add(uniformDistributionType);
        // random distribution not supported in bpsim 1.0
        // } else if(properties.get("distributiontype").equals("random")) {
        // RandomDistributionType randomDistributionType = BpsimFactory.eINSTANCE.createRandomDistributionType();
        // randomDistributionType.setMax(Double.valueOf(properties.get("max")));
        // randomDistributionType.setMin(Double.valueOf(properties.get("min")));
        // processingTimeParam.getParameterValue().add(randomDistributionType);
        } else if (properties.get("distributiontype").equals("poisson")) {
            PoissonDistributionType poissonDistributionType = BpsimFactory.eINSTANCE.createPoissonDistributionType();
            poissonDistributionType.setMean(Double.valueOf(properties.get("mean")));
            processingTimeParam.getParameterValue().add(poissonDistributionType);
        }
        // }
        if (properties.get("waittime") != null) {
            Parameter waittimeParam = BpsimFactory.eINSTANCE.createParameter();
            FloatingParameterType waittimeParamValue = BpsimFactory.eINSTANCE.createFloatingParameterType();
            DecimalFormat twoDForm = new DecimalFormat("#.##");
            waittimeParamValue.setValue(Double.valueOf(twoDForm.format(Double.valueOf(properties.get("waittime")))));
            waittimeParam.getParameterValue().add(waittimeParamValue);
            timeParams.setWaitTime(waittimeParam);
        }
        timeParams.setProcessingTime(processingTimeParam);
        if (_simulationElementParameters.containsKey(sp.getId())) {
            _simulationElementParameters.get(sp.getId()).add(timeParams);
        } else {
            List<EObject> values = new ArrayList<EObject>();
            values.add(timeParams);
            _simulationElementParameters.put(sp.getId(), values);
        }
    }
    CostParameters costParameters = BpsimFactory.eINSTANCE.createCostParameters();
    if (properties.get("unitcost") != null && properties.get("unitcost").length() > 0) {
        Parameter unitcostParam = BpsimFactory.eINSTANCE.createParameter();
        FloatingParameterType unitCostParameterValue = BpsimFactory.eINSTANCE.createFloatingParameterType();
        unitCostParameterValue.setValue(new Double(properties.get("unitcost")));
        unitcostParam.getParameterValue().add(unitCostParameterValue);
        costParameters.setUnitCost(unitcostParam);
    }
    // }
    if (_simulationElementParameters.containsKey(sp.getId())) {
        _simulationElementParameters.get(sp.getId()).add(costParameters);
    } else {
        List<EObject> values = new ArrayList<EObject>();
        values.add(costParameters);
        _simulationElementParameters.put(sp.getId(), values);
    }
}
Also used : DataOutput(org.eclipse.bpmn2.DataOutput) CostParameters(bpsim.CostParameters) NormalDistributionType(bpsim.NormalDistributionType) DecimalFormat(java.text.DecimalFormat) ItemDefinition(org.eclipse.bpmn2.ItemDefinition) ArrayList(java.util.ArrayList) Assignment(org.eclipse.bpmn2.Assignment) MultiInstanceLoopCharacteristics(org.eclipse.bpmn2.MultiInstanceLoopCharacteristics) EventSubprocess(org.eclipse.bpmn2.EventSubprocess) EObject(org.eclipse.emf.ecore.EObject) ArrayList(java.util.ArrayList) List(java.util.List) DataOutputAssociation(org.eclipse.bpmn2.DataOutputAssociation) Property(org.eclipse.bpmn2.Property) UniformDistributionType(bpsim.UniformDistributionType) OutputSet(org.eclipse.bpmn2.OutputSet) InputOutputSpecification(org.eclipse.bpmn2.InputOutputSpecification) ItemAwareElement(org.eclipse.bpmn2.ItemAwareElement) FormalExpression(org.eclipse.bpmn2.FormalExpression) FloatingParameterType(bpsim.FloatingParameterType) DataInput(org.eclipse.bpmn2.DataInput) InputSet(org.eclipse.bpmn2.InputSet) PoissonDistributionType(bpsim.PoissonDistributionType) Parameter(bpsim.Parameter) TimeParameters(bpsim.TimeParameters) DataInputAssociation(org.eclipse.bpmn2.DataInputAssociation)

Example 5 with Assignment

use of org.eclipse.bpmn2.Assignment in project kie-wb-common by kiegroup.

the class Bpmn2JsonUnmarshaller method applyThrowEventProperties.

protected void applyThrowEventProperties(ThrowEvent event, Map<String, String> properties) {
    parseAssignmentsInfo(properties);
    if (properties.get("datainput") != null && properties.get("datainput").trim().length() > 0) {
        String[] allDataInputs = properties.get("datainput").split(",\\s*");
        InputSet inset = Bpmn2Factory.eINSTANCE.createInputSet();
        for (String dataInput : allDataInputs) {
            if (dataInput.trim().length() > 0) {
                DataInput nextInput = Bpmn2Factory.eINSTANCE.createDataInput();
                String[] dataInputParts = dataInput.split(":\\s*");
                if (dataInputParts.length == 2) {
                    nextInput.setId(event.getId() + "_" + dataInputParts[0] + (dataInputParts[0].endsWith("InputX") ? "" : "InputX"));
                    nextInput.setName(dataInputParts[0]);
                    ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
                    EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "dtype", false, false);
                    SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, dataInputParts[1]);
                    nextInput.getAnyAttribute().add(extensionEntry);
                } else {
                    nextInput.setId(event.getId() + "_" + dataInput + (dataInput.endsWith("InputX") ? "" : "InputX"));
                    nextInput.setName(dataInput);
                    ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
                    EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "dtype", false, false);
                    SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, "Object");
                    nextInput.getAnyAttribute().add(extensionEntry);
                }
                event.getDataInputs().add(nextInput);
                inset.getDataInputRefs().add(nextInput);
            }
        }
        event.setInputSet(inset);
    }
    if (properties.get("datainputassociations") != null && properties.get("datainputassociations").length() > 0) {
        String[] allAssignments = properties.get("datainputassociations").split(",\\s*");
        for (String assignment : allAssignments) {
            if (assignment.contains("=")) {
                String[] assignmentParts = assignment.split("=\\s*");
                String fromPart = assignmentParts[0];
                if (fromPart.startsWith("[din]")) {
                    fromPart = fromPart.substring(5, fromPart.length());
                }
                DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
                if (event.getInputSet() != null) {
                    List<DataInput> dataInputs = event.getInputSet().getDataInputRefs();
                    for (DataInput di : dataInputs) {
                        if (di.getId().equals(event.getId() + "_" + fromPart + (fromPart.endsWith("InputX") ? "" : "InputX"))) {
                            dia.setTargetRef(di);
                        }
                    }
                }
                Assignment a = Bpmn2Factory.eINSTANCE.createAssignment();
                FormalExpression fromExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
                if (assignmentParts.length > 1) {
                    String replacer = decodeAssociationValue(assignmentParts[1]);
                    fromExpression.setBody(wrapInCDATABlock(replacer));
                } else {
                    fromExpression.setBody("");
                }
                FormalExpression toExpression = Bpmn2Factory.eINSTANCE.createFormalExpression();
                toExpression.setBody(dia.getTargetRef().getId());
                a.setFrom(fromExpression);
                a.setTo(toExpression);
                dia.getAssignment().add(a);
                event.getDataInputAssociation().add(dia);
            } else if (assignment.contains("->")) {
                String[] assignmentParts = assignment.split("->\\s*");
                String fromPart = assignmentParts[0];
                boolean isDataInput = false;
                boolean isDataOutput = false;
                if (fromPart.startsWith("[din]")) {
                    fromPart = fromPart.substring(5, fromPart.length());
                    isDataInput = true;
                }
                if (isDataInput) {
                    DataInputAssociation dia = Bpmn2Factory.eINSTANCE.createDataInputAssociation();
                    // association from process var to dataInput var
                    ItemAwareElement ie = Bpmn2Factory.eINSTANCE.createItemAwareElement();
                    ie.setId(fromPart);
                    dia.getSourceRef().add(ie);
                    List<DataInput> dataInputs = event.getInputSet().getDataInputRefs();
                    for (DataInput di : dataInputs) {
                        if (di.getId().equals(event.getId() + "_" + assignmentParts[1] + (assignmentParts[1].endsWith("InputX") ? "" : "InputX"))) {
                            dia.setTargetRef(di);
                            break;
                        }
                    }
                    event.getDataInputAssociation().add(dia);
                }
            } else {
            // TODO throw exception here?
            }
        }
    }
    // signal scope metadata
    if (properties.get("signalscope") != null && properties.get("signalscope").length() > 0 && !properties.get("signalscope").equals("default")) {
        Utils.setMetaDataExtensionValue(event, "customScope", wrapInCDATABlock(properties.get("signalscope")));
    }
    try {
        EventDefinition ed = event.getEventDefinitions().get(0);
        if (ed instanceof TimerEventDefinition) {
            applyTimerEventProperties((TimerEventDefinition) ed, properties);
        } else if (ed instanceof SignalEventDefinition) {
            if (properties.get("signalref") != null && !"".equals(properties.get("signalref"))) {
                ((SignalEventDefinition) ed).setSignalRef(properties.get("signalref"));
            // ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
            // EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature(
            // "http://www.jboss.org/drools", "signalrefname", false, false);
            // EStructuralFeatureImpl.SimpleFeatureMapEntry extensionEntry = new EStructuralFeatureImpl.SimpleFeatureMapEntry(extensionAttribute,
            // properties.get("signalref"));
            // ((SignalEventDefinition) event.getEventDefinitions().get(0)).getAnyAttribute().add(extensionEntry);
            }
        } else if (ed instanceof ErrorEventDefinition) {
            if (properties.get("errorref") != null && !"".equals(properties.get("errorref"))) {
                ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
                EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "erefname", false, false);
                SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, properties.get("errorref"));
                ((ErrorEventDefinition) event.getEventDefinitions().get(0)).getAnyAttribute().add(extensionEntry);
            }
        } else if (ed instanceof ConditionalEventDefinition) {
            applyConditionalEventProperties((ConditionalEventDefinition) ed, properties);
        } else if (ed instanceof EscalationEventDefinition) {
            if (properties.get("escalationcode") != null && !"".equals(properties.get("escalationcode"))) {
                ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
                EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "esccode", false, false);
                SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, properties.get("escalationcode"));
                ((EscalationEventDefinition) event.getEventDefinitions().get(0)).getAnyAttribute().add(extensionEntry);
            }
        } else if (ed instanceof MessageEventDefinition) {
            if (properties.get("messageref") != null && !"".equals(properties.get("messageref"))) {
                ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
                EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "msgref", false, false);
                SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, properties.get("messageref"));
                ((MessageEventDefinition) event.getEventDefinitions().get(0)).getAnyAttribute().add(extensionEntry);
            }
        } else if (ed instanceof CompensateEventDefinition) {
            if (properties.get("activityref") != null && !"".equals(properties.get("activityref"))) {
                ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
                EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "actrefname", false, false);
                SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, properties.get("activityref"));
                ((CompensateEventDefinition) event.getEventDefinitions().get(0)).getAnyAttribute().add(extensionEntry);
            }
        }
    } catch (IndexOutOfBoundsException e) {
    // TODO we dont want to barf here as test for example do not define event definitions in the bpmn2....
    }
    // simulation
    if (properties.get("distributiontype") != null && properties.get("distributiontype").length() > 0) {
        TimeParameters timeParams = BpsimFactory.eINSTANCE.createTimeParameters();
        Parameter processingTimeParam = BpsimFactory.eINSTANCE.createParameter();
        if (properties.get("distributiontype").equals("normal")) {
            NormalDistributionType normalDistributionType = BpsimFactory.eINSTANCE.createNormalDistributionType();
            normalDistributionType.setStandardDeviation(Double.valueOf(properties.get("standarddeviation")));
            normalDistributionType.setMean(Double.valueOf(properties.get("mean")));
            processingTimeParam.getParameterValue().add(normalDistributionType);
        } else if (properties.get("distributiontype").equals("uniform")) {
            UniformDistributionType uniformDistributionType = BpsimFactory.eINSTANCE.createUniformDistributionType();
            uniformDistributionType.setMax(Double.valueOf(properties.get("max")));
            uniformDistributionType.setMin(Double.valueOf(properties.get("min")));
            processingTimeParam.getParameterValue().add(uniformDistributionType);
        // random distribution type not supported in bpsim 1.0
        // } else if(properties.get("distributiontype").equals("random")) {
        // RandomDistributionType randomDistributionType = DroolsFactory.eINSTANCE.createRandomDistributionType();
        // randomDistributionType.setMax(Double.valueOf(properties.get("max")));
        // randomDistributionType.setMin(Double.valueOf(properties.get("min")));
        // processingTimeParam.getParameterValue().add(randomDistributionType);
        } else if (properties.get("distributiontype").equals("poisson")) {
            PoissonDistributionType poissonDistributionType = BpsimFactory.eINSTANCE.createPoissonDistributionType();
            poissonDistributionType.setMean(Double.valueOf(properties.get("mean")));
            processingTimeParam.getParameterValue().add(poissonDistributionType);
        }
        // no specific time unit available in 1.0 bpsim - use global
        // if(properties.get("timeunit") != null) {
        // timeParams.setTimeUnit(TimeUnit.getByName(properties.get("timeunit")));
        // }
        timeParams.setProcessingTime(processingTimeParam);
        if (_simulationElementParameters.containsKey(event.getId())) {
            _simulationElementParameters.get(event.getId()).add(timeParams);
        } else {
            List<EObject> values = new ArrayList<EObject>();
            values.add(timeParams);
            _simulationElementParameters.put(event.getId(), values);
        }
    }
}
Also used : NormalDistributionType(bpsim.NormalDistributionType) ArrayList(java.util.ArrayList) EventDefinition(org.eclipse.bpmn2.EventDefinition) ConditionalEventDefinition(org.eclipse.bpmn2.ConditionalEventDefinition) EscalationEventDefinition(org.eclipse.bpmn2.EscalationEventDefinition) MessageEventDefinition(org.eclipse.bpmn2.MessageEventDefinition) ErrorEventDefinition(org.eclipse.bpmn2.ErrorEventDefinition) SignalEventDefinition(org.eclipse.bpmn2.SignalEventDefinition) CompensateEventDefinition(org.eclipse.bpmn2.CompensateEventDefinition) TimerEventDefinition(org.eclipse.bpmn2.TimerEventDefinition) Assignment(org.eclipse.bpmn2.Assignment) EAttributeImpl(org.eclipse.emf.ecore.impl.EAttributeImpl) EObject(org.eclipse.emf.ecore.EObject) SignalEventDefinition(org.eclipse.bpmn2.SignalEventDefinition) SimpleFeatureMapEntry(org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.SimpleFeatureMapEntry) ArrayList(java.util.ArrayList) List(java.util.List) TimerEventDefinition(org.eclipse.bpmn2.TimerEventDefinition) UniformDistributionType(bpsim.UniformDistributionType) ItemAwareElement(org.eclipse.bpmn2.ItemAwareElement) FormalExpression(org.eclipse.bpmn2.FormalExpression) InputSet(org.eclipse.bpmn2.InputSet) DataInput(org.eclipse.bpmn2.DataInput) PoissonDistributionType(bpsim.PoissonDistributionType) EscalationEventDefinition(org.eclipse.bpmn2.EscalationEventDefinition) ErrorEventDefinition(org.eclipse.bpmn2.ErrorEventDefinition) ConditionalEventDefinition(org.eclipse.bpmn2.ConditionalEventDefinition) Parameter(bpsim.Parameter) MessageEventDefinition(org.eclipse.bpmn2.MessageEventDefinition) ExtendedMetaData(org.eclipse.emf.ecore.util.ExtendedMetaData) CompensateEventDefinition(org.eclipse.bpmn2.CompensateEventDefinition) TimeParameters(bpsim.TimeParameters) DataInputAssociation(org.eclipse.bpmn2.DataInputAssociation)

Aggregations

Assignment (org.eclipse.bpmn2.Assignment)8 DataInputAssociation (org.eclipse.bpmn2.DataInputAssociation)8 DataInput (org.eclipse.bpmn2.DataInput)7 FormalExpression (org.eclipse.bpmn2.FormalExpression)6 Parameter (bpsim.Parameter)5 ArrayList (java.util.ArrayList)5 List (java.util.List)5 EObject (org.eclipse.emf.ecore.EObject)5 FloatingParameterType (bpsim.FloatingParameterType)4 NormalDistributionType (bpsim.NormalDistributionType)4 PoissonDistributionType (bpsim.PoissonDistributionType)4 TimeParameters (bpsim.TimeParameters)4 UniformDistributionType (bpsim.UniformDistributionType)4 DecimalFormat (java.text.DecimalFormat)4 DataOutput (org.eclipse.bpmn2.DataOutput)4 DataOutputAssociation (org.eclipse.bpmn2.DataOutputAssociation)4 InputSet (org.eclipse.bpmn2.InputSet)4 ItemAwareElement (org.eclipse.bpmn2.ItemAwareElement)4 EAttributeImpl (org.eclipse.emf.ecore.impl.EAttributeImpl)4 SimpleFeatureMapEntry (org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.SimpleFeatureMapEntry)4