Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Ringtoets.Integration.Forms.csproj =================================================================== diff -u -r37f9e2aae011fa8e80cf2e8f9de409cd6a25574a -r404fc8eb6e1ff688c90e2d45f735793a538c5c85 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Ringtoets.Integration.Forms.csproj (.../Ringtoets.Integration.Forms.csproj) (revision 37f9e2aae011fa8e80cf2e8f9de409cd6a25574a) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Ringtoets.Integration.Forms.csproj (.../Ringtoets.Integration.Forms.csproj) (revision 404fc8eb6e1ff688c90e2d45f735793a538c5c85) @@ -228,6 +228,11 @@ Ringtoets.GrassCoverErosionInwards.Data False + + {E7225477-577F-4A17-B7EC-6721158E1543} + Ringtoets.GrassCoverErosionOutwards.Data + False + {1C0017D8-35B5-4CA0-8FC7-A83F46DBDC99} Ringtoets.HeightStructures.Data Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs =================================================================== diff -u -rebf9ee4894ed003e5756d9c56be1489d54e57695 -r404fc8eb6e1ff688c90e2d45f735793a538c5c85 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs (.../FailureMechanismContributionView.cs) (revision ebf9ee4894ed003e5756d9c56be1489d54e57695) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs (.../FailureMechanismContributionView.cs) (revision 404fc8eb6e1ff688c90e2d45f735793a538c5c85) @@ -33,6 +33,7 @@ using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Contribution; using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.Integration.Service; using CoreCommonBaseResources = Core.Common.Base.Properties.Resources; using CommonGuiResources = Core.Common.Gui.Properties.Resources; @@ -298,9 +299,14 @@ if (assessmentSection.HydraulicBoundaryDatabase != null) { - bool hydraulicBoundaryLocationAffected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection); + var grassCoverErosionOutwardsFailureMechanism = (GrassCoverErosionOutwardsFailureMechanism)assessmentSection.GetFailureMechanisms() + .First(fm => fm.GetType() == typeof(GrassCoverErosionOutwardsFailureMechanism)); + + bool hydraulicBoundaryLocationAffected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, grassCoverErosionOutwardsFailureMechanism); if (hydraulicBoundaryLocationAffected) { + grassCoverErosionOutwardsFailureMechanism.GrassCoverErosionOutwardsHydraulicBoundaryLocations.NotifyObservers(); + assessmentSection.HydraulicBoundaryDatabase.NotifyObservers(); log.Info(RingtoetsIntegrationFormsResources.FailureMechanismContributionView_NormValueChanged_Waveheight_and_design_water_level_results_cleared); } Index: Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs =================================================================== diff -u -rebf9ee4894ed003e5756d9c56be1489d54e57695 -r404fc8eb6e1ff688c90e2d45f735793a538c5c85 --- Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs (.../RingtoetsDataSynchronizationService.cs) (revision ebf9ee4894ed003e5756d9c56be1489d54e57695) +++ Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs (.../RingtoetsDataSynchronizationService.cs) (revision 404fc8eb6e1ff688c90e2d45f735793a538c5c85) @@ -123,29 +123,22 @@ /// Clears the output of the hydraulic boundary locations within the . /// /// The wich contains the locations. - /// The which contains the locations of the failure mechanisms. + /// The which contains the locations. /// true when one or multiple locations are affected by clearing the output. false otherwise. /// Thrown when is null. - public static bool ClearHydraulicBoundaryLocationOutput(HydraulicBoundaryDatabase hydraulicBoundaryDatabase, IAssessmentSection assessmentSection) + public static bool ClearHydraulicBoundaryLocationOutput(HydraulicBoundaryDatabase hydraulicBoundaryDatabase, GrassCoverErosionOutwardsFailureMechanism failureMechanism) { if (hydraulicBoundaryDatabase == null) { throw new ArgumentNullException("hydraulicBoundaryDatabase"); } - if (assessmentSection == null) + if (failureMechanism == null) { - throw new ArgumentNullException("assessmentSection"); + throw new ArgumentNullException("failureMechanism"); } - var locationsAffected = false; + var locationsAffected = GrassCoverErosionOutwardsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(failureMechanism.GrassCoverErosionOutwardsHydraulicBoundaryLocations); - var failureMechanism = assessmentSection.GetFailureMechanisms().First(fm => fm.GetType() == typeof(GrassCoverErosionOutwardsFailureMechanism)) as GrassCoverErosionOutwardsFailureMechanism; - - if (failureMechanism != null) - { - locationsAffected = GrassCoverErosionOutwardsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(failureMechanism.GrassCoverErosionOutwardsHydraulicBoundaryLocations); - } - foreach (var hydraulicBoundaryLocation in hydraulicBoundaryDatabase.Locations .Where(hydraulicBoundaryLocation => !double.IsNaN(hydraulicBoundaryLocation.DesignWaterLevel) || Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/FailureMechanismContributionViewIntegrationTest.cs =================================================================== diff -u -r3d995a76fbe93cf9801596e6b959e7f5bcde5805 -r404fc8eb6e1ff688c90e2d45f735793a538c5c85 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/FailureMechanismContributionViewIntegrationTest.cs (.../FailureMechanismContributionViewIntegrationTest.cs) (revision 3d995a76fbe93cf9801596e6b959e7f5bcde5805) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/FailureMechanismContributionViewIntegrationTest.cs (.../FailureMechanismContributionViewIntegrationTest.cs) (revision 404fc8eb6e1ff688c90e2d45f735793a538c5c85) @@ -33,6 +33,7 @@ using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Data.TestUtil; using Ringtoets.GrassCoverErosionInwards.Data; +using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.HeightStructures.Data; using Ringtoets.HydraRing.Data; using Ringtoets.Integration.Data; @@ -56,34 +57,42 @@ var waveHeight = (RoundedDouble) 3.0; var designWaterLevel = (RoundedDouble) 4.2; - HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); - hydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "test", 0.0, 0.0) + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 0.0, 0.0) { WaveHeight = waveHeight, DesignWaterLevel = designWaterLevel - }); + }; + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + hydraulicBoundaryDatabase.Locations.Add(hydraulicBoundaryLocation); - AssessmentSection assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { HydraulicBoundaryDatabase = hydraulicBoundaryDatabase }; - PipingCalculation emptyPipingCalculation = new PipingCalculation(new GeneralPipingInput()); - PipingCalculation pipingCalculation = new PipingCalculation(new GeneralPipingInput()) + var emptyPipingCalculation = new PipingCalculation(new GeneralPipingInput()); + var pipingCalculation = new PipingCalculation(new GeneralPipingInput()) { Output = new TestPipingOutput() }; - GrassCoverErosionInwardsCalculation emptyGrassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation(); - GrassCoverErosionInwardsCalculation grassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation + var emptyGrassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation(); + var grassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation { Output = new GrassCoverErosionInwardsOutput(0, false, new ProbabilityAssessmentOutput(0, 0, 0, 0, 0), 0) }; - HeightStructuresCalculation emptyHeightStructuresCalculation = new HeightStructuresCalculation(); - HeightStructuresCalculation heightStructuresCalculation = new HeightStructuresCalculation + var emptyHeightStructuresCalculation = new HeightStructuresCalculation(); + var heightStructuresCalculation = new HeightStructuresCalculation { Output = new ProbabilityAssessmentOutput(0, 0, 0, 0, 0) }; + var grassCoverErosionOutwardsHydraulicBoundaryLocation = new GrassCoverErosionOutwardsHydraulicBoundaryLocation(hydraulicBoundaryLocation) + { + WaveHeight = waveHeight, + DesignWaterLevel = designWaterLevel + }; + assessmentSection.GrassCoverErosionOutwards.GrassCoverErosionOutwardsHydraulicBoundaryLocations.Add(grassCoverErosionOutwardsHydraulicBoundaryLocation); + assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(emptyPipingCalculation); assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(pipingCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(emptyGrassCoverErosionInwardsCalculation); @@ -100,6 +109,8 @@ calculationObserver.Expect(co => co.UpdateObserver()).Repeat.Times(numberOfCalculations); IObserver hydraulicBoundaryDatabaseObserver = mockRepository.StrictMock(); hydraulicBoundaryDatabaseObserver.Expect(hbdo => hbdo.UpdateObserver()); + IObserver grassCoverErosionOutwardsObserver = mockRepository.StrictMock(); + grassCoverErosionOutwardsObserver.Expect(o => o.UpdateObserver()); mockRepository.ReplayAll(); failureMechanismContribution.Attach(observerMock); @@ -113,8 +124,10 @@ grassCoverErosionInwardsCalculation.Attach(calculationObserver); heightStructuresCalculation.Attach(calculationObserver); - using (Form form = new Form()) - using (FailureMechanismContributionView distributionView = new FailureMechanismContributionView + assessmentSection.GrassCoverErosionOutwards.GrassCoverErosionOutwardsHydraulicBoundaryLocations.Attach(grassCoverErosionOutwardsObserver); + + using (var form = new Form()) + using (var distributionView = new FailureMechanismContributionView { Data = failureMechanismContribution, AssessmentSection = assessmentSection @@ -123,14 +136,15 @@ form.Controls.Add(distributionView); form.Show(); - ControlTester normTester = new ControlTester("normInput"); + var normTester = new ControlTester("normInput"); - HydraulicBoundaryLocation hydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations[0]; - // Precondition Assert.AreEqual(failureMechanismContribution.Norm.ToString(), normTester.Text); Assert.AreEqual(waveHeight, hydraulicBoundaryLocation.WaveHeight, hydraulicBoundaryLocation.WaveHeight.GetAccuracy()); Assert.AreEqual(designWaterLevel, hydraulicBoundaryLocation.DesignWaterLevel, hydraulicBoundaryLocation.DesignWaterLevel.GetAccuracy()); + Assert.AreEqual(waveHeight, grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeight, grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeight.GetAccuracy()); + Assert.AreEqual(designWaterLevel, grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevel, grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevel.GetAccuracy()); + Assert.IsNotNull(pipingCalculation.Output); Assert.IsNotNull(grassCoverErosionInwardsCalculation.Output); Assert.IsNotNull(heightStructuresCalculation.Output); @@ -148,6 +162,8 @@ Assert.AreEqual(normValue, failureMechanismContribution.Norm); Assert.IsNaN(hydraulicBoundaryLocation.WaveHeight); Assert.IsNaN(hydraulicBoundaryLocation.DesignWaterLevel); + Assert.IsNaN(grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeight); + Assert.IsNaN(grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevel); Assert.IsNull(pipingCalculation.Output); Assert.IsNull(grassCoverErosionInwardsCalculation.Output); Assert.IsNull(heightStructuresCalculation.Output); Index: Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/RingtoetsDataSynchronizationServiceTest.cs =================================================================== diff -u -rebf9ee4894ed003e5756d9c56be1489d54e57695 -r404fc8eb6e1ff688c90e2d45f735793a538c5c85 --- Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/RingtoetsDataSynchronizationServiceTest.cs (.../RingtoetsDataSynchronizationServiceTest.cs) (revision ebf9ee4894ed003e5756d9c56be1489d54e57695) +++ Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/RingtoetsDataSynchronizationServiceTest.cs (.../RingtoetsDataSynchronizationServiceTest.cs) (revision 404fc8eb6e1ff688c90e2d45f735793a538c5c85) @@ -396,10 +396,10 @@ public void ClearHydraulicBoundaryLocationOutput_HydraulicBoundaryDatabaseNull_ThrowsArgumentNullException() { // Setup - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); // Call - TestDelegate test = () => RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(null, assessmentSection); + TestDelegate test = () => RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(null, failureMechanism); // Assert var exception = Assert.Throws(test); @@ -417,7 +417,7 @@ // Assert var exception = Assert.Throws(test); - Assert.AreEqual("assessmentSection", exception.ParamName); + Assert.AreEqual("failureMechanism", exception.ParamName); } [Test] @@ -439,7 +439,7 @@ assessmentSection.HydraulicBoundaryDatabase.Locations.Add(hydraulicBoundaryLocation); // Call - bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection); + bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsNaN(hydraulicBoundaryLocation.DesignWaterLevel); @@ -459,7 +459,7 @@ }; // Call - bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection); + bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsFalse(affected); @@ -477,7 +477,7 @@ assessmentSection.HydraulicBoundaryDatabase.Locations.Add(hydraulicBoundaryLocation); // Call - bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection); + bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsFalse(affected); @@ -505,7 +505,7 @@ assessmentSection.GrassCoverErosionOutwards.GrassCoverErosionOutwardsHydraulicBoundaryLocations.Add(grassCoverErosionOutwardsHydraulicBoundaryLocation); // Call - bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection); + bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsNaN(grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevel); @@ -529,7 +529,7 @@ assessmentSection.GrassCoverErosionOutwards.GrassCoverErosionOutwardsHydraulicBoundaryLocations.Add(grassCoverErosionOutwardsHydraulicBoundaryLocation); // Call - bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection); + bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsFalse(affected); @@ -561,7 +561,7 @@ assessmentSection.GrassCoverErosionOutwards.GrassCoverErosionOutwardsHydraulicBoundaryLocations.Add(grassCoverErosionOutwardsHydraulicBoundaryLocation); // Call - bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection); + bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsNaN(hydraulicBoundaryLocation.DesignWaterLevel);