Example #1
0
 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);
                }
            }
        }