Ejemplo n.º 1
0
        public async Task <int> ExecuteRuleAsync(BypassSheet bypassSheet)
        {
            if (bypassSheet.Stamps.Contains(ConditionStampId))
            {
                return(await OnConditionDefaultRule.ExecuteRuleAsync(bypassSheet).ConfigureAwait(false));
            }

            return(await ElseConditionDefaultRule.ExecuteRuleAsync(bypassSheet).ConfigureAwait(false));
        }
Ejemplo n.º 2
0
        public static BypassSheet GetInitializedBypassSheet(params int[] stamps)
        {
            var bypassSheet = new BypassSheet();

            foreach (var stamp in stamps)
            {
                bypassSheet.Stamps.Add(stamp);
            }
            return(bypassSheet);
        }
Ejemplo n.º 3
0
 void IDepartmentRule.Execute(BypassSheet bypassSheet)
 {
     if (bypassSheet.Contains(_containingStamp))
     {
         _successAction.Execute(bypassSheet);
     }
     else
     {
         _failureAction.Execute(bypassSheet);
     }
 }
Ejemplo n.º 4
0
        public async Task <int> ExecuteDepartmentRuleAsync(BypassSheet bypassSheet)
        {
            var nextId = await Rule.ExecuteRuleAsync(bypassSheet).ConfigureAwait(false);

            if (!IsCycle)
            {
                await Task.Run(() => FindCycle(bypassSheet, nextId)).ConfigureAwait(false);
            }

            return(nextId);
        }
Ejemplo n.º 5
0
        private int ExecuteInternalRule(BypassSheet bypassSheet)
        {
            if (AddedStampId != 0)
            {
                bypassSheet.Stamps.Add(AddedStampId);
            }

            if (RemovedStampId != 0)
            {
                bypassSheet.Stamps.RemoveWhere(stamp => stamp.Equals(RemovedStampId));
            }

            return(NextDepartmentId);
        }
Ejemplo n.º 6
0
        private void FindCycle(BypassSheet bypassSheet, int nextId)
        {
            IsCycle = StampsHistory.Any(e =>
                                        e.Stamps.SetEquals(bypassSheet.Stamps) && e.NextDepartmentId == nextId);

            if (!IsCycle)
            {
                StampsHistory.Add(new StampsHistoryElement
                {
                    Stamps           = new HashSet <int>(bypassSheet.Stamps),
                    NextDepartmentId = nextId
                });
            }
        }
Ejemplo n.º 7
0
 internal abstract void Execute(BypassSheet sheet);
Ejemplo n.º 8
0
 void IDepartmentRule.Execute(BypassSheet bypassSheet)
 {
     _action.Execute(bypassSheet);
 }
Ejemplo n.º 9
0
 public async Task <int> ExecuteRuleAsync(BypassSheet bypassSheet)
 {
     return(await Task.Run(() => ExecuteInternalRule(bypassSheet)).ConfigureAwait(false));
 }