[jbpm-commits] JBoss JBPM SVN: r6095 - in jbpm4/trunk/modules: bpmn/src/main/java/org/jbpm/bpmn/parser and 2 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Jan 19 10:47:59 EST 2010


Author: jbarrez
Date: 2010-01-19 10:47:58 -0500 (Tue, 19 Jan 2010)
New Revision: 6095

Added:
   jbpm4/trunk/modules/devguide/src/main/docbook/en/images/bpmn2.conditional.sequence.flow.png
Modified:
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractGatewayBinding.java
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnActivity.java
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnBinding.java
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ExclusiveGatewayActivity.java
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/InclusiveGatewayActivity.java
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ManualTaskBinding.java
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ReceiveBinding.java
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ScriptTaskBinding.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/TaskBinding.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/BpmnParser.java
   jbpm4/trunk/modules/devguide/src/main/docbook/en/modules/ch03-Bpmn2.xml
Log:
JBPM-2756: allow default/conditional sequence flow on task/activities

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractGatewayBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractGatewayBinding.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractGatewayBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -54,8 +54,6 @@
   protected String gatewayDirection; 
   protected boolean valid = true;
   
-  protected String default_;
-  
   static ObjectBinding objectBinding = new ObjectBinding();
   static WireParser wireParser = WireParser.getInstance();
 
@@ -71,14 +69,11 @@
     
     resetMemberFields();
     
+    super.parse(element, parse);
+    
     id = element.getAttribute("id");
     name = element.getAttribute("name");
     
-    this.default_ = null;
-    if (element.hasAttribute("default")) {
-      default_ = element.getAttribute("default");
-    }
-    
     // 'gatewayDirection' is a constraint on any gateway type. 
     // Since this is an optional attribute, we can't rely on it at runtime.
     // As such, it is only used at parsing time to check if the constraints are met.
@@ -137,7 +132,7 @@
   }
   
   /**
-   * For some gateway types (exclusive/inclusive), conditions are required on every outgoing
+   * For some gateway types (eg. exclusive), conditions are required on every outgoing
    * sequence flow. This operation will check if all sequence flow (excluding the default
    * sequence flow) have such a condition defined.
    * 
@@ -168,11 +163,11 @@
       
     }
       
-      if (default_ != null && !defaultExists) {
-        parse.addProblem("exclusiveGateway '" + name + "' default sequenceFlow '" + default_ 
-                + "' does not exist or is not related to this node", element);
-        valid = false;
-      }
+    if (default_ != null && !defaultExists) {
+      parse.addProblem("exclusiveGateway '" + name + "' default sequenceFlow '" + default_ 
+              + "' does not exist or is not related to this node", element);
+      valid = false;
+    }
       
   }
 

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-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -28,7 +28,10 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
-    return new ManualTaskActivity();
+    super.parse(element, parse);
+    ManualTaskActivity manualTaskActivity = new ManualTaskActivity();
+    manualTaskActivity.setDefault(getDefault());
+    return manualTaskActivity;
   }
 
   protected void addActivityResources(TaskDefinitionImpl taskDefinition, BpmnActivity taskActivity, Element element, Parse parse) {

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnActivity.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnActivity.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnActivity.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -27,12 +27,12 @@
 import java.util.Map;
 
 import org.jbpm.api.Execution;
+import org.jbpm.api.JbpmException;
 import org.jbpm.api.activity.ActivityBehaviour;
 import org.jbpm.internal.log.Log;
 import org.jbpm.pvm.internal.model.Activity;
 import org.jbpm.pvm.internal.model.Condition;
 import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.model.ExpressionCondition;
 import org.jbpm.pvm.internal.model.Transition;
 
 /**
@@ -44,7 +44,7 @@
  */
 public abstract class BpmnActivity implements ActivityBehaviour {
 
-  private static final Log log = Log.getLog(BpmnActivity.class.getName());
+  private static final Log LOG = Log.getLog(BpmnActivity.class.getName());
 
   private static final long serialVersionUID = 1L;
 
@@ -60,16 +60,16 @@
    * Code initially based on the JPDL fork logic.
    */
   protected void proceed(ExecutionImpl execution, List<Transition> transitions) {
-	if (log.isDebugEnabled()) {		
-		log.debug("Proceeding from execution " + execution.getActivityName());
+	if (LOG.isDebugEnabled()) {		
+		LOG.debug("Proceeding from execution " + execution.getActivityName());
 	}
 
     Activity activity = execution.getActivity();
 
     // if no outgoing transitions should be forked,
     if (transitions.size() == 0) {
-      if (log.isDebugEnabled()) {
-        log.debug("No outgoing transitions found. Ending the execution");
+      if (LOG.isDebugEnabled()) {
+        LOG.debug("No outgoing transitions found. Ending the execution");
       }
       execution.end();
     }
@@ -113,9 +113,6 @@
   /**
    * Returns the list of outgoing sequence flow for this activity.
    * If the boolean 'checkConditions' is true, conditions on the sequence flow will be evaluated.
-   * 
-   * Note that for activities that have a default sequence flow (eg Exclusive gateway),
-   * the default sequence flow will NOT be included in the returned list.
    */
   protected List<Transition> findOutgoingSequenceFlow(ExecutionImpl execution, boolean checkConditions) {
     Activity activity = execution.getActivity();
@@ -125,18 +122,32 @@
     
     for (Transition transition : outgoingTransitions) {
       Condition condition = transition.getCondition();
-      if ( ( (condition == null) 
-             || (!checkConditions) 
-             || (condition.evaluate(execution)) 
-           ) 
-           && (activity.getDefaultOutgoingTransition() != transition)
-         ) {
+      if ( ( (condition == null) || (!checkConditions) || (condition.evaluate(execution)) ) 
+           && (activity.getDefaultOutgoingTransition() != transition) ) {
         forkingTransitions.add(transition);
       }
     }
-    if (log.isDebugEnabled()) {
-    	log.debug(forkingTransitions.size() + " out of " + outgoingTransitions.size() + " selected for " + activity.getName());
+    
+    if (LOG.isDebugEnabled()) {
+    	LOG.debug(forkingTransitions.size() + " out of " + outgoingTransitions.size() + " selected for " + activity.getName());
     }
+    
+    // If no outgoing sequence flow found, check if there is a default sequence flow
+    if (forkingTransitions.isEmpty() && isDefaultEnabled()) {
+      Transition defaultSeqFlow = execution.getActivity().getDefaultOutgoingTransition();
+      if (defaultSeqFlow != null) {
+        forkingTransitions.add(defaultSeqFlow);
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Selected default sequence flow for " + execution.getActivityName());
+        }
+      } else {
+        throw new JbpmException("No sequence flow condition evaluated to true for " + 
+                execution.getActivityName() + " and no default sequenceFlow was speficied");
+      }
+    } else if (forkingTransitions.isEmpty()){
+      throw new JbpmException("No outgoing sequence flow found for " + execution.getActivityName());
+    }
+    
     return forkingTransitions;
   }
 

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnBinding.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -24,57 +24,28 @@
 import org.jbpm.bpmn.parser.BpmnParser;
 import org.jbpm.pvm.internal.util.TagBinding;
 import org.jbpm.pvm.internal.wire.xml.WireParser;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.w3c.dom.Element;
 
+public abstract class BpmnBinding extends TagBinding {
 
+  protected static final WireParser wireParser = BpmnParser.wireParser;
 
-public abstract class BpmnBinding extends TagBinding {
+  protected String default_;
 
-	protected static final WireParser wireParser = BpmnParser.wireParser;
+  public BpmnBinding(String tagName) {
+    super(tagName, "http://schema.omg.org/spec/BPMN/2.0", null);
+  }
 
-	public BpmnBinding(String tagName) {
-	  super(tagName, "http://schema.omg.org/spec/BPMN/2.0", null);
-	}
-//
-//  public void parseName(Element element, ActivityImpl activity, Parse parse) {
-//    String name = XmlUtil.attribute(element, "name", isNameRequired(), parse);
-//    
-//    if (name!=null) {
-//      // basic name validation
-//      if ("".equals(name)) {
-//        parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "is empty"), element);
-//      } else if (name.indexOf('/')!=-1) {
-//        parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "contains slash (/)"), element);
-//      }
-//      activity.setName(name);
-//    }
-//  }
-//
-//  public boolean isNameRequired() {
-//    return true;
-//  }
-//
-//  public void parseTransitions(Element element, ActivityImpl activity, Parse parse, JpdlParser jpdlParser) {
-//    List<Element> transitionElements = XmlUtil.elements(element, "transition");
-//    UnresolvedTransitions unresolvedTransitions = parse.findObject(UnresolvedTransitions.class);
-//    for (Element transitionElement: transitionElements) {
-//      String transitionName = XmlUtil.attribute(transitionElement, "name", false, parse);
-//
-//      Element timerElement = XmlUtil.element(transitionElement, "timer");
-//      if (timerElement!=null) {
-//        if (transitionName!=null) {
-//          TimerDefinitionImpl timerDefinitionImpl = jpdlParser.parseTimerDefinition(timerElement, parse, activity);
-//          timerDefinitionImpl.setSignalName(transitionName);
-//        } else {
-//          parse.addProblem("a transition name is required when a timer is placed on a transition", element);
-//        }
-//      }
-//
-//      TransitionImpl transition = activity.createOutgoingTransition();
-//      transition.setName(transitionName);
-//
-//      unresolvedTransitions.add(transition, transitionElement);
-//      
-//      jpdlParser.parseOnEvent(transitionElement, parse, transition, Event.TAKE);
-//    }
-//  }
+  public void parse(Element element, Parse parse) {
+    this.default_ = null;
+    if (element.hasAttribute("default")) {
+      default_ = element.getAttribute("default");
+    }
+  }
+
+  public String getDefault() {
+    return default_;
+  }
+
 }

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ExclusiveGatewayActivity.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ExclusiveGatewayActivity.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ExclusiveGatewayActivity.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -23,7 +23,6 @@
 
 import java.util.List;
 
-import org.jbpm.api.JbpmException;
 import org.jbpm.api.activity.ActivityExecution;
 import org.jbpm.bpmn.parser.BindingsParser;
 import org.jbpm.internal.log.Log;
@@ -54,15 +53,7 @@
     List<Transition> transitions = findOutgoingSequenceFlow(execution, CONDITIONS_CHECKED);
     int numTransitions = transitions.size();
 
-    if (numTransitions == 0) {
-      Transition defaultTransition = execution.getActivity().getDefaultOutgoingTransition();
-      if (defaultTransition != null) {
-        transitions.add(defaultTransition);
-      } else {
-        throw new JbpmException("No sequenceFlow condition evaluated to true for " + 
-                execution.getActivity() + " and no default sequenceFlow was speficied");
-      }
-    } else if (numTransitions > 2) {
+    if (numTransitions > 2) {
       transitions = transitions.subList(0, 0);
       if (log.isInfoEnabled()) {
 	      log.info("More than one outgoing sequenceFlow conditions evaluated to true for " 

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/InclusiveGatewayActivity.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/InclusiveGatewayActivity.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/InclusiveGatewayActivity.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -22,13 +22,9 @@
 package org.jbpm.bpmn.flownodes;
 
 import java.util.Collection;
-import java.util.List;
 
-import org.jbpm.api.JbpmException;
 import org.jbpm.bpmn.model.BpmnProcessDefinition;
-import org.jbpm.internal.log.Log;
 import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.model.Transition;
 
 /**
  * @author Joram Barrez
@@ -37,22 +33,8 @@
 
   private static final long serialVersionUID = 1L;
   
-  private static final Log LOG = Log.getLog(InclusiveGatewayActivity.class.getName());
-  
-  public void fork(ExecutionImpl execution) {
-    List<Transition> outgoingSeqFlow = findOutgoingSequenceFlow(execution, CONDITIONS_CHECKED);
-    
-    if (outgoingSeqFlow.isEmpty()) {
-      Transition defaultSeqFlow = execution.getActivity().getDefaultOutgoingTransition();
-      if (defaultSeqFlow != null) {
-        outgoingSeqFlow.add(defaultSeqFlow);
-      } else {
-        throw new JbpmException("No sequenceFlow condition evaluated to true for " + 
-                execution.getActivity() + " and no default sequenceFlow was speficied");
-      }
-    }
-    
-    proceed(execution, outgoingSeqFlow);
+  public void fork(ExecutionImpl execution) { 
+    proceed(execution, findOutgoingSequenceFlow(execution, CONDITIONS_CHECKED));
   }
   
   /**

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ManualTaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ManualTaskBinding.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ManualTaskBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -35,7 +35,10 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
-    return new ManualTaskActivity();
+    super.parse(element, parse);
+    ManualTaskActivity manualTaskActivity = new ManualTaskActivity();
+    manualTaskActivity.setDefault(getDefault());
+    return manualTaskActivity;
   }
 
 }

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ReceiveBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ReceiveBinding.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ReceiveBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -33,7 +33,10 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
-    return new ReceiveActivity();
+    super.parse(element, parse);
+    ReceiveActivity receiveActivity = new ReceiveActivity();
+    receiveActivity.setDefault(getDefault());
+    return receiveActivity;
   }
 
 }

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ScriptTaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ScriptTaskBinding.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ScriptTaskBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -35,13 +35,15 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
-
+    super.parse(element, parse);
+    
     String scriptLanguage = XmlUtil.attribute(element, "scriptLanguage"); 
     String script = XmlUtil.element(element, "script").getTextContent();
 
     ScriptTaskActivity scriptTaskActivity = new ScriptTaskActivity();
     scriptTaskActivity.setLanguage(scriptLanguage);
     scriptTaskActivity.setScript(script);
+    scriptTaskActivity.setDefault(getDefault());
 
     return scriptTaskActivity;
   }

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-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -33,7 +33,6 @@
 import org.jbpm.pvm.internal.xml.Parser;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
 
 public class ServiceTaskBinding extends BpmnBinding {
 
@@ -44,6 +43,7 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
+    super.parse(element, parse);
     JavaServiceTaskActivity javaActivity = new JavaServiceTaskActivity();
        
     BpmnProcessDefinition bpmnProcessDefinition = parse.contextStackFind(BpmnProcessDefinition.class);
@@ -91,6 +91,8 @@
     } else {
       // parse.addProblem("no target specified in "+TAG+": must specify attribute 'class' or 'expr'", element);
     }
+    
+    javaActivity.setDefault(getDefault());
      
     return javaActivity;
   }

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/TaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/TaskBinding.java	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/TaskBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -38,11 +38,13 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
+    super.parse(element, parse);
     
     TaskActivity taskActivity = new TaskActivity();
     ScopeElementImpl scopeElement = parse.contextStackFind(ScopeElementImpl.class);
     TaskDefinitionImpl taskDefinition = BpmnParser.parseTaskDefinition(element, parse, scopeElement);
     taskActivity.setTaskDefinition(taskDefinition);
+    taskActivity.setDefault(getDefault());
 
     return taskActivity;
   }

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-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -21,7 +21,6 @@
  */
 package org.jbpm.bpmn.flownodes;
 
-import org.jbpm.bpmn.model.BpmnProcessDefinition;
 import org.jbpm.bpmn.parser.BpmnParser;
 import org.jbpm.pvm.internal.model.ScopeElementImpl;
 import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
@@ -43,6 +42,7 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
+    super.parse(element, parse);
     UserTaskActivity taskActivity = new UserTaskActivity();
 
     ScopeElementImpl scopeElement = parse.contextStackFind(ScopeElementImpl.class);
@@ -57,6 +57,7 @@
     }
 
     taskActivity.setTaskDefinition(taskDefinition);
+    taskActivity.setDefault(getDefault());
 
     return taskActivity;
   }

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-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java	2010-01-19 15:47:58 UTC (rev 6095)
@@ -103,7 +103,7 @@
     try {
 
       // process attribues
-      String name = XmlUtil.attribute(processElement, "name", true, parse);
+      String name = XmlUtil.attribute(processElement, "name", false, parse);
       processDefinition.setName(name);
 
       String key = XmlUtil.attribute(processElement, "id", false, parse);

Added: jbpm4/trunk/modules/devguide/src/main/docbook/en/images/bpmn2.conditional.sequence.flow.png
===================================================================
(Binary files differ)


Property changes on: jbpm4/trunk/modules/devguide/src/main/docbook/en/images/bpmn2.conditional.sequence.flow.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: jbpm4/trunk/modules/devguide/src/main/docbook/en/modules/ch03-Bpmn2.xml
===================================================================
--- jbpm4/trunk/modules/devguide/src/main/docbook/en/modules/ch03-Bpmn2.xml	2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/devguide/src/main/docbook/en/modules/ch03-Bpmn2.xml	2010-01-19 15:47:58 UTC (rev 6095)
@@ -426,7 +426,9 @@
         </programlisting>
         Note that is currently is necessary to add the <emphasis role="bold">
         xsi:type=&quot;tFormalExpression&quot;</emphasis> to the <emphasis role="bold">
-        conditionExpression</emphasis>. This can change in a future release.
+        conditionExpression</emphasis>. A conditional sequence flow is visualized as a mini diamond
+        shape at the beginning of the sequence flow. Keep in mind that conditions always can be defined 
+        on sequence flow, but some constructs will not interprete them (eg. parallel gateway).
       </para>
       
       <para>



More information about the jbpm-commits mailing list