Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Configurations/ClosingStructuresCalculationConfigurationImporter.cs =================================================================== diff -u -rf88343c0590cb04c7135ce141872940e59325927 -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Configurations/ClosingStructuresCalculationConfigurationImporter.cs (.../ClosingStructuresCalculationConfigurationImporter.cs) (revision f88343c0590cb04c7135ce141872940e59325927) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Configurations/ClosingStructuresCalculationConfigurationImporter.cs (.../ClosingStructuresCalculationConfigurationImporter.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Core.Common.Base.Data; using Ringtoets.ClosingStructures.Data; using Ringtoets.ClosingStructures.IO.Configurations.Helpers; @@ -31,6 +32,7 @@ using Ringtoets.Common.IO.Configurations; using Ringtoets.Common.IO.Configurations.Helpers; using Ringtoets.Common.IO.Configurations.Import; +using Ringtoets.Common.Utils; using RingtoetsCommonIOResources = Ringtoets.Common.IO.Properties.Resources; namespace Ringtoets.ClosingStructures.IO.Configurations @@ -45,6 +47,7 @@ private readonly IEnumerable availableHydraulicBoundaryLocations; private readonly IEnumerable availableForeshoreProfiles; private readonly IEnumerable availableStructures; + private readonly ClosingStructuresFailureMechanism failureMechanism; /// /// Create new instance of @@ -57,13 +60,15 @@ /// the imported objects contain the right foreshore profile. /// The structures used to check if /// the imported objects contain the right structure. + /// The failure mechanism used to propagate changes. /// Thrown when any parameter is null. public ClosingStructuresCalculationConfigurationImporter( string xmlFilePath, CalculationGroup importTarget, IEnumerable hydraulicBoundaryLocations, IEnumerable foreshoreProfiles, - IEnumerable structures) + IEnumerable structures, + ClosingStructuresFailureMechanism failureMechanism) : base(xmlFilePath, importTarget) { if (hydraulicBoundaryLocations == null) @@ -78,11 +83,25 @@ { throw new ArgumentNullException(nameof(structures)); } + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } availableHydraulicBoundaryLocations = hydraulicBoundaryLocations; availableForeshoreProfiles = foreshoreProfiles; availableStructures = structures; + this.failureMechanism = failureMechanism; } + protected override void DoPostImportUpdates() + { + StructuresHelper.UpdateCalculationToSectionResultAssignments( + failureMechanism.SectionResults, + failureMechanism.Calculations.Cast>()); + + base.DoPostImportUpdates(); + } + protected override ClosingStructuresCalculationConfigurationReader CreateCalculationConfigurationReader(string xmlFilePath) { return new ClosingStructuresCalculationConfigurationReader(xmlFilePath); Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Ringtoets.ClosingStructures.IO.csproj =================================================================== diff -u -r0bae0773243658d37a619b2904879e11c6aebe82 -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Ringtoets.ClosingStructures.IO.csproj (.../Ringtoets.ClosingStructures.IO.csproj) (revision 0bae0773243658d37a619b2904879e11c6aebe82) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Ringtoets.ClosingStructures.IO.csproj (.../Ringtoets.ClosingStructures.IO.csproj) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -87,6 +87,11 @@ Ringtoets.Common.IO False + + {6A074D65-A81C-4C1C-8E24-F36C916E4ED7} + Ringtoets.Common.Utils + False + {C6309704-D67B-434C-BC98-9F8910BC1D10} Ringtoets.ClosingStructures.Data Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs =================================================================== diff -u -ra70cb733eb761229173777b9f6cd1b977830b24b -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs (.../ClosingStructuresPlugin.cs) (revision a70cb733eb761229173777b9f6cd1b977830b24b) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs (.../ClosingStructuresPlugin.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -208,7 +208,8 @@ context.WrappedData, context.AvailableHydraulicBoundaryLocations, context.AvailableForeshoreProfiles, - context.AvailableStructures)); + context.AvailableStructures, + context.FailureMechanism)); } public override IEnumerable GetExportInfos() Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.IO.Test/Configurations/ClosingStructuresCalculationConfigurationImporterTest.cs =================================================================== diff -u -rf88343c0590cb04c7135ce141872940e59325927 -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.IO.Test/Configurations/ClosingStructuresCalculationConfigurationImporterTest.cs (.../ClosingStructuresCalculationConfigurationImporterTest.cs) (revision f88343c0590cb04c7135ce141872940e59325927) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.IO.Test/Configurations/ClosingStructuresCalculationConfigurationImporterTest.cs (.../ClosingStructuresCalculationConfigurationImporterTest.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -32,6 +32,7 @@ using Ringtoets.ClosingStructures.IO.Configurations; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; @@ -215,7 +216,8 @@ new CalculationGroup(), Enumerable.Empty(), Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new ClosingStructuresFailureMechanism()); // Assert Assert.IsInstanceOf>(importer); @@ -229,7 +231,8 @@ new CalculationGroup(), null, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new ClosingStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); @@ -244,7 +247,8 @@ new CalculationGroup(), Enumerable.Empty(), null, - Enumerable.Empty()); + Enumerable.Empty(), + new ClosingStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); @@ -259,14 +263,31 @@ new CalculationGroup(), Enumerable.Empty(), Enumerable.Empty(), - null); + null, + new ClosingStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); Assert.AreEqual("structures", exception.ParamName); } [Test] + public void Constructor_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => new ClosingStructuresCalculationConfigurationImporter("", + new CalculationGroup(), + Enumerable.Empty(), + Enumerable.Empty(), + Enumerable.Empty(), + null); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("failureMechanism", exception.ParamName); + } + + [Test] [SetCulture("nl-NL")] [TestCaseSource(nameof(ValidConfigurationInvalidData))] public void Import_ValidConfigurationInvalidData_LogMessageAndContinueImport(string file, string expectedErrorMessage) @@ -288,7 +309,8 @@ new ClosingStructure[] { structure - }); + }, + new ClosingStructuresFailureMechanism()); var successful = false; // Call @@ -317,7 +339,8 @@ { foreshoreProfile }, - Enumerable.Empty()); + Enumerable.Empty(), + new ClosingStructuresFailureMechanism()); var successful = false; @@ -358,7 +381,8 @@ new[] { structure - }); + }, + new ClosingStructuresFailureMechanism()); // Call bool successful = importer.Import(); @@ -468,7 +492,8 @@ new[] { structure - }); + }, + new ClosingStructuresFailureMechanism()); var expectedCalculation = new StructuresCalculation { @@ -552,7 +577,8 @@ new[] { structure - }); + }, + new ClosingStructuresFailureMechanism()); var expectedCalculation = new StructuresCalculation { @@ -628,7 +654,8 @@ new[] { structure - }); + }, + new ClosingStructuresFailureMechanism()); var expectedCalculation = new StructuresCalculation { @@ -661,7 +688,8 @@ calculationGroup, Enumerable.Empty(), Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new ClosingStructuresFailureMechanism()); var successful = false; // Call @@ -674,6 +702,50 @@ CollectionAssert.IsEmpty(calculationGroup.Children); } + [Test] + public void DoPostImport_WithNewSectionResults_AssignsCalculationToSectionResult() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationFullCalculation.xml"); + var calculationGroup = new CalculationGroup(); + + var failureMechanism = new ClosingStructuresFailureMechanism(); + + failureMechanism.AddSection(new FailureMechanismSection("name", new[] + { + new Point2D(0, 0), + new Point2D(10, 10) + })); + + var calculation = new StructuresCalculation + { + InputParameters = + { + Structure = new TestClosingStructure(new Point2D(5, 5)) + } + }; + failureMechanism.CalculationsGroup.Children.Add( + calculation); + + var importer = new ClosingStructuresCalculationConfigurationImporter( + filePath, + calculationGroup, + Enumerable.Empty(), + Enumerable.Empty(), + Enumerable.Empty(), + failureMechanism); + + // Preconditions + Assert.AreEqual(1, failureMechanism.SectionResults.Count()); + Assert.IsNull(failureMechanism.SectionResults.ElementAt(0).Calculation); + + // Call + importer.DoPostImport(); + + // Assert + Assert.AreSame(calculation, failureMechanism.SectionResults.ElementAt(0).Calculation); + } + private static void AssertCalculation(StructuresCalculation expectedCalculation, StructuresCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs =================================================================== diff -u -r26f49ad2e6873ad9dace912e6d40b32fd8e89e6d -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs) (revision 26f49ad2e6873ad9dace912e6d40b32fd8e89e6d) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -577,9 +577,9 @@ string filePath = Path.Combine(path, "validConfigurationFullCalculation.xml"); var calculationGroup = new CalculationGroup(); - var grassCoverErosionInwardsFailureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); - grassCoverErosionInwardsFailureMechanism.AddSection(new FailureMechanismSection("name", new[] + failureMechanism.AddSection(new FailureMechanismSection("name", new[] { new Point2D(0,0), new Point2D(10,10) })); @@ -591,25 +591,25 @@ DikeProfile = new TestDikeProfile(new Point2D(5,5)) } }; - grassCoverErosionInwardsFailureMechanism.CalculationsGroup.Children.Add( + failureMechanism.CalculationsGroup.Children.Add( calculation); var importer = new GrassCoverErosionInwardsCalculationConfigurationImporter( filePath, calculationGroup, Enumerable.Empty(), Enumerable.Empty(), - grassCoverErosionInwardsFailureMechanism); + failureMechanism); // Preconditions - Assert.AreEqual(1, grassCoverErosionInwardsFailureMechanism.SectionResults.Count()); - Assert.IsNull(grassCoverErosionInwardsFailureMechanism.SectionResults.ElementAt(0).Calculation); + Assert.AreEqual(1, failureMechanism.SectionResults.Count()); + Assert.IsNull(failureMechanism.SectionResults.ElementAt(0).Calculation); // Call importer.DoPostImport(); // Assert - Assert.AreSame(calculation, grassCoverErosionInwardsFailureMechanism.SectionResults.ElementAt(0).Calculation); + Assert.AreSame(calculation, failureMechanism.SectionResults.ElementAt(0).Calculation); } private static void AssertCalculation(GrassCoverErosionInwardsCalculation expectedCalculation, GrassCoverErosionInwardsCalculation actualCalculation) Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/Configurations/HeightStructuresCalculationConfigurationImporter.cs =================================================================== diff -u -r4bf59bb3506b840b284efe0c0f4431b7876e0e5b -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/Configurations/HeightStructuresCalculationConfigurationImporter.cs (.../HeightStructuresCalculationConfigurationImporter.cs) (revision 4bf59bb3506b840b284efe0c0f4431b7876e0e5b) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/Configurations/HeightStructuresCalculationConfigurationImporter.cs (.../HeightStructuresCalculationConfigurationImporter.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Core.Common.Base.Data; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; @@ -29,6 +30,7 @@ using Ringtoets.Common.IO.Configurations; using Ringtoets.Common.IO.Configurations.Helpers; using Ringtoets.Common.IO.Configurations.Import; +using Ringtoets.Common.Utils; using Ringtoets.HeightStructures.Data; using RingtoetsCommonIOResources = Ringtoets.Common.IO.Properties.Resources; @@ -44,6 +46,7 @@ private readonly IEnumerable availableHydraulicBoundaryLocations; private readonly IEnumerable availableForeshoreProfiles; private readonly IEnumerable availableStructures; + private readonly HeightStructuresFailureMechanism failureMechanism; /// /// Create new instance of @@ -56,13 +59,15 @@ /// the imported objects contain the right foreshore profile. /// The structures used to check if /// the imported objects contain the right structure. + /// The failure mechanism used to propagate changes. /// Thrown when any parameter is null. public HeightStructuresCalculationConfigurationImporter( string xmlFilePath, CalculationGroup importTarget, IEnumerable hydraulicBoundaryLocations, IEnumerable foreshoreProfiles, - IEnumerable structures) + IEnumerable structures, + HeightStructuresFailureMechanism failureMechanism) : base(xmlFilePath, importTarget) { if (hydraulicBoundaryLocations == null) @@ -77,11 +82,25 @@ { throw new ArgumentNullException(nameof(structures)); } + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } availableHydraulicBoundaryLocations = hydraulicBoundaryLocations; availableForeshoreProfiles = foreshoreProfiles; availableStructures = structures; + this.failureMechanism = failureMechanism; } + protected override void DoPostImportUpdates() + { + StructuresHelper.UpdateCalculationToSectionResultAssignments( + failureMechanism.SectionResults, + failureMechanism.Calculations.Cast>()); + + base.DoPostImportUpdates(); + } + protected override HeightStructuresCalculationConfigurationReader CreateCalculationConfigurationReader(string xmlFilePath) { return new HeightStructuresCalculationConfigurationReader(xmlFilePath); Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/Ringtoets.HeightStructures.IO.csproj =================================================================== diff -u -r8aeff3f1153aaac2b2980ca207e298b6d764947b -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/Ringtoets.HeightStructures.IO.csproj (.../Ringtoets.HeightStructures.IO.csproj) (revision 8aeff3f1153aaac2b2980ca207e298b6d764947b) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/Ringtoets.HeightStructures.IO.csproj (.../Ringtoets.HeightStructures.IO.csproj) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -85,6 +85,11 @@ Ringtoets.Common.IO False + + {6A074D65-A81C-4C1C-8E24-F36C916E4ED7} + Ringtoets.Common.Utils + False + {1C0017D8-35B5-4CA0-8FC7-A83F46DBDC99} Ringtoets.HeightStructures.Data Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs =================================================================== diff -u -ra70cb733eb761229173777b9f6cd1b977830b24b -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs (.../HeightStructuresPlugin.cs) (revision a70cb733eb761229173777b9f6cd1b977830b24b) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs (.../HeightStructuresPlugin.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -100,7 +100,8 @@ context.WrappedData, context.AvailableHydraulicBoundaryLocations, context.AvailableForeshoreProfiles, - context.AvailableStructures)); + context.AvailableStructures, + context.FailureMechanism)); } public override IEnumerable GetExportInfos() Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.IO.Test/Configurations/HeightStructuresCalculationConfigurationImporterTest.cs =================================================================== diff -u -r4bf59bb3506b840b284efe0c0f4431b7876e0e5b -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.IO.Test/Configurations/HeightStructuresCalculationConfigurationImporterTest.cs (.../HeightStructuresCalculationConfigurationImporterTest.cs) (revision 4bf59bb3506b840b284efe0c0f4431b7876e0e5b) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.IO.Test/Configurations/HeightStructuresCalculationConfigurationImporterTest.cs (.../HeightStructuresCalculationConfigurationImporterTest.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -29,6 +29,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.Structures; using Ringtoets.Common.Data.TestUtil; @@ -159,7 +160,8 @@ new CalculationGroup(), Enumerable.Empty(), Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new HeightStructuresFailureMechanism()); // Assert Assert.IsInstanceOf>(importer); @@ -173,7 +175,8 @@ new CalculationGroup(), null, Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new HeightStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); @@ -188,7 +191,8 @@ new CalculationGroup(), Enumerable.Empty(), null, - Enumerable.Empty()); + Enumerable.Empty(), + new HeightStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); @@ -203,14 +207,31 @@ new CalculationGroup(), Enumerable.Empty(), Enumerable.Empty(), - null); + null, + new HeightStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); Assert.AreEqual("structures", exception.ParamName); } [Test] + public void Constructor_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => new HeightStructuresCalculationConfigurationImporter("", + new CalculationGroup(), + Enumerable.Empty(), + Enumerable.Empty(), + Enumerable.Empty(), + null); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("failureMechanism", exception.ParamName); + } + + [Test] [SetCulture("nl-NL")] [TestCaseSource(nameof(ValidConfigurationInvalidData))] public void Import_ValidConfigurationInvalidData_LogMessageAndContinueImport(string file, string expectedErrorMessage) @@ -232,7 +253,8 @@ new HeightStructure[] { structure - }); + }, + new HeightStructuresFailureMechanism()); var successful = false; // Call @@ -261,7 +283,8 @@ { foreshoreProfile }, - Enumerable.Empty()); + Enumerable.Empty(), + new HeightStructuresFailureMechanism()); var successful = false; @@ -302,7 +325,8 @@ new[] { structure - }); + }, + new HeightStructuresFailureMechanism()); // Call bool successful = importer.Import(); @@ -387,7 +411,8 @@ new[] { structure - }); + }, + new HeightStructuresFailureMechanism()); var expectedCalculation = new StructuresCalculation { @@ -455,7 +480,8 @@ new[] { structure - }); + }, + new HeightStructuresFailureMechanism()); var expectedCalculation = new StructuresCalculation { @@ -519,7 +545,8 @@ new[] { structure - }); + }, + new HeightStructuresFailureMechanism()); var expectedCalculation = new StructuresCalculation { @@ -552,7 +579,8 @@ calculationGroup, Enumerable.Empty(), Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new HeightStructuresFailureMechanism()); var successful = false; // Call @@ -565,6 +593,50 @@ CollectionAssert.IsEmpty(calculationGroup.Children); } + [Test] + public void DoPostImport_WithNewSectionResults_AssignsCalculationToSectionResult() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationFullCalculation.xml"); + var calculationGroup = new CalculationGroup(); + + var failureMechanism = new HeightStructuresFailureMechanism(); + + failureMechanism.AddSection(new FailureMechanismSection("name", new[] + { + new Point2D(0, 0), + new Point2D(10, 10) + })); + + var calculation = new StructuresCalculation + { + InputParameters = + { + Structure = new TestHeightStructure(new Point2D(5, 5)) + } + }; + failureMechanism.CalculationsGroup.Children.Add( + calculation); + + var importer = new HeightStructuresCalculationConfigurationImporter( + filePath, + calculationGroup, + Enumerable.Empty(), + Enumerable.Empty(), + Enumerable.Empty(), + failureMechanism); + + // Preconditions + Assert.AreEqual(1, failureMechanism.SectionResults.Count()); + Assert.IsNull(failureMechanism.SectionResults.ElementAt(0).Calculation); + + // Call + importer.DoPostImport(); + + // Assert + Assert.AreSame(calculation, failureMechanism.SectionResults.ElementAt(0).Calculation); + } + private static void AssertCalculation(StructuresCalculation expectedCalculation, StructuresCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Configurations/StabilityPointStructuresCalculationConfigurationImporter.cs =================================================================== diff -u -rff948d4633181ead2677ab35467a93b4118c6751 -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Configurations/StabilityPointStructuresCalculationConfigurationImporter.cs (.../StabilityPointStructuresCalculationConfigurationImporter.cs) (revision ff948d4633181ead2677ab35467a93b4118c6751) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Configurations/StabilityPointStructuresCalculationConfigurationImporter.cs (.../StabilityPointStructuresCalculationConfigurationImporter.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Core.Common.Base.Data; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; @@ -29,6 +30,7 @@ using Ringtoets.Common.IO.Configurations; using Ringtoets.Common.IO.Configurations.Helpers; using Ringtoets.Common.IO.Configurations.Import; +using Ringtoets.Common.Utils; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityPointStructures.IO.Configurations.Helpers; using Ringtoets.StabilityPointStructures.IO.Properties; @@ -48,6 +50,7 @@ private readonly IEnumerable availableHydraulicBoundaryLocations; private readonly IEnumerable availableForeshoreProfiles; private readonly IEnumerable availableStructures; + private readonly StabilityPointStructuresFailureMechanism failureMechanism; /// /// Create new instance of @@ -60,13 +63,15 @@ /// the imported objects contain the right foreshore profile. /// The structures used to check if /// the imported objects contain the right structure. + /// The failure mechanism used to propagate changes. /// Thrown when any input parameter is null. public StabilityPointStructuresCalculationConfigurationImporter( string xmlFilePath, CalculationGroup importTarget, IEnumerable hydraulicBoundaryLocations, IEnumerable foreshoreProfiles, - IEnumerable structures) + IEnumerable structures, + StabilityPointStructuresFailureMechanism failureMechanism) : base(xmlFilePath, importTarget) { if (hydraulicBoundaryLocations == null) @@ -81,11 +86,25 @@ { throw new ArgumentNullException(nameof(structures)); } + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } availableHydraulicBoundaryLocations = hydraulicBoundaryLocations; availableForeshoreProfiles = foreshoreProfiles; availableStructures = structures; + this.failureMechanism = failureMechanism; } + protected override void DoPostImportUpdates() + { + StructuresHelper.UpdateCalculationToSectionResultAssignments( + failureMechanism.SectionResults, + failureMechanism.Calculations.Cast>()); + + base.DoPostImportUpdates(); + } + protected override StabilityPointStructuresCalculationConfigurationReader CreateCalculationConfigurationReader( string xmlFilePath) { Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Ringtoets.StabilityPointStructures.IO.csproj =================================================================== diff -u -r323b299469a1843413b9a759550db13a2b1a91e9 -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Ringtoets.StabilityPointStructures.IO.csproj (.../Ringtoets.StabilityPointStructures.IO.csproj) (revision 323b299469a1843413b9a759550db13a2b1a91e9) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Ringtoets.StabilityPointStructures.IO.csproj (.../Ringtoets.StabilityPointStructures.IO.csproj) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -89,6 +89,11 @@ Ringtoets.Common.IO False + + {6A074D65-A81C-4C1C-8E24-F36C916E4ED7} + Ringtoets.Common.Utils + False + {3D4B9740-8348-4434-8D77-B611FC6EE57F} Ringtoets.StabilityPointStructures.Data Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs =================================================================== diff -u -ra70cb733eb761229173777b9f6cd1b977830b24b -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs (.../StabilityPointStructuresPlugin.cs) (revision a70cb733eb761229173777b9f6cd1b977830b24b) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs (.../StabilityPointStructuresPlugin.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -204,7 +204,8 @@ context.WrappedData, context.AvailableHydraulicBoundaryLocations, context.AvailableForeshoreProfiles, - context.AvailableStructures)); + context.AvailableStructures, + context.FailureMechanism)); } public override IEnumerable GetExportInfos() Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Configurations/StabilityPointStructuresCalculationConfigurationImporterTest.cs =================================================================== diff -u -rff948d4633181ead2677ab35467a93b4118c6751 -rf4c28926da2401b1fddbbe7f907fd663f0f5f4dc --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Configurations/StabilityPointStructuresCalculationConfigurationImporterTest.cs (.../StabilityPointStructuresCalculationConfigurationImporterTest.cs) (revision ff948d4633181ead2677ab35467a93b4118c6751) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Configurations/StabilityPointStructuresCalculationConfigurationImporterTest.cs (.../StabilityPointStructuresCalculationConfigurationImporterTest.cs) (revision f4c28926da2401b1fddbbe7f907fd663f0f5f4dc) @@ -29,6 +29,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.Structures; using Ringtoets.Common.Data.TestUtil; @@ -478,7 +479,8 @@ new CalculationGroup(), Enumerable.Empty(), Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new StabilityPointStructuresFailureMechanism()); // Assert Assert.IsInstanceOf(), - Enumerable.Empty()); + Enumerable.Empty(), + new StabilityPointStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); @@ -508,7 +511,8 @@ new CalculationGroup(), Enumerable.Empty(), null, - Enumerable.Empty()); + Enumerable.Empty(), + new StabilityPointStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); @@ -523,14 +527,31 @@ new CalculationGroup(), Enumerable.Empty(), Enumerable.Empty(), - null); + null, + new StabilityPointStructuresFailureMechanism()); // Assert var exception = Assert.Throws(test); Assert.AreEqual("structures", exception.ParamName); } [Test] + public void Constructor_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => new StabilityPointStructuresCalculationConfigurationImporter("", + new CalculationGroup(), + Enumerable.Empty(), + Enumerable.Empty(), + Enumerable.Empty(), + null); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("failureMechanism", exception.ParamName); + } + + [Test] [SetCulture("nl-NL")] [TestCaseSource(nameof(ValidConfigurationInvalidData))] public void Import_ValidConfigurationInvalidData_LogMessageAndContinueImport(string file, string expectedErrorMessage) @@ -553,7 +574,8 @@ new StabilityPointStructure[] { structure - }); + }, + new StabilityPointStructuresFailureMechanism()); var successful = false; // Call @@ -582,7 +604,8 @@ { foreshoreProfile }, - Enumerable.Empty()); + Enumerable.Empty(), + new StabilityPointStructuresFailureMechanism()); var successful = false; @@ -614,7 +637,8 @@ { structure, new TestStabilityPointStructure("other structure") - }); + }, + new StabilityPointStructuresFailureMechanism()); // Call bool successful = importer.Import(); @@ -739,7 +763,8 @@ { structure, new TestStabilityPointStructure("other structure") - }); + }, + new StabilityPointStructuresFailureMechanism()); // Call bool successful = importer.Import(); @@ -851,7 +876,8 @@ new[] { structure - }); + }, + new StabilityPointStructuresFailureMechanism()); var expectedCalculation = new StructuresCalculation { @@ -897,7 +923,8 @@ { structure, new TestStabilityPointStructure("other structure") - }); + }, + new StabilityPointStructuresFailureMechanism()); // Call bool successful = importer.Import(); @@ -1059,7 +1086,8 @@ new[] { structure - }); + }, + new StabilityPointStructuresFailureMechanism()); // Call bool successful = importer.Import(); @@ -1093,7 +1121,8 @@ calculationGroup, Enumerable.Empty(), Enumerable.Empty(), - Enumerable.Empty()); + Enumerable.Empty(), + new StabilityPointStructuresFailureMechanism()); var successful = false; // Call @@ -1106,6 +1135,50 @@ CollectionAssert.IsEmpty(calculationGroup.Children); } + [Test] + public void DoPostImport_WithNewSectionResults_AssignsCalculationToSectionResult() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationFullCalculation.xml"); + var calculationGroup = new CalculationGroup(); + + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + failureMechanism.AddSection(new FailureMechanismSection("name", new[] + { + new Point2D(0, 0), + new Point2D(10, 10) + })); + + var calculation = new StructuresCalculation + { + InputParameters = + { + Structure = new TestStabilityPointStructure(new Point2D(5, 5)) + } + }; + failureMechanism.CalculationsGroup.Children.Add( + calculation); + + var importer = new StabilityPointStructuresCalculationConfigurationImporter( + filePath, + calculationGroup, + Enumerable.Empty(), + Enumerable.Empty(), + Enumerable.Empty(), + failureMechanism); + + // Preconditions + Assert.AreEqual(1, failureMechanism.SectionResults.Count()); + Assert.IsNull(failureMechanism.SectionResults.ElementAt(0).Calculation); + + // Call + importer.DoPostImport(); + + // Assert + Assert.AreSame(calculation, failureMechanism.SectionResults.ElementAt(0).Calculation); + } + private static void AssertCalculation(StructuresCalculation expectedCalculation, StructuresCalculation actualCalculation) {