Index: Ringtoets/Piping/src/Ringtoets.Piping.Calculation/PipingCalculator.cs
===================================================================
diff -u -ra2675f58f4d57204df1b8378e9dc1134cd11186e -ree0616189b53da348c17a4cf75328425beaf360b
--- Ringtoets/Piping/src/Ringtoets.Piping.Calculation/PipingCalculator.cs (.../PipingCalculator.cs) (revision a2675f58f4d57204df1b8378e9dc1134cd11186e)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Calculation/PipingCalculator.cs (.../PipingCalculator.cs) (revision ee0616189b53da348c17a4cf75328425beaf360b)
@@ -28,7 +28,6 @@
using EffectiveThicknessCalculator = Ringtoets.Piping.Calculation.SubCalculator.EffectiveThicknessCalculator;
using HeaveCalculator = Ringtoets.Piping.Calculation.SubCalculator.HeaveCalculator;
-using UpliftCalculator = Ringtoets.Piping.Calculation.SubCalculator.UpliftCalculator;
namespace Ringtoets.Piping.Calculation
{
@@ -39,16 +38,28 @@
public class PipingCalculator
{
private readonly PipingCalculatorInput input;
+ private readonly PipingSubCalculatorFactory factory;
///
/// Constructs a new . The is used to
/// obtain the parameters used in the different sub calculations.
///
/// The containing all the values required
/// for performing a piping calculation.
- public PipingCalculator(PipingCalculatorInput input)
+ ///
+ /// or is null.
+ public PipingCalculator(PipingCalculatorInput input, PipingSubCalculatorFactory factory)
{
+ if (input == null)
+ {
+ throw new ArgumentNullException("input", "PipingCalculatorInput required for creating a PipingCalculator.");
+ }
+ if (factory == null)
+ {
+ throw new ArgumentNullException("factory", "PipingSubCalculatorFactory required for creating a PipingCalculator.");
+ }
this.input = input;
+ this.factory = factory;
}
///
@@ -241,70 +252,62 @@
private IHeaveCalculator CreateHeaveCalculator()
{
- var calculator = new HeaveCalculator
- {
- Ich = input.CriticalHeaveGradient,
- PhiExit = input.PiezometricHeadExit,
- DTotal = input.ThicknessCoverageLayer,
- PhiPolder = input.PiezometricHeadPolder,
- RExit = input.DampingFactorExit,
- HExit = input.PhreaticLevelExit
- };
+ var calculator = factory.CreateHeaveCalculator();
+ calculator.Ich = input.CriticalHeaveGradient;
+ calculator.PhiExit = input.PiezometricHeadExit;
+ calculator.DTotal = input.ThicknessCoverageLayer;
+ calculator.PhiPolder = input.PiezometricHeadPolder;
+ calculator.RExit = input.DampingFactorExit;
+ calculator.HExit = input.PhreaticLevelExit;
return calculator;
}
private IUpliftCalculator CreateUpliftCalculator(double effectiveStress)
{
- var calculator = new UpliftCalculator
- {
- VolumetricWeightOfWater = input.WaterVolumetricWeight,
- ModelFactorUplift = input.UpliftModelFactor,
- EffectiveStress = effectiveStress,
- HRiver = input.AssessmentLevel,
- PhiExit = input.PiezometricHeadExit,
- RExit = input.DampingFactorExit,
- HExit = input.PhreaticLevelExit,
- PhiPolder = input.PiezometricHeadPolder
- };
+ var calculator = factory.CreateUpliftCalculator();
+ calculator.VolumetricWeightOfWater = input.WaterVolumetricWeight;
+ calculator.ModelFactorUplift = input.UpliftModelFactor;
+ calculator.EffectiveStress = effectiveStress;
+ calculator.HRiver = input.AssessmentLevel;
+ calculator.PhiExit = input.PiezometricHeadExit;
+ calculator.RExit = input.DampingFactorExit;
+ calculator.HExit = input.PhreaticLevelExit;
+ calculator.PhiPolder = input.PiezometricHeadPolder;
return calculator;
}
private ISellmeijerCalculator CreateSellmeijerCalculator()
{
- var calculator = new SellmeijerCalculator
- {
- ModelFactorPiping = input.SellmeijerModelFactor,
- HRiver = input.AssessmentLevel,
- HExit = input.PhreaticLevelExit,
- Rc = input.SellmeijerReductionFactor,
- DTotal = input.ThicknessCoverageLayer,
- SeepageLength = input.SeepageLength,
- GammaSubParticles = input.SandParticlesVolumicWeight,
- WhitesDragCoefficient = input.WhitesDragCoefficient,
- D70 = input.Diameter70,
- VolumetricWeightOfWater = input.WaterVolumetricWeight,
- DarcyPermeability = input.DarcyPermeability,
- KinematicViscosityWater = input.WaterKinematicViscosity,
- Gravity = input.Gravity,
- DAquifer = input.ThicknessAquiferLayer,
- D70Mean = input.MeanDiameter70,
- BeddingAngle = input.BeddingAngle
- };
+ var calculator = factory.CreateSellmeijerCalculator();
+ calculator.ModelFactorPiping = input.SellmeijerModelFactor;
+ calculator.HRiver = input.AssessmentLevel;
+ calculator.HExit = input.PhreaticLevelExit;
+ calculator.Rc = input.SellmeijerReductionFactor;
+ calculator.DTotal = input.ThicknessCoverageLayer;
+ calculator.SeepageLength = input.SeepageLength;
+ calculator.GammaSubParticles = input.SandParticlesVolumicWeight;
+ calculator.WhitesDragCoefficient = input.WhitesDragCoefficient;
+ calculator.D70 = input.Diameter70;
+ calculator.VolumetricWeightOfWater = input.WaterVolumetricWeight;
+ calculator.DarcyPermeability = input.DarcyPermeability;
+ calculator.KinematicViscosityWater = input.WaterKinematicViscosity;
+ calculator.Gravity = input.Gravity;
+ calculator.DAquifer = input.ThicknessAquiferLayer;
+ calculator.D70Mean = input.MeanDiameter70;
+ calculator.BeddingAngle = input.BeddingAngle;
return calculator;
}
private IEffectiveThicknessCalculator CalculateEffectiveThickness()
{
try
{
- var calculator = new EffectiveThicknessCalculator
- {
- ExitPointXCoordinate = input.ExitPointXCoordinate,
- PhreaticLevel = input.PhreaticLevelExit,
- SoilProfile = PipingProfileCreator.Create(input.SoilProfile),
- SurfaceLine = PipingSurfaceLineCreator.Create(input.SurfaceLine),
- VolumicWeightOfWater = input.WaterVolumetricWeight
- };
+ var calculator = factory.CreateEffectiveThicknessCalculator();
+ calculator.ExitPointXCoordinate = input.ExitPointXCoordinate;
+ calculator.PhreaticLevel = input.PhreaticLevelExit;
+ calculator.SoilProfile = PipingProfileCreator.Create(input.SoilProfile);
+ calculator.SurfaceLine = PipingSurfaceLineCreator.Create(input.SurfaceLine);
+ calculator.VolumicWeightOfWater = input.WaterVolumetricWeight;
calculator.Calculate();
return calculator;
}
Index: Ringtoets/Piping/src/Ringtoets.Piping.Calculation/Ringtoets.Piping.Calculation.csproj
===================================================================
diff -u -ra2675f58f4d57204df1b8378e9dc1134cd11186e -ree0616189b53da348c17a4cf75328425beaf360b
--- Ringtoets/Piping/src/Ringtoets.Piping.Calculation/Ringtoets.Piping.Calculation.csproj (.../Ringtoets.Piping.Calculation.csproj) (revision a2675f58f4d57204df1b8378e9dc1134cd11186e)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Calculation/Ringtoets.Piping.Calculation.csproj (.../Ringtoets.Piping.Calculation.csproj) (revision ee0616189b53da348c17a4cf75328425beaf360b)
@@ -70,6 +70,7 @@
+
Index: Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SubCalculator/IPipingSubCalculatorFactory.cs
===================================================================
diff -u -ra2675f58f4d57204df1b8378e9dc1134cd11186e -ree0616189b53da348c17a4cf75328425beaf360b
--- Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SubCalculator/IPipingSubCalculatorFactory.cs (.../IPipingSubCalculatorFactory.cs) (revision a2675f58f4d57204df1b8378e9dc1134cd11186e)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SubCalculator/IPipingSubCalculatorFactory.cs (.../IPipingSubCalculatorFactory.cs) (revision ee0616189b53da348c17a4cf75328425beaf360b)
@@ -1,9 +1,32 @@
namespace Ringtoets.Piping.Calculation.SubCalculator
{
+ ///
+ /// Factory responsible for creating the sub calculators required for a piping calculation.
+ ///
public interface IPipingSubCalculatorFactory
{
+ ///
+ /// Creates the uplift calculator.
+ ///
+ /// A new .
IUpliftCalculator CreateUpliftCalculator();
+
+ ///
+ /// Creates the heave calculator.
+ ///
+ /// A new .
IHeaveCalculator CreateHeaveCalculator();
+
+ ///
+ /// Creates the Sellmeijer calculator.
+ ///
+ /// A new .
ISellmeijerCalculator CreateSellmeijerCalculator();
+
+ ///
+ /// Creates the effective thickness calculator.
+ ///
+ /// A new .
+ IEffectiveThicknessCalculator CreateEffectiveThicknessCalculator();
}
}
\ No newline at end of file
Index: Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SubCalculator/PipingSubCalculatorFactory.cs
===================================================================
diff -u
--- Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SubCalculator/PipingSubCalculatorFactory.cs (revision 0)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SubCalculator/PipingSubCalculatorFactory.cs (revision ee0616189b53da348c17a4cf75328425beaf360b)
@@ -0,0 +1,28 @@
+namespace Ringtoets.Piping.Calculation.SubCalculator
+{
+ ///
+ /// Factory which creates the sub calculators from the piping kernel.
+ ///
+ public class PipingSubCalculatorFactory : IPipingSubCalculatorFactory
+ {
+ public IUpliftCalculator CreateUpliftCalculator()
+ {
+ return new UpliftCalculator();
+ }
+
+ public IHeaveCalculator CreateHeaveCalculator()
+ {
+ return new HeaveCalculator();
+ }
+
+ public ISellmeijerCalculator CreateSellmeijerCalculator()
+ {
+ return new SellmeijerCalculator();
+ }
+
+ public IEffectiveThicknessCalculator CreateEffectiveThicknessCalculator()
+ {
+ return new EffectiveThicknessCalculator();
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs
===================================================================
diff -u -rbbfd376aee76613b471f70d2b1214d7e7b08fb1f -ree0616189b53da348c17a4cf75328425beaf360b
--- Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision bbfd376aee76613b471f70d2b1214d7e7b08fb1f)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision ee0616189b53da348c17a4cf75328425beaf360b)
@@ -24,6 +24,7 @@
using log4net;
using Ringtoets.Piping.Calculation;
+using Ringtoets.Piping.Calculation.SubCalculator;
using Ringtoets.Piping.Data;
using Ringtoets.Piping.Service.Properties;
@@ -37,6 +38,7 @@
public static class PipingCalculationService
{
private static readonly ILog pipingCalculationLogger = LogManager.GetLogger(typeof(PipingCalculation));
+ private static readonly PipingSubCalculatorFactory subCalculatorFactory = new PipingSubCalculatorFactory();
///
/// Performs validation over the values on the given . Error and status information is logged during
@@ -49,7 +51,7 @@
pipingCalculationLogger.Info(String.Format(Resources.Validation_Subject_0_started_Time_1_,
calculation.Name, DateTimeService.CurrentTimeAsString));
- var validationResults = new PipingCalculator(CreateInputFromData(calculation.InputParameters)).Validate();
+ var validationResults = new PipingCalculator(CreateInputFromData(calculation.InputParameters), subCalculatorFactory).Validate();
LogMessagesAsError(Resources.Error_in_piping_validation_0, validationResults.ToArray());
pipingCalculationLogger.Info(String.Format(Resources.Validation_Subject_0_ended_Time_1_,
@@ -72,7 +74,7 @@
try
{
- var pipingResult = new PipingCalculator(CreateInputFromData(calculation.InputParameters)).Calculate();
+ var pipingResult = new PipingCalculator(CreateInputFromData(calculation.InputParameters), subCalculatorFactory).Calculate();
calculation.Output = new PipingOutput(pipingResult.UpliftZValue,
pipingResult.UpliftFactorOfSafety,
@@ -113,7 +115,7 @@
///
public static double CalculateThicknessCoverageLayer(PipingInput input)
{
- return new PipingCalculator(CreateInputFromData(input)).CalculateThicknessCoverageLayer();
+ return new PipingCalculator(CreateInputFromData(input), subCalculatorFactory).CalculateThicknessCoverageLayer();
}
private static PipingCalculatorInput CreateInputFromData(PipingInput inputParameters)
Index: Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/PipingCalculatorTest.cs
===================================================================
diff -u -ra887863a3992744a394591e17072811eb9478ebc -ree0616189b53da348c17a4cf75328425beaf360b
--- Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/PipingCalculatorTest.cs (.../PipingCalculatorTest.cs) (revision a887863a3992744a394591e17072811eb9478ebc)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/PipingCalculatorTest.cs (.../PipingCalculatorTest.cs) (revision ee0616189b53da348c17a4cf75328425beaf360b)
@@ -3,9 +3,9 @@
using System.Linq;
using Core.Common.Base.Data;
-
+using Core.Common.TestUtil;
using NUnit.Framework;
-
+using Ringtoets.Piping.Calculation.SubCalculator;
using Ringtoets.Piping.Calculation.TestUtil;
using Ringtoets.Piping.Data;
@@ -15,12 +15,35 @@
public class PipingCalculatorTest
{
[Test]
+ public void Constructor_WithoutInput_ArgumentNullException()
+ {
+ // Call
+ TestDelegate call = () => new PipingCalculator(null, null);
+
+ // Assert
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "PipingCalculatorInput required for creating a PipingCalculator.");
+ }
+
+ [Test]
+ public void Constructor_FactoryNull_ArgumentNullException()
+ {
+ // Call
+ TestDelegate call = () => new PipingCalculator(new TestPipingInput().AsRealInput(), null);
+
+ // Assert
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "PipingSubCalculatorFactory required for creating a PipingCalculator.");
+ }
+
+ [Test]
public void Calculate_CompleteValidInput_ReturnsResultWithNoNaN()
{
+ // Setup
PipingCalculatorInput input = new TestPipingInput().AsRealInput();
- PipingCalculatorResult actual = new PipingCalculator(input).Calculate();
+ // Call
+ PipingCalculatorResult actual = new PipingCalculator(input, new PipingSubCalculatorFactory()).Calculate();
+ // Assert
Assert.IsNotNull(actual);
Assert.IsFalse(double.IsNaN(actual.UpliftZValue));
Assert.IsFalse(double.IsNaN(actual.UpliftFactorOfSafety));
@@ -35,7 +58,7 @@
{
// Setup
PipingCalculatorInput input = new TestPipingInput().AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -56,7 +79,7 @@
SeepageLength = seepageLength
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -78,7 +101,7 @@
ThicknessAquiferLayer = aquiferThickness
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -99,7 +122,7 @@
BeddingAngle = beddingAngle
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -121,7 +144,7 @@
PhreaticLevelExit = level
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -141,7 +164,7 @@
DampingFactorExit = 0
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -160,7 +183,7 @@
ThicknessCoverageLayer = 0
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -179,7 +202,7 @@
ThicknessAquiferLayer = 0
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -198,7 +221,7 @@
WaterVolumetricWeight = 0
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -224,7 +247,7 @@
ThicknessCoverageLayer = thicknessCoverageLayer
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -243,7 +266,7 @@
SurfaceLine = null,
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -262,7 +285,7 @@
SoilProfile = null,
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -284,7 +307,7 @@
})
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -310,7 +333,7 @@
})
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
@@ -333,7 +356,7 @@
ThicknessCoverageLayer = 0
}.AsRealInput();
- var calculation = new PipingCalculator(input);
+ var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory());
// Call
List validationMessages = calculation.Validate();
Index: Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/SubCalculator/PipingSubCalculatorFactoryTest.cs
===================================================================
diff -u -ra2675f58f4d57204df1b8378e9dc1134cd11186e -ree0616189b53da348c17a4cf75328425beaf360b
--- Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/SubCalculator/PipingSubCalculatorFactoryTest.cs (.../PipingSubCalculatorFactoryTest.cs) (revision a2675f58f4d57204df1b8378e9dc1134cd11186e)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/SubCalculator/PipingSubCalculatorFactoryTest.cs (.../PipingSubCalculatorFactoryTest.cs) (revision ee0616189b53da348c17a4cf75328425beaf360b)
@@ -1,19 +1,71 @@
using NUnit.Framework;
+using Ringtoets.Piping.Calculation.SubCalculator;
namespace Ringtoets.Piping.Calculation.Test.SubCalculator
{
[TestFixture]
public class PipingSubCalculatorFactoryTest
{
[Test]
- public void CreateHeaveCalculator_WithInput_CreatesHeaveCalculatorInstance()
+ public void Constructor_ReturnsNewInstance()
{
+ // Call
+ var factory = new PipingSubCalculatorFactory();
+
+ // Assert
+ Assert.IsInstanceOf(factory);
+ }
+
+ [Test]
+ public void CreateHeaveCalculator_WithInput_NewHeaveCalculator()
+ {
// Setup
+ var factory = new PipingSubCalculatorFactory();
// Call
+ var calculator = factory.CreateHeaveCalculator();
// Assert
+ Assert.IsInstanceOf(calculator);
+ }
+ [Test]
+ public void CreateUpliftCalculator_WithInput_NewUpliftCalculator()
+ {
+ // Setup
+ var factory = new PipingSubCalculatorFactory();
+
+ // Call
+ var calculator = factory.CreateUpliftCalculator();
+
+ // Assert
+ Assert.IsInstanceOf(calculator);
}
+
+ [Test]
+ public void CreateSellmeijerCalculator_WithInput_NewSellmeijerCalculator()
+ {
+ // Setup
+ var factory = new PipingSubCalculatorFactory();
+
+ // Call
+ var calculator = factory.CreateSellmeijerCalculator();
+
+ // Assert
+ Assert.IsInstanceOf(calculator);
+ }
+
+ [Test]
+ public void CreateEffectiveThicknessCalculator_WithInput_NewSellmeijerCalculator()
+ {
+ // Setup
+ var factory = new PipingSubCalculatorFactory();
+
+ // Call
+ var calculator = factory.CreateEffectiveThicknessCalculator();
+
+ // Assert
+ Assert.IsInstanceOf(calculator);
+ }
}
}
\ No newline at end of file