Exemplo n.º 1
0
        protected internal virtual bool CanReachActivity(IActivityExecution execution, IPvmActivity activity)
        {
            IPvmTransition pvmTransition = execution.Transition;

            if (pvmTransition != null)
            {
                return(IsReachable(pvmTransition.Destination, activity, new HashSet <IPvmActivity>()));
            }
            return(IsReachable(execution.Activity, activity, new HashSet <IPvmActivity>()));
        }
Exemplo n.º 2
0
 public InstantiationStack(IList <IPvmActivity> activities, IPvmActivity targetActivity,
                           IPvmTransition targetTransition)
 {
     EnsureUtil.EnsureOnlyOneNotNull("target must be either a transition or an activity", targetActivity,
                                     targetTransition);
     this.Activities = activities;
     // TODO: make this a subclass that contains targetActivity and targetTransition?!
     this.TargetActivity   = targetActivity;
     this.TargetTransition = targetTransition;
 }
Exemplo n.º 3
0
        /// <summary>
        ///     The default behaviour of BPMN, taking every outgoing sequence flow
        ///     (where the condition evaluates to true), is not valid for an exclusive
        ///     gateway.
        ///     Hence, this behaviour is overriden and replaced by the correct behavior:
        ///     selecting the first sequence flow which condition evaluates to true
        ///     (or which hasn't got a condition) and leaving the activity through that
        ///     sequence flow.
        ///     If no sequence flow is selected (ie all conditions evaluate to false),
        ///     then the default sequence flow is taken (if defined).
        /// </summary>
        public override void DoLeave(IActivityExecution execution)
        {
            Log.LeavingActivity(execution.Activity.Id);

            IPvmTransition outgoingSeqFlow     = null;
            var            defaultSequenceFlow = (string)execution.Activity.GetProperty("default");
            var            transitionIterator  = execution.Activity.OutgoingTransitions.GetEnumerator();

            while ((outgoingSeqFlow == null) && transitionIterator.MoveNext())
            {
                var seqFlow = transitionIterator.Current;

                var condition = (ICondition)seqFlow.GetProperty(BpmnParse.PropertynameCondition);
                if (((condition == null) &&
                     (ReferenceEquals(defaultSequenceFlow, null) || !defaultSequenceFlow.Equals(seqFlow.Id))) ||
                    ((condition != null) && condition.Evaluate(execution)))
                {
                    Log.OutgoingSequenceFlowSelected(seqFlow.Id);
                    outgoingSeqFlow = seqFlow;
                }
            }

            if (outgoingSeqFlow != null)
            {
                execution.LeaveActivityViaTransition(outgoingSeqFlow);
            }
            else
            {
                if (!ReferenceEquals(defaultSequenceFlow, null))
                {
                    var defaultTransition = execution.Activity.FindOutgoingTransition(defaultSequenceFlow);
                    if (defaultTransition != null)
                    {
                        execution.LeaveActivityViaTransition(defaultTransition);
                    }
                    else
                    {
                        throw Log.MissingDefaultFlowException(execution.Activity.Id, defaultSequenceFlow);
                    }
                }
                else
                {
                    //No sequence flow could be found, not even a default one
                    throw Log.StuckExecutionException(execution.Activity.Id);
                }
            }
        }
Exemplo n.º 4
0
        public void Execute(IActivityExecution execution)
        {
            string @var = (string)execution.GetVariable("var");

            IPvmTransition transition = null;

            try
            {
                ExecuteLogic(@var);
                transition = execution.Activity.FindOutgoingTransition("no-exception");
            }
            catch (System.Exception)
            {
                transition = execution.Activity.FindOutgoingTransition("exception");
            }
            execution.LeaveActivityViaTransition(transition);
        }
Exemplo n.º 5
0
        public void Execute(IActivityExecution execution)
        {
            IPvmTransition transition   = null;
            var            creditRating = (string)execution.GetVariable("creditRating");

            if (creditRating.Equals("AAA+"))
            {
                transition = execution.Activity.FindOutgoingTransition("wow");
            }
            else if (creditRating.Equals("Aaa-"))
            {
                transition = execution.Activity.FindOutgoingTransition("nice");
            }
            else
            {
                transition = execution.Activity.FindOutgoingTransition("default");
            }

            execution.LeaveActivityViaTransition(transition);
        }
Exemplo n.º 6
0
 public virtual void NotTakingTranistion(IPvmTransition outgoingTransition)
 {
     LogDebug("001", "Not taking transition '{0}', outgoing execution has ended.", outgoingTransition);
 }
Exemplo n.º 7
0
        public void Signal(IActivityExecution execution, String signalName, Object signalData)
        {
            IPvmTransition transition = execution.Activity.OutgoingTransitions[0];

            execution.LeaveActivityViaTransition(transition);
        }
Exemplo n.º 8
0
        public virtual void Execute(IActivityExecution execution)
        {
            IPvmTransition transition = execution.Activity.OutgoingTransitions[0];

            execution.LeaveActivityViaTransition(transition);
        }
Exemplo n.º 9
0
 public OutgoingExecution(IActivityExecution outgoingExecution, IPvmTransition outgoingTransition)
 {
     this.outgoingExecution       = outgoingExecution;
     this.OutgoingTransition      = outgoingTransition;
     outgoingExecution.Transition = (outgoingTransition);
 }