Class APostTestLoopBpmnModeler<Model>

  • Type Parameters:
    Model - The type of the node's property model, see IElementHandler.getDataModelClass().
    All Implemented Interfaces:
    IWorkflowNodeBpmnModeler<Model>
    Direct Known Subclasses:
    FcDoUntilLoopBpmnModeler

    public abstract class APostTestLoopBpmnModeler<Model>
    extends Object
    implements IWorkflowNodeBpmnModeler<Model>
    BPMN modeler for nodes that execute like a post-test loop, e.g. a do-until loop (do-while loop). Creates a converging and diverging exclusive gateway, and places the loop body between the gateways. First the sequence flow moves to the loop body. After the loop body completes, passes on the sequence flow to the diverging gateway. When the loop condition matches, redirects back to the beginning of the loop. Otherwise, if the condition does not match, passes on the sequence flow to the end of the loop.

    If the loop body contains nodes that can complete abruptly by transferring control to this loop (e.g. a break or continue statement), wraps the loop body in a SubProcess that catches the corresponding escalation with a boundary event and redirects the sequence flow accordingly (to the beginning of the loop for a continue statement, or to the end of the loop for a break statement).

    At minimum, you should override getConditionName, getConsequentLabel and getAlternateLabel to provide the appropriate question and answers matching the business logic of your condition.

    Since:
    8.4.0
    • Constructor Detail

      • APostTestLoopBpmnModeler

        public APostTestLoopBpmnModeler()
    • Method Detail

      • getAlternateLabel

        protected String getAlternateLabel​(IModelWorkflowNodeParams<Model> params,
                                           IWorkflowBpmnModelContext context)
        Gets the label for when the condition does not match, ending the loop. The label is displayed next to the outgoing sequence flow of the exclusive gateway.

        When this returns a blank string, defaults to a default localized label that may or may not be appropriate for the specific circumstances of the workflow node being modelled.

        Note regarding the naming convention for gateways. Label a data-based exclusive gateway with a question.

        • Invoice correct?
        • Trust level of user?
        Label the outgoing sequence flows with the conditions they are executed under. Formulate the conditions as answers to the question posed at the gateway.
        • Yes
        • No
        • Untrusted
        • Basic
        • Secure
        Parameters:
        params - The parameters for the workflow node to model, as provided by the workflow engine.
        context - The context for the BPMN modelling process, as provided by the workflow engine.
        Returns:
        The label for the alternate part.
      • getConditionDetails

        protected String getConditionDetails​(IModelWorkflowNodeParams<Model> params,
                                             IWorkflowBpmnModelContext context)
        Gets the detailed description of the condition that is evaluated to determine when to end the loop. The description is placed within the text annotation of the diverging exclusive gateway. May return empty if no details are needed.
        Parameters:
        params - The parameters for the workflow node to model, as provided by the workflow engine.
        context - The context for the BPMN modelling process, as provided by the workflow engine.
        Returns:
        The details description of the condition, may be empty if no condition is specified.
      • getConditionName

        protected String getConditionName​(IModelWorkflowNodeParams<Model> params,
                                          IWorkflowBpmnModelContext context)
        Gets the name of the condition that checks when to end the loop. Uses as the name of the diverging exclusive gateway.

        When this returns a blank string, defaults to a default localized name that may or may not be appropriate for the specific circumstances of the workflow node being modelled.

        Note regarding the naming convention for gateways. Label a data-based exclusive gateway with a question.

        • Invoice correct?
        • Trust level of user?
        Label the outgoing sequence flows with the conditions they are executed under. Formulate the conditions as answers to the question posed at the gateway.
        • Yes
        • No
        • Untrusted
        • Basic
        • Secure
        Parameters:
        params - The parameters for the workflow node to model, as provided by the workflow engine.
        context - The context for the BPMN modelling process, as provided by the workflow engine.
        Returns:
        The details description of the condition, may be empty if no condition is specified.
      • getConsequentLabel

        protected String getConsequentLabel​(IModelWorkflowNodeParams<Model> params,
                                            IWorkflowBpmnModelContext context)
        Gets the label for when the condition matches, which continues the loop. The label is displayed next to the outgoing sequence flow of the exclusive gateway.

        When this returns a blank string, defaults to a default localized label that may or may not be appropriate for the specific circumstances of the workflow node being modelled.

        Note regarding the naming convention for gateways. Label a data-based exclusive gateway with a question.

        • Invoice correct?
        • Trust level of user?
        Label the outgoing sequence flows with the conditions they are executed under. Formulate the conditions as answers to the question posed at the gateway.
        • Yes
        • No
        • Untrusted
        • Basic
        • Secure
        Parameters:
        params - The parameters for the workflow node to model, as provided by the workflow engine.
        context - The context for the BPMN modelling process, as provided by the workflow engine.
        Returns:
        The label for the consequent part.
      • getLoopBodyChildIndex

        protected int getLoopBodyChildIndex()
        Gets the 0-based index of the child representing the loop body. The default implementation returns 0, i.e. the first child of the post-test loop.
        Returns:
        0-based index of the loop body.