Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Exporters/CalculationGroupWriter.cs
===================================================================
diff -u -raa08f3d944eb8f045be344a6c062b1df32cb7cfa -r20d1c148cc2c2ed0ea3dd617a57cd411265df289
--- Ringtoets/Piping/src/Ringtoets.Piping.IO/Exporters/CalculationGroupWriter.cs (.../CalculationGroupWriter.cs) (revision aa08f3d944eb8f045be344a6c062b1df32cb7cfa)
+++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Exporters/CalculationGroupWriter.cs (.../CalculationGroupWriter.cs) (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -23,6 +23,8 @@
using System.Xml;
using Core.Common.IO.Exceptions;
using Ringtoets.Common.Data.Calculation;
+using Ringtoets.Common.Data.Probabilistics;
+using Ringtoets.Piping.Data;
using CoreCommonUtilsResources = Core.Common.Utils.Properties.Resources;
namespace Ringtoets.Piping.IO.Exporters
@@ -52,15 +54,97 @@
try
{
- using (XmlWriter writer = XmlWriter.Create(filePath))
+ var settings = new XmlWriterSettings
{
-
+ Indent = true,
+ IndentChars = "\t"
+ };
+
+ using (XmlWriter writer = XmlWriter.Create(filePath, settings))
+ {
+ writer.WriteStartDocument();
+ writer.WriteStartElement("root");
+
+ WriteCalculationGroupToFile(rootCalculationGroup, writer);
+
+ writer.WriteEndElement();
+ writer.WriteEndDocument();
}
}
catch (SystemException e)
{
throw new CriticalFileWriteException(string.Format(CoreCommonUtilsResources.Error_General_output_error_0, filePath), e);
}
}
+
+ private static void WriteCalculationGroupToFile(CalculationGroup calculationGroup, XmlWriter writer)
+ {
+ writer.WriteStartElement("folder");
+ writer.WriteAttributeString("naam", calculationGroup.Name);
+
+ foreach (ICalculationBase child in calculationGroup.Children)
+ {
+ var innerGroup = child as CalculationGroup;
+ if (innerGroup != null)
+ {
+ WriteCalculationGroupToFile(innerGroup, writer);
+ }
+
+ var calculation = child as PipingCalculation;
+ if (calculation != null)
+ {
+ WriteCalculationToFile(calculation, writer);
+ }
+ }
+
+ writer.WriteEndElement();
+ }
+
+ private static void WriteCalculationToFile(PipingCalculation calculation, XmlWriter writer)
+ {
+ writer.WriteStartElement("berekening");
+ writer.WriteAttributeString("naam", calculation.Name);
+
+ PipingInput calculationInputParameters = calculation.InputParameters;
+
+ if (calculationInputParameters.HydraulicBoundaryLocation != null)
+ {
+ writer.WriteElementString("hrlocatie", calculationInputParameters.HydraulicBoundaryLocation.Name);
+ }
+
+ if (calculationInputParameters.SurfaceLine != null)
+ {
+ writer.WriteElementString("profielschematisatie", calculationInputParameters.SurfaceLine.Name);
+ writer.WriteElementString("intredepunt", calculationInputParameters.EntryPointL.ToString());
+ writer.WriteElementString("uittredepunt", calculationInputParameters.ExitPointL.ToString());
+ }
+
+ if (calculationInputParameters.StochasticSoilModel != null)
+ {
+ writer.WriteElementString("ondergrondmodel", calculationInputParameters.StochasticSoilModel.Name);
+ }
+
+ if (calculationInputParameters.StochasticSoilProfile.SoilProfile != null)
+ {
+ writer.WriteElementString("ondergrondschematisatie", calculationInputParameters.StochasticSoilProfile.SoilProfile.Name);
+ }
+
+ WriteDistribution(calculationInputParameters.PhreaticLevelExit, "polderpeil", writer);
+ WriteDistribution(calculationInputParameters.DampingFactorExit, "dempingsfactor", writer);
+
+
+ writer.WriteEndElement();
+ }
+
+ private static void WriteDistribution(IDistribution distribution, string elementName, XmlWriter writer)
+ {
+ writer.WriteStartElement("stochast");
+ writer.WriteAttributeString("naam", elementName);
+
+ writer.WriteElementString("verwachtingswaarde", distribution.Mean.ToString());
+ writer.WriteElementString("standaardafwijking", distribution.StandardDeviation.ToString());
+
+ writer.WriteEndElement();
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Exporters/CalculationGroupWriterTest.cs
===================================================================
diff -u -raa08f3d944eb8f045be344a6c062b1df32cb7cfa -r20d1c148cc2c2ed0ea3dd617a57cd411265df289
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Exporters/CalculationGroupWriterTest.cs (.../CalculationGroupWriterTest.cs) (revision aa08f3d944eb8f045be344a6c062b1df32cb7cfa)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Exporters/CalculationGroupWriterTest.cs (.../CalculationGroupWriterTest.cs) (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -22,11 +22,16 @@
using System;
using System.IO;
using System.Security.AccessControl;
+using Core.Common.Base.Data;
using Core.Common.IO.Exceptions;
using Core.Common.TestUtil;
using NUnit.Framework;
using Ringtoets.Common.Data.Calculation;
+using Ringtoets.Common.Data.Hydraulics;
+using Ringtoets.Piping.Data;
+using Ringtoets.Piping.Data.TestUtil;
using Ringtoets.Piping.IO.Exporters;
+using Ringtoets.Piping.Primitives;
namespace Ringtoets.Piping.IO.Test.Exporters
{
@@ -112,5 +117,76 @@
Directory.Delete(directoryPath, true);
}
}
+
+ [Test]
+ public void WriteCalculationGroups_ValidData_ValidFile()
+ {
+ // Setup
+ string directoryPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Piping.IO,
+ "CalculationGroupWriter");
+ Directory.CreateDirectory(directoryPath);
+ string filePath = Path.Combine(directoryPath, "test.xml");
+
+ var calculationGroup = new CalculationGroup("PK001_0001", false);
+
+ var calculation = PipingCalculationScenarioFactory.CreatePipingCalculationScenarioWithValidInput();
+ calculation.Name = "PK001_0001 W1-6_0_1D1";
+ calculation.InputParameters.HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "PUNT_KAT_18", 0, 0);
+ calculation.InputParameters.SurfaceLine.Name = "PK001_0001";
+ calculation.InputParameters.StochasticSoilModel = new StochasticSoilModel(1, "PK001_0001_Piping", string.Empty);
+ calculation.InputParameters.StochasticSoilProfile = new StochasticSoilProfile(0, SoilProfileType.SoilProfile1D, 0)
+ {
+ SoilProfile = new PipingSoilProfile("W1-6_0_1D1", 0, new[]
+ {
+ new PipingSoilLayer(0)
+ }, SoilProfileType.SoilProfile1D, 0)
+ };
+ calculation.InputParameters.PhreaticLevelExit.Mean = (RoundedDouble) 0;
+ calculation.InputParameters.PhreaticLevelExit.StandardDeviation = (RoundedDouble) 0.1;
+ calculation.InputParameters.DampingFactorExit.Mean = (RoundedDouble) 0.7;
+ calculation.InputParameters.DampingFactorExit.StandardDeviation = (RoundedDouble) 0.1;
+
+ calculationGroup.Children.Add(calculation);
+
+ var calculation2 = PipingCalculationScenarioFactory.CreatePipingCalculationScenarioWithValidInput();
+ calculation2.Name = "PK001_0002 W1-6_4_1D1";
+ calculation2.InputParameters.HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "PUNT_SCH_17", 0, 0);
+ calculation2.InputParameters.SurfaceLine.Name = "PK001_0002";
+ calculation2.InputParameters.StochasticSoilModel = new StochasticSoilModel(1, "PK001_0002_Piping", string.Empty);
+ calculation2.InputParameters.StochasticSoilProfile = new StochasticSoilProfile(0, SoilProfileType.SoilProfile1D, 0)
+ {
+ SoilProfile = new PipingSoilProfile("W1-6_4_1D1", 0, new []
+ {
+ new PipingSoilLayer(0)
+ }, SoilProfileType.SoilProfile1D, 0)
+ };
+ calculation2.InputParameters.PhreaticLevelExit.Mean = (RoundedDouble)0;
+ calculation2.InputParameters.PhreaticLevelExit.StandardDeviation = (RoundedDouble)0.1;
+ calculation2.InputParameters.DampingFactorExit.Mean = (RoundedDouble)0.7;
+ calculation2.InputParameters.DampingFactorExit.StandardDeviation = (RoundedDouble)0.1;
+
+ var calculationGroup2 = new CalculationGroup("PK001_0002", false);
+ calculationGroup2.Children.Add(calculation2);
+ calculationGroup.Children.Add(calculationGroup2);
+
+ try
+ {
+ // Call
+ CalculationGroupWriter.WriteCalculationGroups(calculationGroup, filePath);
+
+ // Assert
+ Assert.IsTrue(File.Exists(filePath));
+
+ var actualXml = File.ReadAllText(filePath);
+ var expectedXml = File.ReadAllText(Path.Combine(directoryPath, "folder_with_subfolder_and_calculation.xml"));
+
+
+ Assert.AreEqual(expectedXml, actualXml);
+ }
+ finally
+ {
+ File.Delete(filePath);
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_hydraulic_location.xml
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_hydraulic_location.xml (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_hydraulic_location.xml (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -0,0 +1,18 @@
+
+
+
+ PK001_0001
+ 10.00
+ 106.13
+ PK001_0001_Piping
+ W1-6_0_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_soilmodel.xml
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_soilmodel.xml (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_soilmodel.xml (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -0,0 +1,19 @@
+
+
+
+ PUNT_KAT_18
+ PK001_0001
+ 10.00
+ 106.13
+ PK001_0001_Piping
+ W1-6_0_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_soilprofile.xml
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_soilprofile.xml (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_soilprofile.xml (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -0,0 +1,18 @@
+
+
+
+ PUNT_KAT_18
+ PK001_0001
+ 10.00
+ 106.13
+ PK001_0001_Piping
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_surfaceline.xml
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_surfaceline.xml (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/calculation_without_surfaceline.xml (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -0,0 +1,16 @@
+
+
+
+ PUNT_KAT_18
+ PK001_0001_Piping
+ W1-6_0_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/folder_and_calculation.xml
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/folder_and_calculation.xml (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/folder_and_calculation.xml (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -0,0 +1,37 @@
+
+
+
+
+ PUNT_KAT_18
+ PK001_0001
+ 10.00
+ 106.13
+ PK001_0001_Piping
+ W1-6_0_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
+
+ PUNT_SCH_17
+ PK001_0002
+ 10.00
+ 106.13
+ PK001_0002_Piping
+ W1-6_4_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/folder_with_subfolder_and_calculation.xml
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/folder_with_subfolder_and_calculation.xml (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/folder_with_subfolder_and_calculation.xml (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -0,0 +1,39 @@
+
+
+
+
+ PUNT_KAT_18
+ PK001_0001
+ 0.00
+ 0.20
+ PK001_0001_Piping
+ W1-6_0_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
+
+ PUNT_SCH_17
+ PK001_0002
+ 0.00
+ 0.20
+ PK001_0002_Piping
+ W1-6_4_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
+
+
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/two_folders_with_calculation.xml
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/two_folders_with_calculation.xml (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/two_folders_with_calculation.xml (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -0,0 +1,39 @@
+
+
+
+
+ PUNT_KAT_18
+ PK001_0001
+ 10.00
+ 106.13
+ PK001_0001_Piping
+ W1-6_0_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
+
+
+ PUNT_SCH_17
+ PK001_0002
+ 10.00
+ 106.13
+ PK001_0002_Piping
+ W1-6_4_1D1
+
+ 0.000
+ 0.100
+
+
+ 0.700
+ 0.100
+
+
+
+
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/validation.xsd
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/validation.xsd (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/CalculationGroupWriter/validation.xsd (revision 20d1c148cc2c2ed0ea3dd617a57cd411265df289)
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+