Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/XMLSoilProfile2DConverter.cs
===================================================================
diff -u -r3034 -r3043
--- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/XMLSoilProfile2DConverter.cs (.../XMLSoilProfile2DConverter.cs) (revision 3034)
+++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/XMLSoilProfile2DConverter.cs (.../XMLSoilProfile2DConverter.cs) (revision 3043)
@@ -25,6 +25,7 @@
using Deltares.DamEngine.Io.XmlInput;
using Deltares.Geometry;
using Deltares.Geotechnics.Soils;
+using Deltares.Standard.Extensions;
using SoilProfile2D = Deltares.Geotechnics.Soils.SoilProfile2D;
using XMLSoilProfile2D = Deltares.DamEngine.Io.XmlInput.SoilProfile2D;
using XMLSoilLayer2D = Deltares.DamEngine.Io.XmlInput.SoilProfile2DLayer2D;
@@ -40,13 +41,14 @@
public static class XMLSoilProfile2DConverter
{
///
- /// Creates a new instance based on .
+ /// Converts the to a new instance of .
///
- /// The to create a
- /// for.
+ /// The to convert.
/// A .
/// Thrown when
/// is null.
+ /// Thrown when
+ /// could not be successfully converted.
public static XMLSoilProfile2D Convert(SoilProfile2D soilProfile)
{
if (soilProfile == null)
@@ -71,30 +73,53 @@
return convertedSoilProfile;
}
+ ///
+ /// Converts the input arguments to a new instance of .
+ ///
+ /// The soil layer to convert.
+ /// A .
+ /// Thrown when
+ /// could not be successfully created from .
private static XMLSoilLayer2D ConvertSoilLayer(SoilLayer2D soilLayer)
{
+ string soilLayerName = soilLayer.Name;
var convertedLayer = new XMLSoilLayer2D
{
- SoilName = soilLayer.Name,
- IsAquifer = soilLayer.IsAquifer
+ SoilName = soilLayerName,
+ IsAquifer = soilLayer.IsAquifer,
+ WaterpressureInterpolationModel = 2 // Corresponds with the 'hydrostatic' value in DSoilModel
};
GeometrySurface surface = soilLayer.GeometrySurface;
- convertedLayer.Surface = ConvertSGeometrySurface(surface);
+ convertedLayer.Surface = ConvertGeometrySurface(soilLayerName, surface);
return convertedLayer;
}
- private static XMLSoilLayer2DSurface ConvertSGeometrySurface(GeometrySurface surface)
+ ///
+ /// Converts a to a .
+ ///
+ /// The name of the layer to create a xml soil layer surface for.
+ /// The surface to create a xml soil layer surface for.
+ /// A .
+ /// Thrown when
+ /// could not be successfully created from .
+ private static XMLSoilLayer2DSurface ConvertGeometrySurface(string layerName, GeometrySurface surface)
{
var convertedSurface = new XMLSoilLayer2DSurface
{
- OuterLoop = ConvertOuterLoop(surface.OuterLoop.Points),
+ OuterLoop = ConvertOuterLoop(surface.OuterLoop.Points)
};
- // TODO: throw exception when there are more inner loops
var innerLoop = surface.InnerLoops;
- convertedSurface.Innerloop = !surface.InnerLoops.Any()
+ int nrOfInnerLoops = innerLoop.Count;
+ if (nrOfInnerLoops > 1)
+ {
+ // Note that the exception message does not match of what is being asserted.
+ throw new ConversionException($"{layerName} contains more than 1 inner loop.", null);
+ }
+
+ convertedSurface.Innerloop = nrOfInnerLoops == 0
? new XMLSurfaceInnerPoint[0]
: ConvertInnerLoop(innerLoop.Single().Points);
Index: DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/XMLSoilProfile2DConverterTest.cs
===================================================================
diff -u -r3034 -r3043
--- DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/XMLSoilProfile2DConverterTest.cs (.../XMLSoilProfile2DConverterTest.cs) (revision 3034)
+++ DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/XMLSoilProfile2DConverterTest.cs (.../XMLSoilProfile2DConverterTest.cs) (revision 3043)
@@ -25,6 +25,7 @@
using Deltares.Dam.Data.DamEngineIo;
using Deltares.Geometry;
using Deltares.Geotechnics.Soils;
+using Deltares.Standard.Extensions;
using NUnit.Framework;
using SoilProfile2D = Deltares.Geotechnics.Soils.SoilProfile2D;
using XMLSoilProfile2D = Deltares.DamEngine.Io.XmlInput.SoilProfile2D;
@@ -38,7 +39,6 @@
[TestFixture]
public class XMLSoilProfile2DConverterTest
{
-
[Test]
public void Convert_SoilProfileNull_ThrowsArgumentNullException()
{
@@ -53,21 +53,14 @@
///
/// -------------------------------------------------------------
- /// Layer three
+ /// Layer Two
/// |----------------------------------------------------|
/// | |
/// | |
/// | |
/// |----------------------------------------------------|
///
/// -------------------------------------------------------------
- /// Layer two
- /// |------------------------| |---------------------|
- /// | | | |
- /// | | | |
- /// |------------------------| |---------------------|
- ///
- /// -------------------------------------------------------------
/// Layer one
///
///
@@ -92,49 +85,27 @@
var layerTwo = new SoilLayer2D
{
Name = "LayerTwo",
- IsAquifer = true,
- GeometrySurface = new GeometrySurface()
- };
-// layerTwo.GeometrySurface.InnerLoops.AddRange(new []
-// {
-// CreateLoop(new GeometryPoint(6, 0, -9),
-// new GeometryPoint(9, 0, -9),
-// new GeometryPoint(6, 0, -6),
-// new GeometryPoint(9, 0, -6)),
-// CreateLoop(new GeometryPoint(1, 0, -9),
-// new GeometryPoint(4, 0, -9),
-// new GeometryPoint(1, 0, -6),
-// new GeometryPoint(4, 0, -6))
-// });
- layerTwo.GeometrySurface.OuterLoop = CreateLoop(new GeometryPoint(0, 0, -10),
- new GeometryPoint(10, 0, -10),
- new GeometryPoint(0, 0, -5),
- new GeometryPoint(10, 0, -5));
-
- var layerThree = new SoilLayer2D
- {
- Name = "LayerThree",
IsAquifer = false,
GeometrySurface = new GeometrySurface()
};
- layerThree.GeometrySurface.InnerLoops.AddRange(new[]
+ layerTwo.GeometrySurface.InnerLoops.AddRange(new[]
{
CreateLoop(new GeometryPoint(6, 0, -4),
new GeometryPoint(9, 0, -4),
new GeometryPoint(6, 0, -1),
new GeometryPoint(9, 0, -1))
});
- layerThree.GeometrySurface.OuterLoop = CreateLoop(new GeometryPoint(0, 0, -5),
- new GeometryPoint(10, 0, -5),
+ layerTwo.GeometrySurface.OuterLoop = CreateLoop(new GeometryPoint(0, 0, -10),
+ new GeometryPoint(10, 0, -10),
new GeometryPoint(0, 0, 0),
new GeometryPoint(10, 0, 0));
var soilProfile = new SoilProfile2D
{
Name = "SoilProfile2D"
};
+ soilProfile.Surfaces.Add(layerOne);
soilProfile.Surfaces.Add(layerTwo);
- soilProfile.Surfaces.Add(layerThree);
// Call
XMLSoilProfile2D convertedProfile = XMLSoilProfile2DConverter.Convert(soilProfile);
@@ -151,12 +122,55 @@
}
}
+ [Test]
+ public void Convert_SoilProfileContainsSoilLayerWithTwoInnerLoops_ThrowsConversionException()
+ {
+ // Setup
+ const string invalidLayerName = "invalidLayer";
+ var invalidLayer = new SoilLayer2D
+ {
+ Name = invalidLayerName,
+ IsAquifer = true,
+ GeometrySurface = new GeometrySurface()
+ };
+ invalidLayer.GeometrySurface.InnerLoops.AddRange(new []
+ {
+ CreateLoop(new GeometryPoint(6, 0, -9),
+ new GeometryPoint(9, 0, -9),
+ new GeometryPoint(6, 0, -6),
+ new GeometryPoint(9, 0, -6)),
+ CreateLoop(new GeometryPoint(1, 0, -9),
+ new GeometryPoint(4, 0, -9),
+ new GeometryPoint(1, 0, -6),
+ new GeometryPoint(4, 0, -6))
+ });
+ invalidLayer.GeometrySurface.OuterLoop = CreateLoop(new GeometryPoint(0, 0, -10),
+ new GeometryPoint(10, 0, -10),
+ new GeometryPoint(0, 0, -5),
+ new GeometryPoint(10, 0, -5));
+
+ var soilProfile = new SoilProfile2D
+ {
+ Name = "SoilProfile2D"
+ };
+ soilProfile.Surfaces.Add(invalidLayer);
+
+ // Call
+ TestDelegate call = () => XMLSoilProfile2DConverter.Convert(soilProfile);
+
+ // Assert
+ Assert.That(call, Throws.Exception.TypeOf()
+ .With.Message.EqualTo("No soil assigned contains more than 1 inner loop."));
+ }
+
private static void AssertLayer(SoilLayer2D soilLayer, XMLSoilLayer2D convertedSoilLayer)
{
Assert.That(convertedSoilLayer.SoilName, Is.EqualTo(soilLayer.Name));
Assert.That(convertedSoilLayer.IsAquifer, Is.EqualTo(soilLayer.IsAquifer));
- Assert.That(convertedSoilLayer.WaterpressureInterpolationModel, Is.EqualTo(0)); // Water pressure interpolation model is not instantiated.
+ // Water pressure interpolation model should be set to Hydrostatic as default (which is value = 2 in DSoilModel)
+ Assert.That(convertedSoilLayer.WaterpressureInterpolationModel, Is.EqualTo(2));
+
AssertSurface(soilLayer.GeometrySurface, convertedSoilLayer.Surface);
}