Index: Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs =================================================================== diff -u -rfccca5cdac7de91489bdca3780d6f26a670f2642 -r6d2fb301541e5a6e394b4d20cd7b53e459a235a0 --- Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision fccca5cdac7de91489bdca3780d6f26a670f2642) +++ Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 6d2fb301541e5a6e394b4d20cd7b53e459a235a0) @@ -776,9 +776,9 @@ StrictContextMenuItem addSemiProbabilisticCalculationItem = CreateAddSemiProbabilisticCalculationItem(nodeData); StrictContextMenuItem addProbabilisticCalculationItem = CreateAddProbabilisticCalculationItem(nodeData); - SemiProbabilisticPipingCalculationScenario[] calculations = nodeData.WrappedData.GetCalculations() - .OfType() - .ToArray(); + IPipingCalculation[] calculations = nodeData.WrappedData.GetCalculations() + .OfType>() + .ToArray(); StrictContextMenuItem updateEntryAndExitPointsItem = CreateCalculationGroupUpdateEntryAndExitPointItem(calculations); if (!isNestedGroup) @@ -841,15 +841,15 @@ .Build(); } - private StrictContextMenuItem CreateCalculationGroupUpdateEntryAndExitPointItem(IEnumerable calculations) + private StrictContextMenuItem CreateCalculationGroupUpdateEntryAndExitPointItem(IEnumerable> calculations) { var contextMenuEnabled = true; string toolTipMessage = Resources.PipingPlugin_CreateUpdateEntryAndExitPointItem_Update_all_calculations_with_surface_line_ToolTip; - SemiProbabilisticPipingCalculationScenario[] calculationsToUpdate = calculations - .Where(calc => calc.InputParameters.SurfaceLine != null - && !calc.InputParameters.IsEntryAndExitPointInputSynchronized) - .ToArray(); + IPipingCalculation[] calculationsToUpdate = calculations + .Where(calc => calc.InputParameters.SurfaceLine != null + && !calc.InputParameters.IsEntryAndExitPointInputSynchronized) + .ToArray(); if (!calculationsToUpdate.Any()) { @@ -867,12 +867,12 @@ }; } - private void UpdateEntryAndExitPointsOfAllCalculations(IEnumerable calculations) + private void UpdateEntryAndExitPointsOfAllCalculations(IEnumerable> calculations) { string message = RiskeerCommonFormsResources.VerifyUpdate_Confirm_calculation_outputs_cleared; if (VerifyEntryAndExitPointUpdates(calculations, message)) { - foreach (SemiProbabilisticPipingCalculationScenario calculation in calculations) + foreach (IPipingCalculation calculation in calculations) { UpdateSurfaceLineDependentData(calculation); } Index: Riskeer/Piping/test/Riskeer.Piping.Data.TestUtil.Test/SemiProbabilisticPipingCalculationScenarioTestFactoryTest.cs =================================================================== diff -u -r9d81fce2b4838979d13c48cf0adc054fb240625a -r6d2fb301541e5a6e394b4d20cd7b53e459a235a0 --- Riskeer/Piping/test/Riskeer.Piping.Data.TestUtil.Test/SemiProbabilisticPipingCalculationScenarioTestFactoryTest.cs (.../SemiProbabilisticPipingCalculationScenarioTestFactoryTest.cs) (revision 9d81fce2b4838979d13c48cf0adc054fb240625a) +++ Riskeer/Piping/test/Riskeer.Piping.Data.TestUtil.Test/SemiProbabilisticPipingCalculationScenarioTestFactoryTest.cs (.../SemiProbabilisticPipingCalculationScenarioTestFactoryTest.cs) (revision 6d2fb301541e5a6e394b4d20cd7b53e459a235a0) @@ -121,7 +121,7 @@ } [Test] - public void CreatePipingCalculationScenarioWithValidInput_HydraulicBoundaryLocationNull_ThrowsArgumentnullException() + public void CreatePipingCalculationScenarioWithValidInput_HydraulicBoundaryLocationNull_ThrowsArgumentNullException() { // Call void Call() => SemiProbabilisticPipingCalculationScenarioTestFactory.CreatePipingCalculationScenarioWithValidInput(null); @@ -130,8 +130,32 @@ var exception = Assert.Throws(Call); Assert.AreEqual("hydraulicBoundaryLocation", exception.ParamName); } + + [Test] + public void CreatePipingCalculationWithValidInput_HydraulicBoundaryLocationNull_ThrowsArgumentNullException() + { + // Call + void Call() => SemiProbabilisticPipingCalculationScenarioTestFactory.CreatePipingCalculationWithValidInput(null); + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("hydraulicBoundaryLocation", exception.ParamName); + } + [Test] + public void CreatePipingCalculationWithValidInput_HydraulicBoundaryLocation_CreatesPipingCalculationScenarioWithValidInput() + { + // Setup + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + + // Call + IPipingCalculation scenario = SemiProbabilisticPipingCalculationScenarioTestFactory.CreatePipingCalculationWithValidInput(hydraulicBoundaryLocation); + + // Assert + Assert.AreSame(hydraulicBoundaryLocation, scenario.InputParameters.HydraulicBoundaryLocation); + } + + [Test] public void CreatePipingCalculationScenarioWithValidInput_HydraulicBoundaryLocation_CreatesPipingCalculationScenarioWithValidInput() { // Setup Index: Riskeer/Piping/test/Riskeer.Piping.Data.TestUtil/SemiProbabilisticPipingCalculationScenarioTestFactory.cs =================================================================== diff -u -r5007379065eb83c6d21cfa16264b9e16fee696d7 -r6d2fb301541e5a6e394b4d20cd7b53e459a235a0 --- Riskeer/Piping/test/Riskeer.Piping.Data.TestUtil/SemiProbabilisticPipingCalculationScenarioTestFactory.cs (.../SemiProbabilisticPipingCalculationScenarioTestFactory.cs) (revision 5007379065eb83c6d21cfa16264b9e16fee696d7) +++ Riskeer/Piping/test/Riskeer.Piping.Data.TestUtil/SemiProbabilisticPipingCalculationScenarioTestFactory.cs (.../SemiProbabilisticPipingCalculationScenarioTestFactory.cs) (revision 6d2fb301541e5a6e394b4d20cd7b53e459a235a0) @@ -38,6 +38,9 @@ /// public static class SemiProbabilisticPipingCalculationScenarioTestFactory { + private const double bottom = 1.12; + private const double top = 10.56; + /// /// Creates a calculated scenario for which the surface line on the input intersects with . /// @@ -110,6 +113,38 @@ } /// + /// Creates a calculation with valid input. + /// + /// The hydraulic boundary location to set to the input. + /// Indicator whether the calculation has output. + /// A new . + /// The caller is responsible for actually providing a valid hydraulic boundary location + /// (for instance when it comes to the presence of a normative assessment level). + /// Throw when is null. + public static PipingCalculation CreatePipingCalculationWithValidInput(HydraulicBoundaryLocation hydraulicBoundaryLocation, bool hasOutput = false) + { + if (hydraulicBoundaryLocation == null) + { + throw new ArgumentNullException(nameof(hydraulicBoundaryLocation)); + } + + return new TestPipingCalculation(new TestPipingInput + { + DampingFactorExit = + { + Mean = (RoundedDouble) 1.0 + }, + PhreaticLevelExit = + { + Mean = (RoundedDouble) 2.0 + }, + SurfaceLine = GetSurfaceLine(), + StochasticSoilProfile = GetStochasticSoilProfile(), + HydraulicBoundaryLocation = hydraulicBoundaryLocation + }, hasOutput); + } + + /// /// Creates a scenario with valid input. /// /// The hydraulic boundary location to set to the input. @@ -123,37 +158,28 @@ { throw new ArgumentNullException(nameof(hydraulicBoundaryLocation)); } - - const double bottom = 1.12; - const double top = 10.56; - var stochasticSoilProfile = new PipingStochasticSoilProfile( - 0.0, new PipingSoilProfile(string.Empty, 0.0, new[] + + return new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) + { + InputParameters = { - new PipingSoilLayer(top) + DampingFactorExit = { - IsAquifer = false, - BelowPhreaticLevel = new LogNormalDistribution - { - Mean = (RoundedDouble) 17.5, - StandardDeviation = (RoundedDouble) 0, - Shift = (RoundedDouble) 10 - } + Mean = (RoundedDouble) 1.0 }, - new PipingSoilLayer(top / 2) + PhreaticLevelExit = { - IsAquifer = true, - DiameterD70 = new VariationCoefficientLogNormalDistribution - { - Mean = (RoundedDouble) 4.0e-4, - CoefficientOfVariation = (RoundedDouble) 0 - }, - Permeability = new VariationCoefficientLogNormalDistribution - { - Mean = (RoundedDouble) 1.0, - CoefficientOfVariation = (RoundedDouble) 0.5 - } - } - }, SoilProfileType.SoilProfile1D)); + Mean = (RoundedDouble) 2.0 + }, + SurfaceLine = GetSurfaceLine(), + StochasticSoilProfile = GetStochasticSoilProfile(), + HydraulicBoundaryLocation = hydraulicBoundaryLocation + } + }; + } + + private static PipingSurfaceLine GetSurfaceLine() + { var surfaceLine = new PipingSurfaceLine(string.Empty); var firstCharacteristicPointLocation = new Point3D(0.2, 0.0, bottom + 3 * top / 4); var secondCharacteristicPointLocation = new Point3D(0.3, 0.0, bottom + 2 * top / 4); @@ -177,23 +203,39 @@ surfaceLine.SetDitchPolderSideAt(fifthCharacteristicPointLocation); surfaceLine.ReferenceLineIntersectionWorldPoint = new Point2D(0.0, 0.0); - return new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) - { - InputParameters = + return surfaceLine; + } + + private static PipingStochasticSoilProfile GetStochasticSoilProfile() + { + return new PipingStochasticSoilProfile( + 0.0, new PipingSoilProfile(string.Empty, 0.0, new[] { - DampingFactorExit = + new PipingSoilLayer(top) { - Mean = (RoundedDouble) 1.0 + IsAquifer = false, + BelowPhreaticLevel = new LogNormalDistribution + { + Mean = (RoundedDouble) 17.5, + StandardDeviation = (RoundedDouble) 0, + Shift = (RoundedDouble) 10 + } }, - PhreaticLevelExit = + new PipingSoilLayer(top / 2) { - Mean = (RoundedDouble) 2.0 - }, - SurfaceLine = surfaceLine, - StochasticSoilProfile = stochasticSoilProfile, - HydraulicBoundaryLocation = hydraulicBoundaryLocation - } - }; + IsAquifer = true, + DiameterD70 = new VariationCoefficientLogNormalDistribution + { + Mean = (RoundedDouble) 4.0e-4, + CoefficientOfVariation = (RoundedDouble) 0 + }, + Permeability = new VariationCoefficientLogNormalDistribution + { + Mean = (RoundedDouble) 1.0, + CoefficientOfVariation = (RoundedDouble) 0.5 + } + } + }, SoilProfileType.SoilProfile1D)); } } } \ No newline at end of file Index: Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -r5007379065eb83c6d21cfa16264b9e16fee696d7 -r6d2fb301541e5a6e394b4d20cd7b53e459a235a0 --- Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision 5007379065eb83c6d21cfa16264b9e16fee696d7) +++ Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision 6d2fb301541e5a6e394b4d20cd7b53e459a235a0) @@ -696,7 +696,7 @@ { Children = { - new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) + new TestPipingCalculation() } }; @@ -746,7 +746,7 @@ { Children = { - SemiProbabilisticPipingCalculationScenarioTestFactory.CreatePipingCalculationScenarioWithValidInput(hydraulicBoundaryLocation) + SemiProbabilisticPipingCalculationScenarioTestFactory.CreatePipingCalculationWithValidInput(hydraulicBoundaryLocation) } }; @@ -785,12 +785,12 @@ { var pipingFailureMechanism = new TestPipingFailureMechanism(); var assessmentSection = mocks.Stub(); - SemiProbabilisticPipingCalculationScenario pipingCalculationScenario = SemiProbabilisticPipingCalculationScenarioTestFactory.CreatePipingCalculationScenarioWithValidInput(new TestHydraulicBoundaryLocation()); + IPipingCalculation calculation = SemiProbabilisticPipingCalculationScenarioTestFactory.CreatePipingCalculationWithValidInput(new TestHydraulicBoundaryLocation()); var group = new CalculationGroup { Children = { - pipingCalculationScenario + calculation } }; @@ -807,7 +807,7 @@ plugin.Gui = gui; - ChangeSurfaceLine(pipingCalculationScenario.InputParameters.SurfaceLine); + ChangeSurfaceLine(calculation.InputParameters.SurfaceLine); // Call using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) @@ -1656,27 +1656,23 @@ new Point3D(4, 5, 6) }); - var calculation1 = new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) + var calculation1 = new TestPipingCalculation(new TestPipingInput { - InputParameters = - { - SurfaceLine = surfaceLine, - EntryPointL = (RoundedDouble) 0, - ExitPointL = (RoundedDouble) 1 - } - }; + SurfaceLine = surfaceLine, + EntryPointL = (RoundedDouble) 0, + ExitPointL = (RoundedDouble) 1 + }); + calculation1.Attach(calculation1Observer); calculation1.InputParameters.Attach(calculation1InputObserver); - var calculation2 = new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) + var calculation2 = new TestPipingCalculation(new TestPipingInput { - InputParameters = - { - SurfaceLine = surfaceLine, - EntryPointL = (RoundedDouble) 0, - ExitPointL = (RoundedDouble) 1 - } - }; + SurfaceLine = surfaceLine, + EntryPointL = (RoundedDouble) 0, + ExitPointL = (RoundedDouble) 1 + }); + calculation2.Attach(calculation2Observer); calculation2.InputParameters.Attach(calculation2InputObserver); @@ -1750,29 +1746,23 @@ new Point3D(4, 5, 6) }); - var calculation1 = new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) + var calculation1 = new TestPipingCalculation(new TestPipingInput { - InputParameters = - { - SurfaceLine = surfaceLine, - EntryPointL = (RoundedDouble) 0, - ExitPointL = (RoundedDouble) 1 - }, - Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput() - }; + SurfaceLine = surfaceLine, + EntryPointL = (RoundedDouble) 0, + ExitPointL = (RoundedDouble) 1 + }, true); + calculation1.Attach(calculation1Observer); calculation1.InputParameters.Attach(calculation1InputObserver); - var calculation2 = new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) + var calculation2 = new TestPipingCalculation(new TestPipingInput { - InputParameters = - { - SurfaceLine = surfaceLine, - EntryPointL = (RoundedDouble) 0, - ExitPointL = (RoundedDouble) 1 - }, - Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput() - }; + SurfaceLine = surfaceLine, + EntryPointL = (RoundedDouble) 0, + ExitPointL = (RoundedDouble) 1 + }, true); + calculation2.Attach(calculation2Observer); calculation2.InputParameters.Attach(calculation2InputObserver); @@ -1865,29 +1855,23 @@ new Point3D(4, 5, 6) }); - var calculation1 = new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) + var calculation1 = new TestPipingCalculation(new TestPipingInput { - InputParameters = - { - SurfaceLine = surfaceLine, - EntryPointL = (RoundedDouble) 0, - ExitPointL = (RoundedDouble) 1 - }, - Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput() - }; + SurfaceLine = surfaceLine, + EntryPointL = (RoundedDouble) 0, + ExitPointL = (RoundedDouble) 1 + }, true); + calculation1.Attach(calculation1Observer); calculation1.InputParameters.Attach(calculation1InputObserver); - var calculation2 = new SemiProbabilisticPipingCalculationScenario(new GeneralPipingInput()) + var calculation2 = new TestPipingCalculation(new TestPipingInput { - InputParameters = - { - SurfaceLine = surfaceLine, - EntryPointL = (RoundedDouble) 0, - ExitPointL = (RoundedDouble) 1 - }, - Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput() - }; + SurfaceLine = surfaceLine, + EntryPointL = (RoundedDouble) 0, + ExitPointL = (RoundedDouble) 1 + }, true); + calculation2.Attach(calculation2Observer); calculation2.InputParameters.Attach(calculation2InputObserver);