Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Service/MacroStabilityInwardsCalculationService.cs =================================================================== diff -u -r492ad9a8c707d3900471e7597d8490592d7867d8 -r9368b3ac19481ec8b10dcea903ecdf0fab3048cf --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Service/MacroStabilityInwardsCalculationService.cs (.../MacroStabilityInwardsCalculationService.cs) (revision 492ad9a8c707d3900471e7597d8490592d7867d8) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Service/MacroStabilityInwardsCalculationService.cs (.../MacroStabilityInwardsCalculationService.cs) (revision 9368b3ac19481ec8b10dcea903ecdf0fab3048cf) @@ -20,24 +20,18 @@ // All rights reserved. using System; -using System.Collections.Generic; using System.Linq; -using Core.Common.Base.Geometry; using Ringtoets.Common.Service; -using Ringtoets.Common.Service.ValidationRules; using Ringtoets.MacroStabilityInwards.CalculatedInput.Converters; using Ringtoets.MacroStabilityInwards.Data; -using Ringtoets.MacroStabilityInwards.Data.SoilProfile; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.UpliftVan; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.UpliftVan.Input; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.UpliftVan.Output; using Ringtoets.MacroStabilityInwards.KernelWrapper.Kernels; -using Ringtoets.MacroStabilityInwards.Primitives; using Ringtoets.MacroStabilityInwards.Service.Converters; using Ringtoets.MacroStabilityInwards.Service.Properties; -using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; namespace Ringtoets.MacroStabilityInwards.Service { @@ -63,7 +57,7 @@ CalculationServiceHelper.LogValidationBegin(); - string[] inputValidationResults = ValidateInput(calculation.InputParameters).ToArray(); + string[] inputValidationResults = MacroStabilityInwardsInputValidator.Validate(calculation.InputParameters).ToArray(); if (inputValidationResults.Length > 0) { @@ -163,161 +157,6 @@ } } - private static List ValidateInput(MacroStabilityInwardsInput inputParameters) - { - var validationResults = new List(); - - validationResults.AddRange(ValidateHydraulics(inputParameters)); - - IEnumerable coreValidationError = ValidateCoreSurfaceLineAndSoilProfileProperties(inputParameters).ToArray(); - validationResults.AddRange(coreValidationError); - - if (!coreValidationError.Any()) - { - validationResults.AddRange(ValidateSoilLayers(inputParameters)); - } - - return validationResults; - } - - private static IEnumerable ValidateSoilLayers(MacroStabilityInwardsInput inputParameters) - { - var soilProfile1D = inputParameters.StochasticSoilProfile.SoilProfile as MacroStabilityInwardsSoilProfile1D; - if (soilProfile1D != null) - { - if (!ValidateTopOfProfileExceedsSurfaceLineTop(inputParameters, soilProfile1D)) - { - yield return Resources.MacroStabilityInwardsCalculationService_ValidateInput_SoilLayerTop_must_be_larger_than_SurfaceLineTop; - } - yield break; - } - - var soilProfile2D = inputParameters.StochasticSoilProfile.SoilProfile as MacroStabilityInwardsSoilProfile2D; - if (soilProfile2D != null) - { - if (!ValidateSurfaceLineIsNearSoilProfile(inputParameters, soilProfile2D)) - { - yield return Resources.MacroStabilityInwardsCalculationService_ValidateInput_SurfaceLine_must_be_on_SoilLayer; - } - } - } - - private static bool ValidateTopOfProfileExceedsSurfaceLineTop(IMacroStabilityInwardsWaternetInput inputParameters, - MacroStabilityInwardsSoilProfile1D soilProfile1D) - { - double layerTop = soilProfile1D.Layers.Max(l => l.Top); - double surfaceLineTop = inputParameters.SurfaceLine.LocalGeometry.Max(p => p.Y); - - return layerTop + 0.05 >= surfaceLineTop; - } - - private static bool ValidateSurfaceLineIsNearSoilProfile(MacroStabilityInwardsInput inputParameters, - MacroStabilityInwardsSoilProfile2D soilProfile2D) - { - IEnumerable uniqueXs = GetDistinctXFromCoordinates(inputParameters.SurfaceLine.LocalGeometry, - soilProfile2D); - - IEnumerable surfaceLineWithInterpolations = GetSurfaceLineWithInterpolations(inputParameters, uniqueXs); - - foreach (Point2D surfaceLinePoint in surfaceLineWithInterpolations) - { - bool isNear = soilProfile2D.Layers.Any(l => IsPointNearSoilSegments( - surfaceLinePoint, - Math2D.ConvertLinePointsToLineSegments(l.OuterRing.Points))); - if (!isNear) - { - return false; - } - } - return true; - } - - private static IEnumerable GetDistinctXFromCoordinates(IEnumerable surfaceLinePoints, - MacroStabilityInwardsSoilProfile2D soilProfile2D) - { - return surfaceLinePoints.Select(p => p.X) - .Concat(soilProfile2D.Layers - .SelectMany(l => l.OuterRing - .Points - .Select(outerRingPoint => outerRingPoint.X)) - ).OrderBy(d => d) - .Distinct(); - } - - private static IEnumerable GetSurfaceLineWithInterpolations(MacroStabilityInwardsInput inputParameters, - IEnumerable uniqueXs) - { - Segment2D[] surfaceLineSegments = Math2D.ConvertLinePointsToLineSegments(inputParameters.SurfaceLine.LocalGeometry).ToArray(); - - foreach (double x in uniqueXs) - { - double y = surfaceLineSegments.Interpolate(x); - yield return new Point2D(x, y); - } - } - - private static bool IsPointNearSoilSegments(Point2D surfaceLinePoint, IEnumerable soilSegments) - { - foreach (Segment2D soilSegment in soilSegments.Where(s => !s.IsVertical())) - { - double distance = soilSegment.GetEuclideanDistanceToPoint(surfaceLinePoint); - - if ((distance - 0.05).CompareTo(1e-6) < 1) - { - return true; - } - } - return false; - } - - private static IEnumerable ValidateHydraulics(MacroStabilityInwardsInput inputParameters) - { - var validationResults = new List(); - if (!inputParameters.UseAssessmentLevelManualInput && inputParameters.HydraulicBoundaryLocation == null) - { - validationResults.Add(Resources.MacroStabilityInwardsCalculationService_ValidateInput_No_HydraulicBoundaryLocation_selected); - } - else - { - validationResults.AddRange(ValidateAssessmentLevel(inputParameters)); - } - - return validationResults; - } - - private static IEnumerable ValidateAssessmentLevel(MacroStabilityInwardsInput inputParameters) - { - var validationResult = new List(); - - if (inputParameters.UseAssessmentLevelManualInput) - { - validationResult.AddRange(new NumericInputRule(inputParameters.AssessmentLevel, ParameterNameExtractor.GetFromDisplayName(RingtoetsCommonFormsResources.AssessmentLevel_DisplayName)).Validate()); - } - else - { - if (double.IsNaN(inputParameters.AssessmentLevel)) - { - validationResult.Add(Resources.MacroStabilityInwardsCalculationService_ValidateInput_Cannot_determine_AssessmentLevel); - } - } - - return validationResult; - } - - private static IEnumerable ValidateCoreSurfaceLineAndSoilProfileProperties(MacroStabilityInwardsInput inputParameters) - { - var validationResults = new List(); - if (inputParameters.SurfaceLine == null) - { - validationResults.Add(Resources.MacroStabilityInwardsCalculationService_ValidateInput_No_SurfaceLine_selected); - } - if (inputParameters.StochasticSoilProfile == null) - { - validationResults.Add(Resources.MacroStabilityInwardsCalculationService_ValidateInput_No_StochasticSoilProfile_selected); - } - return validationResults; - } - private static UpliftVanCalculatorInput CreateInputFromData(MacroStabilityInwardsInput inputParameters) { return new UpliftVanCalculatorInput(