Search in sources :

Example 1 with OnPart

use of org.camunda.bpm.model.cmmn.instance.OnPart in project camunda-bpm-platform by camunda.

the class SentryHandler method handleElement.

public CmmnSentryDeclaration handleElement(Sentry element, CmmnHandlerContext context) {
    String id = element.getId();
    Collection<OnPart> onParts = element.getOnParts();
    IfPart ifPart = element.getIfPart();
    List<CamundaVariableOnPart> variableOnParts = queryExtensionElementsByClass(element, CamundaVariableOnPart.class);
    if ((ifPart == null || ifPart.getConditions().isEmpty()) && variableOnParts.isEmpty()) {
        if (onParts == null || onParts.isEmpty()) {
            LOG.ignoredSentryWithMissingCondition(id);
            return null;
        } else {
            boolean atLeastOneOnPartsValid = false;
            for (OnPart onPart : onParts) {
                if (onPart instanceof PlanItemOnPart) {
                    PlanItemOnPart planItemOnPart = (PlanItemOnPart) onPart;
                    if (planItemOnPart.getSource() != null && planItemOnPart.getStandardEvent() != null) {
                        atLeastOneOnPartsValid = true;
                        break;
                    }
                }
            }
            if (!atLeastOneOnPartsValid) {
                LOG.ignoredSentryWithInvalidParts(id);
                return null;
            }
        }
    }
    CmmnSentryDeclaration sentryDeclaration = new CmmnSentryDeclaration(id);
    // the ifPart will be initialized immediately
    initializeIfPart(ifPart, sentryDeclaration, context);
    // the variableOnParts will be initialized immediately as it does not have any dependency
    initializeVariableOnParts(element, sentryDeclaration, context, variableOnParts);
    // ...whereas the onParts will be initialized later because the
    // the reference to the plan items (sourceRef) and the reference
    // to the sentry (sentryRef) cannot be set in this step. To set
    // the corresponding reference (sourceRef or sentryRef) on the
    // transformed sentry all planned items and all sentries inside
    // the current stage should be already transformed.
    CmmnActivity parent = context.getParent();
    if (parent != null) {
        parent.addSentry(sentryDeclaration);
    }
    return sentryDeclaration;
}
Also used : CamundaVariableOnPart(org.camunda.bpm.model.cmmn.instance.camunda.CamundaVariableOnPart) PlanItemOnPart(org.camunda.bpm.model.cmmn.instance.PlanItemOnPart) OnPart(org.camunda.bpm.model.cmmn.instance.OnPart) CaseFileItemOnPart(org.camunda.bpm.model.cmmn.instance.CaseFileItemOnPart) PlanItemOnPart(org.camunda.bpm.model.cmmn.instance.PlanItemOnPart) CmmnSentryDeclaration(org.camunda.bpm.engine.impl.cmmn.model.CmmnSentryDeclaration) IfPart(org.camunda.bpm.model.cmmn.instance.IfPart) CamundaVariableOnPart(org.camunda.bpm.model.cmmn.instance.camunda.CamundaVariableOnPart) CmmnActivity(org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity)

Aggregations

CmmnActivity (org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity)1 CmmnSentryDeclaration (org.camunda.bpm.engine.impl.cmmn.model.CmmnSentryDeclaration)1 CaseFileItemOnPart (org.camunda.bpm.model.cmmn.instance.CaseFileItemOnPart)1 IfPart (org.camunda.bpm.model.cmmn.instance.IfPart)1 OnPart (org.camunda.bpm.model.cmmn.instance.OnPart)1 PlanItemOnPart (org.camunda.bpm.model.cmmn.instance.PlanItemOnPart)1 CamundaVariableOnPart (org.camunda.bpm.model.cmmn.instance.camunda.CamundaVariableOnPart)1