Index: Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs =================================================================== diff -u -r9fbd4c61f928385185c69004737130639e66b464 -r44472a4abdebe721072cb648140d9254bc25bd1a --- Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 9fbd4c61f928385185c69004737130639e66b464) +++ Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 44472a4abdebe721072cb648140d9254bc25bd1a) @@ -783,9 +783,7 @@ private static void ValidateAllInFailureMechanism(PipingFailureMechanismContext context) { ValidateAll(context.WrappedData.Calculations.Cast>(), - context.WrappedData.GeneralInput, - context.Parent, - context.WrappedData); + context.WrappedData, context.Parent); } /// @@ -1051,9 +1049,7 @@ private static void ValidateAllInCalculationGroup(PipingCalculationGroupContext context) { ValidateAll(context.WrappedData.GetCalculations().Cast>(), - context.FailureMechanism.GeneralInput, - context.AssessmentSection, - context.FailureMechanism); + context.FailureMechanism, context.AssessmentSection); } /// @@ -1310,22 +1306,20 @@ /// Validates the provided . /// /// The calculations to validate. - /// The general input to use during the validation. - /// The assessment section the belong to. /// The failure mechanism the belong to. + /// The assessment section the belong to. /// Thrown when any of the provided calculations is of a type that is not supported. private static void ValidateAll(IEnumerable> pipingCalculations, - GeneralPipingInput generalPipingInput, - IAssessmentSection assessmentSection, - PipingFailureMechanism failureMechanism) + PipingFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) { foreach (IPipingCalculationScenario calculation in pipingCalculations) { switch (calculation) { case SemiProbabilisticPipingCalculationScenario semiProbabilisticPipingCalculationScenario: SemiProbabilisticPipingCalculationService.Validate(semiProbabilisticPipingCalculationScenario, - generalPipingInput, + failureMechanism.GeneralInput, GetNormativeAssessmentLevel(assessmentSection, semiProbabilisticPipingCalculationScenario)); break; case ProbabilisticPipingCalculationScenario probabilisticPipingCalculationScenario: Index: Riskeer/Piping/src/Riskeer.Piping.Service/Probabilistic/ProbabilisticPipingCalculationService.cs =================================================================== diff -u -r43ea9713b3b60bfb28ec520e5bf807634fffcbf1 -r44472a4abdebe721072cb648140d9254bc25bd1a --- Riskeer/Piping/src/Riskeer.Piping.Service/Probabilistic/ProbabilisticPipingCalculationService.cs (.../ProbabilisticPipingCalculationService.cs) (revision 43ea9713b3b60bfb28ec520e5bf807634fffcbf1) +++ Riskeer/Piping/src/Riskeer.Piping.Service/Probabilistic/ProbabilisticPipingCalculationService.cs (.../ProbabilisticPipingCalculationService.cs) (revision 44472a4abdebe721072cb648140d9254bc25bd1a) @@ -459,6 +459,14 @@ return true; } + messages = ValidateFailureMechanismHasSections(failureMechanism).ToArray(); + + if (messages.Length > 0) + { + CalculationServiceHelper.LogMessagesAsError(messages); + return true; + } + messages = ValidateInput(calculation.InputParameters, failureMechanism.GeneralInput).ToArray(); if (messages.Length > 0) @@ -467,7 +475,7 @@ return true; } - messages = ValidateSections(calculation, failureMechanism).ToArray(); + messages = ValidateCalculationInMultipleSections(calculation, failureMechanism).ToArray(); if (messages.Length > 0) { @@ -478,20 +486,29 @@ return false; } - private static IEnumerable ValidateSections(ProbabilisticPipingCalculation calculation, PipingFailureMechanism failureMechanism) + private static IEnumerable ValidateFailureMechanismHasSections(PipingFailureMechanism failureMechanism) { var validationResults = new List(); - FailureMechanismSection[] sections = failureMechanism - .Sections - .Where(section => calculation.IsSurfaceLineIntersectionWithReferenceLineInSection(Math2D.ConvertPointsToLineSegments(section.Points))) - .ToArray(); + FailureMechanismSection[] sections = failureMechanism.Sections.ToArray(); if (sections.Length == 0) { validationResults.Add(Resources.ProbabilisticPipingCalculationService_ValidateSections_No_sections_imported); } + return validationResults; + } + + private static IEnumerable ValidateCalculationInMultipleSections(ProbabilisticPipingCalculation calculation, PipingFailureMechanism failureMechanism) + { + var validationResults = new List(); + + FailureMechanismSection[] sections = failureMechanism + .Sections + .Where(section => calculation.IsSurfaceLineIntersectionWithReferenceLineInSection(Math2D.ConvertPointsToLineSegments(section.Points))) + .ToArray(); + if (sections.Length > 1) { validationResults.Add(Resources.ProbabilisticPipingCalculationService_ValidateSections_Cannot_determine_section_for_calculation);