Search in sources :

Example 1 with DataInput

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

the class Bpmn2JsonMarshaller method marshallDataInputAssociations.

private void marshallDataInputAssociations(StringBuilder associationBuff, List<DataInputAssociation> inputAssociations) {
    if (inputAssociations != null) {
        for (DataInputAssociation datain : inputAssociations) {
            String lhsAssociation = "";
            if (datain.getSourceRef() != null && datain.getSourceRef().size() > 0) {
                if (datain.getTransformation() != null && datain.getTransformation().getBody() != null) {
                    lhsAssociation = datain.getTransformation().getBody();
                } else {
                    lhsAssociation = datain.getSourceRef().get(0).getId();
                }
            }
            String rhsAssociation = "";
            if (datain.getTargetRef() != null) {
                rhsAssociation = ((DataInput) datain.getTargetRef()).getName();
            }
            // boolean isBiDirectional = false;
            boolean isAssignment = false;
            if (datain.getAssignment() != null && datain.getAssignment().size() > 0) {
                isAssignment = true;
            }
            if (isAssignment) {
                // only know how to deal with formal expressions
                if (datain.getAssignment().get(0).getFrom() instanceof FormalExpression) {
                    String associationValue = ((FormalExpression) datain.getAssignment().get(0).getFrom()).getBody();
                    if (associationValue == null) {
                        associationValue = "";
                    }
                    String replacer = encodeAssociationValue(associationValue);
                    associationBuff.append("[din]" + rhsAssociation).append("=").append(replacer);
                    associationBuff.append(",");
                }
            } else {
                if (lhsAssociation != null && lhsAssociation.length() > 0) {
                    associationBuff.append("[din]" + lhsAssociation).append("->").append(rhsAssociation);
                    associationBuff.append(",");
                }
            }
        }
    }
}
Also used : FormalExpression(org.eclipse.bpmn2.FormalExpression) DataInputAssociation(org.eclipse.bpmn2.DataInputAssociation)

Example 2 with DataInput

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

the class InputAssignmentWriter method readInputFrom.

private DataInput readInputFrom(String targetName, ItemDefinition typeDef) {
    DataInput dataInput = bpmn2.createDataInput();
    // the id is an encoding of the node id + the name of the input
    dataInput.setId(Ids.dataInput(parentId, decl.getIdentifier()));
    dataInput.setName(targetName);
    dataInput.setItemSubjectRef(typeDef);
    CustomAttribute.dtype.of(dataInput).set(typeDef.getStructureRef());
    return dataInput;
}
Also used : DataInput(org.eclipse.bpmn2.DataInput)

Example 3 with DataInput

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

the class Bpmn2JsonMarshaller method marshallTask.

protected void marshallTask(Task task, BPMNPlane plane, JsonGenerator generator, float xOffset, float yOffset, String preProcessingData, Definitions def, Map<String, Object> flowElementProperties) throws JsonGenerationException, IOException {
    Map<String, Object> properties = new LinkedHashMap<String, Object>(flowElementProperties);
    String taskType = "None";
    if (task instanceof BusinessRuleTask) {
        taskType = "Business Rule";
        Iterator<FeatureMap.Entry> iter = task.getAnyAttribute().iterator();
        while (iter.hasNext()) {
            FeatureMap.Entry entry = iter.next();
            if (entry.getEStructuralFeature().getName().equals("ruleFlowGroup")) {
                properties.put("ruleflowgroup", entry.getValue());
            }
        }
    } else if (task instanceof ScriptTask) {
        setScriptProperties((ScriptTask) task, properties);
        taskType = "Script";
    } else if (task instanceof ServiceTask) {
        taskType = "Service";
        ServiceTask serviceTask = (ServiceTask) task;
        if (serviceTask.getOperationRef() != null && serviceTask.getImplementation() != null) {
            properties.put("serviceimplementation", serviceTask.getImplementation());
            properties.put("serviceoperation", serviceTask.getOperationRef().getName() == null ? serviceTask.getOperationRef().getImplementationRef() : serviceTask.getOperationRef().getName());
            if (def != null) {
                List<RootElement> roots = def.getRootElements();
                for (RootElement root : roots) {
                    if (root instanceof Interface) {
                        Interface inter = (Interface) root;
                        List<Operation> interOperations = inter.getOperations();
                        for (Operation interOper : interOperations) {
                            if (interOper.getId().equals(serviceTask.getOperationRef().getId())) {
                                properties.put("serviceinterface", inter.getName() == null ? inter.getImplementationRef() : inter.getName());
                            }
                        }
                    }
                }
            }
        }
    } else if (task instanceof ManualTask) {
        taskType = "Manual";
    } else if (task instanceof UserTask) {
        taskType = "User";
        // get the user task actors
        List<ResourceRole> roles = task.getResources();
        StringBuilder sb = new StringBuilder();
        for (ResourceRole role : roles) {
            if (role instanceof PotentialOwner) {
                FormalExpression fe = (FormalExpression) ((PotentialOwner) role).getResourceAssignmentExpression().getExpression();
                if (fe.getBody() != null && fe.getBody().length() > 0) {
                    sb.append(fe.getBody());
                    sb.append(",");
                }
            }
        }
        if (sb.length() > 0) {
            sb.setLength(sb.length() - 1);
        }
        properties.put("actors", sb.toString());
    } else if (task instanceof SendTask) {
        taskType = "Send";
        SendTask st = (SendTask) task;
        if (st.getMessageRef() != null) {
            properties.put("messageref", st.getMessageRef().getId());
        }
    } else if (task instanceof ReceiveTask) {
        taskType = "Receive";
        ReceiveTask rt = (ReceiveTask) task;
        if (rt.getMessageRef() != null) {
            properties.put("messageref", rt.getMessageRef().getId());
        }
    }
    // custom async
    String customAsyncMetaData = Utils.getMetaDataValue(task.getExtensionValues(), "customAsync");
    String customAsync = (customAsyncMetaData != null && customAsyncMetaData.length() > 0) ? customAsyncMetaData : "false";
    properties.put("isasync", customAsync);
    // custom autostart
    String customAutoStartMetaData = Utils.getMetaDataValue(task.getExtensionValues(), "customAutoStart");
    String customAutoStart = (customAutoStartMetaData != null && customAutoStartMetaData.length() > 0) ? customAutoStartMetaData : "false";
    properties.put("customautostart", customAutoStart);
    // backwards compatibility with jbds editor
    boolean foundTaskName = false;
    if (task instanceof UserTask && task.getIoSpecification() != null && task.getIoSpecification().getDataInputs() != null) {
        List<DataInput> taskDataInputs = task.getIoSpecification().getDataInputs();
        for (DataInput din : taskDataInputs) {
            if (din.getName() != null && din.getName().equals("TaskName")) {
                List<DataInputAssociation> taskDataInputAssociations = task.getDataInputAssociations();
                for (DataInputAssociation dia : taskDataInputAssociations) {
                    if (dia.getTargetRef() != null && dia.getTargetRef().getId().equals(din.getId()) && dia.getAssignment() != null && !dia.getAssignment().isEmpty() && dia.getAssignment().get(0).getFrom() != null) {
                        properties.put("taskname", ((FormalExpression) dia.getAssignment().get(0).getFrom()).getBody());
                        foundTaskName = true;
                    }
                }
                break;
            }
        }
    }
    if (!foundTaskName) {
        // try the drools specific attribute set on the task
        Iterator<FeatureMap.Entry> iter = task.getAnyAttribute().iterator();
        while (iter.hasNext()) {
            FeatureMap.Entry entry = iter.next();
            if (entry.getEStructuralFeature().getName().equals("taskName")) {
                String tname = (String) entry.getValue();
                if (tname != null && tname.length() > 0) {
                    properties.put("taskname", tname);
                }
            }
        }
    }
    // check if we are dealing with a custom task
    boolean isCustomElement = isCustomElement((String) properties.get("taskname"), preProcessingData);
    if (isCustomElement) {
        properties.put("tasktype", properties.get("taskname"));
    } else {
        properties.put("tasktype", taskType);
    }
    // multiple instance
    if (task.getLoopCharacteristics() != null) {
        properties.put("multipleinstance", "true");
        MultiInstanceLoopCharacteristics taskmi = (MultiInstanceLoopCharacteristics) task.getLoopCharacteristics();
        if (taskmi.getLoopDataInputRef() != null) {
            ItemAwareElement iedatainput = taskmi.getLoopDataInputRef();
            List<DataInputAssociation> taskInputAssociations = task.getDataInputAssociations();
            for (DataInputAssociation dia : taskInputAssociations) {
                if (dia.getTargetRef().equals(iedatainput)) {
                    properties.put("multipleinstancecollectioninput", dia.getSourceRef().get(0).getId());
                    break;
                }
            }
        }
        if (taskmi.getLoopDataOutputRef() != null) {
            ItemAwareElement iedataoutput = taskmi.getLoopDataOutputRef();
            List<DataOutputAssociation> taskOutputAssociations = task.getDataOutputAssociations();
            for (DataOutputAssociation dout : taskOutputAssociations) {
                if (dout.getSourceRef().get(0).equals(iedataoutput)) {
                    properties.put("multipleinstancecollectionoutput", dout.getTargetRef().getId());
                    break;
                }
            }
        }
        if (taskmi.getInputDataItem() != null && taskmi.getInputDataItem().getItemSubjectRef() != null) {
            List<DataInput> taskDataInputs = task.getIoSpecification().getDataInputs();
            for (DataInput din : taskDataInputs) {
                if (din != null && din.getItemSubjectRef() != null && taskmi.getInputDataItem() != null && taskmi.getInputDataItem().getItemSubjectRef() != null) {
                    if (din.getItemSubjectRef().getId().equals(taskmi.getInputDataItem().getItemSubjectRef().getId())) {
                        properties.put("multipleinstancedatainput", din.getName());
                    }
                }
            }
        }
        if (taskmi.getOutputDataItem() != null && taskmi.getOutputDataItem().getItemSubjectRef() != null) {
            List<DataOutput> taskDataOutputs = task.getIoSpecification().getDataOutputs();
            for (DataOutput dout : taskDataOutputs) {
                if (dout != null && dout.getItemSubjectRef() != null && taskmi.getOutputDataItem() != null && taskmi.getOutputDataItem().getItemSubjectRef() != null) {
                    if (dout.getItemSubjectRef().getId().equals(taskmi.getOutputDataItem().getItemSubjectRef().getId())) {
                        properties.put("multipleinstancedataoutput", dout.getName());
                    }
                }
            }
        }
        if (taskmi.getCompletionCondition() != null) {
            if (taskmi.getCompletionCondition() instanceof FormalExpression) {
                properties.put("multipleinstancecompletioncondition", ((FormalExpression) taskmi.getCompletionCondition()).getBody());
            }
        }
    } else {
        properties.put("multipleinstance", "false");
    }
    // data inputs
    List<String> disallowedInputs = new ArrayList<String>();
    disallowedInputs.add("miinputCollection");
    if ((task instanceof UserTask) || isCustomElement) {
        disallowedInputs.add("TaskName");
    }
    String datainputset = marshallDataInputSet(task, properties, disallowedInputs);
    DataInput groupDataInput = null;
    DataInput skippableDataInput = null;
    DataInput commentDataInput = null;
    DataInput descriptionDataInput = null;
    DataInput contentDataInput = null;
    DataInput priorityDataInput = null;
    DataInput localeDataInput = null;
    DataInput createdByDataInput = null;
    DataInput notCompletedReassignInput = null;
    DataInput notStartedReassignInput = null;
    DataInput notCompletedNotificationInput = null;
    DataInput notStartedNotificationInput = null;
    if (task.getIoSpecification() != null) {
        List<InputSet> inputSetList = task.getIoSpecification().getInputSets();
        for (InputSet inset : inputSetList) {
            List<DataInput> dataInputList = inset.getDataInputRefs();
            for (DataInput dataIn : dataInputList) {
                // dont add "TaskName" as that is added manually
                String dataInName = dataIn.getName();
                if (task instanceof UserTask && dataInName != null) {
                    if (dataInName.equals("GroupId")) {
                        groupDataInput = dataIn;
                    } else if (dataInName.equals("Skippable")) {
                        skippableDataInput = dataIn;
                    } else if (dataInName.equals("Comment")) {
                        commentDataInput = dataIn;
                    } else if (dataInName.equals("Description")) {
                        descriptionDataInput = dataIn;
                    } else if (dataInName.equals("Content")) {
                        contentDataInput = dataIn;
                    } else if (dataInName.equals("Priority")) {
                        priorityDataInput = dataIn;
                    } else if (dataInName.equals("Locale")) {
                        localeDataInput = dataIn;
                    } else if (dataInName.equals("CreatedBy")) {
                        createdByDataInput = dataIn;
                    } else if (dataInName.equals("NotCompletedReassign")) {
                        notCompletedReassignInput = dataIn;
                    } else if (dataInName.equals("NotStartedReassign")) {
                        notStartedReassignInput = dataIn;
                    } else if (dataInName.equals("NotCompletedNotify")) {
                        notCompletedNotificationInput = dataIn;
                    } else if (dataInName.equals("NotStartedNotify")) {
                        notStartedNotificationInput = dataIn;
                    }
                }
            }
        }
    }
    // data outputs
    String dataoutputset = marshallDataOutputSet(task, properties, Arrays.asList("mioutputCollection"));
    // assignments
    StringBuilder associationBuff = new StringBuilder();
    List<DataInputAssociation> inputAssociations = task.getDataInputAssociations();
    List<DataOutputAssociation> outputAssociations = task.getDataOutputAssociations();
    List<String> uniDirectionalAssociations = new ArrayList<String>();
    // List<String> biDirectionalAssociations = new ArrayList<String>();
    for (DataInputAssociation datain : inputAssociations) {
        boolean proceed = true;
        if (task.getLoopCharacteristics() != null) {
            MultiInstanceLoopCharacteristics taskMultiLoop = (MultiInstanceLoopCharacteristics) task.getLoopCharacteristics();
            // dont include associations that include mi loop data inputs
            if (taskMultiLoop.getInputDataItem() != null && taskMultiLoop.getInputDataItem().getId() != null) {
                if (datain.getSourceRef() != null && datain.getSourceRef().size() > 0 && datain.getSourceRef().get(0).getId().equals(taskMultiLoop.getInputDataItem().getId())) {
                    proceed = false;
                }
            }
            // dont include associations that include loopDataInputRef as target
            if (taskMultiLoop.getLoopDataInputRef() != null) {
                if (datain.getTargetRef().equals(taskMultiLoop.getLoopDataInputRef())) {
                    proceed = false;
                }
            }
        }
        if (proceed) {
            String lhsAssociation = "";
            if (datain.getSourceRef() != null && datain.getSourceRef().size() > 0) {
                if (datain.getTransformation() != null && datain.getTransformation().getBody() != null) {
                    lhsAssociation = datain.getTransformation().getBody();
                } else {
                    lhsAssociation = datain.getSourceRef().get(0).getId();
                }
            }
            String rhsAssociation = "";
            if (datain.getTargetRef() != null) {
                rhsAssociation = ((DataInput) datain.getTargetRef()).getName();
            }
            // boolean isBiDirectional = false;
            boolean isAssignment = false;
            if (datain.getAssignment() != null && datain.getAssignment().size() > 0) {
                isAssignment = true;
            }
            // }
            if (isAssignment) {
                // only know how to deal with formal expressions
                if (datain.getAssignment().get(0).getFrom() instanceof FormalExpression) {
                    String associationValue = ((FormalExpression) datain.getAssignment().get(0).getFrom()).getBody();
                    if (associationValue == null) {
                        associationValue = "";
                    }
                    // don't include properties that have their independent input editors
                    if (isCustomElement((String) properties.get("taskname"), preProcessingData)) {
                        if (!(rhsAssociation.equals("TaskName"))) {
                            String replacer = encodeAssociationValue(associationValue);
                            associationBuff.append("[din]" + rhsAssociation).append("=").append(replacer);
                            associationBuff.append(",");
                            properties.put(rhsAssociation.toLowerCase(), associationValue);
                        }
                    } else {
                        if (!(task instanceof UserTask) || !(rhsAssociation.equals("GroupId") || rhsAssociation.equals("Skippable") || rhsAssociation.equals("Comment") || rhsAssociation.equals("Description") || rhsAssociation.equals("Priority") || rhsAssociation.equals("Content") || rhsAssociation.equals("TaskName") || rhsAssociation.equals("Locale") || rhsAssociation.equals("CreatedBy") || rhsAssociation.equals("NotCompletedReassign") || rhsAssociation.equals("NotStartedReassign") || rhsAssociation.equals("NotCompletedNotify") || rhsAssociation.equals("NotStartedNotify"))) {
                            String replacer = encodeAssociationValue(associationValue);
                            associationBuff.append("[din]" + rhsAssociation).append("=").append(replacer);
                            associationBuff.append(",");
                            properties.put(rhsAssociation.toLowerCase(), associationValue);
                        }
                    }
                    if (rhsAssociation.equalsIgnoreCase("TaskName")) {
                        properties.put("taskname", associationValue);
                    }
                    if (task instanceof UserTask && datain.getAssignment().get(0).getTo() != null && ((FormalExpression) datain.getAssignment().get(0).getTo()).getBody() != null && datain.getAssignment().get(0).getFrom() != null) {
                        String toBody = ((FormalExpression) datain.getAssignment().get(0).getTo()).getBody();
                        String fromBody = ((FormalExpression) datain.getAssignment().get(0).getFrom()).getBody();
                        if (toBody != null) {
                            if (groupDataInput != null && toBody.equals(groupDataInput.getId())) {
                                properties.put("groupid", fromBody == null ? "" : fromBody);
                            } else if (skippableDataInput != null && toBody.equals(skippableDataInput.getId())) {
                                properties.put("skippable", fromBody);
                            } else if (commentDataInput != null && toBody.equals(commentDataInput.getId())) {
                                properties.put("subject", fromBody);
                            } else if (descriptionDataInput != null && toBody.equals(descriptionDataInput.getId())) {
                                properties.put("description", fromBody);
                            } else if (priorityDataInput != null && toBody.equals(priorityDataInput.getId())) {
                                properties.put("priority", fromBody == null ? "" : fromBody);
                            } else if (contentDataInput != null && toBody.equals(contentDataInput.getId())) {
                                properties.put("content", fromBody);
                            } else if (localeDataInput != null && toBody.equals(localeDataInput.getId())) {
                                properties.put("locale", fromBody);
                            } else if (createdByDataInput != null && toBody.equals(createdByDataInput.getId())) {
                                properties.put("createdby", fromBody);
                            } else if (notCompletedReassignInput != null && toBody.equals(notCompletedReassignInput.getId())) {
                                properties.put("tmpreassignmentnotcompleted", updateReassignmentAndNotificationInput(fromBody, "not-completed"));
                            } else if (notStartedReassignInput != null && toBody.equals(notStartedReassignInput.getId())) {
                                properties.put("tmpreassignmentnotstarted", updateReassignmentAndNotificationInput(fromBody, "not-started"));
                            } else if (notCompletedNotificationInput != null && toBody.equals(notCompletedNotificationInput.getId())) {
                                properties.put("tmpnotificationnotcompleted", updateReassignmentAndNotificationInput(fromBody, "not-completed"));
                            } else if (notStartedNotificationInput != null && toBody.equals(notStartedNotificationInput.getId())) {
                                properties.put("tmpnotificationnotstarted", updateReassignmentAndNotificationInput(fromBody, "not-started"));
                            }
                        }
                    }
                }
            } else // else if(isBiDirectional) {
            // associationBuff.append(lhsAssociation).append("<->").append(rhsAssociation);
            // associationBuff.append(",");
            // biDirectionalAssociations.add(lhsAssociation + "," + rhsAssociation);
            // }
            {
                if (lhsAssociation != null && lhsAssociation.length() > 0) {
                    associationBuff.append("[din]" + lhsAssociation).append("->").append(rhsAssociation);
                    associationBuff.append(",");
                    uniDirectionalAssociations.add(lhsAssociation + "," + rhsAssociation);
                }
                uniDirectionalAssociations.add(lhsAssociation + "," + rhsAssociation);
            // if(contentDataInput != null) {
            // if(rhsAssociation.equals(contentDataInput.getName())) {
            // properties.put("content", lhsAssociation);
            // }
            // }
            }
        }
    }
    if (properties.get("tmpreassignmentnotcompleted") != null && ((String) properties.get("tmpreassignmentnotcompleted")).length() > 0 && properties.get("tmpreassignmentnotstarted") != null && ((String) properties.get("tmpreassignmentnotstarted")).length() > 0) {
        properties.put("reassignment", properties.get("tmpreassignmentnotcompleted") + "^" + properties.get("tmpreassignmentnotstarted"));
    } else if (properties.get("tmpreassignmentnotcompleted") != null && ((String) properties.get("tmpreassignmentnotcompleted")).length() > 0) {
        properties.put("reassignment", properties.get("tmpreassignmentnotcompleted"));
    } else if (properties.get("tmpreassignmentnotstarted") != null && ((String) properties.get("tmpreassignmentnotstarted")).length() > 0) {
        properties.put("reassignment", properties.get("tmpreassignmentnotstarted"));
    }
    if (properties.get("tmpnotificationnotcompleted") != null && ((String) properties.get("tmpnotificationnotcompleted")).length() > 0 && properties.get("tmpnotificationnotstarted") != null && ((String) properties.get("tmpnotificationnotstarted")).length() > 0) {
        properties.put("notifications", properties.get("tmpnotificationnotcompleted") + "^" + properties.get("tmpnotificationnotstarted"));
    } else if (properties.get("tmpnotificationnotcompleted") != null && ((String) properties.get("tmpnotificationnotcompleted")).length() > 0) {
        properties.put("notifications", properties.get("tmpnotificationnotcompleted"));
    } else if (properties.get("tmpnotificationnotstarted") != null && ((String) properties.get("tmpnotificationnotstarted")).length() > 0) {
        properties.put("notifications", properties.get("tmpnotificationnotstarted"));
    }
    for (DataOutputAssociation dataout : outputAssociations) {
        boolean proceed = true;
        if (task.getLoopCharacteristics() != null) {
            MultiInstanceLoopCharacteristics taskMultiLoop = (MultiInstanceLoopCharacteristics) task.getLoopCharacteristics();
            // dont include associations that include mi loop data outputs
            if (taskMultiLoop.getOutputDataItem() != null && taskMultiLoop.getOutputDataItem().getId() != null) {
                if (dataout.getTargetRef().getId().equals(taskMultiLoop.getOutputDataItem().getId())) {
                    proceed = false;
                }
            }
            // dont include associations that include loopDataOutputRef as source
            if (taskMultiLoop.getLoopDataOutputRef() != null) {
                if (dataout.getSourceRef().get(0).equals(taskMultiLoop.getLoopDataOutputRef())) {
                    proceed = false;
                }
            }
        }
        if (proceed) {
            if (dataout.getSourceRef().size() > 0) {
                String lhsAssociation = ((DataOutput) dataout.getSourceRef().get(0)).getName();
                String rhsAssociation = dataout.getTargetRef().getId();
                boolean wasBiDirectional = false;
                // }
                if (dataout.getTransformation() != null && dataout.getTransformation().getBody() != null) {
                    rhsAssociation = encodeAssociationValue(dataout.getTransformation().getBody());
                }
                if (!wasBiDirectional) {
                    if (lhsAssociation != null && lhsAssociation.length() > 0) {
                        associationBuff.append("[dout]" + lhsAssociation).append("->").append(rhsAssociation);
                        associationBuff.append(",");
                    }
                }
            }
        }
    }
    String assignmentString = associationBuff.toString();
    if (assignmentString.endsWith(",")) {
        assignmentString = assignmentString.substring(0, assignmentString.length() - 1);
    }
    properties.put("assignments", assignmentString);
    setAssignmentsInfoProperty(null, datainputset, null, dataoutputset, assignmentString, properties);
    // on-entry and on-exit actions
    ScriptTypeListValue onEntryActions = getOnEntryActions(task.getExtensionValues());
    ScriptTypeListValue onExitActions = getOnExitActions(task.getExtensionValues());
    if (!onEntryActions.isEmpty()) {
        properties.put(ONENTRYACTIONS, new ScriptTypeListTypeSerializer().serialize(onEntryActions));
    }
    if (!onExitActions.isEmpty()) {
        properties.put(ONEXITACTIONS, new ScriptTypeListTypeSerializer().serialize(onExitActions));
    }
    // simulation properties
    setSimulationProperties(task.getId(), properties);
    // marshall the node out
    if (isCustomElement((String) properties.get("taskname"), preProcessingData)) {
        marshallNode(task, properties, (String) properties.get("taskname"), plane, generator, xOffset, yOffset);
    } else {
        marshallNode(task, properties, "Task", plane, generator, xOffset, yOffset);
    }
}
Also used : DataOutput(org.eclipse.bpmn2.DataOutput) ServiceTask(org.eclipse.bpmn2.ServiceTask) BusinessRuleTask(org.eclipse.bpmn2.BusinessRuleTask) GlobalBusinessRuleTask(org.eclipse.bpmn2.GlobalBusinessRuleTask) PotentialOwner(org.eclipse.bpmn2.PotentialOwner) ArrayList(java.util.ArrayList) Operation(org.eclipse.bpmn2.Operation) LinkedHashMap(java.util.LinkedHashMap) Entry(java.util.Map.Entry) ManualTask(org.eclipse.bpmn2.ManualTask) GlobalManualTask(org.eclipse.bpmn2.GlobalManualTask) MultiInstanceLoopCharacteristics(org.eclipse.bpmn2.MultiInstanceLoopCharacteristics) DataOutputAssociation(org.eclipse.bpmn2.DataOutputAssociation) ScriptTypeListTypeSerializer(org.kie.workbench.common.stunner.bpmn.backend.marshall.json.oryx.property.ScriptTypeListTypeSerializer) ReceiveTask(org.eclipse.bpmn2.ReceiveTask) ResourceRole(org.eclipse.bpmn2.ResourceRole) GlobalUserTask(org.eclipse.bpmn2.GlobalUserTask) UserTask(org.eclipse.bpmn2.UserTask) ItemAwareElement(org.eclipse.bpmn2.ItemAwareElement) FormalExpression(org.eclipse.bpmn2.FormalExpression) FeatureMap(org.eclipse.emf.ecore.util.FeatureMap) DataInput(org.eclipse.bpmn2.DataInput) InputSet(org.eclipse.bpmn2.InputSet) GlobalScriptTask(org.eclipse.bpmn2.GlobalScriptTask) ScriptTask(org.eclipse.bpmn2.ScriptTask) RootElement(org.eclipse.bpmn2.RootElement) SendTask(org.eclipse.bpmn2.SendTask) DataObject(org.eclipse.bpmn2.DataObject) Interface(org.eclipse.bpmn2.Interface) DataInputAssociation(org.eclipse.bpmn2.DataInputAssociation) ScriptTypeListValue(org.kie.workbench.common.stunner.bpmn.definition.property.task.ScriptTypeListValue)

Example 4 with DataInput

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

the class Bpmn2JsonMarshaller method marshallItemAwareElements.

private void marshallItemAwareElements(Activity activity, List<? extends ItemAwareElement> elements, StringBuilder buffer, List<String> disallowedNames) {
    for (ItemAwareElement element : elements) {
        String name = null;
        if (element instanceof DataInput) {
            name = ((DataInput) element).getName();
        }
        if (element instanceof DataOutput) {
            name = ((DataOutput) element).getName();
        }
        if (name != null && !name.isEmpty() && !disallowedNames.contains(name)) {
            buffer.append(name);
            if (element.getItemSubjectRef() != null && element.getItemSubjectRef().getStructureRef() != null && !element.getItemSubjectRef().getStructureRef().isEmpty()) {
                buffer.append(":").append(element.getItemSubjectRef().getStructureRef());
            } else if (activity.eContainer() instanceof SubProcess) {
                // BZ1247105: for Outputs on Tasks inside sub-processes
                String dtype = getAnyAttributeValue(element, "dtype");
                if (dtype != null && !dtype.isEmpty()) {
                    buffer.append(":").append(dtype);
                }
            }
            buffer.append(",");
        }
    }
}
Also used : DataInput(org.eclipse.bpmn2.DataInput) AdHocSubProcess(org.eclipse.bpmn2.AdHocSubProcess) SubProcess(org.eclipse.bpmn2.SubProcess) DataOutput(org.eclipse.bpmn2.DataOutput) ItemAwareElement(org.eclipse.bpmn2.ItemAwareElement)

Example 5 with DataInput

use of org.eclipse.bpmn2.DataInput 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)

Aggregations

DataInput (org.eclipse.bpmn2.DataInput)38 DataInputAssociation (org.eclipse.bpmn2.DataInputAssociation)25 DataOutput (org.eclipse.bpmn2.DataOutput)17 FormalExpression (org.eclipse.bpmn2.FormalExpression)15 ArrayList (java.util.ArrayList)12 DataOutputAssociation (org.eclipse.bpmn2.DataOutputAssociation)12 Assignment (org.eclipse.bpmn2.Assignment)11 ItemAwareElement (org.eclipse.bpmn2.ItemAwareElement)11 Test (org.junit.Test)10 List (java.util.List)9 InputSet (org.eclipse.bpmn2.InputSet)9 InputOutputSpecification (org.eclipse.bpmn2.InputOutputSpecification)8 SimpleFeatureMapEntry (org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.SimpleFeatureMapEntry)8 Parameter (bpsim.Parameter)5 ItemDefinition (org.eclipse.bpmn2.ItemDefinition)5 Process (org.eclipse.bpmn2.Process)5 Property (org.eclipse.bpmn2.Property)5 NormalDistributionType (bpsim.NormalDistributionType)4 PoissonDistributionType (bpsim.PoissonDistributionType)4 TimeParameters (bpsim.TimeParameters)4