Author: alex.guizar(a)jboss.com
Date: 2010-06-10 07:10:39 -0400 (Thu, 10 Jun 2010)
New Revision: 6398
Modified:
jbpm4/trunk/modules/api/src/main/resources/jpdl-4.4.xsd
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/StartEventBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BindingsParser.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java
jbpm4/trunk/modules/enterprise/src/main/java/org/jbpm/enterprise/internal/wire/binding/EjbRemoteCommandServiceBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/AssignActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/AssignBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/HqlBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JmsBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/repository/JpdlDeployer.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/UnresolvedTransition.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/TagBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/XmlUtil.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/AbstractCollectionBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/BasicTypeBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/CommandServiceBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateConfigurationBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateSessionBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/JobExecutorBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MailTemplateBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MapBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MessageSessionBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/ObjectBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/PropertiesBinding.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/assign/AssignTest.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/assign/Person.java
jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch06-Jpdl.xml
Log:
JBPM-2775: complete, test and document assign activity
Modified: jbpm4/trunk/modules/api/src/main/resources/jpdl-4.4.xsd
===================================================================
--- jbpm4/trunk/modules/api/src/main/resources/jpdl-4.4.xsd 2010-06-09 17:46:55 UTC (rev
6397)
+++ jbpm4/trunk/modules/api/src/main/resources/jpdl-4.4.xsd 2010-06-10 11:10:39 UTC (rev
6398)
@@ -382,6 +382,23 @@
</complexType>
</element>
+ <!-- ~~~ ASSIGN ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <element name="assign">
+ <annotation><documentation>Assigns a source value to a target
location
+ </documentation></annotation>
+ <complexType>
+ <complexContent>
+ <extension base="tns:assignType">
+ <sequence>
+ <element ref="tns:on" minOccurs="0"
maxOccurs="unbounded"/>
+ <element ref="tns:transition" minOccurs="0"
maxOccurs="unbounded" />
+ </sequence>
+ <attributeGroup ref="tns:activityAttributes" />
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
+
<!-- ~~~ CUSTOM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<element name="custom">
<annotation><documentation>Uses a user defined, custom implementation
of
@@ -1051,6 +1068,45 @@
of the script evaluation will be stored</documentation></annotation>
</attribute>
</complexType>
+
+ <complexType name="assignType">
+ <sequence>
+ <element name="description" minOccurs="0"
maxOccurs="unbounded" type="string" />
+ <element name="from" minOccurs="0">
+ <annotation>
+ <documentation>Descriptor that constructs the source
value</documentation>
+ </annotation>
+ <complexType>
+ <group ref="tns:wireObjectGroup" />
+ </complexType>
+ </element>
+ </sequence>
+ <attribute name="from-expr" type="string">
+ <annotation>
+ <documentation>Expression that resolves the source
value</documentation>
+ </annotation>
+ </attribute>
+ <attribute name="lang" type="string">
+ <annotation>
+ <documentation>Language in which from-expr is
written</documentation>
+ </annotation>
+ </attribute>
+ <attribute name="from-var" type="string">
+ <annotation>
+ <documentation>Variable that provides the source
value</documentation>
+ </annotation>
+ </attribute>
+ <attribute name="to-expr" type="string">
+ <annotation>
+ <documentation>Expression that resolves the target
location</documentation>
+ </annotation>
+ </attribute>
+ <attribute name="to-var" type="string">
+ <annotation>
+ <documentation>Variable that provides the target
location</documentation>
+ </annotation>
+ </attribute>
+ </complexType>
<complexType name="qlType">
<sequence>
@@ -1277,6 +1333,15 @@
</complexContent>
</complexType>
</element>
+ <element name="assign">
+ <complexType>
+ <complexContent>
+ <extension base="tns:assignType">
+ <attribute name="propagation"
type="tns:booleanValueType" />
+ </extension>
+ </complexContent>
+ </complexType>
+ </element>
<element name="script">
<complexType>
<complexContent>
Modified:
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java
===================================================================
---
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -35,13 +35,13 @@
}
protected void addActivityResources(TaskDefinitionImpl taskDefinition, BpmnActivity
taskActivity, Element element, Parse parse) {
- Element performer = XmlUtil.element(element, PERFORMER, false, parse);
+ Element performer = XmlUtil.element(element, PERFORMER);
if (performer != null) {
taskActivity.addActivityResource(addPerformer(taskDefinition, PERFORMER, performer,
parse));
}
// Overrides 'performer'
- Element humanPerformer = XmlUtil.element(element, HUMAN_PERFORMER, false, parse);
+ Element humanPerformer = XmlUtil.element(element, HUMAN_PERFORMER);
if (humanPerformer != null) {
taskActivity.addActivityResource(addPerformer(taskDefinition, HUMAN_PERFORMER,
humanPerformer, parse));
}
@@ -54,19 +54,19 @@
private ActivityResource addPerformer(TaskDefinitionImpl taskDefinition, String type,
Element performer, Parse parse) {
- String resourceRef = XmlUtil.attribute(performer, "resourceRef", true,
parse);
+ String resourceRef = XmlUtil.attribute(performer, "resourceRef", parse);
BpmnProcessDefinition bpmnProcessDefinition =
parse.contextStackFind(BpmnProcessDefinition.class);
ActivityResource activityResource = new ActivityResource();
activityResource.setResourceRef(bpmnProcessDefinition.getResource(resourceRef));
- String scope = XmlUtil.attribute(performer, "jbpm:type", false, parse); //
Todo refactor for namespaces
+ String scope = XmlUtil.attribute(performer, "jbpm:type"); // Todo refactor
for namespaces
- Element rae = XmlUtil.element(performer, "resourceAssignmentExpression",
false, parse);
+ Element rae = XmlUtil.element(performer, "resourceAssignmentExpression");
if (rae != null) {
- String formalExpression = XmlUtil.element(rae, "formalExpression", true,
parse).getTextContent().trim();
- String lang = XmlUtil.attribute(rae, "language", false, parse);
+ String formalExpression = XmlUtil.element(rae, "formalExpression",
parse).getTextContent().trim();
+ String lang = XmlUtil.attribute(rae, "language");
Expression expression = Expression.create(formalExpression, lang);
if (PERFORMER.equals(type) || HUMAN_PERFORMER.equals(type)) {
taskDefinition.setAssigneeExpression(expression);
Modified:
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java
===================================================================
---
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -47,7 +47,7 @@
BpmnProcessDefinition bpmnProcessDefinition =
parse.contextStackFind(BpmnProcessDefinition.class);
// Operation parsing
- String operationRef = XmlUtil.attribute(element, "operationRef", true,
parse, null);
+ String operationRef = XmlUtil.attribute(element, "operationRef", parse);
Element operationElement = bpmnProcessDefinition.getOperations().get(operationRef);
if (operationElement == null) {
parse.addProblem("No operation found for operationRef " + operationRef,
operationElement);
Modified:
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/StartEventBinding.java
===================================================================
---
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/StartEventBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/StartEventBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -56,7 +56,7 @@
parse.addProblem("multiple start events not yet supported", element);
}
- String id = XmlUtil.attribute(element, "id", true, parse);
+ String id = XmlUtil.attribute(element, "id", parse);
Element eventDefinition = XmlUtil.element(element);
if (eventDefinition != null &&
"timerEventDefinition".equals(eventDefinition.getNodeName())) {
return createTimerStartEvent(processDefinition, eventDefinition, id, bpmnParser,
parse);
Modified:
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java
===================================================================
---
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -48,9 +48,9 @@
addActivityResources(taskDefinition, taskActivity, element, parse);
- Element rendering = XmlUtil.element(element, "rendering", false, parse);
+ Element rendering = XmlUtil.element(element, "rendering");
if (rendering != null) {
- Element jBPMForm = XmlUtil.element(rendering, "form", false, parse);
+ Element jBPMForm = XmlUtil.element(rendering, "form");
taskDefinition.setFormResourceName(jBPMForm != null ?
jBPMForm.getTextContent().trim() : null);
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BindingsParser.java
===================================================================
---
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BindingsParser.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BindingsParser.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -53,7 +53,7 @@
}
protected Binding instantiateBinding(Element bindingElement, Parse parse) {
- String bindingClassName = XmlUtil.attribute(bindingElement, "binding",
true, parse);
+ String bindingClassName = XmlUtil.attribute(bindingElement, "binding",
parse);
log.trace("adding bpmn binding " + bindingClassName);
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java 2010-06-09
17:46:55 UTC (rev 6397)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -118,8 +118,8 @@
parse.contextStackPush(processDefinition);
try {
- String id = XmlUtil.attribute(processElement, "id", true, parse);
- String name = XmlUtil.attribute(processElement, "name", false, parse);
+ String id = XmlUtil.attribute(processElement, "id", parse);
+ String name = XmlUtil.attribute(processElement, "name");
if (id != null && !"".equals(id)) {
processDefinition.setName(id);
@@ -207,7 +207,7 @@
for (Element dataElement : XmlUtil.elements(element, "dataObject")) {
VariableDefinitionImpl variableDefinition = new VariableDefinitionImpl();
- String name = XmlUtil.attribute(dataElement, "id", true, parse);
+ String name = XmlUtil.attribute(dataElement, "id", parse);
variableDefinition.setName(name);
String typeRef = XmlUtil.attribute(dataElement, "itemSubjectRef");
@@ -222,9 +222,9 @@
public void parseActivities(Element element, Parse parse, CompositeElementImpl
compositeElement) {
List<Element> elements = XmlUtil.elements(element);
for (Element nestedElement : elements) {
- String tagName = XmlUtil.getTagLocalName(nestedElement);
- String name = XmlUtil.attribute(nestedElement, "name", false, parse);
- String id = XmlUtil.attribute(nestedElement, "id", true, parse);
+ String tagName = nestedElement.getLocalName();
+ String name = XmlUtil.attribute(nestedElement, "name");
+ String id = XmlUtil.attribute(nestedElement, "id", parse);
TagBinding activityBinding = (TagBinding) getBinding(nestedElement,
CATEGORY_ACTIVITY);
if (activityBinding == null) {
@@ -258,10 +258,10 @@
for (Element transitionElement : transitionElements) {
// Parse attributes
- String transitionName = XmlUtil.attribute(transitionElement, "name",
false, parse);
- String transitionId = XmlUtil.attribute(transitionElement, "id", true,
parse);
- String sourceRef = XmlUtil.attribute(transitionElement, "sourceRef",
true, parse);
- String targetRef = XmlUtil.attribute(transitionElement, "targetRef",
true, parse);
+ String transitionName = XmlUtil.attribute(transitionElement, "name");
+ String transitionId = XmlUtil.attribute(transitionElement, "id", parse);
+ String sourceRef = XmlUtil.attribute(transitionElement, "sourceRef",
parse);
+ String targetRef = XmlUtil.attribute(transitionElement, "targetRef",
parse);
if (log.isDebugEnabled()) {
log.debug(transitionId + ": " + sourceRef + " -> " +
targetRef);
Modified:
jbpm4/trunk/modules/enterprise/src/main/java/org/jbpm/enterprise/internal/wire/binding/EjbRemoteCommandServiceBinding.java
===================================================================
---
jbpm4/trunk/modules/enterprise/src/main/java/org/jbpm/enterprise/internal/wire/binding/EjbRemoteCommandServiceBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/enterprise/src/main/java/org/jbpm/enterprise/internal/wire/binding/EjbRemoteCommandServiceBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -41,10 +41,10 @@
}
public Object parse(Element element, Parse parse, Parser parser) {
- String initialContextFactory = XmlUtil.attribute(element,
"initial-context-factory", true, parse);
- String providerUrl = XmlUtil.attribute(element, "provider-url", true,
parse);
- String urlPkgPrefixes = XmlUtil.attribute(element, "url-pkg-prefixes",
true, parse);
- String jndiName = XmlUtil.attribute(element, "jndi-name", false, parse,
"jbpm/CommandExecutor");
+ String initialContextFactory = XmlUtil.attribute(element,
"initial-context-factory", parse);
+ String providerUrl = XmlUtil.attribute(element, "provider-url", parse);
+ String urlPkgPrefixes = XmlUtil.attribute(element, "url-pkg-prefixes",
parse);
+ String jndiName = XmlUtil.attribute(element, "jndi-name",
"jbpm/CommandExecutor");
EjbRemoteCommandService ejbRemoteCommandService = new
EjbRemoteCommandService(initialContextFactory, providerUrl, urlPkgPrefixes, jndiName);
Descriptor descriptor = new ProvidedObjectDescriptor(ejbRemoteCommandService, true);
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/AssignActivity.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/AssignActivity.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/AssignActivity.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -24,11 +24,10 @@
import org.jbpm.api.model.OpenExecution;
import org.jbpm.pvm.internal.el.Expression;
import org.jbpm.pvm.internal.el.UelValueExpression;
-import org.jbpm.pvm.internal.model.ScopeInstanceImpl;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.internal.wire.Descriptor;
import org.jbpm.pvm.internal.wire.WireContext;
-
/**
* @author Tom Baeyens
*/
@@ -37,38 +36,46 @@
private static final long serialVersionUID = 1L;
protected Expression fromExpression;
- protected Descriptor fromValueDescriptor;
+ protected String fromVariable;
+ protected Descriptor fromDescriptor;
- protected String toVariableName;
protected UelValueExpression toExpression;
+ protected String toVariable;
void perform(OpenExecution execution) throws Exception {
Object value = null;
-
- if (fromExpression!=null) {
+
+ if (fromExpression != null) {
value = fromExpression.evaluate(execution);
-
- } else if (fromValueDescriptor!=null) {
- value = WireContext.create(fromValueDescriptor, (ScopeInstanceImpl) execution);
}
-
- if (toVariableName!=null) {
- execution.setVariable(toVariableName, value);
- } else {
+ else if (fromVariable != null) {
+ value = execution.getVariable(fromVariable);
+ }
+ else if (fromDescriptor != null) {
+ value = WireContext.create(fromDescriptor, (ExecutionImpl) execution);
+ }
+
+ if (toExpression != null) {
toExpression.setValue(execution, value);
}
+ else {
+ execution.setVariable(toVariable, value);
+ }
}
- public void setToVariableName(String variableName) {
- this.toVariableName = variableName;
+ public void setFromDescriptor(Descriptor descriptor) {
+ fromDescriptor = descriptor;
}
- public void setFromValueDescriptor(Descriptor valueDescriptor) {
- this.fromValueDescriptor = valueDescriptor;
+ public void setFromExpression(Expression expression) {
+ fromExpression = expression;
}
- public void setFromExpression(Expression fromExpression) {
- this.fromExpression = fromExpression;
+ public void setFromVariable(String variableName) {
+ fromVariable = variableName;
}
- public void setToExpression(UelValueExpression toExpression) {
- this.toExpression = toExpression;
+ public void setToExpression(UelValueExpression expression) {
+ toExpression = expression;
}
+ public void setToVariable(String variableName) {
+ toVariable = variableName;
+ }
}
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/AssignBinding.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/AssignBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/AssignBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -33,12 +33,18 @@
import org.jbpm.pvm.internal.xml.Parse;
import org.w3c.dom.Element;
-
/**
* @author Tom Baeyens
*/
public class AssignBinding extends JpdlBinding {
-
+
+ private static final String FROM_EXPR = "from-expr";
+ private static final String LANG = "lang";
+ private static final String FROM_VAR = "from-var";
+ private static final String FROM_DESC = "from";
+ private static final String TO_EXPR = "to-expr";
+ private static final String TO_VAR = "to-var";
+
public AssignBinding() {
super("assign");
}
@@ -46,43 +52,47 @@
public Object parseJpdl(Element element, Parse parse, JpdlParser parser) {
AssignActivity assignActivity = new AssignActivity();
- String toVar = XmlUtil.attribute(element, "to-var");
- String toExpr = XmlUtil.attribute(element, "to-expr");
- if (toVar!=null) {
- assignActivity.setToVariableName(toVar);
- } else if (toExpr!=null) {
- Expression expression = Expression.create(toExpr, Expression.LANGUAGE_UEL_VALUE);
- assignActivity.setToExpression((UelValueExpression) expression);
+ // from expression
+ if (element.hasAttribute(FROM_EXPR)) {
+ String lang = XmlUtil.attribute(element, LANG);
+ Expression fromExpression = Expression.create(element.getAttribute(FROM_EXPR),
lang);
+ assignActivity.setFromExpression(fromExpression);
}
-
- String exprText = XmlUtil.attribute(element, "expr");
- String exprType = XmlUtil.attribute(element, "expr-type");
-
- // if there is an expr specified
- if (exprText!=null) {
- Expression expression = Expression.create(exprText, exprType);
- assignActivity.setFromExpression(expression);
-
- } else { // there is no expr specified
- Set<String> descriptorTagNames =
WireParser.getInstance().getBindings().getTagNames(WireParser.CATEGORY_DESCRIPTOR);
- Descriptor valueDescriptor = null;
- List<Element> assignContentElements = XmlUtil.elements(element);
-
- for (int i=0; ((i<assignContentElements.size()) &&
(valueDescriptor==null)); i++) {
- Element assignContentElement = assignContentElements.get(i);
- String assignContentElementTagName =
XmlUtil.getTagLocalName(assignContentElement);
- if (descriptorTagNames.contains(assignContentElementTagName)) {
- valueDescriptor = parser.parseDescriptor(assignContentElement, parse);
+ // from variable
+ else if (element.hasAttribute(FROM_VAR)) {
+ assignActivity.setFromVariable(element.getAttribute(FROM_VAR));
+ }
+ else {
+ // neither expression nor variable
+ Element fromElement = XmlUtil.element(element, FROM_DESC);
+ if (fromElement != null) {
+ Set<String> descriptorTags = WireParser.getInstance()
+ .getBindings()
+ .getTagNames(WireParser.CATEGORY_DESCRIPTOR);
+ Element descriptorElement = XmlUtil.element(fromElement);
+ if (descriptorElement != null
+ && descriptorTags.contains(descriptorElement.getTagName())) {
+ Descriptor descriptor = parser.parseDescriptor(descriptorElement, parse);
+ assignActivity.setFromDescriptor(descriptor);
}
+ else {
+ parse.addProblem("missing descriptor element", fromElement);
+ }
}
-
- if (valueDescriptor!=null) {
- assignActivity.setFromValueDescriptor(valueDescriptor);
- } else {
- parse.addProblem("no value for assignment specified. 'assign' must
have attribute 'expr' or a wire object element.", element);
+ else {
+ parse.addProblem("missing " + FROM_EXPR + " attribute, " +
FROM_VAR + " attribute or "
+ + FROM_DESC + " element", element);
}
}
-
+
+ if (element.hasAttribute(TO_VAR)) {
+ assignActivity.setToVariable(element.getAttribute(TO_VAR));
+ }
+ else if (element.hasAttribute(TO_EXPR)) {
+ Expression expression = Expression.create(element.getAttribute(TO_EXPR),
Expression.LANGUAGE_UEL_VALUE);
+ assignActivity.setToExpression((UelValueExpression) expression);
+ }
+
return assignActivity;
}
}
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndBinding.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -43,12 +43,12 @@
public Object parseJpdl(Element element, Parse parse, JpdlParser parser) {
boolean endProcessInstance = true;
- String ends = XmlUtil.attribute(element, "ends", false, parse);
+ String ends = XmlUtil.attribute(element, "ends");
if ("execution".equalsIgnoreCase(ends)) {
endProcessInstance = false;
}
- String state = XmlUtil.attribute(element, "state", false, parse);
+ String state = XmlUtil.attribute(element, "state");
EndActivity endActivity = new EndActivity();
endActivity.setEndProcessInstance(endProcessInstance);
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/HqlBinding.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/HqlBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/HqlBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -51,17 +51,18 @@
public Object parseJpdl(Element element, Parse parse, JpdlParser parser) {
HqlActivity hqlActivity = createHqlActivity();
- Element queryElement = XmlUtil.element(element, "query", true, parse);
+ Element queryElement = XmlUtil.element(element, "query", parse);
if (queryElement!=null) {
String query = XmlUtil.getContentText(queryElement);
hqlActivity.setQuery(query);
}
- if (XmlUtil.attributeBoolean(element, "unique", false, parse,
Boolean.FALSE)) {
- hqlActivity.setResultUnique(true);
+ Boolean resultUnique = XmlUtil.attributeBoolean(element, "unique", parse);
+ if (resultUnique!=null) {
+ hqlActivity.setResultUnique(resultUnique);
}
- String variableName = XmlUtil.attribute(element, "var", true, parse);
+ String variableName = XmlUtil.attribute(element, "var", parse);
hqlActivity.setResultVariableName(variableName);
Element parametersElement = XmlUtil.element(element, "parameters");
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaBinding.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -47,8 +47,8 @@
public Object parseJpdl(Element element, Parse parse, JpdlParser parser) {
JavaActivity javaActivity = new JavaActivity();
- if (XmlUtil.attribute(element, "method", true, parse, null)!=null) {
- String jndiName = XmlUtil.attribute(element, "ejb-jndi-name", false,
parse, null);
+ if (XmlUtil.attribute(element, "method", parse)!=null) {
+ String jndiName = XmlUtil.attribute(element, "ejb-jndi-name");
if (jndiName != null) {
parseEjbInvocation(javaActivity, element, parse, parser);
} else {
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JmsBinding.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JmsBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JmsBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -51,13 +51,13 @@
// attributes /////////////////////////////////////////////////////////////
- String connectionFactoryName = XmlUtil.attribute(element,
"connection-factory", true, parse);
+ String connectionFactoryName = XmlUtil.attribute(element,
"connection-factory", parse);
jmsActivity.setConnectionFactoryName(connectionFactoryName);
- String destinationName = XmlUtil.attribute(element, "destination", true,
parse);
+ String destinationName = XmlUtil.attribute(element, "destination", parse);
jmsActivity.setDestinationName(destinationName);
- Boolean transacted = XmlUtil.attributeBoolean(element, "transacted", false,
parse, null);
+ Boolean transacted = XmlUtil.attributeBoolean(element, "transacted",
parse);
if (transacted!=null) {
jmsActivity.setTransacted(transacted);
}
@@ -77,7 +77,7 @@
// elements ///////////////////////////////////////////////////////////////
- Element textElement = XmlUtil.element(element, "text", false, parse);
+ Element textElement = XmlUtil.element(element, "text");
if (textElement != null) {
String expressionText = XmlUtil.getContentText(textElement);
jmsActivity.setType("text");
@@ -85,7 +85,7 @@
jmsActivity.setTextExpression(expression);
}
- Element objectElement = XmlUtil.element(element, "object", false, parse);
+ Element objectElement = XmlUtil.element(element, "object");
if (objectElement != null) {
jmsActivity.setType("object");
String expressionText = XmlUtil.attribute(objectElement, "expr");
@@ -93,7 +93,7 @@
jmsActivity.setObjectExpression(expression);
}
- Element mapElement = XmlUtil.element(element, "map", false, parse);
+ Element mapElement = XmlUtil.element(element, "map");
if (mapElement != null) {
jmsActivity.setType("map");
Descriptor descriptor = parser.parseDescriptor(mapElement, parse);
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -21,22 +21,15 @@
*/
package org.jbpm.jpdl.internal.activity;
+import org.w3c.dom.Element;
-import java.util.List;
-
-import org.jbpm.api.model.Event;
import org.jbpm.jpdl.internal.xml.JpdlParser;
-import org.jbpm.jpdl.internal.xml.UnresolvedTransitions;
import org.jbpm.pvm.internal.model.ActivityImpl;
-import org.jbpm.pvm.internal.model.TimerDefinitionImpl;
-import org.jbpm.pvm.internal.model.TransitionImpl;
import org.jbpm.pvm.internal.util.TagBinding;
import org.jbpm.pvm.internal.util.XmlUtil;
import org.jbpm.pvm.internal.xml.Parse;
import org.jbpm.pvm.internal.xml.Parser;
-import org.w3c.dom.Element;
-
/**
* @author Tom Baeyens
*/
@@ -53,7 +46,7 @@
}
public void parseName(Element element, ActivityImpl activity, Parse parse) {
- String name = XmlUtil.attribute(element, "name", isNameRequired(), parse);
+ String name = XmlUtil.attribute(element, "name", isNameRequired() ? parse :
null);
if (name!=null) {
// basic name validation
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -154,8 +154,8 @@
Map<String, String> swimlaneMappings = new HashMap<String, String>();
for (Element inElement: XmlUtil.elements(element, "swimlane-mapping")) {
- String swimlane = XmlUtil.attribute(inElement, "swimlane", true, parse);
- String subSwimlane = XmlUtil.attribute(inElement, "sub-swimlane", true,
parse);
+ String swimlane = XmlUtil.attribute(inElement, "swimlane", parse);
+ String subSwimlane = XmlUtil.attribute(inElement, "sub-swimlane",
parse);
swimlaneMappings.put(swimlane, subSwimlane);
}
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/repository/JpdlDeployer.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/repository/JpdlDeployer.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/repository/JpdlDeployer.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -67,7 +67,7 @@
.execute()
.getDocument();
Element documentElement = document.getDocumentElement();
- String tagName = XmlUtil.getTagLocalName(documentElement);
+ String tagName = documentElement.getLocalName();
if ("process-update".equals(tagName)) {
updateJpdlProcessResource(deployment, resourceName, document);
@@ -173,7 +173,7 @@
Map<String, Element> activityMap = new HashMap<String, Element>();
for (Element element: XmlUtil.elements(containerElement)) {
- String tagName = XmlUtil.getTagLocalName(element);
+ String tagName = element.getLocalName();
if (activityNames.contains(tagName)) {
String activityName = element.getAttribute("name");
activityMap.put(activityName, element);
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlBindingsParser.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -51,7 +51,7 @@
}
protected Binding instantiateBinding(Element bindingElement, Parse parse) {
- String bindingClassName = XmlUtil.attribute(bindingElement, "binding",
true, parse);
+ String bindingClassName = XmlUtil.attribute(bindingElement, "binding",
parse);
log.trace("adding jpdl binding "+bindingClassName);
@@ -60,7 +60,7 @@
Class<?> bindingClass = ReflectUtil.classForName(bindingClassName);
TagBinding binding = (TagBinding) bindingClass.newInstance();
- String tagLocalName = XmlUtil.getTagLocalName(bindingElement);
+ String tagLocalName = bindingElement.getLocalName();
if ("activity".equals(tagLocalName)) {
binding.setCategory(JpdlParser.CATEGORY_ACTIVITY);
} else if ("eventlistener".equals(tagLocalName)) {
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -160,7 +160,7 @@
parse.contextStackPush(processDefinition);
try {
// process attribues
- String name = XmlUtil.attribute(documentElement, "name", true, parse);
+ String name = XmlUtil.attribute(documentElement, "name", parse);
processDefinition.setName(name);
// make the process language version available for bindings
@@ -210,12 +210,12 @@
String packageName = XmlUtil.attribute(documentElement, "package");
processDefinition.setPackageName(packageName);
- Integer version = XmlUtil.attributeInteger(documentElement, "version",
false, parse);
+ Integer version = XmlUtil.attributeInteger(documentElement, "version",
parse);
if (version!=null) {
processDefinition.setVersion(version);
}
- String key = XmlUtil.attribute(documentElement, "key", false, parse);
+ String key = XmlUtil.attribute(documentElement, "key");
if (key!=null) {
processDefinition.setKey(key);
}
@@ -232,7 +232,7 @@
// swimlanes
List<Element> swimlaneElements = XmlUtil.elements(documentElement,
"swimlane");
for (Element swimlaneElement: swimlaneElements) {
- String swimlaneName = XmlUtil.attribute(swimlaneElement, "name", true,
parse);
+ String swimlaneName = XmlUtil.attribute(swimlaneElement, "name",
parse);
if (swimlaneName!=null) {
SwimlaneDefinitionImpl swimlaneDefinition =
processDefinition.createSwimlaneDefinition(swimlaneName);
@@ -282,7 +282,7 @@
public void parseActivities(Element documentElement, Parse parse, CompositeElementImpl
compositeElement) {
List<Element> elements = XmlUtil.elements(documentElement);
for (Element nestedElement : elements) {
- String tagName = XmlUtil.getTagLocalName(nestedElement);
+ String tagName = nestedElement.getLocalName();
if ("on".equals(tagName)
|| "timer".equals(tagName)
|| "swimlane".equals(tagName)
@@ -391,7 +391,7 @@
// event listeners
List<Element> onElements = XmlUtil.elements(element, "on");
for (Element onElement: onElements) {
- String eventName = XmlUtil.attribute(onElement, "event", true, parse);
+ String eventName = XmlUtil.attribute(onElement, "event", parse);
parseOnEvent(onElement, parse, scopeElement, eventName);
Element timerElement = XmlUtil.element(onElement, "timer");
@@ -431,8 +431,9 @@
eventListenerReference =
event.createEventListenerReference(eventListenerDescriptor);
}
- if (XmlUtil.attributeBoolean(eventListenerElement, "propagation",
false, parse, false)) {
- eventListenerReference.setPropagationEnabled(true);
+ Boolean propagationEnabled = XmlUtil.attributeBoolean(eventListenerElement,
"propagation", parse);
+ if (propagationEnabled!=null) {
+ eventListenerReference.setPropagationEnabled(propagationEnabled);
}
continuationText = XmlUtil.attribute(eventListenerElement,
"continue");
@@ -455,7 +456,7 @@
}
} else {
- String tagName = XmlUtil.getTagLocalName(eventListenerElement);
+ String tagName = eventListenerElement.getLocalName();
if ( ! ( (observableElement instanceof TransitionImpl)
&& ( "condition".equals(tagName)
|| "timer".equals(tagName)
@@ -473,7 +474,7 @@
List<Element> transitionElements = XmlUtil.elements(element,
"transition");
UnresolvedTransitions unresolvedTransitions =
parse.contextStackFind(UnresolvedTransitions.class);
for (Element transitionElement: transitionElements) {
- String transitionName = XmlUtil.attribute(transitionElement, "name",
false, parse);
+ String transitionName = XmlUtil.attribute(transitionElement, "name");
Element timerElement = XmlUtil.element(transitionElement, "timer");
if (timerElement!=null) {
@@ -538,7 +539,7 @@
String duedate = XmlUtil.attribute(element, "duedate");
taskDefinition.setDueDateDescription(duedate);
- Integer priority = XmlUtil.attributeInteger(element, "priority", false,
parse);
+ Integer priority = XmlUtil.attributeInteger(element, "priority", parse);
if (priority != null) {
taskDefinition.setPriority(priority);
}
@@ -586,13 +587,13 @@
for (Element variableElement: XmlUtil.elements(element, "variable")) {
VariableDefinitionImpl variableDefinition =
scopeElement.createVariableDefinition();
- String name = XmlUtil.attribute(variableElement, "name", true, parse);
+ String name = XmlUtil.attribute(variableElement, "name", parse);
variableDefinition.setName(name);
- String type = XmlUtil.attribute(variableElement, "type", true, parse);
+ String type = XmlUtil.attribute(variableElement, "type", parse);
variableDefinition.setTypeName(type);
- Boolean isHistoryEnabled = XmlUtil.attributeBoolean(variableElement,
"history", false, parse);
+ Boolean isHistoryEnabled = XmlUtil.attributeBoolean(variableElement,
"history", parse);
if (isHistoryEnabled != null) {
variableDefinition.setHistoryEnabled(isHistoryEnabled);
}
@@ -710,7 +711,7 @@
userCodeReference.setCached(false);
}
- Boolean isCached = XmlUtil.attributeBoolean(element, "cache", false, parse,
null);
+ Boolean isCached = XmlUtil.attributeBoolean(element, "cache", parse);
if (isCached!=null) {
userCodeReference.setCached(isCached.booleanValue());
}
@@ -719,7 +720,7 @@
}
public ObjectDescriptor parseObjectDescriptor(Element element, Parse parse) {
- return (ObjectDescriptor) ObjectBinding.parseObjectDescriptor(element, parse,
WireParser.getInstance());
+ return ObjectBinding.parseObjectDescriptor(element, parse,
WireParser.getInstance());
}
public Descriptor parseDescriptor(Element element, Parse parse) {
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/UnresolvedTransition.java
===================================================================
---
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/UnresolvedTransition.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/UnresolvedTransition.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -36,7 +36,7 @@
this.transitionElement = transitionElement;
}
public void resolve(ProcessDefinitionImpl processDefinition, Parse parse) {
- String to = XmlUtil.attribute(transitionElement, "to", true, parse);
+ String to = XmlUtil.attribute(transitionElement, "to", parse);
if (to!=null) {
ActivityImpl destination = (ActivityImpl) processDefinition.findActivity(to);
if (destination!=null) {
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -33,10 +33,10 @@
private static final long serialVersionUID = 1L;
protected EventListener eventListener;
- protected boolean isEventListenerStateful= false;
+ protected boolean isEventListenerStateful;
protected Descriptor eventListenerDescriptor;
/** does this action accept propagated events ? */
- protected boolean isPropagationEnabled = false;
+ protected boolean isPropagationEnabled;
protected Continuation continuation = Continuation.SYNCHRONOUS;
/** does this action accept propagated events ? Default is false. */
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/TagBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/TagBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/TagBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -59,7 +59,7 @@
) {
return false;
}
- String elementTagLocalName = XmlUtil.getTagLocalName(element);
+ String elementTagLocalName = element.getLocalName();
if (!tagName.equals(elementTagLocalName)) {
return false;
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/XmlUtil.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/XmlUtil.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/XmlUtil.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -28,9 +28,6 @@
import java.util.Set;
import java.util.StringTokenizer;
-import org.jbpm.api.JbpmException;
-import org.jbpm.pvm.internal.xml.Parse;
-
import javax.xml.namespace.QName;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
@@ -43,11 +40,12 @@
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
+import org.jbpm.api.JbpmException;
+import org.jbpm.pvm.internal.xml.Parse;
+
/**
* convenience methods to make reading org.w3c.dom models easier.
- *
* @author Tom Baeyens
*/
public class XmlUtil {
@@ -57,52 +55,32 @@
}
public static List<Element> elements(Element element, String tagName) {
- if (element==null) {
+ if (element == null || !element.hasChildNodes()) {
return Collections.emptyList();
}
- NodeList activityList = element.getChildNodes();
- if ( (activityList == null)
- || (activityList.getLength()==0)
- ) {
- return Collections.emptyList();
- }
+
List<Element> elements = new ArrayList<Element>();
- for (int i = 0; i < activityList.getLength(); i++) {
- Node child = activityList.item(i);
- if (Element.class.isAssignableFrom(child.getClass())) {
+ for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) child;
- String childTagName = getTagLocalName(childElement);
- if (childTagName.equals(tagName)) {
- if (elements == null) {
- elements = new ArrayList<Element>();
- }
- elements.add(childElement);
- }
+ String childTagName = childElement.getLocalName();
+
+ if (tagName.equals(childTagName)) elements.add(childElement);
}
}
return elements;
}
public static List<Element> elements(Element element, Set<String>
allowedTagNames) {
- if (element==null) {
+ if (element == null || !element.hasChildNodes()) {
return Collections.emptyList();
}
- NodeList activityList = element.getChildNodes();
- if ( (activityList == null)
- || (activityList.getLength()==0)
- ) {
- return Collections.emptyList();
- }
+
List<Element> elements = new ArrayList<Element>();
- for (int i = 0; i < activityList.getLength(); i++) {
- Node child = activityList.item(i);
- if (Element.class.isAssignableFrom(child.getClass())) {
+ for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) child;
- String childTagName = getTagLocalName(childElement);
- if (allowedTagNames.contains(childTagName)) {
- if (elements == null) {
- elements = new ArrayList<Element>();
- }
+ if (allowedTagNames.contains(child.getLocalName())) {
elements.add(childElement);
}
}
@@ -111,95 +89,68 @@
}
public static Element element(Element element, String tagName) {
- return element(element, tagName, false, null);
+ return element(element, tagName, null);
}
- public static Element element(Element element, String tagName, boolean required, Parse
parse) {
- if (element==null) {
- return null;
- }
- NodeList activityList = element.getChildNodes();
- for (int i = 0; (i < activityList.getLength()); i++) {
- Node child = activityList.item(i);
- if ((Element.class.isAssignableFrom(child.getClass())) &&
(getTagLocalName((Element) child)).equals(tagName)) {
- return (Element) child;
+ public static Element element(Element element, String tagName, Parse parse) {
+ if (element != null && element.hasChildNodes()) {
+ for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
+ if (child.getNodeType() == Node.ELEMENT_NODE &&
tagName.equals(child.getLocalName())) {
+ return (Element) child;
+ }
}
}
-
- if (required && (parse!=null)) {
- parse.addProblem("nested element
<"+XmlUtil.getTagLocalName(element)+"><"+tagName+" ...
/>... is required", element);
+
+ if (parse != null) {
+ parse.addProblem("missing element " + tagName, element);
}
return null;
}
-
public static List<Element> elements(Element element) {
- if (element==null) {
+ if (element == null || !element.hasChildNodes()) {
return Collections.emptyList();
}
- NodeList activityList = element.getChildNodes();
- if ( (activityList == null)
- || (activityList.getLength()==0)
- ) {
- return Collections.emptyList();
- }
+
List<Element> elements = new ArrayList<Element>();
- if ((activityList != null) && (activityList.getLength() > 0)) {
- elements = new ArrayList<Element>();
- for (int i = 0; i < activityList.getLength(); i++) {
- Node activity = activityList.item(i);
- if (activity instanceof Element) {
- elements.add((Element) activity);
- }
+ for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
+ elements.add((Element) child);
}
}
return elements;
}
- public static List<Element> elements(Element element, String ns, String
localName) {
- if (element==null) {
+ public static List<Element> elements(Element element, String namespace, String
localName) {
+ if (element == null || !element.hasChildNodes()) {
return Collections.emptyList();
}
- NodeList activityList = element.getChildNodes();
- if ( (activityList == null)
- || (activityList.getLength()==0)
- ) {
- return Collections.emptyList();
- }
- List<Element> matchingElements = new ArrayList<Element>();
- NodeList nl = element.getChildNodes();
- for (int i=0;i<nl.getLength();i++) {
- Node n = nl.item(i);
- if (n instanceof Element && n.getLocalName() != null &&
n.getLocalName().equals(localName) && n.getNamespaceURI() != null &&
n.getNamespaceURI().equals(ns)) {
- matchingElements.add((Element)n);
+
+ List<Element> elements = new ArrayList<Element>();
+ for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
+ String childNamespace = element.getNamespaceURI();
+ if (child.getNodeType() == Node.ELEMENT_NODE
+ && (namespace != null ? namespace.equals(childNamespace) : childNamespace
== null)
+ && localName.equals(element.getLocalName())) {
+ elements.add((Element) child);
}
}
- return matchingElements;
+ return elements;
}
public static List<Element> elementsQName(Element element, Set<QName>
allowedTagNames) {
- if (element==null) {
+ if (element == null || !element.hasChildNodes()) {
return Collections.emptyList();
}
- NodeList activityList = element.getChildNodes();
- if ( (activityList == null)
- || (activityList.getLength()==0)
- ) {
- return Collections.emptyList();
- }
+
List<Element> elements = new ArrayList<Element>();
- if (activityList != null) {
- for (int i = 0; i < activityList.getLength(); i++) {
- Node child = activityList.item(i);
- if (Element.class.isAssignableFrom(child.getClass())) {
- Element childElement = (Element) child;
- QName childElementQName = new QName(childElement.getNamespaceURI(),
childElement.getLocalName());
- if (allowedTagNames.contains(childElementQName)) {
- if (elements == null) {
- elements = new ArrayList<Element>();
- }
- elements.add(childElement);
- }
+ for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
+ Element childElement = (Element) child;
+ QName childQName = new QName(childElement.getNamespaceURI(),
+ childElement.getLocalName());
+ if (allowedTagNames.contains(childQName)) {
+ elements.add(childElement);
}
}
}
@@ -207,12 +158,14 @@
}
public static Element element(Element element) {
- Element onlyChild = null;
- List<Element> elements = elements(element);
- if (!elements.isEmpty()) {
- onlyChild = elements.get(0);
+ if (element != null && element.hasChildNodes()) {
+ for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
+ return (Element) child;
+ }
+ }
}
- return onlyChild;
+ return null;
}
public static String toString(Node node) {
@@ -226,7 +179,7 @@
StringWriter stringWriter = new StringWriter();
transformer.transform(new DOMSource(node), new StreamResult(stringWriter));
return stringWriter.toString();
- }
+ }
catch (TransformerException e) {
throw new JbpmException("could not transform dom node to string", e);
}
@@ -238,8 +191,7 @@
public static boolean isTextOnly(Element element) {
for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
- if (child.getNodeType() == Node.ELEMENT_NODE)
- return false;
+ if (child.getNodeType() == Node.ELEMENT_NODE) return false;
}
return true;
}
@@ -259,130 +211,118 @@
}
public static List<Node> contents(Element element) {
- NodeList activityList = element.getChildNodes();
- if ((activityList == null) || (activityList.getLength() == 0)) {
+ if (element == null || !element.hasChildNodes()) {
return Collections.emptyList();
}
List<Node> contents = new ArrayList<Node>();
- for (int i = 0; i < activityList.getLength(); i++) {
- contents.add((Node) activityList.item(i));
+ for (Node child = element.getFirstChild(); child != null; child =
child.getNextSibling()) {
+ contents.add(child);
}
-
return contents;
}
- public static String getTagLocalName(Element element) {
- if (element == null) {
- return null;
- }
- String localName = element.getLocalName();
- if (localName != null) {
- return localName;
- }
- return element.getTagName();
- }
-
- /** the attribute value or null if the attribute is not present */
+ /**
+ * retrieves an attribute value by name.
+ * @return the attribute value or <code>null</code> if there is no such
attribute
+ */
public static String attribute(Element element, String attributeName) {
Attr attribute = element.getAttributeNode(attributeName);
return attribute != null ? attribute.getValue() : null;
}
- /** convenience method to combine extraction of a string attribute value.
- *
- * If the attribute exists, it is returned. If the attribute is not present, null
- * is returned. The attribute is not present and it is required,
- * a problem will be added to the parse. */
- public static String attribute(Element element, String attributeName, boolean required,
Parse parse) {
- return attribute(element, attributeName, required, parse, null);
+ /**
+ * retrieves an attribute value by name.
+ * @return the attribute value or <code>defaultValue</code> if there is no
such attribute
+ */
+ public static String attribute(Element element, String attributeName, String
defaultValue) {
+ return attribute(element, attributeName, null, defaultValue);
}
- /** convenience method to combine extraction of a string attribute value.
- *
- * If the attribute exists, it is returned. If the attribute is not present, the
- * defaultValue is returned. The attribute is not present and it is required,
- * a problem will be added to the parse. */
- public static String attribute(Element element, String attributeName, boolean required,
Parse parse, String defaultValue) {
+ /**
+ * retrieves an attribute value by name. if the attribute is not present, a problem
will be
+ * added to the parse.
+ * @return the attribute value or <code>null</code> if there is no such
attribute
+ */
+ public static String attribute(Element element, String attributeName, Parse parse) {
+ return attribute(element, attributeName, parse, null);
+ }
+
+ /**
+ * retrieves an attribute value by name. if the attribute is not present, a problem
will be
+ * added to the parse.
+ * @return the attribute value or <code>defaultValue</code> if there is no
such attribute
+ */
+ public static String attribute(Element element, String attributeName, Parse parse,
+ String defaultValue) {
Attr attribute = element.getAttributeNode(attributeName);
if (attribute != null) {
String value = attribute.getValue();
- if (value.length() == 0 && required) {
- parse.addProblem("attribute
<"+XmlUtil.getTagLocalName(element)+"
"+attributeName+"=\"\" is empty", element);
+ if (value.length() == 0) {
+ parse.addProblem("attribute <"+element.getLocalName()+"
"+attributeName+"=\"\" is empty", element);
}
return value;
}
- if (required) {
- parse.addProblem("attribute <"+XmlUtil.getTagLocalName(element)+"
"+attributeName+"=\"...\" is required", element);
+ if (parse != null) {
+ parse.addProblem("attribute <"+element.getLocalName()+"
"+attributeName+"=\"...\" is required", element);
}
-
return defaultValue;
}
-
-
- /** parse an attribute as an integer. */
- public static Integer attributeInteger(Element element, String attributeName, boolean
required, Parse parse) {
- String valueText = attribute(element, attributeName, required, parse);
- if (valueText!=null) {
+ /** retrieves an attribute value by name. */
+ public static Integer attributeInteger(Element element, String attributeName, Parse
parse) {
+ Attr attribute = element.getAttributeNode(attributeName);
+ if (attribute != null) {
+ String attributeValue = attribute.getValue();
try {
- return Integer.parseInt(valueText);
- } catch (NumberFormatException e) {
- parse.addProblem(errorMessageAttribute(element, attributeName, valueText,
"value not parsable as integer"), element);
+ return Integer.parseInt(attributeValue);
}
+ catch (NumberFormatException e) {
+ parse.addProblem(errorMessageAttribute(element, attributeName, attributeValue,
e.getMessage()), element);
+ }
}
-
return null;
}
/** parse an attribute as an boolean. */
- public static Boolean attributeBoolean(Element element, String attributeName, boolean
required, Parse parse) {
- return attributeBoolean(element, attributeName, required, parse, null);
- }
-
- /** parse an attribute as an boolean. */
- public static Boolean attributeBoolean(Element element, String attributeName, boolean
required, Parse parse, Boolean defaultValue) {
- String valueText = attribute(element, attributeName, required, parse);
- if (valueText!=null) {
- Boolean value = parseBooleanValue(valueText);
- if (value==null) {
- parse.addProblem(errorMessageAttribute(element, attributeName, valueText,
"value not in {true, enabled, on, false, disabled, off}"), element);
- }
- return value;
+ public static Boolean attributeBoolean(Element element, String attributeName, Parse
parse) {
+ Attr attribute = element.getAttributeNode(attributeName);
+ if (attribute != null) {
+ String attributeValue = attribute.getValue();
+ Boolean value = parseBooleanValue(attributeValue);
+ if (value != null) return value;
+
+ String message = errorMessageAttribute(element, attributeName, attributeValue,
+ "value not in {true, enabled, on, false, disabled, off}");
+ parse.addProblem(message, element);
}
- return defaultValue;
+ return null;
}
public static Boolean parseBooleanValue(String valueText) {
- if (valueText!=null) {
+ if (valueText != null) {
// if we have to check for value true
- if ( ("true".equals(valueText))
- || ("enabled".equals(valueText))
- || ("on".equals(valueText))
- ) {
- return Boolean.TRUE;
-
- } else if ( ("false".equals(valueText))
- || ("disabled".equals(valueText))
- || ("off".equals(valueText))
- ) {
+ if ("true".equals(valueText) || "enabled".equals(valueText) ||
"on".equals(valueText)) {
+ return Boolean.TRUE;
+ }
+ if ("false".equals(valueText) || "disabled".equals(valueText)
|| "off".equals(valueText)) {
return Boolean.FALSE;
}
}
-
return null;
}
-
- public static String errorMessageAttribute(Element element, String attributeName,
String attributeValue, String message) {
- return "attribute <"+XmlUtil.getTagLocalName(element)+"
"+attributeName+"=\""+attributeValue+"\" "+message;
+
+ public static String errorMessageAttribute(Element element, String attributeName,
+ String attributeValue, String message) {
+ return "attribute <" + element.getLocalName() + " " +
attributeName + "=\""
+ + attributeValue + "\" " + message;
}
public static List<String> parseList(Element element, String singularTagName) {
// a null value for text represents a wildcard
String text = XmlUtil.attribute(element, singularTagName + "s");
- // so next we'll convert a '*' into the text null value, which indicates
a
- // wildcard
+ // convert '*' into the text null value, which indicates a wildcard
if ("*".equals(text)) {
text = null;
}
@@ -396,9 +336,7 @@
/**
* parses comma or space separated list. A null return value means a wildcard.
- *
- * @return List of tokens or null if the commaSeparatedListText is null, '*',
- * or empty
+ * @return List of tokens or null if the commaSeparatedListText is null, '*',
or empty
*/
public static List<String> parseCommaSeparatedList(String commaSeparatedListText)
{
List<String> entries = null;
@@ -434,7 +372,8 @@
int colonIndex = text.indexOf(':');
if (colonIndex == -1) {
namespaceValue = new NamespaceValue(null, text);
- } else {
+ }
+ else {
String prefix = text.substring(0, colonIndex);
String localPart = null;
if (text.length() > colonIndex + 1) {
@@ -451,16 +390,19 @@
NamespaceValue namespaceValue = attributeNamespaceValue(element, attributeName);
String text = attribute(element, attributeName);
- if (namespaceValue!=null) {
- if (namespaceValue.prefix==null) {
+ if (namespaceValue != null) {
+ if (namespaceValue.prefix == null) {
qname = new QName(text);
- } else {
+ }
+ else {
String uri = element.lookupNamespaceURI(namespaceValue.prefix);
- if (uri==null) {
- throw new JbpmException("unknown prefix in qname "+text);
- } else if (namespaceValue.localPart==null) {
- throw new JbpmException("no local part in qname "+text);
- } else {
+ if (uri == null) {
+ throw new JbpmException("unknown prefix in qname " + text);
+ }
+ else if (namespaceValue.localPart == null) {
+ throw new JbpmException("no local part in qname " + text);
+ }
+ else {
qname = new QName(uri, namespaceValue.localPart, namespaceValue.prefix);
}
}
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/AbstractCollectionBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/AbstractCollectionBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/AbstractCollectionBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -28,9 +28,9 @@
descriptor.setClassName(className);
}
- Boolean isSynchronized = XmlUtil.attributeBoolean(element, "synchronized",
false, parse);
+ Boolean isSynchronized = XmlUtil.attributeBoolean(element, "synchronized",
parse);
if (isSynchronized!=null) {
- descriptor.setSynchronized(isSynchronized.booleanValue());
+ descriptor.setSynchronized(isSynchronized);
}
List<Descriptor> valueDescriptors = new ArrayList<Descriptor>();
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/BasicTypeBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/BasicTypeBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/BasicTypeBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -20,14 +20,14 @@
String value = element.getAttribute("value");
descriptor = createDescriptor(value, element, parse);
} else {
- parse.addProblem("attribute 'value' is required in element
'"+XmlUtil.getTagLocalName(element)+"':
"+XmlUtil.toString(element), element);
+ parse.addProblem("attribute 'value' is required in element
'"+element.getLocalName()+"': "+XmlUtil.toString(element),
element);
}
return descriptor;
}
public String createValueExceptionMessage(String message, Element element) {
- return XmlUtil.getTagLocalName(element)+" has invalid formatted value attribute:
"+(message!=null ? message+": " : "")+XmlUtil.toString(element);
+ return element.getLocalName()+" has invalid formatted value attribute:
"+(message!=null ? message+": " : "")+XmlUtil.toString(element);
}
/** subclasses can be sure that the value is not null.
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/CommandServiceBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/CommandServiceBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/CommandServiceBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -23,17 +23,17 @@
import java.util.List;
+import org.w3c.dom.Element;
+
import org.jbpm.pvm.internal.cmd.CommandService;
import org.jbpm.pvm.internal.svc.AsyncCommandService;
import org.jbpm.pvm.internal.svc.DefaultCommandService;
-import org.jbpm.pvm.internal.svc.SerializeInterceptor;
import org.jbpm.pvm.internal.util.XmlUtil;
import org.jbpm.pvm.internal.wire.Descriptor;
import org.jbpm.pvm.internal.wire.descriptor.CommandServiceDescriptor;
import org.jbpm.pvm.internal.wire.xml.WireParser;
import org.jbpm.pvm.internal.xml.Parse;
import org.jbpm.pvm.internal.xml.Parser;
-import org.w3c.dom.Element;
/** parses a descriptor for a creating {@link DefaultCommandService}.
*
@@ -67,11 +67,13 @@
}
protected CommandService getCommandService(Element element, Parse parse, Parser parser)
{
- if ( XmlUtil.attributeBoolean(element, "async", false, parse,
Boolean.FALSE)) {
+ Boolean async = XmlUtil.attributeBoolean(element, "async", parse);
+ if (Boolean.TRUE.equals(async)) {
+ AsyncCommandService asyncCommandService = new AsyncCommandService();
- AsyncCommandService asyncCommandService = new AsyncCommandService();
- if (XmlUtil.attributeBoolean(element, "propagate-auth", false, parse)) {
- asyncCommandService.setPropagateUserId(true);
+ Boolean propagateUserId = XmlUtil.attributeBoolean(element,
"propagate-auth", parse);
+ if (propagateUserId!=null) {
+ asyncCommandService.setPropagateUserId(propagateUserId);
}
return asyncCommandService;
}
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateConfigurationBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateConfigurationBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateConfigurationBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -88,7 +88,7 @@
List<Element> configElements = XmlUtil.elements(element);
for (Element configElement: configElements) {
- if ("cfg".equals(XmlUtil.getTagLocalName(configElement))) {
+ if ("cfg".equals(configElement.getLocalName())) {
if (configElement.hasAttribute("resource")) {
String resource = configElement.getAttribute("resource");
log.trace("adding hibernate configuration resource "+resource);
@@ -108,7 +108,7 @@
parse.addProblem("exactly 1 attribute in {resource, file, url} was
expected in cfg: "+XmlUtil.toString(configElement), element);
}
- } else if ("mapping".equals(XmlUtil.getTagLocalName(configElement))) {
+ } else if ("mapping".equals(configElement.getLocalName())) {
if (configElement.hasAttribute("resource")) {
String resource = configElement.getAttribute("resource");
log.trace("adding hibernate mapping resource "+resource);
@@ -133,11 +133,11 @@
parse.addProblem("exactly 1 attribute in {resource, file, class, url} was
expected in mapping: "+XmlUtil.toString(element));
}
- } else if ("properties".equals(XmlUtil.getTagLocalName(configElement)))
{
+ } else if ("properties".equals(configElement.getLocalName())) {
PropertiesDescriptor propertiesDescriptor = (PropertiesDescriptor)
propertiesBinding.parse(configElement, parse, parser);
descriptor.setPropertiesDescriptor(propertiesDescriptor);
- } else if
("cache-configuration".equals(XmlUtil.getTagLocalName(configElement))) {
+ } else if ("cache-configuration".equals(configElement.getLocalName())) {
StreamInput streamSource = null;
String cacheUsage = configElement.getAttribute("usage");
@@ -192,11 +192,11 @@
if (cacheElements!=null) {
for (Element cacheElement : cacheElements) {
- if ("class-cache".equals(XmlUtil.getTagLocalName(cacheElement)))
{
+ if ("class-cache".equals(cacheElement.getLocalName())) {
String className = cacheElement.getAttribute("class");
descriptor.addClassToCache(className, cacheUsage);
- } else if
("collection-cache".equals(XmlUtil.getTagLocalName(cacheElement))) {
+ } else if
("collection-cache".equals(cacheElement.getLocalName())) {
String collection = cacheElement.getAttribute("collection");
descriptor.addCollectionToCache(collection, cacheUsage);
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateSessionBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateSessionBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/HibernateSessionBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -46,12 +46,12 @@
descriptor.setFactoryName(element.getAttribute("factory"));
}
- Boolean tx = XmlUtil.attributeBoolean(element, "tx", false, parse);
+ Boolean tx = XmlUtil.attributeBoolean(element, "tx", parse);
if (tx!=null) {
descriptor.setTx(tx);
}
- Boolean useCurrent = XmlUtil.attributeBoolean(element, "current", false,
parse);
+ Boolean useCurrent = XmlUtil.attributeBoolean(element, "current", parse);
// if usage of current session is specified
if (useCurrent!=null) {
// set it accordingly
@@ -60,7 +60,7 @@
descriptor.setClose( !useCurrent );
}
- Boolean close = XmlUtil.attributeBoolean(element, "close", false, parse);
+ Boolean close = XmlUtil.attributeBoolean(element, "close", parse);
if (close!=null) {
descriptor.setClose(close);
}
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/JobExecutorBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/JobExecutorBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/JobExecutorBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -75,7 +75,8 @@
parseIntAttribute(element, "lock", descriptor, "lockMillis",
parse);
// by default invoke the start method, unless auto-start is disabled
- if (XmlUtil.attributeBoolean(element, "auto-start", false, parse, true)) {
+ Boolean autoStart = XmlUtil.attributeBoolean(element, "auto-start",
parse);
+ if (autoStart == null || autoStart.booleanValue()) {
InvokeOperation invokeStartOperation = new InvokeOperation();
invokeStartOperation.setMethodName("start");
descriptor.addOperation(invokeStartOperation);
@@ -87,7 +88,7 @@
}
private void parseIntAttribute(Element element, String attributeName, ObjectDescriptor
descriptor, String fieldName, Parse parse) {
- Integer intValue = XmlUtil.attributeInteger(element, attributeName, false, parse);
+ Integer intValue = XmlUtil.attributeInteger(element, attributeName, parse);
if (intValue!=null) {
descriptor.addInjection(fieldName, new IntegerDescriptor(intValue));
}
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MailTemplateBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MailTemplateBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MailTemplateBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -67,7 +67,7 @@
// create the mail template and add it to the registry
MailTemplate mailTemplate = parseMailTemplate(element, parse);
- String templateName = XmlUtil.attribute(element, "name", true, parse);
+ String templateName = XmlUtil.attribute(element, "name", parse);
templateRegistry.addTemplate(templateName, mailTemplate);
return templateRegistryDescriptor;
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MapBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MapBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MapBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -53,16 +53,16 @@
descriptor.setClassName(className);
}
- Boolean isSynchronized = XmlUtil.attributeBoolean(element, "synchronized",
false, parse);
+ Boolean isSynchronized = XmlUtil.attributeBoolean(element, "synchronized",
parse);
if (isSynchronized!=null) {
- descriptor.setSynchronized(isSynchronized.booleanValue());
+ descriptor.setSynchronized(isSynchronized);
}
List<Descriptor> keyDescriptors = new ArrayList<Descriptor>();
List<Descriptor> valueDescriptors = new ArrayList<Descriptor>();
List<Element> elements = XmlUtil.elements(element);
for (Element entryElement: elements) {
- if ("entry".equals(XmlUtil.getTagLocalName(entryElement))) {
+ if ("entry".equals(entryElement.getLocalName())) {
// key
Element keyElement = XmlUtil.element(entryElement, "key");
Element keyDescriptorElement = (keyElement!=null ? XmlUtil.element(keyElement) :
null);
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MessageSessionBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MessageSessionBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MessageSessionBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -59,7 +59,7 @@
JndiDescriptor jndiDescriptor = new JndiDescriptor(jmsSessionJndiName);
objectDescriptor.addInjection("jmsSession", jndiDescriptor);
} else {
- parse.addProblem("attribute
<"+XmlUtil.getTagLocalName(element)+" session-jndi=\"...\" is
required when target=\"jms\"", element);
+ parse.addProblem("attribute <"+element.getLocalName()+"
session-jndi=\"...\" is required when target=\"jms\"", element);
}
if (element.hasAttribute("destination-jndi")) {
@@ -67,7 +67,7 @@
JndiDescriptor jndiDescriptor = new JndiDescriptor(jmsDestinationJndiName);
objectDescriptor.addInjection("jmsDestination", jndiDescriptor);
} else {
- parse.addProblem("attribute
<"+XmlUtil.getTagLocalName(element)+" destination-jndi=\"...\" is
required when target=\"jms\"", element);
+ parse.addProblem("attribute <"+element.getLocalName()+"
destination-jndi=\"...\" is required when target=\"jms\"",
element);
}
} else {
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/ObjectBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/ObjectBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/ObjectBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -73,7 +73,6 @@
public static ObjectDescriptor parseObjectDescriptor(Element element, Parse parse,
Parser parser) {
ObjectDescriptor descriptor = new ObjectDescriptor();
- Parser wireParser = (Parser) parser;
String className = XmlUtil.attribute(element, "class");
String expr = XmlUtil.attribute(element, "expr");
String factoryObjectName = XmlUtil.attribute(element, "factory");
@@ -91,7 +90,7 @@
Element constructorElement = XmlUtil.element(element, "constructor");
if (constructorElement!=null) {
List<Element> argElements = XmlUtil.elements(constructorElement,
"arg");
- List<ArgDescriptor> argDescriptors = wireParser.parseArgs(argElements,
parse);
+ List<ArgDescriptor> argDescriptors = parser.parseArgs(argElements, parse);
descriptor.setArgDescriptors(argDescriptors);
if (element.hasAttribute("method")) {
@@ -123,7 +122,7 @@
descriptor.setMethodName(element.getAttribute("method"));
List<Element> argElements = XmlUtil.elements(element, "arg");
- List<ArgDescriptor> argDescriptors = wireParser.parseArgs(argElements,
parse);
+ List<ArgDescriptor> argDescriptors = parser.parseArgs(argElements, parse);
descriptor.setArgDescriptors(argDescriptors);
} else if ( (factoryObjectName!=null)
|| (factoryElement!=null)
@@ -161,9 +160,9 @@
descriptor.setOperations(operations);
// autowiring
- Boolean isAutoWireEnabled = XmlUtil.attributeBoolean(element, "auto-wire",
false, parse);
+ Boolean isAutoWireEnabled = XmlUtil.attributeBoolean(element, "auto-wire",
parse);
if (isAutoWireEnabled!=null) {
- descriptor.setAutoWireEnabled(isAutoWireEnabled.booleanValue());
+ descriptor.setAutoWireEnabled(isAutoWireEnabled);
}
return descriptor;
}
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/PropertiesBinding.java
===================================================================
---
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/PropertiesBinding.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/PropertiesBinding.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -59,9 +59,9 @@
descriptor.setUrl(element.getAttribute("url"));
}
- Boolean isXml = XmlUtil.attributeBoolean(element, "is-xml", false, parse);
+ Boolean isXml = XmlUtil.attributeBoolean(element, "is-xml", parse);
if (isXml!=null) {
- descriptor.setXml(isXml.booleanValue());
+ descriptor.setXml(isXml);
}
List<Descriptor> keyDescriptors = new ArrayList<Descriptor>();
@@ -69,7 +69,7 @@
List<Element> elements = XmlUtil.elements(element);
for (Element propertyElement: elements) {
- if ("property".equals(XmlUtil.getTagLocalName(propertyElement))) {
+ if ("property".equals(propertyElement.getLocalName())) {
// key
String name = XmlUtil.attribute(propertyElement, "name");
// value
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java 2010-06-09
17:46:55 UTC (rev 6397)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -507,7 +507,7 @@
public Object parseElement(Element element, Parse parse, String category) {
Object object = null;
- String tagName = XmlUtil.getTagLocalName(element);
+ String tagName = element.getLocalName();
Binding binding = getBinding(element, category);
Modified:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/assign/AssignTest.java
===================================================================
---
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/assign/AssignTest.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/assign/AssignTest.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -21,113 +21,112 @@
*/
package org.jbpm.test.activity.assign;
-import java.util.HashMap;
+import java.util.Collections;
import java.util.Map;
import org.jbpm.api.ProcessInstance;
import org.jbpm.test.JbpmTestCase;
-
/**
* @author Tom Baeyens
*/
public class AssignTest extends JbpmTestCase {
- public void testValueExpressionToVar() {
- deployJpdlXmlString(
- "<process name='AssignTest'>" +
- " <start>" +
- " <transition to='resolve' />" +
- " </start>" +
- " <assign name='resolve' expr='#{person.name}'
to-var='result'>" +
- " <transition to='wait' />" +
- " </assign>" +
- " <state name='wait' />" +
- "</process>"
- );
-
+ public void testFromExprToVar() {
+ deployJpdlXmlString("<process name='AssignTest'
xmlns='http://jbpm.org/4.4/jpdl'>"
+ + " <start>"
+ + " <transition to='resolve' />"
+ + " </start>"
+ + " <assign name='resolve' from-expr='#{person.name}'
to-var='result'>"
+ + " <transition to='wait' />"
+ + " </assign>"
+ + " <state name='wait' />"
+ + "</process>");
+
Person person = new Person();
person.setName("johndoe");
+ Map<String, ?> variables = Collections.singletonMap("person",
person);
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("person", person);
ProcessInstance processInstance =
executionService.startProcessInstanceByKey("AssignTest", variables);
- executionService.signalExecutionById(processInstance.getId());
-
assertEquals("johndoe",
executionService.getVariable(processInstance.getId(), "result"));
}
- public void testMethodExpressionToVar() {
- deployJpdlXmlString(
- "<process name='AssignTest'>" +
- " <start>" +
- " <transition to='resolve' />" +
- " </start>" +
- " <assign name='resolve' expr='#{person.hello()}'
to-var='result'>" +
- " <transition to='wait' />" +
- " </assign>" +
- " <state name='wait' />" +
- "</process>"
- );
-
+ public void testFromMethodExprToVar() {
+ deployJpdlXmlString("<process name='AssignTest'
xmlns='http://jbpm.org/4.4/jpdl'>"
+ + " <start>"
+ + " <transition to='resolve' />"
+ + " </start>"
+ + " <assign name='resolve'
from-expr='#{person.toString()}' to-var='result'>"
+ + " <transition to='wait' />"
+ + " </assign>"
+ + " <state name='wait' />"
+ + "</process>");
+
Person person = new Person();
person.setName("johndoe");
+ Map<String, ?> variables = Collections.singletonMap("person",
person);
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("person", person);
ProcessInstance processInstance =
executionService.startProcessInstanceByKey("AssignTest", variables);
- executionService.signalExecutionById(processInstance.getId());
-
- assertEquals("goodby",
executionService.getVariable(processInstance.getId(), "result"));
+ assertEquals("Person(johndoe)",
executionService.getVariable(processInstance.getId(), "result"));
}
- public void testMethodWithParameterExpressionToVar() {
- deployJpdlXmlString(
- "<process name='AssignTest'>" +
- " <start>" +
- " <transition to='resolve' />" +
- " </start>" +
- " <assign name='resolve'
expr=\"#{person.hello('Joe')}\" to-var='result'>" +
- " <transition to='wait' />" +
- " </assign>" +
- " <state name='wait' />" +
- "</process>"
- );
-
+ public void testFromMethodParamExprToVar() {
+ deployJpdlXmlString("<process name='AssignTest'
xmlns='http://jbpm.org/4.4/jpdl'>"
+ + " <start>"
+ + " <transition to='resolve' />"
+ + " </start>"
+ + " <assign name='resolve'
from-expr=\"#{person.sayHi('Joe')}\" to-var='result'>"
+ + " <transition to='wait' />"
+ + " </assign>"
+ + " <state name='wait' />"
+ + "</process>");
+
Person person = new Person();
person.setName("johndoe");
+ Map<String, ?> variables = Collections.singletonMap("person",
person);
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("person", person);
ProcessInstance processInstance =
executionService.startProcessInstanceByKey("AssignTest", variables);
- executionService.signalExecutionById(processInstance.getId());
-
assertEquals("Hi, Joe",
executionService.getVariable(processInstance.getId(), "result"));
}
- public void testWireObjectToExpression() {
- deployJpdlXmlString(
- "<process name='AssignTest'>" +
- " <start>" +
- " <transition to='resolve' />" +
- " </start>" +
- " <assign name='resolve'
to-expr='#{person.address.street}'>" +
- " <string value='gasthuisstraat' />" +
- " <transition to='wait' />" +
- " </assign>" +
- " <state name='wait' />" +
- "</process>"
- );
-
+ public void testFromDescToExpr() {
+ deployJpdlXmlString("<process name='AssignTest'
xmlns='http://jbpm.org/4.4/jpdl'>"
+ + " <start>"
+ + " <transition to='resolve' />"
+ + " </start>"
+ + " <assign name='resolve'
to-expr='#{person.address.street}'>"
+ + " <from><string value='gasthuisstraat'
/></from>"
+ + " <transition to='wait' />"
+ + " </assign>"
+ + " <state name='wait' />"
+ + "</process>");
+
Person person = new Person();
person.setName("johndoe");
+ Map<String, ?> variables = Collections.singletonMap("person",
person);
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("person", person);
ProcessInstance processInstance =
executionService.startProcessInstanceByKey("AssignTest", variables);
- executionService.signalExecutionById(processInstance.getId());
-
person = (Person) executionService.getVariable(processInstance.getId(),
"person");
assertEquals("gasthuisstraat", person.getAddress().getStreet());
}
+
+ public void testFromVarToVar() {
+ deployJpdlXmlString("<process name='AssignTest'
xmlns='http://jbpm.org/4.4/jpdl'>"
+ + " <start>"
+ + " <transition to='resolve' />"
+ + " </start>"
+ + " <assign name='resolve' from-var='person'
to-var='result'>"
+ + " <transition to='wait' />"
+ + " </assign>"
+ + " <state name='wait' />"
+ + "</process>");
+
+ Person person = new Person();
+ person.setName("johndoe");
+ Map<String, ?> variables = Collections.singletonMap("person",
person);
+
+ ProcessInstance processInstance =
executionService.startProcessInstanceByKey("AssignTest", variables);
+ person = (Person) executionService.getVariable(processInstance.getId(),
"result");
+ assertEquals("johndoe", person.getName());
+ }
}
Modified:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/assign/Person.java
===================================================================
---
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/assign/Person.java 2010-06-09
17:46:55 UTC (rev 6397)
+++
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/assign/Person.java 2010-06-10
11:10:39 UTC (rev 6398)
@@ -23,38 +23,33 @@
import java.io.Serializable;
-
/**
* @author Tom Baeyens
*/
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
-
+
String name;
Address address = new Address();
String[] emails;
-
- public String hello() {
- return "goodby";
+
+ public String sayHi(String name) {
+ return "Hi, " + name;
}
-
- public String hello(String name) {
- return "Hi, "+name;
- }
-
+
public String getName() {
return name;
}
-
+
public void setName(String name) {
this.name = name;
}
-
+
public Address getAddress() {
return address;
}
-
+
public void setAddress(Address address) {
this.address = address;
}
@@ -66,4 +61,8 @@
public void setEmails(String[] emails) {
this.emails = emails;
}
+
+ public String toString() {
+ return "Person(" + name + ')';
+ }
}
Modified: jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch06-Jpdl.xml
===================================================================
--- jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch06-Jpdl.xml 2010-06-09
17:46:55 UTC (rev 6397)
+++ jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch06-Jpdl.xml 2010-06-10
11:10:39 UTC (rev 6398)
@@ -2165,11 +2165,102 @@
</para>
</section>
+ <!-- ### ASSIGN ######################################################## -->
+
+ <section id="assign">
+ <title><literal>assign</literal></title>
+ <para>The <literal>assign</literal> activity retrieves a value
and assigns it
+ to a target location.</para>
+ <table><title><literal>assign</literal>
attributes:</title>
+ <tgroup cols="5" rowsep="1" colsep="1">
+ <thead>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Type</entry>
+ <entry>Default</entry>
+ <entry>Required?</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><literal>from-var</literal></entry>
+ <entry>string</entry>
+ <entry></entry>
+ <entry morerows="1">one of
<literal>from-var</literal>, <literal>from-expr</literal>,
<literal>from</literal> is required</entry>
+ <entry>variable that provides the source value</entry>
+ </row>
+ <row>
+ <entry><literal>from-expr</literal></entry>
+ <entry>expression</entry>
+ <entry></entry>
+ <entry>expression that resolves the source value</entry>
+ </row>
+ <row>
+ <entry><literal>lang</literal></entry>
+ <entry>string</entry>
+ <entry>default <emphasis
role="bold">expression</emphasis> language defined in <xref
linkend="scripting"/></entry>
+ <entry>optional</entry>
+ <entry>language in which <literal>from-expr</literal> is
written</entry>
+ </row>
+ <row>
+ <entry><literal>to-var</literal></entry>
+ <entry>string</entry>
+ <entry></entry>
+ <entry morerows="1">one of
<literal>to-var</literal>, <literal>to-expr</literal> is
required</entry>
+ <entry>variable that provides the target location</entry>
+ </row>
+ <row>
+ <entry><literal>to-expr</literal></entry>
+ <entry>expression</entry>
+ <entry></entry>
+ <entry>expression that resolves the target location</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table><title><literal>assign</literal>
elements:</title>
+ <tgroup cols="3" rowsep="1" colsep="1">
+ <thead>
+ <row>
+ <entry>Element</entry>
+ <entry>Multiplicity</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><literal>from</literal></entry>
+ <entry>0..1</entry>
+ <entry>descriptor that constructs the source value</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <para>Every form of <literal>from</literal> can be combined with
any form
+ of <literal>to</literal>. The listing below simply assigns a variable
to
+ another.</para>
+ <programlisting><![CDATA[<assign name='resolve'
from-expr='#{person.name}' to-var='result'>
+ <transition to='wait' />
+</assign>]]></programlisting>
+ <para>The next example shows an expression value being assigned to a
+ variable.</para>
+ <programlisting><![CDATA[<assign name='resolve'
from-var='person' to-var='result'>
+ <transition to='wait' />
+</assign>]]></programlisting>
+ <para>Our last example presents a value constructed by a descriptor being
+ assigned to the expression location.</para>
+ <programlisting><![CDATA[<assign name='resolve'
to-expr='#{person.address.street}'>
+ <from><string value='gasthuisstraat' /></from>
+ <transition to='wait' />
+</assign>]]></programlisting>
+ </section>
+
<!-- ### HQL ########################################################### -->
<section id="hql">
<title><literal>hql</literal></title>
- <para>With the<literal>hql</literal> activity, a HQL query can be
performed
+ <para>With the <literal>hql</literal> activity, a HQL query can
be performed
on the database and the result is stored in a process variable.
</para>
<table><title><literal>hql</literal>
attributes:</title>