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)); }
public static BypassSheet GetInitializedBypassSheet(params int[] stamps) { var bypassSheet = new BypassSheet(); foreach (var stamp in stamps) { bypassSheet.Stamps.Add(stamp); } return(bypassSheet); }
void IDepartmentRule.Execute(BypassSheet bypassSheet) { if (bypassSheet.Contains(_containingStamp)) { _successAction.Execute(bypassSheet); } else { _failureAction.Execute(bypassSheet); } }
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); }
private int ExecuteInternalRule(BypassSheet bypassSheet) { if (AddedStampId != 0) { bypassSheet.Stamps.Add(AddedStampId); } if (RemovedStampId != 0) { bypassSheet.Stamps.RemoveWhere(stamp => stamp.Equals(RemovedStampId)); } return(NextDepartmentId); }
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 }); } }
internal abstract void Execute(BypassSheet sheet);
void IDepartmentRule.Execute(BypassSheet bypassSheet) { _action.Execute(bypassSheet); }
public async Task <int> ExecuteRuleAsync(BypassSheet bypassSheet) { return(await Task.Run(() => ExecuteInternalRule(bypassSheet)).ConfigureAwait(false)); }