Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs =================================================================== diff -u -rc4633203979ec1f1768c3c149143315996d9a952 -re749ff5c1ebced7fc8ac52bfc26417f405aee728 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs (.../FailureMechanismEntityReadExtensions.cs) (revision c4633203979ec1f1768c3c149143315996d9a952) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs (.../FailureMechanismEntityReadExtensions.cs) (revision e749ff5c1ebced7fc8ac52bfc26417f405aee728) @@ -710,14 +710,15 @@ collector); entity.ReadHydraulicBoundaryLocations(failureMechanism.HydraulicBoundaryLocations, collector); + entity.ReadHydraulicBoundaryLocationCalculations(failureMechanism, collector); ReadGrassCoverErosionOutwardsWaveConditionsRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.WaveConditionsCalculationGroup, collector); } private static void ReadGeneralGrassCoverErosionOutwardsCalculationInput(this FailureMechanismEntity entity, GeneralGrassCoverErosionOutwardsInput input) { - entity.GrassCoverErosionOutwardsFailureMechanismMetaEntities.Single().Read(input); + GetGrassCoverErosionOutwardsFailureMechanismMetaEntity(entity).Read(input); } private static void ReadGrassCoverErosionOutwardsMechanismSectionResults(this FailureMechanismEntity entity, @@ -743,6 +744,27 @@ .ToArray()); } + private static void ReadHydraulicBoundaryLocationCalculations(this FailureMechanismEntity entity, + GrassCoverErosionOutwardsFailureMechanism failureMechanism, + ReadConversionCollector collector) + { + GrassCoverErosionOutwardsFailureMechanismMetaEntity metaEntity = GetGrassCoverErosionOutwardsFailureMechanismMetaEntity(entity); + + metaEntity.HydraulicLocationCalculationCollectionEntity5.Read(failureMechanism.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm, + collector); + metaEntity.HydraulicLocationCalculationCollectionEntity4.Read(failureMechanism.WaterLevelCalculationsForMechanismSpecificSignalingNorm, + collector); + metaEntity.HydraulicLocationCalculationCollectionEntity3.Read(failureMechanism.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm, + collector); + + metaEntity.HydraulicLocationCalculationCollectionEntity2.Read(failureMechanism.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm, + collector); + metaEntity.HydraulicLocationCalculationCollectionEntity1.Read(failureMechanism.WaveHeightCalculationsForMechanismSpecificSignalingNorm, + collector); + metaEntity.HydraulicLocationCalculationCollectionEntity.Read(failureMechanism.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm, + collector); + } + private static void ReadGrassCoverErosionOutwardsWaveConditionsRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, ReadConversionCollector collector) { @@ -753,6 +775,11 @@ } } + private static GrassCoverErosionOutwardsFailureMechanismMetaEntity GetGrassCoverErosionOutwardsFailureMechanismMetaEntity(FailureMechanismEntity entity) + { + return entity.GrassCoverErosionOutwardsFailureMechanismMetaEntities.Single(); + } + #endregion #region Grass Cover Slip Off Inwards Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs =================================================================== diff -u -rf84b3a8a54b6b95f0263732e6e5b5472c0b584e2 -re749ff5c1ebced7fc8ac52bfc26417f405aee728 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs (.../FailureMechanismEntityReadExtensionsTest.cs) (revision f84b3a8a54b6b95f0263732e6e5b5472c0b584e2) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs (.../FailureMechanismEntityReadExtensionsTest.cs) (revision e749ff5c1ebced7fc8ac52bfc26417f405aee728) @@ -25,6 +25,7 @@ using Application.Ringtoets.Storage.Read; using Application.Ringtoets.Storage.Serializers; using Application.Ringtoets.Storage.TestUtil; +using Application.Ringtoets.Storage.TestUtil.Hydraulics; using Application.Ringtoets.Storage.TestUtil.MacroStabilityInwards; using Core.Common.Base; using Core.Common.Base.Data; @@ -1252,7 +1253,13 @@ { new GrassCoverErosionOutwardsFailureMechanismMetaEntity { - N = new Random(39).NextRoundedDouble(1.0, 20.0) + N = new Random(39).NextRoundedDouble(1.0, 20.0), + HydraulicLocationCalculationCollectionEntity = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity1 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity2 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity3 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity4 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity5 = new HydraulicLocationCalculationCollectionEntity() } }, CalculationGroupEntity = new CalculationGroupEntity() @@ -1290,7 +1297,13 @@ new GrassCoverErosionOutwardsFailureMechanismMetaEntity { ForeshoreProfileCollectionSourcePath = fileLocation, - N = 1 + N = 1, + HydraulicLocationCalculationCollectionEntity = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity1 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity2 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity3 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity4 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity5 = new HydraulicLocationCalculationCollectionEntity() } } }; @@ -1307,6 +1320,88 @@ } [Test] + public void ReadAsGrassCoverErosionOutwardsFailureMechanism_WithHydraulicBoundaryLocationCalculations_ReturnsFailureMechanismWithHydraulicBoundaryLocationCalculations() + { + // Setup + HydraulicLocationEntity hydraulicLocationEntity = HydraulicLocationEntityTestFactory.CreateHydraulicLocationEntity(); + var metaEntity = new GrassCoverErosionOutwardsFailureMechanismMetaEntity + { + N = 1, + HydraulicLocationCalculationCollectionEntity = CreateHydraulicLocationCollectionCalculationEntity(hydraulicLocationEntity, 1), + HydraulicLocationCalculationCollectionEntity1 = CreateHydraulicLocationCollectionCalculationEntity(hydraulicLocationEntity, 2), + HydraulicLocationCalculationCollectionEntity2 = CreateHydraulicLocationCollectionCalculationEntity(hydraulicLocationEntity, 3), + HydraulicLocationCalculationCollectionEntity3 = CreateHydraulicLocationCollectionCalculationEntity(hydraulicLocationEntity, 4), + HydraulicLocationCalculationCollectionEntity4 = CreateHydraulicLocationCollectionCalculationEntity(hydraulicLocationEntity, 5), + HydraulicLocationCalculationCollectionEntity5 = CreateHydraulicLocationCollectionCalculationEntity(hydraulicLocationEntity, 6) + }; + + var entity = new FailureMechanismEntity + { + CalculationGroupEntity = new CalculationGroupEntity(), + GrassCoverErosionOutwardsFailureMechanismMetaEntities = + { + metaEntity + } + }; + + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + var collector = new ReadConversionCollector(); + collector.Read(hydraulicLocationEntity, hydraulicBoundaryLocation); + + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); + failureMechanism.SetHydraulicBoundaryLocationCalculations(new[] + { + hydraulicBoundaryLocation + }); + + // Call + entity.ReadAsGrassCoverErosionOutwardsFailureMechanism(failureMechanism, collector); + + // Assert + HydraulicBoundaryLocationCalculation calculation = failureMechanism.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm + .Single(); + HydraulicLocationCalculationEntity hydraulicLocationCalculationEntity = metaEntity.HydraulicLocationCalculationCollectionEntity5 + .HydraulicLocationCalculationEntities + .Single(); + AssertHydraulicBoundaryLocationCalculation(hydraulicLocationCalculationEntity, hydraulicBoundaryLocation, calculation); + + calculation = failureMechanism.WaterLevelCalculationsForMechanismSpecificSignalingNorm + .Single(); + hydraulicLocationCalculationEntity = metaEntity.HydraulicLocationCalculationCollectionEntity4 + .HydraulicLocationCalculationEntities + .Single(); + AssertHydraulicBoundaryLocationCalculation(hydraulicLocationCalculationEntity, hydraulicBoundaryLocation, calculation); + + calculation = failureMechanism.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm + .Single(); + hydraulicLocationCalculationEntity = metaEntity.HydraulicLocationCalculationCollectionEntity3 + .HydraulicLocationCalculationEntities + .Single(); + AssertHydraulicBoundaryLocationCalculation(hydraulicLocationCalculationEntity, hydraulicBoundaryLocation, calculation); + + calculation = failureMechanism.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm + .Single(); + hydraulicLocationCalculationEntity = metaEntity.HydraulicLocationCalculationCollectionEntity2 + .HydraulicLocationCalculationEntities + .Single(); + AssertHydraulicBoundaryLocationCalculation(hydraulicLocationCalculationEntity, hydraulicBoundaryLocation, calculation); + + calculation = failureMechanism.WaveHeightCalculationsForMechanismSpecificSignalingNorm + .Single(); + hydraulicLocationCalculationEntity = metaEntity.HydraulicLocationCalculationCollectionEntity1 + .HydraulicLocationCalculationEntities + .Single(); + AssertHydraulicBoundaryLocationCalculation(hydraulicLocationCalculationEntity, hydraulicBoundaryLocation, calculation); + + calculation = failureMechanism.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm + .Single(); + hydraulicLocationCalculationEntity = metaEntity.HydraulicLocationCalculationCollectionEntity + .HydraulicLocationCalculationEntities + .Single(); + AssertHydraulicBoundaryLocationCalculation(hydraulicLocationCalculationEntity, hydraulicBoundaryLocation, calculation); + } + + [Test] public void ReadAsGrassCoverErosionOutwardsFailureMechanism_WithForeshoreProfilesAndSourcePath_ReturnsFailureMechanismWithForeshoreProfilesAndSourcePathSet() { // Setup @@ -1335,7 +1430,13 @@ new GrassCoverErosionOutwardsFailureMechanismMetaEntity { ForeshoreProfileCollectionSourcePath = fileLocation, - N = 1 + N = 1, + HydraulicLocationCalculationCollectionEntity = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity1 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity2 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity3 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity4 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity5 = new HydraulicLocationCalculationCollectionEntity() } } }; @@ -1377,7 +1478,13 @@ { new GrassCoverErosionOutwardsFailureMechanismMetaEntity { - N = 1 + N = 1, + HydraulicLocationCalculationCollectionEntity = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity1 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity2 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity3 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity4 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity5 = new HydraulicLocationCalculationCollectionEntity() } }, CalculationGroupEntity = new CalculationGroupEntity() @@ -1420,7 +1527,13 @@ { new GrassCoverErosionOutwardsFailureMechanismMetaEntity { - N = 1 + N = 1, + HydraulicLocationCalculationCollectionEntity = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity1 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity2 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity3 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity4 = new HydraulicLocationCalculationCollectionEntity(), + HydraulicLocationCalculationCollectionEntity5 = new HydraulicLocationCalculationCollectionEntity() } } }; @@ -1440,48 +1553,31 @@ Assert.AreEqual("Child2", child2.Name); } - [Test] - public void ReadAsGrassCoverErosionOutwardsFailureMechanism_WithHydraulicBoundaryLocations_ReturnsNewGrassCoverErosionOutwardsFailureMechanismWithLocationsSet() + private static HydraulicLocationCalculationCollectionEntity CreateHydraulicLocationCollectionCalculationEntity(HydraulicLocationEntity hydraulicLocationEntity, + int seed) { - // Setup - const string locationAName = "Location A"; - const string locationBName = "Location B"; - var entity = new FailureMechanismEntity + var random = new Random(seed); + return new HydraulicLocationCalculationCollectionEntity { - CalculationGroupEntity = new CalculationGroupEntity(), - GrassCoverErosionOutwardsFailureMechanismMetaEntities = + HydraulicLocationCalculationEntities = { - new GrassCoverErosionOutwardsFailureMechanismMetaEntity + new HydraulicLocationCalculationEntity { - N = 1 + HydraulicLocationEntity = hydraulicLocationEntity, + ShouldIllustrationPointsBeCalculated = Convert.ToByte(random.NextBoolean()) } - }, - GrassCoverErosionOutwardsHydraulicLocationEntities = - { - new GrassCoverErosionOutwardsHydraulicLocationEntity - { - Order = 1, - Name = locationBName - }, - new GrassCoverErosionOutwardsHydraulicLocationEntity - { - Order = 0, - Name = locationAName - } } }; - var collector = new ReadConversionCollector(); - var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); + } - // Call - entity.ReadAsGrassCoverErosionOutwardsFailureMechanism(failureMechanism, collector); - - // Assert - ObservableList hydraulicBoundaryLocations = failureMechanism.HydraulicBoundaryLocations; - Assert.AreEqual(2, hydraulicBoundaryLocations.Count); - - Assert.AreEqual(locationAName, hydraulicBoundaryLocations[0].Name); - Assert.AreEqual(locationBName, hydraulicBoundaryLocations[1].Name); + private static void AssertHydraulicBoundaryLocationCalculation(HydraulicLocationCalculationEntity expectedEntity, + HydraulicBoundaryLocation expectedHydraulicBoundaryLocation, + HydraulicBoundaryLocationCalculation actualCalculation) + { + Assert.AreSame(expectedHydraulicBoundaryLocation, actualCalculation.HydraulicBoundaryLocation); + Assert.AreEqual(Convert.ToBoolean(expectedEntity.ShouldIllustrationPointsBeCalculated), + actualCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); + Assert.IsNull(actualCalculation.Output); } #endregion