Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.jbpm.bpmn2.xml.ActionNodeHandler Maven / Gradle / Ivy
/**
* Copyright 2010 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.bpmn2.xml;
import static org.jbpm.bpmn2.xml.ProcessHandler.*;
import java.util.Map;
import org.drools.compiler.compiler.xml.XmlDumper;
import org.drools.compiler.rule.builder.dialect.java.JavaDialect;
import org.jbpm.process.core.context.exception.CompensationScope;
import org.jbpm.workflow.core.Node;
import org.jbpm.workflow.core.impl.DroolsConsequenceAction;
import org.jbpm.workflow.core.node.ActionNode;
import org.xml.sax.Attributes;
public class ActionNodeHandler extends AbstractNodeHandler {
protected Node createNode(Attributes attrs) {
throw new IllegalArgumentException("Reading in should be handled by specific handlers");
}
@SuppressWarnings("unchecked")
public Class generateNodeFor() {
return ActionNode.class;
}
public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) {
ActionNode actionNode = (ActionNode) node;
DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
String eventType = (String) actionNode.getMetaData("EventType");
String ref = (String) actionNode.getMetaData("Ref");
String variableRef = (String) actionNode.getMetaData("Variable");
if (action != null) {
String s = action.getConsequence();
if (s.startsWith("org.drools.core.process.instance.impl.WorkItemImpl workItem = new org.drools.core.process.instance.impl.WorkItemImpl();")) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, metaDataType);
xmlDump.append(">" + EOL);
writeExtensionElements(actionNode, xmlDump);
String variable = (String) actionNode.getMetaData("MappingVariable");
if (variable != null) {
xmlDump.append(
" " + EOL +
" " + EOL +
" " + XmlDumper.replaceIllegalChars(variable) + " " + EOL +
" " + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input " + EOL +
" " + EOL +
" " + EOL +
" " + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input " + EOL +
" " + EOL);
}
xmlDump.append(" " + EOL);
endNode("intermediateThrowEvent", xmlDump);
} else if ("signal".equals(eventType)) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, metaDataType);
xmlDump.append(">" + EOL);
writeExtensionElements(actionNode, xmlDump);
if (!s.startsWith("null")) {
xmlDump.append(
" " + EOL +
" " + EOL +
" " + XmlDumper.replaceIllegalChars(variableRef) + " " + EOL +
" " + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input " + EOL +
" " + EOL +
" " + EOL +
" " + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input " + EOL +
" " + EOL);
}
xmlDump.append(" " + EOL);
endNode("intermediateThrowEvent", xmlDump);
} else if (s.startsWith(RUNTIME_SIGNAL_EVENT)) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, metaDataType);
xmlDump.append(">" + EOL);
writeExtensionElements(actionNode, xmlDump);
s = s.substring(44);
String type = s.substring(0, s.indexOf("\""));
s = s.substring(s.indexOf(",") + 2);
String variable = null;
if (!s.startsWith("null")) {
variable = s.substring(0, s.indexOf(")"));
xmlDump.append(
" " + EOL +
" " + EOL +
" " + XmlDumper.replaceIllegalChars(variable) + " " + EOL +
" " + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input " + EOL +
" " + EOL +
" " + EOL +
" " + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input " + EOL +
" " + EOL);
}
xmlDump.append(" " + EOL);
endNode("intermediateThrowEvent", xmlDump);
} else if (s.startsWith(PROCESS_INSTANCE_SIGNAL_EVENT)) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, metaDataType);
xmlDump.append(">" + EOL);
writeExtensionElements(actionNode, xmlDump);
s = s.substring(43);
assert "Compensation".equals(s.substring(0, s.indexOf("\"")))
: "Type is not \"Compensation\" but \"" + s.substring(0, s.indexOf("\"")) + "\"";
String activityRef = "";
int begin = 12; // : Compensation
int end = s.length() - 3; // ");
String compensationEvent = s.substring(begin, end);
if( ! compensationEvent.startsWith(CompensationScope.IMPLICIT_COMPENSATION_PREFIX) ) {
// specific
activityRef = "activityRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(activityRef) + "\" ";
} // else general: activityRef = "" (above)
xmlDump.append(" " + EOL);
endNode("intermediateThrowEvent", xmlDump);
} else if (s.startsWith("org.drools.core.process.instance.context.exception.ExceptionScopeInstance scopeInstance = (org.drools.core.process.instance.context.exception.ExceptionScopeInstance) ((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).resolveContextInstance(org.drools.core.process.core.context.exception.ExceptionScope.EXCEPTION_SCOPE, \"")) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, metaDataType);
xmlDump.append(">" + EOL);
writeExtensionElements(actionNode, xmlDump);
s = s.substring(327);
String type = s.substring(0, s.indexOf("\""));
xmlDump.append(" " + EOL);
endNode("intermediateThrowEvent", xmlDump);
} else if ("IntermediateThrowEvent-None".equals(actionNode.getMetaData("NodeType"))) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, metaDataType);
xmlDump.append(">" + EOL);
writeExtensionElements(actionNode, xmlDump);
endNode("intermediateThrowEvent", xmlDump);
} else {
writeNode("scriptTask", actionNode, xmlDump, metaDataType);
if (JavaDialect.ID.equals(action.getDialect())) {
xmlDump.append("scriptFormat=\"" + XmlBPMNProcessDumper.JAVA_LANGUAGE + "\" ");
} else if ("JavaScript".equals(action.getDialect())) {
xmlDump.append("scriptFormat=\"" + XmlBPMNProcessDumper.JAVASCRIPT_LANGUAGE + "\" ");
}
Object isForCompensationObj = actionNode.getMetaData("isForCompensation");
if( isForCompensationObj != null && (Boolean) isForCompensationObj ) {
xmlDump.append("isForCompensation=\"true\" ");
}
xmlDump.append(">" + EOL);
writeExtensionElements(actionNode, xmlDump);
if (action.getConsequence() != null) {
xmlDump.append(" " + EOL);
}
endNode("scriptTask", xmlDump);
}
} else {
writeNode("scriptTask", actionNode, xmlDump, metaDataType);
xmlDump.append(">" + EOL);
writeExtensionElements(actionNode, xmlDump);
endNode("scriptTask", xmlDump);
}
}
}