Beispiel #1
0
        protected internal virtual bool activatesGateway(ActivityExecution execution, PvmActivity gatewayActivity)
        {
            int numExecutionsGuaranteedToActivate = gatewayActivity.IncomingTransitions.Count;
            ActivityExecution scopeExecution      = execution.Scope ? execution : execution.Parent;

            IList <ActivityExecution> executionsAtGateway = execution.findInactiveConcurrentExecutions(gatewayActivity);

            if (executionsAtGateway.Count >= numExecutionsGuaranteedToActivate)
            {
                return(true);
            }
            else
            {
                ICollection <ActivityExecution> executionsNotAtGateway = getLeafExecutions(scopeExecution);
//JAVA TO C# CONVERTER TODO TASK: There is no .NET equivalent to the java.util.Collection 'removeAll' method:
                executionsNotAtGateway.removeAll(executionsAtGateway);

                foreach (ActivityExecution executionNotAtGateway in executionsNotAtGateway)
                {
                    if (canReachActivity(executionNotAtGateway, gatewayActivity))
                    {
                        return(false);
                    }
                }

                // if no more token may arrive, then activate
                return(true);
            }
        }
Beispiel #2
0
        protected internal virtual bool allExecutionsEnded(ActivityExecution scopeExecution, ActivityExecution endedExecution)
        {
            int numberOfInactiveConcurrentExecutions = endedExecution.findInactiveConcurrentExecutions(endedExecution.Activity).Count;
            int concurrentExecutions = scopeExecution.Executions.Count;

            // no active instances exist and all concurrent executions are inactive
            return(getLocalLoopVariable(scopeExecution, NUMBER_OF_ACTIVE_INSTANCES) <= 0 && numberOfInactiveConcurrentExecutions == concurrentExecutions);
        }
Beispiel #3
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);
            }
        }
Beispiel #4
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");
            }
        }
Beispiel #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);
            }
        }