Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresDataSynchronizationService.cs =================================================================== diff -u -rf1fa2338dda2747f6bb70e82b4527f7b5f1708bf -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresDataSynchronizationService.cs (.../ClosingStructuresDataSynchronizationService.cs) (revision f1fa2338dda2747f6bb70e82b4527f7b5f1708bf) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresDataSynchronizationService.cs (.../ClosingStructuresDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using Core.Common.Base; using Core.Common.Utils.Extensions; using Ringtoets.ClosingStructures.Data; using Ringtoets.Common.Data.Structures; @@ -60,7 +61,7 @@ return affectedItems; } - + /// /// Clears the and output for all the calculations /// in the . @@ -105,6 +106,35 @@ return affectedItems; } + /// + /// Clears all data dependent, either directly or indirectly, on the parent reference line. + /// + /// The failure mechanism to be cleared. + /// All objects that have been changed. + public static IEnumerable ClearReferenceLineDependentData(ClosingStructuresFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException("failureMechanism"); + } + + var observables = new List(); + + failureMechanism.ClearAllSections(); + observables.Add(failureMechanism); + + failureMechanism.CalculationsGroup.Children.Clear(); + observables.Add(failureMechanism.CalculationsGroup); + + failureMechanism.ForeshoreProfiles.Clear(); + observables.Add(failureMechanism.ForeshoreProfiles); + + failureMechanism.ClosingStructures.Clear(); + observables.Add(failureMechanism.ClosingStructures); + + return observables; + } + private static void ClearHydraulicBoundaryLocation(StructuresCalculation calculation) { calculation.InputParameters.HydraulicBoundaryLocation = null; Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructureDataSynchronizationServiceTest.cs =================================================================== diff -u -rf1fa2338dda2747f6bb70e82b4527f7b5f1708bf -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructureDataSynchronizationServiceTest.cs (.../ClosingStructureDataSynchronizationServiceTest.cs) (revision f1fa2338dda2747f6bb70e82b4527f7b5f1708bf) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructureDataSynchronizationServiceTest.cs (.../ClosingStructureDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -22,10 +22,16 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; +using Core.Common.Base.Geometry; using NUnit.Framework; using Ringtoets.ClosingStructures.Data; +using Ringtoets.ClosingStructures.Data.TestUtil; +using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Data.Structures; +using Ringtoets.Common.Data.TestUtil; using Ringtoets.HydraRing.Data; namespace Ringtoets.ClosingStructures.Service.Test @@ -255,5 +261,81 @@ // Assert CollectionAssert.IsEmpty(affectedItems); } + + [Test] + public void ClearReferenceLineDependentData_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => ClosingStructuresDataSynchronizationService.ClearReferenceLineDependentData(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveFailureMechanismDependentData() + { + // Setup + ClosingStructuresFailureMechanism failureMechanism = CreateFullyConfiguredFailureMechanism(); + + // Call + IObservable[] observables = ClosingStructuresDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism).ToArray(); + + // Assert + Assert.AreEqual(4, observables.Length); + + CollectionAssert.IsEmpty(failureMechanism.Sections); + CollectionAssert.IsEmpty(failureMechanism.SectionResults); + CollectionAssert.Contains(observables, failureMechanism); + + CollectionAssert.IsEmpty(failureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, failureMechanism.CalculationsGroup); + + CollectionAssert.IsEmpty(failureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, failureMechanism.ForeshoreProfiles); + + CollectionAssert.IsEmpty(failureMechanism.ClosingStructures); + CollectionAssert.Contains(observables, failureMechanism.ClosingStructures); + } + + private ClosingStructuresFailureMechanism CreateFullyConfiguredFailureMechanism() + { + var section = new FailureMechanismSection("A", new[] + { + new Point2D(-1, 0), + new Point2D(2, 0) + }); + var structure = new TestClosingStructure(); + var profile = new TestForeshoreProfile(); + var heightStructuresFailureMechanism = new ClosingStructuresFailureMechanism + { + ClosingStructures = + { + structure + }, + ForeshoreProfiles = + { + profile + }, + CalculationsGroup = + { + Children = + { + new TestClosingStructuresCalculation + { + InputParameters = + { + ForeshoreProfile = profile, + Structure = structure + } + }, + new CalculationGroup("B", true) + } + } + }; + heightStructuresFailureMechanism.AddSection(section); + return heightStructuresFailureMechanism; + } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsDataSynchronizationService.cs =================================================================== diff -u -rf1fa2338dda2747f6bb70e82b4527f7b5f1708bf -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsDataSynchronizationService.cs (.../GrassCoverErosionInwardsDataSynchronizationService.cs) (revision f1fa2338dda2747f6bb70e82b4527f7b5f1708bf) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsDataSynchronizationService.cs (.../GrassCoverErosionInwardsDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using Core.Common.Base; using Core.Common.Utils.Extensions; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.HydraRing.Data; @@ -76,7 +77,7 @@ calculation.Output = null; } - + /// /// Clears the and output for all the calculations /// in the . @@ -120,6 +121,34 @@ return affectedItems; } + /// + /// Clears all data dependent, either directly or indirectly, on the parent reference line. + /// + /// The failure mechanism to be cleared. + /// All objects that have been changed. + /// Thrown when + /// is null. + public static IEnumerable ClearReferenceLineDependentData(GrassCoverErosionInwardsFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException("failureMechanism"); + } + + var observables = new List(); + + failureMechanism.ClearAllSections(); + observables.Add(failureMechanism); + + failureMechanism.CalculationsGroup.Children.Clear(); + observables.Add(failureMechanism.CalculationsGroup); + + failureMechanism.DikeProfiles.Clear(); + observables.Add(failureMechanism.DikeProfiles); + + return observables; + } + private static void ClearHydraulicBoundaryLocation(GrassCoverErosionInwardsCalculation calculation) { calculation.InputParameters.HydraulicBoundaryLocation = null; Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Utils.Test/GrassCoverErosionInwardsDataSynchronizationServiceTest.cs =================================================================== diff -u -re82f04fb50a7b5a6f9c45289258c00c94aa8c64c -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Utils.Test/GrassCoverErosionInwardsDataSynchronizationServiceTest.cs (.../GrassCoverErosionInwardsDataSynchronizationServiceTest.cs) (revision e82f04fb50a7b5a6f9c45289258c00c94aa8c64c) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Utils.Test/GrassCoverErosionInwardsDataSynchronizationServiceTest.cs (.../GrassCoverErosionInwardsDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Probability; @@ -119,6 +120,40 @@ CollectionAssert.AreEquivalent(expectedAffectedCalculations, affectedItems); } + [Test] + public void ClearReferenceLineDependentData_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => GrassCoverErosionInwardsDataSynchronizationService.ClearReferenceLineDependentData(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveFailureMechanismDependentData() + { + // Setup + GrassCoverErosionInwardsFailureMechanism failureMechanism = CreateFullyConfiguredFailureMechanism(); + + // Call + IObservable[] observables = GrassCoverErosionInwardsDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism).ToArray(); + + // Assert + Assert.AreEqual(3, observables.Length); + + CollectionAssert.IsEmpty(failureMechanism.Sections); + CollectionAssert.IsEmpty(failureMechanism.SectionResults); + CollectionAssert.Contains(observables, failureMechanism); + + CollectionAssert.IsEmpty(failureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, failureMechanism.CalculationsGroup); + + CollectionAssert.IsEmpty(failureMechanism.DikeProfiles); + CollectionAssert.Contains(observables, failureMechanism.DikeProfiles); + } + private static GrassCoverErosionInwardsFailureMechanism CreateFullyConfiguredFailureMechanism() { var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Service/GrassCoverErosionOutwardsDataSynchronizationService.cs =================================================================== diff -u -r716528adfed212743b359ecaf540a1027dbceb65 -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Service/GrassCoverErosionOutwardsDataSynchronizationService.cs (.../GrassCoverErosionOutwardsDataSynchronizationService.cs) (revision 716528adfed212743b359ecaf540a1027dbceb65) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Service/GrassCoverErosionOutwardsDataSynchronizationService.cs (.../GrassCoverErosionOutwardsDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -153,6 +153,34 @@ return affectedItems; } + /// + /// Clears all data dependent, either directly or indirectly, on the parent reference line. + /// + /// The failure mechanism to be cleared. + /// All objects that have been changed. + /// Thrown when + /// is null. + public static IEnumerable ClearReferenceLineDependentData(GrassCoverErosionOutwardsFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException("failureMechanism"); + } + + var observables = new List(); + + failureMechanism.ClearAllSections(); + observables.Add(failureMechanism); + + failureMechanism.WaveConditionsCalculationGroup.Children.Clear(); + observables.Add(failureMechanism.WaveConditionsCalculationGroup); + + failureMechanism.ForeshoreProfiles.Clear(); + observables.Add(failureMechanism.ForeshoreProfiles); + + return observables; + } + private static void ClearHydraulicBoundaryLocation(GrassCoverErosionOutwardsWaveConditionsCalculation calculation) { calculation.InputParameters.HydraulicBoundaryLocation = null; Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Service.Test/GrassCoverErosionOutwardsDataSynchronizationServiceTest.cs =================================================================== diff -u -re82f04fb50a7b5a6f9c45289258c00c94aa8c64c -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Service.Test/GrassCoverErosionOutwardsDataSynchronizationServiceTest.cs (.../GrassCoverErosionOutwardsDataSynchronizationServiceTest.cs) (revision e82f04fb50a7b5a6f9c45289258c00c94aa8c64c) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Service.Test/GrassCoverErosionOutwardsDataSynchronizationServiceTest.cs (.../GrassCoverErosionOutwardsDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -193,6 +193,40 @@ CollectionAssert.AreEqual(expectedAffectedCalculations, affectedItems); } + [Test] + public void ClearReferenceLineDependentData_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => GrassCoverErosionOutwardsDataSynchronizationService.ClearReferenceLineDependentData(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveFailureMechanismDependentData() + { + // Setup + GrassCoverErosionOutwardsFailureMechanism failureMechanism = CreateFullyConfiguredFailureMechanism(); + + // Call + IObservable[] observables = GrassCoverErosionOutwardsDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism).ToArray(); + + // Assert + Assert.AreEqual(3, observables.Length); + + CollectionAssert.IsEmpty(failureMechanism.Sections); + CollectionAssert.IsEmpty(failureMechanism.SectionResults); + CollectionAssert.Contains(observables, failureMechanism); + + CollectionAssert.IsEmpty(failureMechanism.WaveConditionsCalculationGroup.Children); + CollectionAssert.Contains(observables, failureMechanism.WaveConditionsCalculationGroup); + + CollectionAssert.IsEmpty(failureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, failureMechanism.ForeshoreProfiles); + } + private static GrassCoverErosionOutwardsFailureMechanism CreateFullyConfiguredFailureMechanism() { var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresDataSynchronizationService.cs =================================================================== diff -u -rf1fa2338dda2747f6bb70e82b4527f7b5f1708bf -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresDataSynchronizationService.cs (.../HeightStructuresDataSynchronizationService.cs) (revision f1fa2338dda2747f6bb70e82b4527f7b5f1708bf) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresDataSynchronizationService.cs (.../HeightStructuresDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using Core.Common.Base; using Core.Common.Utils.Extensions; using Ringtoets.Common.Data.Structures; using Ringtoets.HeightStructures.Data; @@ -60,7 +61,7 @@ return affectedItems; } - + /// /// Clears the and output for all the calculations /// in the . @@ -105,6 +106,37 @@ return affectedItems; } + /// + /// Clears all data dependent, either directly or indirectly, on the parent reference line. + /// + /// The failure mechanism to be cleared. + /// All objects that have been changed. + /// Thrown when + /// is null. + public static IEnumerable ClearReferenceLineDependentData(HeightStructuresFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException("failureMechanism"); + } + + var observables = new List(); + + failureMechanism.ClearAllSections(); + observables.Add(failureMechanism); + + failureMechanism.CalculationsGroup.Children.Clear(); + observables.Add(failureMechanism.CalculationsGroup); + + failureMechanism.ForeshoreProfiles.Clear(); + observables.Add(failureMechanism.ForeshoreProfiles); + + failureMechanism.HeightStructures.Clear(); + observables.Add(failureMechanism.HeightStructures); + + return observables; + } + private static void ClearHydraulicBoundaryLocation(StructuresCalculation calculation) { calculation.InputParameters.HydraulicBoundaryLocation = null; Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/HeightStructuresDataSynchronizationServiceTest.cs =================================================================== diff -u -rf1fa2338dda2747f6bb70e82b4527f7b5f1708bf -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/HeightStructuresDataSynchronizationServiceTest.cs (.../HeightStructuresDataSynchronizationServiceTest.cs) (revision f1fa2338dda2747f6bb70e82b4527f7b5f1708bf) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/HeightStructuresDataSynchronizationServiceTest.cs (.../HeightStructuresDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -22,10 +22,16 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; +using Core.Common.Base.Geometry; using NUnit.Framework; +using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Data.Structures; +using Ringtoets.Common.Data.TestUtil; using Ringtoets.HeightStructures.Data; +using Ringtoets.HeightStructures.Data.TestUtil; using Ringtoets.HydraRing.Data; namespace Ringtoets.HeightStructures.Service.Test @@ -255,5 +261,81 @@ // Assert CollectionAssert.IsEmpty(affectedItems); } + + [Test] + public void ClearReferenceLineDependentData_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => HeightStructuresDataSynchronizationService.ClearReferenceLineDependentData(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveFailureMechanismDependentData() + { + // Setup + HeightStructuresFailureMechanism failureMechanism = CreateFullyConfiguredFailureMechanism(); + + // Call + IObservable[] observables = HeightStructuresDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism).ToArray(); + + // Assert + Assert.AreEqual(4, observables.Length); + + CollectionAssert.IsEmpty(failureMechanism.Sections); + CollectionAssert.IsEmpty(failureMechanism.SectionResults); + CollectionAssert.Contains(observables, failureMechanism); + + CollectionAssert.IsEmpty(failureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, failureMechanism.CalculationsGroup); + + CollectionAssert.IsEmpty(failureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, failureMechanism.ForeshoreProfiles); + + CollectionAssert.IsEmpty(failureMechanism.HeightStructures); + CollectionAssert.Contains(observables, failureMechanism.HeightStructures); + } + + private HeightStructuresFailureMechanism CreateFullyConfiguredFailureMechanism() + { + var section = new FailureMechanismSection("A", new[] + { + new Point2D(-1, 0), + new Point2D(2, 0) + }); + var structure = new TestHeightStructure(); + var profile = new TestForeshoreProfile(); + var heightStructuresFailureMechanism = new HeightStructuresFailureMechanism + { + HeightStructures = + { + structure + }, + ForeshoreProfiles = + { + profile + }, + CalculationsGroup = + { + Children = + { + new TestHeightStructuresCalculation + { + InputParameters = + { + ForeshoreProfile = profile, + Structure = structure + } + }, + new CalculationGroup("B", true) + } + } + }; + heightStructuresFailureMechanism.AddSection(section); + return heightStructuresFailureMechanism; + } } } \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs =================================================================== diff -u -r47eef16397280688cabfde493dfb4675dfe2f328 -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs (.../RingtoetsDataSynchronizationService.cs) (revision 47eef16397280688cabfde493dfb4675dfe2f328) +++ Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs (.../RingtoetsDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; using Core.Common.Base.Data; using Ringtoets.ClosingStructures.Data; using Ringtoets.ClosingStructures.Service; @@ -213,5 +214,73 @@ return locationsAffected; } + + /// + /// Clears the reference line and all data that depends on it, either directly or indirectly. + /// + /// The assessment section. + /// All observable objects affected by this method. + /// Thrown when + /// is null. + public static IEnumerable ClearReferenceLine(IAssessmentSection assessmentSection) + { + if (assessmentSection == null) + { + throw new ArgumentNullException("assessmentSection"); + } + + var list = new List(); + + foreach (var failureMechanism in assessmentSection.GetFailureMechanisms()) + { + var pipingFailureMechanism = failureMechanism as PipingFailureMechanism; + var grassCoverErosionInwardsFailureMechanism = failureMechanism as GrassCoverErosionInwardsFailureMechanism; + var stabilityStoneCoverFailureMechanism = failureMechanism as StabilityStoneCoverFailureMechanism; + var heightStructuresFailureMechanism = failureMechanism as HeightStructuresFailureMechanism; + var closingStructuresFailureMechanism = failureMechanism as ClosingStructuresFailureMechanism; + var stabilityPointStructuresFailureMechanism = failureMechanism as StabilityPointStructuresFailureMechanism; + var grassCoverErosionOutwardsFailureMechanism = failureMechanism as GrassCoverErosionOutwardsFailureMechanism; + var waveImpactAsphaltCoverFailureMechanism = failureMechanism as WaveImpactAsphaltCoverFailureMechanism; + + if (pipingFailureMechanism != null) + { + list.AddRange(PipingDataSynchronizationService.ClearReferenceLineDependentData(pipingFailureMechanism)); + } + if (grassCoverErosionInwardsFailureMechanism != null) + { + list.AddRange(GrassCoverErosionInwardsDataSynchronizationService.ClearReferenceLineDependentData(grassCoverErosionInwardsFailureMechanism)); + } + if (stabilityStoneCoverFailureMechanism != null) + { + list.AddRange(StabilityStoneCoverDataSynchronizationService.ClearReferenceLineDependentData(stabilityStoneCoverFailureMechanism)); + } + if (waveImpactAsphaltCoverFailureMechanism != null) + { + list.AddRange(WaveImpactAsphaltCoverDataSynchronizationService.ClearReferenceLineDependentData(waveImpactAsphaltCoverFailureMechanism)); + } + if (grassCoverErosionOutwardsFailureMechanism != null) + { + list.AddRange(GrassCoverErosionOutwardsDataSynchronizationService.ClearReferenceLineDependentData(grassCoverErosionOutwardsFailureMechanism)); + } + if (heightStructuresFailureMechanism != null) + { + list.AddRange(HeightStructuresDataSynchronizationService.ClearReferenceLineDependentData(heightStructuresFailureMechanism)); + } + if (closingStructuresFailureMechanism != null) + { + list.AddRange(ClosingStructuresDataSynchronizationService.ClearReferenceLineDependentData(closingStructuresFailureMechanism)); + } + if (stabilityPointStructuresFailureMechanism != null) + { + list.AddRange(StabilityPointStructuresDataSynchronizationService.ClearReferenceLineDependentData(stabilityPointStructuresFailureMechanism)); + } + } + + // Lastly: clear the reference line: + assessmentSection.ReferenceLine = null; + list.Add(assessmentSection); + + return list; + } } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/Ringtoets.Integration.Service.Test.csproj =================================================================== diff -u -r8723c31042f8aa4174e6d51a42f20d3665ec2da0 -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/Ringtoets.Integration.Service.Test.csproj (.../Ringtoets.Integration.Service.Test.csproj) (revision 8723c31042f8aa4174e6d51a42f20d3665ec2da0) +++ Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/Ringtoets.Integration.Service.Test.csproj (.../Ringtoets.Integration.Service.Test.csproj) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -102,6 +102,10 @@ {CE994CC9-6F6A-48AC-B4BE-02C30A21F4DB} Ringtoets.Piping.Data + + {14c6f716-64e2-4bc4-a1ef-05865fcefa4c} + Ringtoets.Piping.Primitives + {955E574D-67CE-4347-AA6B-7DF8A04ED754} Ringtoets.Piping.Data.TestUtil Index: Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/RingtoetsDataSynchronizationServiceTest.cs =================================================================== diff -u -re82f04fb50a7b5a6f9c45289258c00c94aa8c64c -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/RingtoetsDataSynchronizationServiceTest.cs (.../RingtoetsDataSynchronizationServiceTest.cs) (revision e82f04fb50a7b5a6f9c45289258c00c94aa8c64c) +++ Ringtoets/Integration/test/Ringtoets.Integration.Service.Test/RingtoetsDataSynchronizationServiceTest.cs (.../RingtoetsDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -350,6 +350,113 @@ Assert.IsTrue(affected); } + [Test] + public void ClearReferenceLine_AssessmentSectionNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => RingtoetsDataSynchronizationService.ClearReferenceLine(null); + + // Assert + string parmaName = Assert.Throws(call).ParamName; + Assert.AreEqual("assessmentSection", parmaName); + } + + [Test] + public void ClearReferenceLine_FullyConfiguredAssessmentSection_AllReferenceLineDependentDataCleared() + { + // Setup + AssessmentSection assessmentSection = GetFullyConfiguredAssessmentSection(); + + // Call + var observables = RingtoetsDataSynchronizationService.ClearReferenceLine(assessmentSection).ToArray(); + + // Assert + Assert.AreEqual(29, observables.Length); + + PipingFailureMechanism pipingFailureMechanism = assessmentSection.PipingFailureMechanism; + CollectionAssert.IsEmpty(pipingFailureMechanism.Sections); + CollectionAssert.IsEmpty(pipingFailureMechanism.SectionResults); + CollectionAssert.Contains(observables, pipingFailureMechanism); + CollectionAssert.IsEmpty(pipingFailureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, pipingFailureMechanism.CalculationsGroup); + CollectionAssert.IsEmpty(pipingFailureMechanism.StochasticSoilModels); + CollectionAssert.Contains(observables, pipingFailureMechanism.StochasticSoilModels); + CollectionAssert.IsEmpty(pipingFailureMechanism.SurfaceLines); + CollectionAssert.Contains(observables, pipingFailureMechanism.SurfaceLines); + + GrassCoverErosionInwardsFailureMechanism grassCoverErosionInwardsFailureMechanism = assessmentSection.GrassCoverErosionInwards; + CollectionAssert.IsEmpty(grassCoverErosionInwardsFailureMechanism.Sections); + CollectionAssert.IsEmpty(grassCoverErosionInwardsFailureMechanism.SectionResults); + CollectionAssert.Contains(observables, grassCoverErosionInwardsFailureMechanism); + CollectionAssert.IsEmpty(grassCoverErosionInwardsFailureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, grassCoverErosionInwardsFailureMechanism.CalculationsGroup); + CollectionAssert.IsEmpty(grassCoverErosionInwardsFailureMechanism.DikeProfiles); + CollectionAssert.Contains(observables, grassCoverErosionInwardsFailureMechanism.DikeProfiles); + + GrassCoverErosionOutwardsFailureMechanism grassCoverErosionOutwardsFailureMechanism = assessmentSection.GrassCoverErosionOutwards; + CollectionAssert.IsEmpty(grassCoverErosionOutwardsFailureMechanism.Sections); + CollectionAssert.IsEmpty(grassCoverErosionOutwardsFailureMechanism.SectionResults); + CollectionAssert.Contains(observables, grassCoverErosionOutwardsFailureMechanism); + CollectionAssert.IsEmpty(grassCoverErosionOutwardsFailureMechanism.WaveConditionsCalculationGroup.Children); + CollectionAssert.Contains(observables, grassCoverErosionOutwardsFailureMechanism.WaveConditionsCalculationGroup); + CollectionAssert.IsEmpty(grassCoverErosionOutwardsFailureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, grassCoverErosionOutwardsFailureMechanism.ForeshoreProfiles); + + WaveImpactAsphaltCoverFailureMechanism waveImpactAsphaltCoverFailureMechanism = assessmentSection.WaveImpactAsphaltCover; + CollectionAssert.IsEmpty(waveImpactAsphaltCoverFailureMechanism.Sections); + CollectionAssert.IsEmpty(waveImpactAsphaltCoverFailureMechanism.SectionResults); + CollectionAssert.Contains(observables, waveImpactAsphaltCoverFailureMechanism); + CollectionAssert.IsEmpty(waveImpactAsphaltCoverFailureMechanism.WaveConditionsCalculationGroup.Children); + CollectionAssert.Contains(observables, waveImpactAsphaltCoverFailureMechanism.WaveConditionsCalculationGroup); + CollectionAssert.IsEmpty(waveImpactAsphaltCoverFailureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, waveImpactAsphaltCoverFailureMechanism.ForeshoreProfiles); + + StabilityStoneCoverFailureMechanism stabilityStoneCoverFailureMechanism = assessmentSection.StabilityStoneCover; + CollectionAssert.IsEmpty(stabilityStoneCoverFailureMechanism.Sections); + CollectionAssert.IsEmpty(stabilityStoneCoverFailureMechanism.SectionResults); + CollectionAssert.Contains(observables, stabilityStoneCoverFailureMechanism); + CollectionAssert.IsEmpty(stabilityStoneCoverFailureMechanism.WaveConditionsCalculationGroup.Children); + CollectionAssert.Contains(observables, stabilityStoneCoverFailureMechanism.WaveConditionsCalculationGroup); + CollectionAssert.IsEmpty(stabilityStoneCoverFailureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, stabilityStoneCoverFailureMechanism.ForeshoreProfiles); + + ClosingStructuresFailureMechanism closingStructuresFailureMechanism = assessmentSection.ClosingStructures; + CollectionAssert.IsEmpty(closingStructuresFailureMechanism.Sections); + CollectionAssert.IsEmpty(closingStructuresFailureMechanism.SectionResults); + CollectionAssert.Contains(observables, closingStructuresFailureMechanism); + CollectionAssert.IsEmpty(closingStructuresFailureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, closingStructuresFailureMechanism.CalculationsGroup); + CollectionAssert.IsEmpty(closingStructuresFailureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, closingStructuresFailureMechanism.ForeshoreProfiles); + CollectionAssert.IsEmpty(closingStructuresFailureMechanism.ClosingStructures); + CollectionAssert.Contains(observables, closingStructuresFailureMechanism.ClosingStructures); + + HeightStructuresFailureMechanism heightStructuresFailureMechanism = assessmentSection.HeightStructures; + CollectionAssert.IsEmpty(heightStructuresFailureMechanism.Sections); + CollectionAssert.IsEmpty(heightStructuresFailureMechanism.SectionResults); + CollectionAssert.Contains(observables, heightStructuresFailureMechanism); + CollectionAssert.IsEmpty(heightStructuresFailureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, heightStructuresFailureMechanism.CalculationsGroup); + CollectionAssert.IsEmpty(heightStructuresFailureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, heightStructuresFailureMechanism.ForeshoreProfiles); + CollectionAssert.IsEmpty(heightStructuresFailureMechanism.HeightStructures); + CollectionAssert.Contains(observables, heightStructuresFailureMechanism.HeightStructures); + + StabilityPointStructuresFailureMechanism stabilityPointStructuresFailureMechanism = assessmentSection.StabilityPointStructures; + CollectionAssert.IsEmpty(stabilityPointStructuresFailureMechanism.Sections); + CollectionAssert.IsEmpty(stabilityPointStructuresFailureMechanism.SectionResults); + CollectionAssert.Contains(observables, stabilityPointStructuresFailureMechanism); + CollectionAssert.IsEmpty(stabilityPointStructuresFailureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, stabilityPointStructuresFailureMechanism.CalculationsGroup); + CollectionAssert.IsEmpty(stabilityPointStructuresFailureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, stabilityPointStructuresFailureMechanism.ForeshoreProfiles); + CollectionAssert.IsEmpty(stabilityPointStructuresFailureMechanism.StabilityPointStructures); + CollectionAssert.Contains(observables, stabilityPointStructuresFailureMechanism.StabilityPointStructures); + + Assert.IsNull(assessmentSection.ReferenceLine); + CollectionAssert.Contains(observables, assessmentSection); + } + private static AssessmentSection GetFullyConfiguredAssessmentSection() { var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingDataSynchronizationService.cs =================================================================== diff -u -rb39d085012e7d50a761a38b485bf7c0e948ad7f4 -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingDataSynchronizationService.cs (.../PipingDataSynchronizationService.cs) (revision b39d085012e7d50a761a38b485bf7c0e948ad7f4) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingDataSynchronizationService.cs (.../PipingDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using Core.Common.Base; using Core.Common.Utils.Extensions; using Ringtoets.HydraRing.Data; using Ringtoets.Piping.Data; @@ -113,6 +114,37 @@ return affectedItems; } + /// + /// Clears all data dependent, either directly or indirectly, on the parent reference line. + /// + /// The failure mechanism to be cleared. + /// All objects that have been changed. + /// Thrown when + /// is null. + public static IEnumerable ClearReferenceLineDependentData(PipingFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException("failureMechanism"); + } + + var observables = new List(); + + failureMechanism.ClearAllSections(); + observables.Add(failureMechanism); + + failureMechanism.CalculationsGroup.Children.Clear(); + observables.Add(failureMechanism.CalculationsGroup); + + failureMechanism.StochasticSoilModels.Clear(); + observables.Add(failureMechanism.StochasticSoilModels); + + failureMechanism.SurfaceLines.Clear(); + observables.Add(failureMechanism.SurfaceLines); + + return observables; + } + private static void ClearHydraulicBoundaryLocation(PipingCalculation calculation) { calculation.InputParameters.HydraulicBoundaryLocation = null; Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs =================================================================== diff -u -re82f04fb50a7b5a6f9c45289258c00c94aa8c64c -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision e82f04fb50a7b5a6f9c45289258c00c94aa8c64c) +++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.HydraRing.Data; @@ -120,6 +121,43 @@ CollectionAssert.AreEquivalent(expectedAffectedCalculations, affectedItems); } + [Test] + public void ClearReferenceLineDependentData_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => PipingDataSynchronizationService.ClearReferenceLineDependentData(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveFailureMechanismDependentData() + { + // Setup + PipingFailureMechanism failureMechanism = CreateFullyConfiguredFailureMechanism(); + + // Call + IObservable[] observables = PipingDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism).ToArray(); + + // Assert + Assert.AreEqual(4, observables.Length); + + CollectionAssert.IsEmpty(failureMechanism.Sections); + CollectionAssert.IsEmpty(failureMechanism.SectionResults); + CollectionAssert.Contains(observables, failureMechanism); + + CollectionAssert.IsEmpty(failureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, failureMechanism.CalculationsGroup); + + CollectionAssert.IsEmpty(failureMechanism.StochasticSoilModels); + CollectionAssert.Contains(observables, failureMechanism.StochasticSoilModels); + + CollectionAssert.IsEmpty(failureMechanism.SurfaceLines); + CollectionAssert.Contains(observables, failureMechanism.SurfaceLines); + } + private static PipingFailureMechanism CreateFullyConfiguredFailureMechanism() { var failureMechanism = new PipingFailureMechanism(); Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Service/StabilityPointStructuresDataSynchronizationService.cs =================================================================== diff -u -r716528adfed212743b359ecaf540a1027dbceb65 -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Service/StabilityPointStructuresDataSynchronizationService.cs (.../StabilityPointStructuresDataSynchronizationService.cs) (revision 716528adfed212743b359ecaf540a1027dbceb65) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Service/StabilityPointStructuresDataSynchronizationService.cs (.../StabilityPointStructuresDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -23,10 +23,11 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using Core.Common.Base; using Core.Common.Utils.Extensions; -using Ringtoets.StabilityPointStructures.Data; using Ringtoets.Common.Data.Structures; using Ringtoets.HydraRing.Data; +using Ringtoets.StabilityPointStructures.Data; namespace Ringtoets.StabilityPointStructures.Service { @@ -61,7 +62,7 @@ return affectedItems; } - + /// /// Clears the and output for all the calculations /// in the . @@ -107,6 +108,35 @@ return affectedItems; } + /// + /// Clears all data dependent, either directly or indirectly, on the parent reference line. + /// + /// The failure mechanism to be cleared. + /// All objects that have been changed. + public static IEnumerable ClearReferenceLineDependentData(StabilityPointStructuresFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException("failureMechanism"); + } + + var observables = new List(); + + failureMechanism.ClearAllSections(); + observables.Add(failureMechanism); + + failureMechanism.CalculationsGroup.Children.Clear(); + observables.Add(failureMechanism.CalculationsGroup); + + failureMechanism.ForeshoreProfiles.Clear(); + observables.Add(failureMechanism.ForeshoreProfiles); + + failureMechanism.StabilityPointStructures.Clear(); + observables.Add(failureMechanism.StabilityPointStructures); + + return observables; + } + private static void ClearHydraulicBoundaryLocation(StructuresCalculation calculation) { calculation.InputParameters.HydraulicBoundaryLocation = null; Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresDataSynchronizationServiceTest.cs =================================================================== diff -u -re82f04fb50a7b5a6f9c45289258c00c94aa8c64c -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresDataSynchronizationServiceTest.cs (.../StabilityPointStructuresDataSynchronizationServiceTest.cs) (revision e82f04fb50a7b5a6f9c45289258c00c94aa8c64c) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresDataSynchronizationServiceTest.cs (.../StabilityPointStructuresDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Probability; @@ -93,6 +94,43 @@ CollectionAssert.AreEquivalent(expectedAffectedCalculations, affectedItems); } + [Test] + public void ClearReferenceLineDependentData_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => StabilityPointStructuresDataSynchronizationService.ClearReferenceLineDependentData(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveFailureMechanismDependentData() + { + // Setup + StabilityPointStructuresFailureMechanism failureMechanism = CreateFullyConfiguredFailureMechanism(); + + // Call + IObservable[] observables = StabilityPointStructuresDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism).ToArray(); + + // Assert + Assert.AreEqual(4, observables.Length); + + CollectionAssert.IsEmpty(failureMechanism.Sections); + CollectionAssert.IsEmpty(failureMechanism.SectionResults); + CollectionAssert.Contains(observables, failureMechanism); + + CollectionAssert.IsEmpty(failureMechanism.CalculationsGroup.Children); + CollectionAssert.Contains(observables, failureMechanism.CalculationsGroup); + + CollectionAssert.IsEmpty(failureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, failureMechanism.ForeshoreProfiles); + + CollectionAssert.IsEmpty(failureMechanism.StabilityPointStructures); + CollectionAssert.Contains(observables, failureMechanism.StabilityPointStructures); + } + private static StabilityPointStructuresFailureMechanism CreateFullyConfiguredFailureMechanism() { var failureMechanism = new StabilityPointStructuresFailureMechanism(); Index: Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Service/StabilityStoneCoverDataSynchronizationService.cs =================================================================== diff -u -r77ac74d895ded1f0d1f81a67b02a2f4d80299a3b -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Service/StabilityStoneCoverDataSynchronizationService.cs (.../StabilityStoneCoverDataSynchronizationService.cs) (revision 77ac74d895ded1f0d1f81a67b02a2f4d80299a3b) +++ Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Service/StabilityStoneCoverDataSynchronizationService.cs (.../StabilityStoneCoverDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using Core.Common.Base; using Core.Common.Utils.Extensions; using Ringtoets.HydraRing.Data; using Ringtoets.StabilityStoneCover.Data; @@ -122,6 +123,34 @@ return affectedItems; } + /// + /// Clears all data dependent, either directly or indirectly, on the parent reference line. + /// + /// The failure mechanism to be cleared. + /// All objects that have been changed. + /// Thrown when + /// is null. + public static IEnumerable ClearReferenceLineDependentData(StabilityStoneCoverFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException("failureMechanism"); + } + + var observables = new List(); + + failureMechanism.ClearAllSections(); + observables.Add(failureMechanism); + + failureMechanism.WaveConditionsCalculationGroup.Children.Clear(); + observables.Add(failureMechanism.WaveConditionsCalculationGroup); + + failureMechanism.ForeshoreProfiles.Clear(); + observables.Add(failureMechanism.ForeshoreProfiles); + + return observables; + } + private static void ClearHydraulicBoundaryLocation(StabilityStoneCoverWaveConditionsCalculation calculation) { calculation.InputParameters.HydraulicBoundaryLocation = null; Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Service.Test/StabilityStoneCoverDataSynchronizationServiceTest.cs =================================================================== diff -u -re82f04fb50a7b5a6f9c45289258c00c94aa8c64c -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Service.Test/StabilityStoneCoverDataSynchronizationServiceTest.cs (.../StabilityStoneCoverDataSynchronizationServiceTest.cs) (revision e82f04fb50a7b5a6f9c45289258c00c94aa8c64c) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Service.Test/StabilityStoneCoverDataSynchronizationServiceTest.cs (.../StabilityStoneCoverDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.HydraRing.Data; @@ -143,6 +144,40 @@ CollectionAssert.IsEmpty(affectedItems); } + [Test] + public void ClearReferenceLineDependentData_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => StabilityStoneCoverDataSynchronizationService.ClearReferenceLineDependentData(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveFailureMechanismDependentData() + { + // Setup + StabilityStoneCoverFailureMechanism failureMechanism = CreateFullyConfiguredFailureMechanism(); + + // Call + IObservable[] observables = StabilityStoneCoverDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism).ToArray(); + + // Assert + Assert.AreEqual(3, observables.Length); + + CollectionAssert.IsEmpty(failureMechanism.Sections); + CollectionAssert.IsEmpty(failureMechanism.SectionResults); + CollectionAssert.Contains(observables, failureMechanism); + + CollectionAssert.IsEmpty(failureMechanism.WaveConditionsCalculationGroup.Children); + CollectionAssert.Contains(observables, failureMechanism.WaveConditionsCalculationGroup); + + CollectionAssert.IsEmpty(failureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, failureMechanism.ForeshoreProfiles); + } + private static StabilityStoneCoverFailureMechanism CreateFullyConfiguredFailureMechanism() { var failureMechanism = new StabilityStoneCoverFailureMechanism(); Index: Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Service/WaveImpactAsphaltCoverDataSynchronizationService.cs =================================================================== diff -u -r5f55b35b1398af4604a31b78b7d4a144d209684f -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Service/WaveImpactAsphaltCoverDataSynchronizationService.cs (.../WaveImpactAsphaltCoverDataSynchronizationService.cs) (revision 5f55b35b1398af4604a31b78b7d4a144d209684f) +++ Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Service/WaveImpactAsphaltCoverDataSynchronizationService.cs (.../WaveImpactAsphaltCoverDataSynchronizationService.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using Core.Common.Base; using Core.Common.Utils.Extensions; using Ringtoets.HydraRing.Data; using Ringtoets.WaveImpactAsphaltCover.Data; @@ -122,6 +123,32 @@ return affectedItems; } + /// + /// Clears all data dependent, either directly or indirectly, on the parent reference line. + /// + /// The failure mechanism to be cleared. + /// All objects that have been changed. + public static IEnumerable ClearReferenceLineDependentData(WaveImpactAsphaltCoverFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException("failureMechanism"); + } + + var observables = new List(); + + failureMechanism.ClearAllSections(); + observables.Add(failureMechanism); + + failureMechanism.WaveConditionsCalculationGroup.Children.Clear(); + observables.Add(failureMechanism.WaveConditionsCalculationGroup); + + failureMechanism.ForeshoreProfiles.Clear(); + observables.Add(failureMechanism.ForeshoreProfiles); + + return observables; + } + private static void ClearHydraulicBoundaryLocation(WaveImpactAsphaltCoverWaveConditionsCalculation calculation) { calculation.InputParameters.HydraulicBoundaryLocation = null; Index: Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Service.Test/WaveImpactAsphaltCoverDataSynchronizationServiceTest.cs =================================================================== diff -u -re82f04fb50a7b5a6f9c45289258c00c94aa8c64c -rc964c048005d93b097a1e6a817dace95b293040f --- Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Service.Test/WaveImpactAsphaltCoverDataSynchronizationServiceTest.cs (.../WaveImpactAsphaltCoverDataSynchronizationServiceTest.cs) (revision e82f04fb50a7b5a6f9c45289258c00c94aa8c64c) +++ Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Service.Test/WaveImpactAsphaltCoverDataSynchronizationServiceTest.cs (.../WaveImpactAsphaltCoverDataSynchronizationServiceTest.cs) (revision c964c048005d93b097a1e6a817dace95b293040f) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.HydraRing.Data; @@ -121,6 +122,40 @@ CollectionAssert.AreEquivalent(expectedAffectedCalculations, affectedItems); } + [Test] + public void ClearReferenceLineDependentData_FailureMechanismNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => WaveImpactAsphaltCoverDataSynchronizationService.ClearReferenceLineDependentData(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void ClearReferenceLineDependentData_FullyConfiguredFailureMechanism_RemoveFailureMechanismDependentData() + { + // Setup + WaveImpactAsphaltCoverFailureMechanism failureMechanism = CreateFullyConfiguredFailureMechanism(); + + // Call + IObservable[] observables = WaveImpactAsphaltCoverDataSynchronizationService.ClearReferenceLineDependentData(failureMechanism).ToArray(); + + // Assert + Assert.AreEqual(3, observables.Length); + + CollectionAssert.IsEmpty(failureMechanism.Sections); + CollectionAssert.IsEmpty(failureMechanism.SectionResults); + CollectionAssert.Contains(observables, failureMechanism); + + CollectionAssert.IsEmpty(failureMechanism.WaveConditionsCalculationGroup.Children); + CollectionAssert.Contains(observables, failureMechanism.WaveConditionsCalculationGroup); + + CollectionAssert.IsEmpty(failureMechanism.ForeshoreProfiles); + CollectionAssert.Contains(observables, failureMechanism.ForeshoreProfiles); + } + private static WaveImpactAsphaltCoverFailureMechanism CreateFullyConfiguredFailureMechanism() { var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism();