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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +