Example #1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void execute(org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution execution) throws Exception
        public virtual void execute(ActivityExecution execution)
        {
            execution.inactivate();
            lockConcurrentRoot(execution);

            PvmActivity activity = execution.Activity;

            if (activatesGateway(execution, activity))
            {
                LOG.activityActivation(activity.Id);

                IList <ActivityExecution> joinedExecutions = execution.findInactiveConcurrentExecutions(activity);
                string defaultSequenceFlow = (string)execution.Activity.getProperty("default");
                IList <PvmTransition> transitionsToTake = new List <PvmTransition>();

                // find matching non-default sequence flows
                foreach (PvmTransition outgoingTransition in execution.Activity.OutgoingTransitions)
                {
                    if (string.ReferenceEquals(defaultSequenceFlow, null) || !outgoingTransition.Id.Equals(defaultSequenceFlow))
                    {
                        Condition condition = (Condition)outgoingTransition.getProperty(BpmnParse.PROPERTYNAME_CONDITION);
                        if (condition == null || condition.evaluate(execution))
                        {
                            transitionsToTake.Add(outgoingTransition);
                        }
                    }
                }

                // if none found, add default flow
                if (transitionsToTake.Count == 0)
                {
                    if (!string.ReferenceEquals(defaultSequenceFlow, null))
                    {
                        PvmTransition defaultTransition = execution.Activity.findOutgoingTransition(defaultSequenceFlow);
                        if (defaultTransition == null)
                        {
                            throw LOG.missingDefaultFlowException(execution.Activity.Id, defaultSequenceFlow);
                        }

                        transitionsToTake.Add(defaultTransition);
                    }
                    else
                    {
                        // No sequence flow could be found, not even a default one
                        throw LOG.stuckExecutionException(execution.Activity.Id);
                    }
                }

                // take the flows found
                execution.leaveActivityViaTransitions(transitionsToTake, joinedExecutions);
            }
            else
            {
                LOG.noActivityActivation(activity.Id);
            }
        }
Example #2
0
        public virtual void complete(ActivityExecution execution)
        {
            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            if (outgoingTransitions.Count == 0)
            {
                execution.end(true);
            }
            else
            {
                execution.leaveActivityViaTransitions(outgoingTransitions, Collections.EMPTY_LIST);
            }
        }
Example #3
0
        public virtual void execute(ActivityExecution execution)
        {
            PvmActivity activity = execution.Activity;

            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            execution.inactivate();

            IList <ActivityExecution> joinedExecutions = execution.findInactiveConcurrentExecutions(activity);

            int nbrOfExecutionsToJoin = execution.Activity.IncomingTransitions.Count;
            int nbrOfExecutionsJoined = joinedExecutions.Count;

            if (nbrOfExecutionsJoined == nbrOfExecutionsToJoin)
            {
                LOG.debug("parallel gateway '" + activity.Id + "' activates: " + nbrOfExecutionsJoined + " of " + nbrOfExecutionsToJoin + " joined");
                execution.leaveActivityViaTransitions(outgoingTransitions, joinedExecutions);
            }
            else
            {
                LOG.debug("parallel gateway '" + activity.Id + "' does not activate: " + nbrOfExecutionsJoined + " of " + nbrOfExecutionsToJoin + " joined");
            }
        }
Example #4
0
        /*
         * Incoming execution is transformed into an event scope,
         * new, non-concurrent execution leaves activity
         */
        public virtual void complete(ActivityExecution execution)
        {
            ActivityExecution outgoingExecution = execution.Parent.createExecution();

            outgoingExecution.Concurrent = false;
            outgoingExecution.Activity   = execution.Activity;

            // eventscope execution
            execution.Concurrent = false;
            execution.Active     = false;
            ((PvmExecutionImpl)execution).EventScope = true;

            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            if (outgoingTransitions.Count == 0)
            {
                outgoingExecution.end(true);
            }
            else
            {
                outgoingExecution.leaveActivityViaTransitions(outgoingTransitions, Collections.EMPTY_LIST);
            }
        }
Example #5
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void execute(org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution execution) throws Exception
        public virtual void execute(ActivityExecution execution)
        {
            // Join
            PvmActivity           activity            = execution.Activity;
            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            execution.inactivate();
            lockConcurrentRoot(execution);

            IList <ActivityExecution> joinedExecutions = execution.findInactiveConcurrentExecutions(activity);
            int nbrOfExecutionsToJoin = execution.Activity.IncomingTransitions.Count;
            int nbrOfExecutionsJoined = joinedExecutions.Count;

            if (nbrOfExecutionsJoined == nbrOfExecutionsToJoin)
            {
                // Fork
                LOG.activityActivation(activity.Id, nbrOfExecutionsJoined, nbrOfExecutionsToJoin);
                execution.leaveActivityViaTransitions(outgoingTransitions, joinedExecutions);
            }
            else
            {
                LOG.noActivityActivation(activity.Id, nbrOfExecutionsJoined, nbrOfExecutionsToJoin);
            }
        }
Example #6
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void completed(org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution execution) throws Exception
        public virtual void completed(ActivityExecution execution)
        {
            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            execution.leaveActivityViaTransitions(outgoingTransitions, null);
        }
Example #7
0
        /// <summary>
        /// Actual implementation of leaving an activity.
        /// </summary>
        /// <param name="execution">
        ///          The current execution context </param>
        /// <param name="checkConditions">
        ///          Whether or not to check conditions before determining whether or
        ///          not to take a transition. </param>
        protected internal virtual void performOutgoingBehavior(ActivityExecution execution, bool checkConditions, IList <ActivityExecution> reusableExecutions)
        {
            LOG.leavingActivity(execution.Activity.Id);

            string defaultSequenceFlow = (string)execution.Activity.getProperty("default");
            IList <PvmTransition> transitionsToTake = new List <PvmTransition>();

            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            foreach (PvmTransition outgoingTransition in outgoingTransitions)
            {
                if (string.ReferenceEquals(defaultSequenceFlow, null) || !outgoingTransition.Id.Equals(defaultSequenceFlow))
                {
                    Condition condition = (Condition)outgoingTransition.getProperty(BpmnParse.PROPERTYNAME_CONDITION);
                    if (condition == null || !checkConditions || condition.evaluate(execution))
                    {
                        transitionsToTake.Add(outgoingTransition);
                    }
                }
            }

            if (transitionsToTake.Count == 1)
            {
                execution.leaveActivityViaTransition(transitionsToTake[0]);
            }
            else if (transitionsToTake.Count >= 1)
            {
                if (reusableExecutions == null || reusableExecutions.Count == 0)
                {
                    execution.leaveActivityViaTransitions(transitionsToTake, Arrays.asList(execution));
                }
                else
                {
                    execution.leaveActivityViaTransitions(transitionsToTake, reusableExecutions);
                }
            }
            else
            {
                if (!string.ReferenceEquals(defaultSequenceFlow, null))
                {
                    PvmTransition defaultTransition = execution.Activity.findOutgoingTransition(defaultSequenceFlow);
                    if (defaultTransition != null)
                    {
                        execution.leaveActivityViaTransition(defaultTransition);
                    }
                    else
                    {
                        throw LOG.missingDefaultFlowException(execution.Activity.Id, defaultSequenceFlow);
                    }
                }
                else if (outgoingTransitions.Count > 0)
                {
                    throw LOG.missingConditionalFlowException(execution.Activity.Id);
                }
                else
                {
                    if (((ActivityImpl)execution.Activity).CompensationHandler && isAncestorCompensationThrowing(execution))
                    {
                        execution.endCompensation();
                    }
                    else
                    {
                        LOG.missingOutgoingSequenceFlow(execution.Activity.Id);
                        execution.end(true);
                    }
                }
            }
        }