if (sentry.getSentryIfPart() != null) { xtw.writeStartElement(ELEMENT_IF_PART); xtw.writeStartElement(ELEMENT_CONDITION); xtw.writeCData(sentry.getSentryIfPart().getCondition()); xtw.writeEndElement(); xtw.writeEndElement();
protected boolean evaluateSentryIfPart(Sentry sentry, VariableContainer variableContainer) { Expression conditionExpression = CommandContextUtil.getExpressionManager(commandContext).createExpression(sentry.getSentryIfPart().getCondition()); Object result = conditionExpression.getValue(variableContainer); if (result instanceof Boolean) { return (Boolean) result; } return false; }
if (sentry.getOnParts().size() == 1 && sentry.getSentryIfPart() == null) { // Only one one part and no if part: no need to fetch the previously satisfied onparts if (planItemLifeCycleEvent != null) { SentryOnPart sentryOnPart = sentry.getOnParts().get(0); } else if (sentry.getOnParts().isEmpty() && sentry.getSentryIfPart() != null) { // Only an if part: simply evaluate the if part if (evaluateSentryIfPart(sentry, entityWithSentryPartInstances)) { return criterion.getId(); satisfiedSentryOnPartIds.add(sentryPartInstanceEntity.getOnPartId()); } else if (sentryPartInstanceEntity.getIfPartId() != null && sentryPartInstanceEntity.getIfPartId().equals(sentry.getSentryIfPart().getId())) { sentryIfPartSatisfied = true; if (sentry.getSentryIfPart() != null && !sentryIfPartSatisfied && (isDefaultTriggerMode || (sentry.isOnEventTriggerMode() && allOnPartsSatisfied) )) { createSentryPartInstanceEntity(entityWithSentryPartInstances, sentry, null, sentry.getSentryIfPart()); sentryIfPartSatisfied = true; if (allOnPartsSatisfied && (sentryIfPartSatisfied || sentry.getSentryIfPart() == null)) { return criterion.getId();
protected String evaluateDependentPlanItemEntryCriteria(PlanItem entryDependentPlanItem) { List<Criterion> entryCriteria = entryDependentPlanItem.getEntryCriteria(); if (!entryCriteria.isEmpty()) { for (Criterion criterion : entryCriteria) { // According to the spec, only the sentries that actually reference the planitem of which the event happens should be evaluated if (CriterionUtil.criterionHasOnPartDependingOnPlanItem(criterion, planItemLifeCycleEvent.getPlanItem(), planItemLifeCycleEvent.getTransition())) { boolean criterionSatisfied = true; List<SentryOnPart> onParts = criterion.getSentry().getOnParts(); for (SentryOnPart onPart : onParts) { if (!sentryOnPartMatchesCurrentLifeCycleEvent(onPart)) { criterionSatisfied = false; } } if (criterion.getSentry().getSentryIfPart() != null) { if (!evaluateSentryIfPart(criterion.getSentry(), caseInstanceEntity)) { // Resolved against case entity as there's no plan item instance yet criterionSatisfied = false; } } if (criterionSatisfied) { return criterion.getId(); } } } } return null; }