Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfiles/PipingSoilLayerTransformer.cs =================================================================== diff -u -rc71efcd328d420bd869028dd35d035ff02d98ec2 -r8615eb0897ed3de888e2d5cb29659fa1d46d8df4 --- Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfiles/PipingSoilLayerTransformer.cs (.../PipingSoilLayerTransformer.cs) (revision c71efcd328d420bd869028dd35d035ff02d98ec2) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfiles/PipingSoilLayerTransformer.cs (.../PipingSoilLayerTransformer.cs) (revision 8615eb0897ed3de888e2d5cb29659fa1d46d8df4) @@ -52,28 +52,18 @@ throw new ArgumentNullException(nameof(soilLayer)); } - try + ValidateStochasticParameters(soilLayer); + + var pipingSoilLayer = new PipingSoilLayer(soilLayer.Top) { - ValidateStochasticParameters(soilLayer); + IsAquifer = TransformIsAquifer(soilLayer.IsAquifer, soilLayer.MaterialName), + MaterialName = soilLayer.MaterialName, + Color = SoilLayerColorConverter.Convert(soilLayer.Color) + }; - var pipingSoilLayer = new PipingSoilLayer(soilLayer.Top) - { - IsAquifer = TransformIsAquifer(soilLayer.IsAquifer), - MaterialName = soilLayer.MaterialName, - Color = SoilLayerColorConverter.Convert(soilLayer.Color) - }; + SetStochasticParameters(pipingSoilLayer, soilLayer); - SetStochasticParameters(pipingSoilLayer, soilLayer); - - return pipingSoilLayer; - } - catch (ImportedDataTransformException e) - { - string errorMessage = string.Format(RingtoetsCommonIOResources.Transform_Error_occurred_when_transforming_SoilLayer_0_errorMessage_1, - soilLayer.MaterialName, - e.Message); - throw new ImportedDataTransformException(errorMessage, e); - } + return pipingSoilLayer; } /// @@ -88,20 +78,10 @@ /// in a valid transformed instance. public static IEnumerable Transform(SoilLayer2D soilLayer, double atX, out double bottom) { - try - { - bottom = double.MaxValue; - var soilLayers = new Collection(); - Transform(soilLayer, atX, soilLayers, ref bottom); - return soilLayers; - } - catch (ImportedDataTransformException e) - { - string errorMessage = string.Format(RingtoetsCommonIOResources.Transform_Error_occurred_when_transforming_SoilLayer_0_errorMessage_1, - soilLayer.MaterialName, - e.Message); - throw new ImportedDataTransformException(errorMessage, e); - } + bottom = double.MaxValue; + var soilLayers = new Collection(); + Transform(soilLayer, atX, soilLayers, ref bottom); + return soilLayers; } /// @@ -129,14 +109,17 @@ return; } - double[] outerLoopIntersectionHeights = GetLoopIntersectionHeights(soilLayer.OuterLoop.Segments, atX).ToArray(); + string soilLayerName = soilLayer.MaterialName; + double[] outerLoopIntersectionHeights = GetLoopIntersectionHeights(soilLayer.OuterLoop.Segments, atX, soilLayerName).ToArray(); if (!outerLoopIntersectionHeights.Any()) { return; } - IEnumerable> innerLoopsIntersectionHeights = soilLayer.NestedLayers.Select(l => GetLoopIntersectionHeights(l.OuterLoop.Segments, atX)); + IEnumerable> innerLoopsIntersectionHeights = soilLayer.NestedLayers.Select(l => GetLoopIntersectionHeights(l.OuterLoop.Segments, + atX, + soilLayerName)); IEnumerable> innerLoopIntersectionHeightPairs = GetOrderedStartAndEndPairsIn1D(innerLoopsIntersectionHeights).ToList(); IEnumerable> outerLoopIntersectionHeightPairs = GetOrderedStartAndEndPairsIn1D(outerLoopIntersectionHeights).ToList(); @@ -149,7 +132,7 @@ { var pipingSoilLayer = new PipingSoilLayer(height) { - IsAquifer = TransformIsAquifer(soilLayer.IsAquifer), + IsAquifer = TransformIsAquifer(soilLayer.IsAquifer, soilLayerName), MaterialName = soilLayer.MaterialName, Color = SoilLayerColorConverter.Convert(soilLayer.Color) }; @@ -175,17 +158,27 @@ /// stochastic parameters is not defined as lognormal or is shifted when it should not be. private static void ValidateStochasticParameters(SoilLayerBase soilLayer) { - DistributionHelper.ValidateShiftedLogNormalDistribution( - soilLayer.BelowPhreaticLevelDistributionType, - Resources.SoilLayer_BelowPhreaticLevelDistribution_DisplayName); - DistributionHelper.ValidateLogNormalDistribution( - soilLayer.DiameterD70DistributionType, - soilLayer.DiameterD70Shift, - Resources.SoilLayer_DiameterD70Distribution_DisplayName); - DistributionHelper.ValidateLogNormalDistribution( - soilLayer.PermeabilityDistributionType, - soilLayer.PermeabilityShift, - Resources.SoilLayer_PermeabilityDistribution_DisplayName); + try + { + DistributionHelper.ValidateShiftedLogNormalDistribution( + soilLayer.BelowPhreaticLevelDistributionType, + Resources.SoilLayer_BelowPhreaticLevelDistribution_DisplayName); + DistributionHelper.ValidateLogNormalDistribution( + soilLayer.DiameterD70DistributionType, + soilLayer.DiameterD70Shift, + Resources.SoilLayer_DiameterD70Distribution_DisplayName); + DistributionHelper.ValidateLogNormalDistribution( + soilLayer.PermeabilityDistributionType, + soilLayer.PermeabilityShift, + Resources.SoilLayer_PermeabilityDistribution_DisplayName); + } + catch (ImportedDataTransformException e) + { + string errorMessage = string.Format(RingtoetsCommonIOResources.Transform_Error_occurred_when_transforming_SoilLayer_0_errorMessage_1, + soilLayer.MaterialName, + e.Message); + throw new ImportedDataTransformException(errorMessage, e); + } } /// @@ -243,21 +236,32 @@ /// /// The sequence of which together create a loop. /// The point on the x-axis where the vertical line is constructed do determine intersections with. + /// The name of the soil layer. /// A of , representing the height at which the /// intersects the vertical line at . /// Thrown when a segment is vertical at and thus /// no deterministic intersection points can be determined. - private static IEnumerable GetLoopIntersectionHeights(IEnumerable loop, double atX) + private static IEnumerable GetLoopIntersectionHeights(IEnumerable loop, + double atX, + string soilLayerName) { Segment2D[] segment2Ds = loop.ToArray(); if (segment2Ds.Any(segment => IsVerticalAtX(segment, atX))) { - string message = string.Format(Resources.Error_Can_not_determine_1D_profile_with_vertical_segments_at_X_0_, atX); + string message = CreateExceptionMessage(soilLayerName, + string.Format(Resources.Error_Can_not_determine_1D_profile_with_vertical_segments_at_X_0_, atX)); throw new ImportedDataTransformException(message); } return Math2D.SegmentsIntersectionWithVerticalLine(segment2Ds, atX).Select(p => p.Y); } + private static string CreateExceptionMessage(string soilLayerName, string errorMessage) + { + return string.Format(RingtoetsCommonIOResources.Transform_Error_occurred_when_transforming_SoilLayer_0_errorMessage_1, + soilLayerName, + errorMessage); + } + private static bool IsVerticalAtX(Segment2D segment, double atX) { return segment.FirstPoint.X.Equals(atX) && segment.IsVertical(); @@ -268,19 +272,22 @@ /// . /// /// The value to transform. + /// The name of the soil layer. /// A based on . /// Thrown when /// could not be transformed. - private static bool TransformIsAquifer(double? isAquifer) + private static bool TransformIsAquifer(double? isAquifer, string soilLayerName) { try { return SoilLayerIsAquiferConverter.Convert(isAquifer); } - catch (NotSupportedException) + catch (NotSupportedException e) { - throw new ImportedDataTransformException(string.Format(RingtoetsCommonIOResources.Transform_Invalid_value_ParameterName_0, - RingtoetsCommonIOResources.SoilLayerData_IsAquifer_DisplayName)); + string message = CreateExceptionMessage(soilLayerName, + string.Format(RingtoetsCommonIOResources.Transform_Invalid_value_ParameterName_0, + RingtoetsCommonIOResources.SoilLayerData_IsAquifer_DisplayName)); + throw new ImportedDataTransformException(message, e); } } } Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfiles/PipingSoilLayerTransformerTest.cs =================================================================== diff -u -rc71efcd328d420bd869028dd35d035ff02d98ec2 -r8615eb0897ed3de888e2d5cb29659fa1d46d8df4 --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfiles/PipingSoilLayerTransformerTest.cs (.../PipingSoilLayerTransformerTest.cs) (revision c71efcd328d420bd869028dd35d035ff02d98ec2) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfiles/PipingSoilLayerTransformerTest.cs (.../PipingSoilLayerTransformerTest.cs) (revision 8615eb0897ed3de888e2d5cb29659fa1d46d8df4) @@ -98,6 +98,7 @@ string expectedMessage = CreateExpectedErrorMessage(layer.MaterialName, "Ongeldige waarde voor parameter 'Is aquifer'."); Assert.AreEqual(expectedMessage, exception.Message); + Assert.IsInstanceOf(exception.InnerException); } [Test] @@ -397,7 +398,7 @@ string expectedMessage = CreateExpectedErrorMessage(layer.MaterialName, "Ongeldige waarde voor parameter 'Is aquifer'."); Assert.AreEqual(expectedMessage, exception.Message); - + Assert.IsInstanceOf(exception.InnerException); Assert.IsNull(pipingSoilLayers); }