Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/GrassCoverErosionOutwardsConfigurationExporter.cs
===================================================================
diff -u -r90555cd02cecb2d187e60946deb3d5415cbb3b18 -r467a5dba1d4b29b2035d6d034a083125854077dc
--- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/GrassCoverErosionOutwardsConfigurationExporter.cs (.../GrassCoverErosionOutwardsConfigurationExporter.cs) (revision 90555cd02cecb2d187e60946deb3d5415cbb3b18)
+++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/GrassCoverErosionOutwardsConfigurationExporter.cs (.../GrassCoverErosionOutwardsConfigurationExporter.cs) (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -19,10 +19,56 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
+using Core.Common.Base.IO;
+using Core.Common.IO.Exceptions;
+using Core.Common.Utils;
+using log4net;
+using Ringtoets.Common.Data.Calculation;
+
namespace Ringtoets.GrassCoverErosionOutwards.IO
{
- public class GrassCoverErosionOutwardsConfigurationExporter
+ ///
+ /// Exports a grass cover erosion outwards configuration and stores it as an XML file.
+ ///
+ public class GrassCoverErosionOutwardsConfigurationExporter : IFileExporter
{
-
+ private static readonly ILog log = LogManager.GetLogger(typeof(GrassCoverErosionOutwardsConfigurationExporter));
+
+ private CalculationGroup calculationGroup;
+ private string filePath;
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// The calculation group to export.
+ /// The path of the XML file to export to.
+ /// Thrown when is null.
+ /// Thrown when is invalid.
+ public GrassCoverErosionOutwardsConfigurationExporter(CalculationGroup calculationGroup, string filePath)
+ {
+ if (calculationGroup == null)
+ {
+ throw new ArgumentNullException(nameof(calculationGroup));
+ }
+ IOUtils.ValidateFilePath(filePath);
+ this.calculationGroup = calculationGroup;
+ this.filePath = filePath;
+ }
+
+ public bool Export()
+ {
+ try
+ {
+ new GrassCoverErosionOutwardsConfigurationWriter().Write(calculationGroup, filePath);
+ }
+ catch (CriticalFileWriteException e)
+ {
+ log.ErrorFormat("{0} Er is geen configuratie geëxporteerd.", e.Message);
+ return false;
+ }
+
+ return true;
+ }
}
}
\ No newline at end of file
Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/GrassCoverErosionOutwardsConfigurationWriter.cs
===================================================================
diff -u -r90555cd02cecb2d187e60946deb3d5415cbb3b18 -r467a5dba1d4b29b2035d6d034a083125854077dc
--- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/GrassCoverErosionOutwardsConfigurationWriter.cs (.../GrassCoverErosionOutwardsConfigurationWriter.cs) (revision 90555cd02cecb2d187e60946deb3d5415cbb3b18)
+++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/GrassCoverErosionOutwardsConfigurationWriter.cs (.../GrassCoverErosionOutwardsConfigurationWriter.cs) (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -20,11 +20,16 @@
// All rights reserved.
using System.Xml;
+using Ringtoets.Common.Data.Calculation;
using Ringtoets.GrassCoverErosionOutwards.Data;
using Ringtoets.Revetment.IO;
namespace Ringtoets.GrassCoverErosionOutwards.IO
{
+ ///
+ /// A writer for writing out configurations of and
+ /// , to XML format.
+ ///
public class GrassCoverErosionOutwardsConfigurationWriter : WaveConditionsInputConfigurationWriter
{
protected override void WriteCalculation(GrassCoverErosionOutwardsWaveConditionsCalculation calculation, XmlWriter writer)
Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/Ringtoets.GrassCoverErosionOutwards.IO.csproj
===================================================================
diff -u -r90555cd02cecb2d187e60946deb3d5415cbb3b18 -r467a5dba1d4b29b2035d6d034a083125854077dc
--- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/Ringtoets.GrassCoverErosionOutwards.IO.csproj (.../Ringtoets.GrassCoverErosionOutwards.IO.csproj) (revision 90555cd02cecb2d187e60946deb3d5415cbb3b18)
+++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/Ringtoets.GrassCoverErosionOutwards.IO.csproj (.../Ringtoets.GrassCoverErosionOutwards.IO.csproj) (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -32,6 +32,10 @@
AllRules.ruleset
+
+ ..\..\..\..\packages\log4net.2.0.4\lib\net40-full\log4net.dll
+ True
+
@@ -49,6 +53,7 @@
Copying.licenseheader
+
@@ -61,6 +66,11 @@
Core.Common.IO
False
+
+ {F49BD8B2-332A-4C91-A196-8CCE0A2C7D98}
+ Core.Common.Utils
+ False
+
{d4200f43-3f72-4f42-af0a-8ced416a38ec}
Ringtoets.Common.Data
Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/packages.config
===================================================================
diff -u
--- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/packages.config (revision 0)
+++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/packages.config (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -0,0 +1,26 @@
+
+
+
+
+
\ No newline at end of file
Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/GrassCoverErosionOutwardsConfigurationExporterTest.cs
===================================================================
diff -u -r90555cd02cecb2d187e60946deb3d5415cbb3b18 -r467a5dba1d4b29b2035d6d034a083125854077dc
--- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/GrassCoverErosionOutwardsConfigurationExporterTest.cs (.../GrassCoverErosionOutwardsConfigurationExporterTest.cs) (revision 90555cd02cecb2d187e60946deb3d5415cbb3b18)
+++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/GrassCoverErosionOutwardsConfigurationExporterTest.cs (.../GrassCoverErosionOutwardsConfigurationExporterTest.cs) (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -19,13 +19,163 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
+using System.IO;
+using System.Security.AccessControl;
+using Core.Common.Base.Data;
+using Core.Common.Base.IO;
+using Core.Common.TestUtil;
using NUnit.Framework;
+using Ringtoets.Common.Data.Calculation;
+using Ringtoets.Common.Data.Hydraulics;
+using Ringtoets.Common.Data.TestUtil;
+using Ringtoets.GrassCoverErosionOutwards.Data;
namespace Ringtoets.GrassCoverErosionOutwards.IO.Test
{
[TestFixture]
public class GrassCoverErosionOutwardsConfigurationExporterTest
{
-
+ [Test]
+ public void Constructor_ExpectedValues()
+ {
+ // Call
+ var exporter = new GrassCoverErosionOutwardsConfigurationExporter(new CalculationGroup(), "test.xml");
+
+ // Assert
+ Assert.IsInstanceOf(exporter);
+ }
+
+ [Test]
+ public void Constructor_CalculationGroupNull_ThrowArgumentNullException()
+ {
+ // Call
+ TestDelegate test = () => new GrassCoverErosionOutwardsConfigurationExporter(null, "test.xml");
+
+ // Assert
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("calculationGroup", exception.ParamName);
+ }
+
+ [Test]
+ [TestCase("")]
+ [TestCase(" ")]
+ [TestCase("c:\\>")]
+ public void Constructor_FilePathInvalid_ThrowArgumentException(string filePath)
+ {
+ // Call
+ TestDelegate test = () => new GrassCoverErosionOutwardsConfigurationExporter(new CalculationGroup(), filePath);
+
+ // Assert
+ Assert.Throws(test);
+ }
+
+ [Test]
+ public void Export_ValidData_ReturnTrueAndWritesFile()
+ {
+ // Setup
+ string filePath = TestHelper.GetScratchPadPath($"{nameof(Export_ValidData_ReturnTrueAndWritesFile)}.xml");
+
+ var calculation1 = new GrassCoverErosionOutwardsWaveConditionsCalculation
+ {
+ Name = "Calculation A",
+ InputParameters =
+ {
+ ForeshoreProfile = new TestForeshoreProfile("ForeshoreA")
+ }
+ };
+
+ var calculation2 = new GrassCoverErosionOutwardsWaveConditionsCalculation
+ {
+ Name = "PK001_0002 W1-6_4_1D1",
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "HydraulicLocationA", 0, 0),
+ UseBreakWater = true
+ }
+ };
+
+ var calculationGroup2 = new CalculationGroup("PK001_0002", false)
+ {
+ Children =
+ {
+ calculation2
+ }
+ };
+
+ var calculationGroup = new CalculationGroup("PK001_0001", false)
+ {
+ Children =
+ {
+ calculation1,
+ calculationGroup2
+ }
+ };
+
+ var rootGroup = new CalculationGroup("root", false)
+ {
+ Children =
+ {
+ calculationGroup
+ }
+ };
+
+ var exporter = new GrassCoverErosionOutwardsConfigurationExporter(rootGroup, filePath);
+
+ try
+ {
+ // Call
+ bool isExported = exporter.Export();
+
+ // Assert
+ Assert.IsTrue(isExported);
+ Assert.IsTrue(File.Exists(filePath));
+
+ string actualXml = File.ReadAllText(filePath);
+ string testDirSubPath = Path.Combine(nameof(GrassCoverErosionOutwardsConfigurationExporter), "fullValidConfiguration.xml");
+ string expectedXmlFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionOutwards.IO,
+ testDirSubPath);
+ string expectedXml = File.ReadAllText(expectedXmlFilePath);
+
+ Assert.AreEqual(expectedXml, actualXml);
+ }
+ finally
+ {
+ File.Delete(filePath);
+ }
+ }
+
+ [Test]
+ public void Export_InvalidDirectoryRights_LogErrorAndReturnFalse()
+ {
+ // Setup
+ var calculationGroup = new CalculationGroup
+ {
+ Children =
+ {
+ new GrassCoverErosionOutwardsWaveConditionsCalculation()
+ }
+ };
+
+ string directoryPath = TestHelper.GetScratchPadPath(nameof(Export_InvalidDirectoryRights_LogErrorAndReturnFalse));
+ using (var disposeHelper = new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), nameof(Export_InvalidDirectoryRights_LogErrorAndReturnFalse)))
+ {
+ string filePath = Path.Combine(directoryPath, "test.xml");
+
+ var exporter = new GrassCoverErosionOutwardsConfigurationExporter(calculationGroup, filePath);
+
+ disposeHelper.LockDirectory(FileSystemRights.Write);
+
+ // Call
+ var isExported = true;
+ Action call = () => isExported = exporter.Export();
+
+ // Assert
+ string expectedMessage = $"Er is een onverwachte fout opgetreden tijdens het schrijven van het bestand '{filePath}'. "
+ + "Er is geen configuratie geëxporteerd.";
+ TestHelper.AssertLogMessageIsGenerated(call, expectedMessage);
+ Assert.IsFalse(isExported);
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/test-data/GrassCoverErosionOutwardsConfigurationExporter/fullValidConfiguration.xml
===================================================================
diff -u
--- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/test-data/GrassCoverErosionOutwardsConfigurationExporter/fullValidConfiguration.xml (revision 0)
+++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/test-data/GrassCoverErosionOutwardsConfigurationExporter/fullValidConfiguration.xml (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -0,0 +1,37 @@
+
+
+
+
\ No newline at end of file
Index: Ringtoets/Revetment/src/Ringtoets.Revetment.IO/WaveConditionsInputConfigurationWriter.cs
===================================================================
diff -u -r90555cd02cecb2d187e60946deb3d5415cbb3b18 -r467a5dba1d4b29b2035d6d034a083125854077dc
--- Ringtoets/Revetment/src/Ringtoets.Revetment.IO/WaveConditionsInputConfigurationWriter.cs (.../WaveConditionsInputConfigurationWriter.cs) (revision 90555cd02cecb2d187e60946deb3d5415cbb3b18)
+++ Ringtoets/Revetment/src/Ringtoets.Revetment.IO/WaveConditionsInputConfigurationWriter.cs (.../WaveConditionsInputConfigurationWriter.cs) (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -24,6 +24,7 @@
using System.Xml;
using Ringtoets.Common.Data.Calculation;
using Ringtoets.Common.Data.DikeProfiles;
+using Ringtoets.Common.Data.Hydraulics;
using Ringtoets.Common.IO.Schema;
using Ringtoets.Common.IO.Writers;
using Ringtoets.Revetment.Data;
@@ -48,10 +49,9 @@
writer.WriteStartElement(ConfigurationSchemaIdentifiers.CalculationElement);
writer.WriteAttributeString(ConfigurationSchemaIdentifiers.NameAttribute, name);
+ WriteHydraulicBoundaryLocation(input.HydraulicBoundaryLocation, writer);
+
writer.WriteElementString(
- WaveConditionsInputConfigurationSchemaIdentifiers.HydraulicBoundaryLocationElement,
- input.HydraulicBoundaryLocation.Name);
- writer.WriteElementString(
WaveConditionsInputConfigurationSchemaIdentifiers.UpperBoundaryRevetment,
XmlConvert.ToString(input.UpperBoundaryRevetment));
writer.WriteElementString(
@@ -66,10 +66,10 @@
writer.WriteElementString(
WaveConditionsInputConfigurationSchemaIdentifiers.StepSize,
string.Format(CultureInfo.InvariantCulture, "{0:0.0}", input.StepSize.AsValue()));
+
+ WriteForeshoreProfile(input.ForeshoreProfile, writer);
+
writer.WriteElementString(
- WaveConditionsInputConfigurationSchemaIdentifiers.ForeshoreProfile,
- input.ForeshoreProfile.Name);
- writer.WriteElementString(
WaveConditionsInputConfigurationSchemaIdentifiers.Orientation,
XmlConvert.ToString(input.Orientation));
@@ -78,26 +78,56 @@
writer.WriteEndElement();
}
+ private static void WriteHydraulicBoundaryLocation(HydraulicBoundaryLocation hydraulicBoundaryLocation, XmlWriter writer)
+ {
+ if (hydraulicBoundaryLocation != null)
+ {
+ writer.WriteElementString(
+ WaveConditionsInputConfigurationSchemaIdentifiers.HydraulicBoundaryLocationElement,
+ hydraulicBoundaryLocation.Name);
+ }
+ }
+
+ private static void WriteForeshoreProfile(ForeshoreProfile foreshoreProfile, XmlWriter writer)
+ {
+ if (foreshoreProfile != null)
+ {
+ writer.WriteElementString(
+ WaveConditionsInputConfigurationSchemaIdentifiers.ForeshoreProfile,
+ foreshoreProfile.Name);
+ }
+ }
+
private static void WriteWaveReduction(WaveConditionsInput input, XmlWriter writer)
{
writer.WriteStartElement(WaveConditionsInputConfigurationSchemaIdentifiers.WaveReduction);
writer.WriteElementString(
WaveConditionsInputConfigurationSchemaIdentifiers.UseBreakWater,
XmlConvert.ToString(input.UseBreakWater));
+
+ WriteBreakWaterProperties(input.BreakWater, writer);
+
writer.WriteElementString(
- WaveConditionsInputConfigurationSchemaIdentifiers.BreakWaterType,
- BreakWaterTypeAsXmlString(input.BreakWater.Type));
- writer.WriteElementString(
- WaveConditionsInputConfigurationSchemaIdentifiers.BreakWaterHeight,
- XmlConvert.ToString(input.BreakWater.Height));
- writer.WriteElementString(
WaveConditionsInputConfigurationSchemaIdentifiers.UseForeshore,
XmlConvert.ToString(input.UseForeshore));
writer.WriteEndElement();
}
+ private static void WriteBreakWaterProperties(BreakWater breakWater, XmlWriter writer)
+ {
+ if (breakWater != null)
+ {
+ writer.WriteElementString(
+ WaveConditionsInputConfigurationSchemaIdentifiers.BreakWaterType,
+ BreakWaterTypeAsXmlString(breakWater.Type));
+ writer.WriteElementString(
+ WaveConditionsInputConfigurationSchemaIdentifiers.BreakWaterHeight,
+ XmlConvert.ToString(breakWater.Height));
+ }
+ }
+
private static string BreakWaterTypeAsXmlString(BreakWaterType type)
{
switch (type)
Index: Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/WaveConditionsInputConfigurationWriterTest.cs
===================================================================
diff -u -r90555cd02cecb2d187e60946deb3d5415cbb3b18 -r467a5dba1d4b29b2035d6d034a083125854077dc
--- Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/WaveConditionsInputConfigurationWriterTest.cs (.../WaveConditionsInputConfigurationWriterTest.cs) (revision 90555cd02cecb2d187e60946deb3d5415cbb3b18)
+++ Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/WaveConditionsInputConfigurationWriterTest.cs (.../WaveConditionsInputConfigurationWriterTest.cs) (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -48,18 +48,61 @@
}
[Test]
- public void WriteConfiguration_SingleCalculation_WritesCompleteConfigurationToFile()
+ public void WriteConfiguration_SparseCalculation_WritesSparseConfigurationToFile()
{
// Setup
- string filePath = TestHelper.GetScratchPadPath("WriteConfiguration_SingleCalculation.xml");
+ string filePath = TestHelper.GetScratchPadPath(
+ $"{nameof(WriteConfiguration_SparseCalculation_WritesSparseConfigurationToFile)}.xml");
+
string expectedXmlFilePath = TestHelper.GetTestDataPath(
TestDataPath.Ringtoets.Revetment.IO,
+ Path.Combine(nameof(WaveConditionsInputConfigurationWriter), "sparseConfiguration.xml"));
+
+ var calculation = new SimpleWaveConditionsCalculation
+ {
+ Name = "Berekening 1"
+ };
+
+ try
+ {
+ using (XmlWriter xmlWriter = XmlWriter.Create(filePath, new XmlWriterSettings
+ {
+ Indent = true
+ }))
+ {
+ var writer = new SimpleWaveConditionsInputConfigurationWriter();
+
+ // Call
+ writer.PublicWriteCalculation(calculation, xmlWriter);
+ }
+
+ // Assert
+ string actualXml = File.ReadAllText(filePath);
+ string expectedXml = File.ReadAllText(expectedXmlFilePath);
+
+ Assert.AreEqual(expectedXml, actualXml);
+ }
+ finally
+ {
+ File.Delete(filePath);
+ }
+ }
+
+ [Test]
+ public void WriteConfiguration_CompleteCalculation_WritesCompleteConfigurationToFile()
+ {
+ // Setup
+ string filePath = TestHelper.GetScratchPadPath(
+ $"{nameof(WriteConfiguration_CompleteCalculation_WritesCompleteConfigurationToFile)}.xml");
+
+ string expectedXmlFilePath = TestHelper.GetTestDataPath(
+ TestDataPath.Ringtoets.Revetment.IO,
Path.Combine(nameof(WaveConditionsInputConfigurationWriter), "completeConfiguration.xml"));
var calculation = new SimpleWaveConditionsCalculation
{
Name = "Berekening 1",
- Input = new WaveConditionsInput
+ Input =
{
HydraulicBoundaryLocation = new TestHydraulicBoundaryLocation("Locatie1"),
UpperBoundaryRevetment = (RoundedDouble) 1.5,
@@ -129,6 +172,6 @@
throw new System.NotImplementedException();
}
- public WaveConditionsInput Input { get; set; }
+ public WaveConditionsInput Input { get; } = new WaveConditionsInput();
}
}
\ No newline at end of file
Index: Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/test-data/WaveConditionsInputConfigurationWriter/sparseConfiguration.xml
===================================================================
diff -u
--- Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/test-data/WaveConditionsInputConfigurationWriter/sparseConfiguration.xml (revision 0)
+++ Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/test-data/WaveConditionsInputConfigurationWriter/sparseConfiguration.xml (revision 467a5dba1d4b29b2035d6d034a083125854077dc)
@@ -0,0 +1,15 @@
+
+
+ NaN
+ NaN
+ NaN
+ NaN
+ 0.5
+ NaN
+
+ false
+ havendam
+ 0
+ false
+
+
\ No newline at end of file