Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Importers/GrassCoverErosionInwardsCalculationConfigurationImporter.cs =================================================================== diff -u -raeb6e1a439617630e7613b9ed5af152c345fa2c6 -r26f49ad2e6873ad9dace912e6d40b32fd8e89e6d --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Importers/GrassCoverErosionInwardsCalculationConfigurationImporter.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporter.cs) (revision aeb6e1a439617630e7613b9ed5af152c345fa2c6) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Importers/GrassCoverErosionInwardsCalculationConfigurationImporter.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporter.cs) (revision 26f49ad2e6873ad9dace912e6d40b32fd8e89e6d) @@ -32,6 +32,7 @@ using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionInwards.IO.Properties; using Ringtoets.GrassCoverErosionInwards.IO.Readers; +using Ringtoets.GrassCoverErosionInwards.Utils; namespace Ringtoets.GrassCoverErosionInwards.IO.Importers { @@ -40,6 +41,7 @@ { private readonly IEnumerable availableHydraulicBoundaryLocations; private readonly IEnumerable availableDikeProfiles; + private readonly GrassCoverErosionInwardsFailureMechanism failureMechanism; /// /// Creates a new instance of . @@ -50,13 +52,15 @@ /// used to check if the imported objects contain the right location. /// The dike profiles used to check if /// the imported objects contain the right profile. + /// The failure mechanism used to propagate changes. /// Thrown when any parameter is /// null. public GrassCoverErosionInwardsCalculationConfigurationImporter( string xmlFilePath, CalculationGroup importTarget, IEnumerable hydraulicBoundaryLocations, - IEnumerable dikeProfiles) + IEnumerable dikeProfiles, + GrassCoverErosionInwardsFailureMechanism failureMechanism) : base(xmlFilePath, importTarget) { if (hydraulicBoundaryLocations == null) @@ -67,10 +71,24 @@ { throw new ArgumentNullException(nameof(dikeProfiles)); } + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } availableHydraulicBoundaryLocations = hydraulicBoundaryLocations; availableDikeProfiles = dikeProfiles; + this.failureMechanism = failureMechanism; } + protected override void DoPostImportUpdates() + { + GrassCoverErosionInwardsHelper.UpdateCalculationToSectionResultAssignments( + failureMechanism.SectionResults, + failureMechanism.Calculations.Cast()); + + base.DoPostImportUpdates(); + } + protected override GrassCoverErosionInwardsCalculationConfigurationReader CreateCalculationConfigurationReader(string xmlFilePath) { return new GrassCoverErosionInwardsCalculationConfigurationReader(xmlFilePath); Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Ringtoets.GrassCoverErosionInwards.IO.csproj =================================================================== diff -u -r40c3054d4339ac54e91ee80febe649f387485c6c -r26f49ad2e6873ad9dace912e6d40b32fd8e89e6d --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Ringtoets.GrassCoverErosionInwards.IO.csproj (.../Ringtoets.GrassCoverErosionInwards.IO.csproj) (revision 40c3054d4339ac54e91ee80febe649f387485c6c) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Ringtoets.GrassCoverErosionInwards.IO.csproj (.../Ringtoets.GrassCoverErosionInwards.IO.csproj) (revision 26f49ad2e6873ad9dace912e6d40b32fd8e89e6d) @@ -90,6 +90,11 @@ Ringtoets.GrassCoverErosionInwards.Data False + + {99573570-EE00-4264-8147-26A1B25DB23F} + Ringtoets.GrassCoverErosionInwards.Utils + False + Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs =================================================================== diff -u -raeb6e1a439617630e7613b9ed5af152c345fa2c6 -r26f49ad2e6873ad9dace912e6d40b32fd8e89e6d --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision aeb6e1a439617630e7613b9ed5af152c345fa2c6) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision 26f49ad2e6873ad9dace912e6d40b32fd8e89e6d) @@ -97,7 +97,8 @@ filePath, context.WrappedData, context.AvailableHydraulicBoundaryLocations, - context.AvailableDikeProfiles)); + context.AvailableDikeProfiles, + context.FailureMechanism)); yield return new ImportInfo { Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs =================================================================== diff -u -raeb6e1a439617630e7613b9ed5af152c345fa2c6 -r26f49ad2e6873ad9dace912e6d40b32fd8e89e6d --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs) (revision aeb6e1a439617630e7613b9ed5af152c345fa2c6) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs) (revision 26f49ad2e6873ad9dace912e6d40b32fd8e89e6d) @@ -28,6 +28,7 @@ using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.IO.Configurations.Import; @@ -52,7 +53,8 @@ "", new CalculationGroup(), Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Assert Assert.IsInstanceOf< @@ -69,7 +71,8 @@ "", new CalculationGroup(), null, - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Assert var exception = Assert.Throws(test); @@ -84,14 +87,31 @@ "", new CalculationGroup(), Enumerable.Empty(), - null); + null, + new GrassCoverErosionInwardsFailureMechanism()); // Assert var exception = Assert.Throws(test); Assert.AreEqual("dikeProfiles", exception.ParamName); } [Test] + public void Constructor_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => new GrassCoverErosionInwardsCalculationConfigurationImporter( + "", + new CalculationGroup(), + Enumerable.Empty(), + Enumerable.Empty(), + null); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("failureMechanism", exception.ParamName); + } + + [Test] [SetCulture("nl-NL")] public void Import_ValidConfigurationInvalidOrientation_LogMessageAndContinueImport() { @@ -106,7 +126,8 @@ new[] { new TestDikeProfile("Dijkprofiel") - }); + }, + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -132,7 +153,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -159,7 +181,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -185,7 +208,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -209,7 +233,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -233,7 +258,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -257,7 +283,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -281,7 +308,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -309,7 +337,8 @@ new[] { dikeProfile - }); + }, + new GrassCoverErosionInwardsFailureMechanism()); // Call var successful = false; @@ -342,7 +371,8 @@ new[] { dikeProfile - }); + }, + new GrassCoverErosionInwardsFailureMechanism()); // Call bool successful = importer.Import(); @@ -375,7 +405,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call bool successful = importer.Import(); @@ -411,7 +442,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call bool successful = importer.Import(); @@ -440,7 +472,8 @@ filePath, calculationGroup, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new GrassCoverErosionInwardsFailureMechanism()); // Call bool successful = importer.Import(); @@ -499,7 +532,8 @@ new[] { dikeProfile - }); + }, + new GrassCoverErosionInwardsFailureMechanism()); // Call bool successful = importer.Import(); @@ -536,6 +570,48 @@ AssertCalculation(expectedCalculation, (GrassCoverErosionInwardsCalculation) calculationGroup.Children[0]); } + [Test] + public void DoPostImport_WithNewSectionResults_AssignsCalculationToSectionResult() + { + // Setup + string filePath = Path.Combine(path, "validConfigurationFullCalculation.xml"); + var calculationGroup = new CalculationGroup(); + + var grassCoverErosionInwardsFailureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + + grassCoverErosionInwardsFailureMechanism.AddSection(new FailureMechanismSection("name", new[] + { + new Point2D(0,0), new Point2D(10,10) + })); + + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + DikeProfile = new TestDikeProfile(new Point2D(5,5)) + } + }; + grassCoverErosionInwardsFailureMechanism.CalculationsGroup.Children.Add( + calculation); + + var importer = new GrassCoverErosionInwardsCalculationConfigurationImporter( + filePath, + calculationGroup, + Enumerable.Empty(), + Enumerable.Empty(), + grassCoverErosionInwardsFailureMechanism); + + // Preconditions + Assert.AreEqual(1, grassCoverErosionInwardsFailureMechanism.SectionResults.Count()); + Assert.IsNull(grassCoverErosionInwardsFailureMechanism.SectionResults.ElementAt(0).Calculation); + + // Call + importer.DoPostImport(); + + // Assert + Assert.AreSame(calculation, grassCoverErosionInwardsFailureMechanism.SectionResults.ElementAt(0).Calculation); + } + private static void AssertCalculation(GrassCoverErosionInwardsCalculation expectedCalculation, GrassCoverErosionInwardsCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name);