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); } }
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); }
//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); } }
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"); } }
//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); } }