protected void fireSentries(List<String> satisfiedSentries) { if (satisfiedSentries != null && !satisfiedSentries.isEmpty()) { // if there are satisfied sentries, trigger the associated // case executions // 1. propagate to all child case executions /////////////////////////////////////////// // collect the execution tree. ArrayList<CmmnExecution> children = new ArrayList<CmmnExecution>(); collectCaseExecutionsInExecutionTree(children); for (CmmnExecution currentChild : children) { // check and fire first exitCriteria currentChild.checkAndFireExitCriteria(satisfiedSentries); // then trigger entryCriteria currentChild.checkAndFireEntryCriteria(satisfiedSentries); } // 2. check exit criteria of the case instance ////////////////////////////////////////// if (isCaseInstanceExecution() && isActive()) { checkAndFireExitCriteria(satisfiedSentries); } } }
protected void collectCaseExecutionsInExecutionTree(List<CmmnExecution> children) { for (CmmnExecution child : getCaseExecutions()) { child.collectCaseExecutionsInExecutionTree(children); } children.addAll(getCaseExecutions()); }