Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsHelper.cs
===================================================================
diff -u -r164556e75ddc489940c96a84fd41589a4acbac80 -r686a257dd8e21e34a52b265f85ef4ac4e11e44a3
--- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsHelper.cs (.../GrassCoverErosionInwardsHelper.cs) (revision 164556e75ddc489940c96a84fd41589a4acbac80)
+++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsHelper.cs (.../GrassCoverErosionInwardsHelper.cs) (revision 686a257dd8e21e34a52b265f85ef4ac4e11e44a3)
@@ -22,12 +22,13 @@
using System.Collections.Generic;
using System.Linq;
using Core.Common.Base.Geometry;
+using Ringtoets.Common.Data.FailureMechanism;
using Ringtoets.GrassCoverErosionInwards.Data;
namespace Ringtoets.GrassCoverErosionInwards.Forms.Views
{
///
- /// Class holds a method to help .
+ /// Class holds a helper method to help .
///
public static class GrassCoverErosionInwardsHelper
{
@@ -36,7 +37,9 @@
///
/// The objects.
/// The objects.
- /// A containing a of objects for each section name which has calculations.
+ /// A containing a
+ /// of objects
+ /// for each section name which has calculations.
public static Dictionary> CollectCalculationsPerSegment(
IEnumerable sectionResults,
IEnumerable calculations)
@@ -48,49 +51,73 @@
return calculationsPerSegment;
}
- SectionSegments[] sectionSegments =
- (from sectionResult in sectionResults
- let section = sectionResult.Section
- let lineSegments = Math2D.ConvertLinePointsToLineSegments(section.Points)
- select new SectionSegments(section.Name, lineSegments)
- ).ToArray();
+ SectionSegments[] sectionSegments = MakeSectionSegments(sectionResults);
foreach (var calculation in calculations)
{
- string sectionName = FindSectionForCalculation(sectionSegments, calculation);
- if (sectionName == null)
+ FailureMechanismSection section = FindSectionForCalculation(sectionSegments, calculation);
+ if (section == null)
{
continue;
}
- UpdateCalculationsOfSegment(calculationsPerSegment, sectionName, calculation);
+ UpdateCalculationsOfSegment(calculationsPerSegment, section.Name, calculation);
}
return calculationsPerSegment;
}
- private static string FindSectionForCalculation(SectionSegments[] sectionSegmentsCollection, GrassCoverErosionInwardsCalculation calculation)
+ ///
+ /// Determine which geometrically contains the .
+ ///
+ /// The objects
+ /// whose are considered.
+ /// The .
+ /// The containing , or null.
+ public static FailureMechanismSection FailureMechanismSectionForCalculation(
+ IEnumerable sectionResults,
+ GrassCoverErosionInwardsCalculation calculation)
{
+ if (sectionResults == null || calculation == null)
+ {
+ return null;
+ }
+
+ SectionSegments[] sectionSegments = MakeSectionSegments(sectionResults);
+
+ return FindSectionForCalculation(sectionSegments, calculation);
+ }
+
+ private static SectionSegments[] MakeSectionSegments(IEnumerable sectionResults)
+ {
+ SectionSegments[] sectionSegments =
+ (from sectionResult in sectionResults
+ let section = sectionResult.Section
+ select new SectionSegments(section)
+ ).ToArray();
+ return sectionSegments;
+ }
+
+ private static FailureMechanismSection FindSectionForCalculation(SectionSegments[] sectionSegmentsCollection, GrassCoverErosionInwardsCalculation calculation)
+ {
+ var dikeProfile = calculation.InputParameters.DikeProfile;
+ if (dikeProfile == null)
+ {
+ return null;
+ }
+
var minimumDistance = double.PositiveInfinity;
- string sectionName = null;
+ FailureMechanismSection section = null;
foreach (var sectionSegments in sectionSegmentsCollection)
{
- var dikeProfile = calculation.InputParameters.DikeProfile;
- if (dikeProfile == null)
+ var distance = sectionSegments.Distance(dikeProfile.WorldReferencePoint);
+ if (distance < minimumDistance)
{
- continue;
+ minimumDistance = distance;
+ section = sectionSegments.Section;
}
-
- var distance = sectionSegments.Segments.Min(segment => segment.GetEuclideanDistanceToPoint(dikeProfile.WorldReferencePoint));
- if (!(distance < minimumDistance))
- {
- continue;
- }
-
- minimumDistance = distance;
- sectionName = sectionSegments.Name;
}
- return sectionName;
+ return section;
}
private static void UpdateCalculationsOfSegment(Dictionary> calculationsPerSegment,
@@ -104,30 +131,37 @@
}
///
- /// This class represents a named collection of objects.
+ /// This class represents the geometry of a as a collection of objects.
///
private class SectionSegments
{
+ private readonly IEnumerable segments;
+
///
/// Creates a new instance of .
///
- /// The name of a dike section.
- /// The representing the geometry of a dike section.
- public SectionSegments(string name, IEnumerable segments)
+ /// The whose
+ /// this class represents as a collection of objects.
+ public SectionSegments(FailureMechanismSection section)
{
- Name = name;
- Segments = segments;
+ Section = section;
+ segments = Math2D.ConvertLinePointsToLineSegments(section.Points);
}
///
- /// Gets the name this contains.
+ /// Gets the .
///
- public string Name { get; private set; }
+ public FailureMechanismSection Section { get; private set; }
///
- /// Gets the this contains.
+ /// Calculate the Euclidean distance between the and a .
///
- public IEnumerable Segments { get; private set; }
+ /// The .
+ /// The Euclidean distance as a .
+ public double Distance(Point2D point)
+ {
+ return segments.Min(segment => segment.GetEuclideanDistanceToPoint(point));
+ }
}
}
}
\ No newline at end of file
Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs
===================================================================
diff -u -r164556e75ddc489940c96a84fd41589a4acbac80 -r686a257dd8e21e34a52b265f85ef4ac4e11e44a3
--- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs (.../GrassCoverErosionInwardsCalculationActivity.cs) (revision 164556e75ddc489940c96a84fd41589a4acbac80)
+++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs (.../GrassCoverErosionInwardsCalculationActivity.cs) (revision 686a257dd8e21e34a52b265f85ef4ac4e11e44a3)
@@ -23,6 +23,7 @@
using System.Linq;
using Core.Common.Base.Service;
using Ringtoets.Common.Data.AssessmentSection;
+using Ringtoets.Common.Data.FailureMechanism;
using Ringtoets.Common.Service;
using Ringtoets.GrassCoverErosionInwards.Data;
using Ringtoets.GrassCoverErosionInwards.Forms.Views;
@@ -66,11 +67,9 @@
protected override void OnRun()
{
- Dictionary> calculationsPerSegmentName =
- GrassCoverErosionInwardsHelper.CollectCalculationsPerSegment(failureMechanism.SectionResults, new[]{calculation});
+ FailureMechanismSection failureMechanismSection =
+ GrassCoverErosionInwardsHelper.FailureMechanismSectionForCalculation(failureMechanism.SectionResults, calculation);
- var failureMechanismSection = failureMechanism.Sections.FirstOrDefault(section => section.Name.Equals(calculationsPerSegmentName.Keys.FirstOrDefault()));
-
PerformRun(() => GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection),
() => calculation.ClearOutput(),
() => GrassCoverErosionInwardsCalculationService.Calculate(calculation,
Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsViewHelperTest.cs
===================================================================
diff -u -r164556e75ddc489940c96a84fd41589a4acbac80 -r686a257dd8e21e34a52b265f85ef4ac4e11e44a3
--- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsViewHelperTest.cs (.../GrassCoverErosionInwardsViewHelperTest.cs) (revision 164556e75ddc489940c96a84fd41589a4acbac80)
+++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsViewHelperTest.cs (.../GrassCoverErosionInwardsViewHelperTest.cs) (revision 686a257dd8e21e34a52b265f85ef4ac4e11e44a3)
@@ -31,7 +31,6 @@
[TestFixture]
public class GrassCoverErosionInwardsViewHelperTest
{
-
private readonly GrassCoverErosionInwardsFailureMechanismSectionResult[] oneSectionResult = new[]
{
new GrassCoverErosionInwardsFailureMechanismSectionResult(
@@ -164,5 +163,89 @@
Assert.AreEqual(1, collectCalculationsPerSegment["firstSection"].Count);
Assert.AreEqual(1, collectCalculationsPerSegment["secondSection"].Count);
}
+
+ [Test]
+ public void FailureMechanismSectionForCalculation_NullParameters_Null()
+ {
+ // Call
+ var failureMechanismSection = GrassCoverErosionInwardsHelper.FailureMechanismSectionForCalculation(null, null);
+
+ // Assert
+ Assert.IsNull(failureMechanismSection);
+ }
+
+ [Test]
+ public void FailureMechanismSectionForCalculation_FirstParameterNull_Null()
+ {
+ // Setup
+ var calculation = new GrassCoverErosionInwardsCalculation();
+
+ // Call
+ var failureMechanismSection = GrassCoverErosionInwardsHelper.FailureMechanismSectionForCalculation(null, calculation);
+
+ // Assert
+ Assert.IsNull(failureMechanismSection);
+ }
+
+ [Test]
+ public void FailureMechanismSectionForCalculation_SecondParameterNull_Null()
+ {
+ // Call
+ var failureMechanismSection = GrassCoverErosionInwardsHelper.FailureMechanismSectionForCalculation(oneSectionResult, null);
+
+ // Assert
+ Assert.IsNull(failureMechanismSection);
+ }
+
+ [Test]
+ public void FailureMechanismSectionForCalculation_ValidEmptyFirstParameter_Null()
+ {
+ // Setup
+ var calculation = new GrassCoverErosionInwardsCalculation();
+
+ // Call
+ var failureMechanismSection = GrassCoverErosionInwardsHelper.FailureMechanismSectionForCalculation(oneSectionResult, calculation);
+
+ // Assert
+ Assert.IsNull(failureMechanismSection);
+ }
+
+ [Test]
+ public void FailureMechanismSectionForCalculation_FirstSectionResultContainsCalculation_FailureMechanismSectionOfFirstSectionResult()
+ {
+ // Setup
+ var calculation = new GrassCoverErosionInwardsCalculation
+ {
+ InputParameters =
+ {
+ DikeProfile = new DikeProfile(new Point2D(1.1, 2.2), new RoughnessPoint[0], new Point2D[0])
+ }
+ };
+
+ // Call
+ var failureMechanismSection = GrassCoverErosionInwardsHelper.FailureMechanismSectionForCalculation(twoSectionResults, calculation);
+
+ // Assert
+ Assert.AreSame(twoSectionResults[0].Section, failureMechanismSection);
+ }
+
+ [Test]
+ public void FailureMechanismSectionForCalculation_SecondSectionResultContainsCalculation_FailureMechanismSectionOfSecondSectionResult()
+ {
+ // Setup
+ var calculation = new GrassCoverErosionInwardsCalculation
+ {
+ InputParameters =
+ {
+ DikeProfile = new DikeProfile(new Point2D(50.0, 66.0), new RoughnessPoint[0], new Point2D[0])
+ }
+ };
+
+ // Call
+ var failureMechanismSection = GrassCoverErosionInwardsHelper.FailureMechanismSectionForCalculation(twoSectionResults, calculation);
+
+ // Assert
+ Assert.AreSame(twoSectionResults[1].Section, failureMechanismSection);
+ }
}
}
\ No newline at end of file