protected BasicRunnable([NotNull] string name, Stage stage, int sequenceNumber, Steptype stepType, [NotNull] ServiceRepository services, bool implementationFinished, [CanBeNull] IVisualizeSlice visualize) : base(services.Logger, stage, name) { _visualize = visualize; SequenceNumber = sequenceNumber; StepType = stepType; Services = services; ImplementationFinished = implementationFinished; }
private static void CheckAndValidateSteps([NotNull][ItemNotNull] List <IBasicRunner> steps, [NotNull] Logger logger, Stage currentStage, out Steptype stepType) { if (steps.Count == 0) { throw new Exception("Not a single step in the stage " + currentStage); } stepType = Steptype.Global; var listOfSequenceNumbers = steps.Select(x => x.SequenceNumber).Distinct().ToList(); var listOfStepNames = steps.Select(x => x.Name).Distinct().ToList(); if (listOfSequenceNumbers.Count != steps.Count) { Dictionary <int, string> sequences = new Dictionary <int, string>(); foreach (IBasicRunner runner in steps) { if (sequences.ContainsKey(runner.SequenceNumber)) { throw new Exception("Duplicate squence numbers:" + runner.SequenceNumber + " Steps: \n" + sequences[runner.SequenceNumber] + "\n" + runner.Name); } sequences.Add(runner.SequenceNumber, runner.Name); } } if (listOfStepNames.Count != steps.Count) { Dictionary <string, string> sequences = new Dictionary <string, string>(); foreach (IBasicRunner runner in steps) { if (sequences.ContainsKey(runner.Name)) { throw new Exception("Duplicate names in sequence:" + runner.Name); } sequences.Add(runner.Name, runner.Name); } } var thisstepType = steps[0].StepType; stepType = thisstepType; if (steps.Any(x => x.StepType != thisstepType)) { foreach (var basicRunner in steps) { logger.Info(basicRunner.Name + "- " + basicRunner.SequenceNumber + " - " + basicRunner.StepType, Stage.Preparation, nameof(MainBurgdorfStatisticsCreator)); } throw new Exception("Inconsistent step types in stage " + currentStage); } var stepsByNumber = steps.OrderBy(x => x.SequenceNumber).ToList(); var stepsByName = steps.OrderBy(x => x.Name).ToList(); for (int i = 0; i < stepsByName.Count; i++) { if (stepsByName[i] != stepsByNumber[i]) { throw new FlaException("Invalid ordering: Sequence number says it should be " + stepsByNumber[i].Name + " but name says it should be " + stepsByName[i].Name); } } }