private void CheckTasks() { ProcessMatrix matrix = Process.Matrix; this.Tasks = 0; foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.Implementation)) { this.Tasks++; int index = Process.GetActivityIndexById(activity.Id); int taskTargets = 0; for (int i = 0; i < matrix.Size; i++) { taskTargets += matrix.Array[index, i]; } int taskSources = 0; for (int i = 0; i < matrix.Size; i++) { taskSources += matrix.Array[i, index]; } if (taskTargets == 0) { Issues.Add(new Issue() { Element = activity, Message = String.Format(Messages.TARGET_TASKS, activity.Name, Process.Name) }); } if (taskSources == 0) { Issues.Add(new Issue() { Element = activity, Message = String.Format(Messages.SOURCE_TASKS, activity.Name, Process.Name) }); } } } }
public void CalculateProcessMatrix() { Matrix = new ProcessMatrix() { Size = Activities.Count }; Matrix.InitialFill(); foreach (Transition transition in Transitions) { int from = GetActivityIndexById(transition.From); int to = GetActivityIndexById(transition.To); Matrix.AddTransition(from, to); } }
private void CheckIntermediateEvents() { ProcessMatrix matrix = Process.Matrix; this.IntermediateEvents = 0; foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.IntermediateEvent)) { this.IntermediateEvents++; int index = Process.GetActivityIndexById(activity.Id); int intermediateEventTargets = 0; for (int i = 0; i < matrix.Size; i++) { intermediateEventTargets += matrix.Array[index, i]; } int intermediateEventSources = 0; for (int i = 0; i < matrix.Size; i++) { intermediateEventSources += matrix.Array[i, index]; } if (intermediateEventTargets == 0 || intermediateEventSources == 0) { Issues.Add(new Issue() { Element = activity, Message = String.Format(Messages.INTERMEDIATE_EVENTS, activity.Name, Process.Name) }); } } } }
private void CheckProcessFlow() { ProcessMatrix matrix = Process.Matrix; this.Gateways = 0; foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.Route)) { this.Gateways++; } } foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.Implementation)) { int index = Process.GetActivityIndexById(activity.Id); int taskTargets = 0; for (int i = 0; i < matrix.Size; i++) { taskTargets += matrix.Array[index, i]; } if (taskTargets > 1) { Issues.Add(new Issue() { Element = activity, Message = String.Format(Messages.PROCESS_FLOW, Process.Name) }); } } } }
private void CalculateCSC() { double startEventsAmount = 0; double endEventsAmount = 0; foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.StartEvent)) { startEventsAmount++; } if (activity.Type.Equals(ActivityType.EndEvent)) { endEventsAmount++; } } ProcessMatrix matrix = Process.Matrix; double intermediateEventTargets = 0; double intermediateEventSources = 0; double intermediateEventAmount = 0; foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.IntermediateEvent)) { intermediateEventAmount++; } } foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.IntermediateEvent)) { double intermediateEventTargetsSum = 0; double intermediateEventSourcesSum = 0; int index = Process.GetActivityIndexById(activity.Id); for (int i = 0; i < matrix.Size; i++) { intermediateEventTargetsSum += matrix.Array[index, i]; } for (int i = 0; i < matrix.Size; i++) { intermediateEventSourcesSum += matrix.Array[i, index]; } intermediateEventTargets += ((intermediateEventTargetsSum > 0 ? 1 : 0) - 1) / intermediateEventAmount; intermediateEventSources += ((intermediateEventSourcesSum > 0 ? 1 : 0) - 1) / intermediateEventAmount; } } double taskTargets = 0; double taskSources = 0; double taskAmount = 0; foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.Implementation)) { taskAmount++; } } foreach (Activity activity in Process.Activities) { if (activity.Type.Equals(ActivityType.Implementation)) { double taskTargetsSum = 0; double taskSourcesSum = 0; int index = Process.GetActivityIndexById(activity.Id); for (int i = 0; i < matrix.Size; i++) { taskTargetsSum += matrix.Array[index, i]; } for (int i = 0; i < matrix.Size; i++) { taskSourcesSum += matrix.Array[i, index]; } taskTargets += Math.Abs(1 - taskTargetsSum) > 0 ? 1 : 0; taskSources += ((taskSourcesSum > 0 ? 1 : 0) - 1) / taskAmount; } } CSC = ((startEventsAmount > 0 ? 1 : 0) - 1) + ((endEventsAmount > 0 ? 1 : 0) - 1) + intermediateEventTargets + intermediateEventSources + taskSources - taskTargets; }