public void addExitCriteriaToCurrentElement(Criterion exitCriterion) { addExitCriterion(exitCriterion); ListIterator<CmmnElement> iterator = currentCmmnElements.listIterator(currentCmmnElements.size()); HasExitCriteria hasExitCriteria = null; while (hasExitCriteria == null && iterator.hasPrevious()) { CmmnElement cmmnElement = iterator.previous(); if (cmmnElement instanceof HasExitCriteria) { hasExitCriteria = (HasExitCriteria) cmmnElement; } } if (hasExitCriteria == null) { hasExitCriteria = getCurrentCase().getPlanModel(); } if (StringUtils.isEmpty(exitCriterion.getId())) { // An id is expected by the evaluation algorithm, so setting an internal one if there isn't one exitCriterion.setId("exitCriterion_" + (hasExitCriteria.getExitCriteria().size() + 1)); } exitCriterion.setAttachedToRefId(hasExitCriteria.getId()); hasExitCriteria.getExitCriteria().add(exitCriterion); }
protected String evaluateExitCriteria(EntityWithSentryPartInstances entityWithSentryPartInstances, HasExitCriteria hasExitCriteria) { // EntityWithSentryPartInstances -> can be used for both case instance and plan item instance List<Criterion> criteria = hasExitCriteria.getExitCriteria(); if (criteria != null && !criteria.isEmpty()) { return evaluateCriteria(entityWithSentryPartInstances, criteria); } return null; }
protected void resolveExitCriteriaSentry(HasExitCriteria hasExitCriteria) { for (Criterion exitCriterion : hasExitCriteria.getExitCriteria()) { Sentry sentry = exitCriterion.getParent().findSentry(exitCriterion.getSentryRef()); if (sentry != null) { exitCriterion.setSentry(sentry); } else { throw new FlowableException("No sentry found for reference " + exitCriterion.getSentryRef() + " of exit criterion " + exitCriterion.getId()); } } }