Index: Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoDikeAssessmentSectionCommand.cs =================================================================== diff -u -r0adc6562a9cedb81859034ef5d62e9b11db4d9c7 -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoDikeAssessmentSectionCommand.cs (.../AddNewDemoDikeAssessmentSectionCommand.cs) (revision 0adc6562a9cedb81859034ef5d62e9b11db4d9c7) +++ Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoDikeAssessmentSectionCommand.cs (.../AddNewDemoDikeAssessmentSectionCommand.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -127,7 +127,10 @@ StandardDeviation = originalPhreaticLevelExit.StandardDeviation }; calculation.InputParameters.SurfaceLine = pipingFailureMechanism.SurfaceLines.First(sl => sl.Name == "PK001_0001"); - calculation.InputParameters.SoilProfile = pipingFailureMechanism.SoilProfiles.First(sp => sp.Name == "W1-6_0_1D1"); + calculation.InputParameters.SoilProfile = pipingFailureMechanism + .StochasticSoilModels + .SelectMany(sm => sm.StochasticSoilProfiles.Select(ssp => ssp.SoilProfile)) + .First(sp => sp.Name == "W1-6_0_1D1"); calculation.InputParameters.HydraulicBoundaryLocation = demoAssessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001); calculation.InputParameters.NotifyObservers(); Index: Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoDikeAssessmentSectionCommandTest.cs =================================================================== diff -u -r1e49eb86c81e8446aeb6031cfd7a209bb0c11bac -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoDikeAssessmentSectionCommandTest.cs (.../AddNewDemoDikeAssessmentSectionCommandTest.cs) (revision 1e49eb86c81e8446aeb6031cfd7a209bb0c11bac) +++ Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoDikeAssessmentSectionCommandTest.cs (.../AddNewDemoDikeAssessmentSectionCommandTest.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -75,8 +75,8 @@ Assert.AreEqual(2380, demoAssessmentSection.ReferenceLine.Points.Count()); - var profiles = demoAssessmentSection.PipingFailureMechanism.SoilProfiles.ToArray(); - Assert.AreEqual(4, profiles.Length); + var soilModels = demoAssessmentSection.PipingFailureMechanism.StochasticSoilModels.ToArray(); + Assert.AreEqual(4, soilModels.Length); var surfaceLines = demoAssessmentSection.PipingFailureMechanism.SurfaceLines.ToArray(); Assert.AreEqual(4, surfaceLines.Length); AssertCharacteristicPointsOnSurfaceLines(surfaceLines); Index: Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/DikeAssessmentSectionTest.cs =================================================================== diff -u -rde18e9d8a0324e9345f412eb6c1ffeed4f86f2fb -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/DikeAssessmentSectionTest.cs (.../DikeAssessmentSectionTest.cs) (revision de18e9d8a0324e9345f412eb6c1ffeed4f86f2fb) +++ Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/DikeAssessmentSectionTest.cs (.../DikeAssessmentSectionTest.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -55,7 +55,7 @@ Assert.IsNull(section.ReferenceLine); Assert.IsInstanceOf(section.FailureMechanismContribution); - CollectionAssert.IsEmpty(section.PipingFailureMechanism.SoilProfiles); + CollectionAssert.IsEmpty(section.PipingFailureMechanism.StochasticSoilModels); CollectionAssert.IsEmpty(section.PipingFailureMechanism.SurfaceLines); Assert.IsInstanceOf(section.PipingFailureMechanism); Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanism.cs =================================================================== diff -u -r08ab7af115b5bbad87eaffb9bc1b1c4379ec8738 -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanism.cs (.../PipingFailureMechanism.cs) (revision 08ab7af115b5bbad87eaffb9bc1b1c4379ec8738) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanism.cs (.../PipingFailureMechanism.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -77,17 +77,6 @@ public ICollection SurfaceLines { get; private set; } /// - /// Gets the available profiles within the scope of the piping failure mechanism. - /// - public PipingSoilProfile[] SoilProfiles - { - get - { - return StochasticSoilModels.SelectMany(ssm => ssm.StochasticSoilProfiles.Select(ssp => ssp.SoilProfile)).Distinct().ToArray(); - } - } - - /// /// Gets the available stochastic soil models within the scope of the piping failure mechanism. /// public ObservableList StochasticSoilModels { get; private set; } Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationContext.cs =================================================================== diff -u -r10779bb6a6db2d00f4627b2bc190e7e35e1fee3e -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationContext.cs (.../PipingCalculationContext.cs) (revision 10779bb6a6db2d00f4627b2bc190e7e35e1fee3e) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationContext.cs (.../PipingCalculationContext.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -39,11 +39,11 @@ /// /// The instance wrapped by this context object. /// The surface lines available within the piping context. - /// The soil profiles available within the piping context. + /// The stochastic soil models available within the piping context. /// The piping failure mechanism which the piping context belongs to. /// The assessment section which the piping context belongs to. - public PipingCalculationContext(PipingCalculation calculation, IEnumerable surfaceLines, IEnumerable soilProfiles, PipingFailureMechanism pipingFailureMechanism, AssessmentSectionBase assessmentSection) - : base(calculation, surfaceLines, soilProfiles, assessmentSection) + public PipingCalculationContext(PipingCalculation calculation, IEnumerable surfaceLines, IEnumerable stochasticSoilModels, PipingFailureMechanism pipingFailureMechanism, AssessmentSectionBase assessmentSection) + : base(calculation, surfaceLines, stochasticSoilModels, assessmentSection) { if (pipingFailureMechanism == null) { Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs =================================================================== diff -u -r10779bb6a6db2d00f4627b2bc190e7e35e1fee3e -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs (.../PipingCalculationGroupContext.cs) (revision 10779bb6a6db2d00f4627b2bc190e7e35e1fee3e) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs (.../PipingCalculationGroupContext.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -39,15 +39,15 @@ /// /// The instance wrapped by this context object. /// The surface lines available within the piping context. - /// The soil profiles available within the piping context. + /// The stochastic soil models available within the piping context. /// The piping failure mechanism which the piping context belongs to. /// The assessment section which the piping context belongs to. - public PipingCalculationGroupContext(PipingCalculationGroup calculationGroup, IEnumerable surfaceLines, IEnumerable soilProfiles, PipingFailureMechanism pipingFailureMechanism, AssessmentSectionBase assessmentSection) - : base(calculationGroup, surfaceLines, soilProfiles, assessmentSection) + public PipingCalculationGroupContext(PipingCalculationGroup calculationGroup, IEnumerable surfaceLines, IEnumerable stochasticSoilModels, PipingFailureMechanism pipingFailureMechanism, AssessmentSectionBase assessmentSection) + : base(calculationGroup, surfaceLines, stochasticSoilModels, assessmentSection) { if (pipingFailureMechanism == null) { - var message = String.Format(Resources.PipingContext_AssertInputsAreNotNull_DataDescription_0_cannot_be_null, + var message = string.Format(Resources.PipingContext_AssertInputsAreNotNull_DataDescription_0_cannot_be_null, Resources.PipingContext_DataDescription_PipingFailureMechanism); throw new ArgumentNullException("pipingFailureMechanism", message); } Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingContext.cs =================================================================== diff -u -r10779bb6a6db2d00f4627b2bc190e7e35e1fee3e -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingContext.cs (.../PipingContext.cs) (revision 10779bb6a6db2d00f4627b2bc190e7e35e1fee3e) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingContext.cs (.../PipingContext.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -42,20 +42,20 @@ /// /// The concrete data instance wrapped by this context object. /// The surface lines available within the piping context. - /// The soil profiles available within the piping context. + /// The stochastic soil models available within the piping context. /// The assessment section which the piping context belongs to. /// When any input parameter is null. protected PipingContext( T wrappedData, IEnumerable surfaceLines, - IEnumerable soilProfiles, + IEnumerable stochasticSoilModels, AssessmentSectionBase assessmentSection) { - AssertInputsAreNotNull(wrappedData, surfaceLines, soilProfiles, assessmentSection); + AssertInputsAreNotNull(wrappedData, surfaceLines, stochasticSoilModels, assessmentSection); WrappedData = wrappedData; AvailablePipingSurfaceLines = surfaceLines; - AvailablePipingSoilProfiles = soilProfiles; + AvailableStochasticSoilModels = stochasticSoilModels; AssessmentSection = assessmentSection; } @@ -81,10 +81,10 @@ public IEnumerable AvailablePipingSurfaceLines { get; private set; } /// - /// Gets the available piping soil profiles in order for the user to select one to - /// set . + /// Gets the available stochastic soil models in order for the user to select a + /// to set . /// - public IEnumerable AvailablePipingSoilProfiles { get; private set; } + public IEnumerable AvailableStochasticSoilModels { get; private set; } /// /// Gets the available hydraulic boundary locations in order for the user to select one to Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingInputContext.cs =================================================================== diff -u -r1e49eb86c81e8446aeb6031cfd7a209bb0c11bac -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingInputContext.cs (.../PipingInputContext.cs) (revision 1e49eb86c81e8446aeb6031cfd7a209bb0c11bac) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingInputContext.cs (.../PipingInputContext.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -33,8 +33,16 @@ /// public class PipingInputContext : PipingContext { - public PipingInputContext(PipingInput pipingInput, IEnumerable surfaceLines, IEnumerable soilProfiles, AssessmentSectionBase assessmentSection) - : base(pipingInput, surfaceLines, soilProfiles, assessmentSection) + /// + /// Creates a new instance of + /// + /// The piping input instance wrapped by this context object. + /// The surface lines available within the piping context. + /// The stochastic soil models available within the piping context. + /// The assessment section which the piping context belongs to. + /// When any input parameter is null. + public PipingInputContext(PipingInput pipingInput, IEnumerable surfaceLines, IEnumerable stochasticSoilModels, AssessmentSectionBase assessmentSection) + : base(pipingInput, surfaceLines, stochasticSoilModels, assessmentSection) { } } Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingInputContextProperties.cs =================================================================== diff -u -rcaa64ef94fa8e30074f269de2fe0aad3c482c690 -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingInputContextProperties.cs (.../PipingInputContextProperties.cs) (revision caa64ef94fa8e30074f269de2fe0aad3c482c690) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingInputContextProperties.cs (.../PipingInputContextProperties.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -73,9 +73,9 @@ /// /// Gets the available soil profiles on . /// - public IEnumerable GetAvailableSoilProfilesForCalculation() + public IEnumerable GetAvailableSoilProfiles() { - return data.AvailablePipingSoilProfiles; + return PipingCalculationConfigurationHelper.GetPipingSoilProfilesForSurfaceLine(data.WrappedData.SurfaceLine, data.AvailableStochasticSoilModels); } /// Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/UITypeEditors/PipingInputContextSoilProfileSelectionEditor.cs =================================================================== diff -u -rcaa64ef94fa8e30074f269de2fe0aad3c482c690 -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/UITypeEditors/PipingInputContextSoilProfileSelectionEditor.cs (.../PipingInputContextSoilProfileSelectionEditor.cs) (revision caa64ef94fa8e30074f269de2fe0aad3c482c690) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/UITypeEditors/PipingInputContextSoilProfileSelectionEditor.cs (.../PipingInputContextSoilProfileSelectionEditor.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -42,7 +42,7 @@ protected override IEnumerable GetAvailableOptions(ITypeDescriptorContext context) { - return GetPropertiesObject(context).GetAvailableSoilProfilesForCalculation(); + return GetPropertiesObject(context).GetAvailableSoilProfiles(); } protected override PipingSoilProfile GetCurrentOption(ITypeDescriptorContext context) Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs =================================================================== diff -u -r3c32d100da48791a0e606457fba7910818bd26fa -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 3c32d100da48791a0e606457fba7910818bd26fa) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -307,7 +307,7 @@ // items. using (new SuspendDataGridViewColumnResizes(soilProfileColumn)) { - var pipingSoilProfiles = pipingFailureMechanism != null ? pipingFailureMechanism.SoilProfiles : null; + var pipingSoilProfiles = GetPipingSoilProfilesFromStochasticSoilModels(); SetItemsOnObjectCollection(soilProfileColumn.Items, GetSoilProfilesDataSource(pipingSoilProfiles).ToArray()); } using (new SuspendDataGridViewColumnResizes(hydraulicBoundaryLocationColumn)) @@ -319,6 +319,11 @@ } } + private PipingSoilProfile[] GetPipingSoilProfilesFromStochasticSoilModels() + { + return pipingFailureMechanism != null ? pipingFailureMechanism.StochasticSoilModels.SelectMany(ssm => ssm.StochasticSoilProfiles.Select(ssp => ssp.SoilProfile)).Distinct().ToArray() : null; + } + private void FillAvailableSoilProfilesList(DataGridViewRow dataGridViewRow) { var rowData = (PipingCalculationRow)dataGridViewRow.DataBoundItem; @@ -552,7 +557,7 @@ var pipingCalculationRow = (PipingCalculationRow) dataGridView.Rows[e.RowIndex].DataBoundItem; - ApplicationSelection.Selection = new PipingInputContext(pipingCalculationRow.PipingCalculation.InputParameters, pipingFailureMechanism.SurfaceLines, pipingFailureMechanism.SoilProfiles, assessmentSection); + ApplicationSelection.Selection = new PipingInputContext(pipingCalculationRow.PipingCalculation.InputParameters, pipingFailureMechanism.SurfaceLines, pipingFailureMechanism.StochasticSoilModels, assessmentSection); } private void ListBoxOnSelectedValueChanged(object sender, EventArgs e) Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs =================================================================== diff -u -rbff183a6d323111affe69f3afa19b9ada02c9375 -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision bff183a6d323111affe69f3afa19b9ada02c9375) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -461,7 +461,7 @@ return new object[] { new CategoryTreeFolder(RingtoetsCommonFormsResources.FailureMechanism_Inputs_DisplayName, GetInputs(wrappedData, pipingFailureMechanismContext.Parent), TreeFolderCategory.Input), - new PipingCalculationGroupContext(wrappedData.CalculationsGroup, wrappedData.SurfaceLines, wrappedData.SoilProfiles, wrappedData, pipingFailureMechanismContext.Parent), + new PipingCalculationGroupContext(wrappedData.CalculationsGroup, wrappedData.SurfaceLines, wrappedData.StochasticSoilModels, wrappedData, pipingFailureMechanismContext.Parent), new CategoryTreeFolder(RingtoetsCommonFormsResources.FailureMechanism_Outputs_DisplayName, GetOutputs(wrappedData), TreeFolderCategory.Output) }; } @@ -536,7 +536,7 @@ pipingCalculationContext.WrappedData.Comments, new PipingInputContext(pipingCalculationContext.WrappedData.InputParameters, pipingCalculationContext.AvailablePipingSurfaceLines, - pipingCalculationContext.AvailablePipingSoilProfiles, + pipingCalculationContext.AvailableStochasticSoilModels, pipingCalculationContext.AssessmentSection) }; @@ -607,15 +607,15 @@ { childNodeObjects.Add(new PipingCalculationContext(calculation, nodeData.AvailablePipingSurfaceLines, - nodeData.AvailablePipingSoilProfiles, + nodeData.AvailableStochasticSoilModels, nodeData.PipingFailureMechanism, nodeData.AssessmentSection)); } else if (group != null) { childNodeObjects.Add(new PipingCalculationGroupContext(group, nodeData.AvailablePipingSurfaceLines, - nodeData.AvailablePipingSoilProfiles, + nodeData.AvailableStochasticSoilModels, nodeData.PipingFailureMechanism, nodeData.AssessmentSection)); } Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismTest.cs =================================================================== diff -u -r08ab7af115b5bbad87eaffb9bc1b1c4379ec8738 -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismTest.cs (.../PipingFailureMechanismTest.cs) (revision 08ab7af115b5bbad87eaffb9bc1b1c4379ec8738) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismTest.cs (.../PipingFailureMechanismTest.cs) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -31,7 +31,7 @@ CollectionAssert.IsEmpty(piping.Sections); CollectionAssert.IsEmpty(piping.SurfaceLines); Assert.IsInstanceOf>(piping.SurfaceLines); - CollectionAssert.IsEmpty(piping.SoilProfiles); + CollectionAssert.IsEmpty(piping.StochasticSoilModels); Assert.IsInstanceOf>(piping.StochasticSoilModels); Assert.AreEqual("Berekeningen", piping.CalculationsGroup.Name); Assert.AreEqual(1, piping.CalculationsGroup.Children.Count); @@ -193,41 +193,5 @@ // Assert CollectionAssert.DoesNotContain(failureMechanism.CalculationsGroup.Children, folder); } - - [Test] - public void SoilProfiles_StochasticSoilModelsWithDuplicateProfiles_ReturnsDistinctProfiles() - { - // Setup - var failureMechanism = new PipingFailureMechanism(); - PipingSoilProfile profile = new TestPipingSoilProfile(); - StochasticSoilProfile stochasticProfile = new StochasticSoilProfile(0, SoilProfileType.SoilProfile1D, 0) - { - SoilProfile = profile - }; - failureMechanism.StochasticSoilModels.AddRange(new[] - { - new StochasticSoilModel(0, string.Empty, string.Empty) - { - StochasticSoilProfiles = - { - stochasticProfile - } - }, - new StochasticSoilModel(0, string.Empty, string.Empty) - { - StochasticSoilProfiles = - { - stochasticProfile - } - } - }); - - // Call - var profiles = failureMechanism.SoilProfiles; - - // Assert - Assert.AreEqual(1, profiles.Length); - Assert.AreSame(profile, profiles.First()); - } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/Ringtoets.Piping.Data.TestUtil.csproj =================================================================== diff -u -r3721b5bb1ae327907884a90d1a9bd300042e0540 -r43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb --- Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/Ringtoets.Piping.Data.TestUtil.csproj (.../Ringtoets.Piping.Data.TestUtil.csproj) (revision 3721b5bb1ae327907884a90d1a9bd300042e0540) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.TestUtil/Ringtoets.Piping.Data.TestUtil.csproj (.../Ringtoets.Piping.Data.TestUtil.csproj) (revision 43fb77c51a8d1c0af128a2da0c3d51bbea6e25bb) @@ -48,6 +48,7 @@ + @@ -71,6 +72,10 @@ {14C6F716-64E2-4BC4-A1EF-05865FCEFA4C} Ringtoets.Piping.Primitives + + {27E0A5C9-3ABF-426A-A3DA-7D0B83A218C8} + Ringtoets.Piping.KernelWrapper.TestUtil +