public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) { DynamicNode dynamicNode = (DynamicNode) node; writeNode("adHocSubProcess", dynamicNode, xmlDump, metaDataType); if (!dynamicNode.isCancelRemainingInstances()) { xmlDump.append(" cancelRemainingInstances=\"false\""); } xmlDump.append(" ordering=\"Parallel\" >" + EOL); writeExtensionElements(dynamicNode, xmlDump); // nodes List<Node> subNodes = getSubNodes(dynamicNode); XmlBPMNProcessDumper.INSTANCE.visitNodes(subNodes, xmlDump, metaDataType); // connections visitConnectionsAndAssociations(dynamicNode, xmlDump, metaDataType); if (dynamicNode.isAutoComplete()) { xmlDump.append(" <completionCondition xsi:type=\"tFormalExpression\">" + AUTOCOMPLETE_COMPLETION_CONDITION + "</completionCondition>" + EOL); } endNode("adHocSubProcess", xmlDump); }
public void nodeInstanceCompleted(org.jbpm.workflow.instance.NodeInstance nodeInstance, String outType) { Node nodeInstanceNode = nodeInstance.getNode(); if( nodeInstanceNode != null ) { Object compensationBoolObj = nodeInstanceNode.getMetaData().get("isForCompensation"); boolean isForCompensation = compensationBoolObj == null ? false : ((Boolean) compensationBoolObj); if( isForCompensation ) { return; } } String completionCondition = getDynamicNode().getCompletionExpression(); // TODO what if we reach the end of one branch but others might still need to be created ? // TODO are we sure there will always be node instances left if we are not done yet? if (isTerminated(nodeInstance)) { triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE); } else if (getDynamicNode().isAutoComplete() && getNodeInstances(false).isEmpty()) { triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE); } else if (completionCondition != null && "mvel".equals(getDynamicNode().getLanguage())) { Object value = MVELSafeHelper.getEvaluator().eval(completionCondition, new NodeInstanceResolverFactory(this)); if ( !(value instanceof Boolean) ) { throw new RuntimeException( "Completion condition expression must return boolean values: " + value + " for expression " + completionCondition); } if (((Boolean) value).booleanValue()) { triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE); } } }
if ("".equals(dynamicNode.getCompletionExpression()) && !dynamicNode.isAutoComplete()) { addErrorMessage(process, node,
public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) { DynamicNode dynamicNode = (DynamicNode) node; writeNode("adHocSubProcess", dynamicNode, xmlDump, metaDataType); if (!dynamicNode.isCancelRemainingInstances()) { xmlDump.append(" cancelRemainingInstances=\"false\""); } xmlDump.append(" ordering=\"Parallel\" >" + EOL); writeExtensionElements(dynamicNode, xmlDump); // nodes List<Node> subNodes = getSubNodes(dynamicNode); XmlBPMNProcessDumper.INSTANCE.visitNodes(subNodes, xmlDump, metaDataType); // connections visitConnectionsAndAssociations(dynamicNode, xmlDump, metaDataType); if (dynamicNode.isAutoComplete()) { xmlDump.append(" <completionCondition xsi:type=\"tFormalExpression\">" + AUTOCOMPLETE_COMPLETION_CONDITION + "</completionCondition>" + EOL); } endNode("adHocSubProcess", xmlDump); }
public void nodeInstanceCompleted(org.jbpm.workflow.instance.NodeInstance nodeInstance, String outType) { Node nodeInstanceNode = nodeInstance.getNode(); if( nodeInstanceNode != null ) { Object compensationBoolObj = nodeInstanceNode.getMetaData().get("isForCompensation"); boolean isForCompensation = compensationBoolObj == null ? false : ((Boolean) compensationBoolObj); if( isForCompensation ) { return; } } String completionCondition = getDynamicNode().getCompletionExpression(); // TODO what if we reach the end of one branch but others might still need to be created ? // TODO are we sure there will always be node instances left if we are not done yet? if (isTerminated(nodeInstance)) { triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE); } else if (getDynamicNode().isAutoComplete() && getNodeInstances(false).isEmpty()) { triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE); } else if (completionCondition != null && "mvel".equals(getDynamicNode().getLanguage())) { Object value = MVELSafeHelper.getEvaluator().eval(completionCondition, new NodeInstanceResolverFactory(this)); if ( !(value instanceof Boolean) ) { throw new RuntimeException( "Completion condition expression must return boolean values: " + value + " for expression " + completionCondition); } if (((Boolean) value).booleanValue()) { triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE); } } }
if ("".equals(dynamicNode.getCompletionExpression()) && !dynamicNode.isAutoComplete()) { addErrorMessage(process, node,