Index: Ringtoets/Common/src/Ringtoets.Common.IO/Schema/ConfigurationSchemaIdentifiers.cs =================================================================== diff -u -r2923096aeb41e1fb5d4ba0ad43ccb9f95ca7407a -r7ce0229b2d4293c464479e448b092c7f83eb94c3 --- Ringtoets/Common/src/Ringtoets.Common.IO/Schema/ConfigurationSchemaIdentifiers.cs (.../ConfigurationSchemaIdentifiers.cs) (revision 2923096aeb41e1fb5d4ba0ad43ccb9f95ca7407a) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Schema/ConfigurationSchemaIdentifiers.cs (.../ConfigurationSchemaIdentifiers.cs) (revision 7ce0229b2d4293c464479e448b092c7f83eb94c3) @@ -72,6 +72,11 @@ public const string StandardDeviationElement = "standaardafwijking"; /// + /// The identifier for variation coefficient elements. + /// + public const string VariationCoefficientElement = "variatiecoefficient"; + + /// /// The tag of elements containing the orientation of the profile. /// public const string Orientation = "orientatie"; Index: Ringtoets/Common/src/Ringtoets.Common.IO/Writers/CalculationConfigurationWriter.cs =================================================================== diff -u -r69c1988e3c492c44148e112151efb3c04a853fcc -r7ce0229b2d4293c464479e448b092c7f83eb94c3 --- Ringtoets/Common/src/Ringtoets.Common.IO/Writers/CalculationConfigurationWriter.cs (.../CalculationConfigurationWriter.cs) (revision 69c1988e3c492c44148e112151efb3c04a853fcc) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Writers/CalculationConfigurationWriter.cs (.../CalculationConfigurationWriter.cs) (revision 7ce0229b2d4293c464479e448b092c7f83eb94c3) @@ -117,6 +117,33 @@ } /// + /// Writes the in XML format to file. + /// + /// The dictionary of variation coefficient distributions, keyed on name, to write. + /// The writer to use for writing. + /// Thrown when is null. + /// Thrown when the is closed. + protected static void WriteVariationCoefficientDistributions(IDictionary variationCoefficientDistributions, XmlWriter writer) + { + if (variationCoefficientDistributions == null) + { + throw new ArgumentNullException(nameof(variationCoefficientDistributions)); + } + + if (variationCoefficientDistributions.Count > 0) + { + writer.WriteStartElement(ConfigurationSchemaIdentifiers.StochastsElement); + + foreach (KeyValuePair keyValuePair in variationCoefficientDistributions) + { + WriteVariationCoefficientDistribution(keyValuePair.Value, keyValuePair.Key, writer); + } + + writer.WriteEndElement(); + } + } + + /// /// Writes the properties of the in XML format to file. /// /// The break water to write. @@ -183,6 +210,19 @@ writer.WriteEndElement(); } + private static void WriteVariationCoefficientDistribution(IVariationCoefficientDistribution distribution, string elementName, XmlWriter writer) + { + writer.WriteStartElement(ConfigurationSchemaIdentifiers.StochastElement); + + writer.WriteAttributeString(ConfigurationSchemaIdentifiers.NameAttribute, elementName); + writer.WriteElementString(ConfigurationSchemaIdentifiers.MeanElement, + XmlConvert.ToString(distribution.Mean)); + writer.WriteElementString(ConfigurationSchemaIdentifiers.VariationCoefficientElement, + XmlConvert.ToString(distribution.CoefficientOfVariation)); + + writer.WriteEndElement(); + } + private void WriteCalculationGroup(CalculationGroup calculationGroup, XmlWriter writer) { writer.WriteStartElement(ConfigurationSchemaIdentifiers.FolderElement); Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/Writers/CalculationConfigurationWriterTest.cs =================================================================== diff -u -rb2288a6eae1568001c17d9ce7aaa5521a44595f2 -r7ce0229b2d4293c464479e448b092c7f83eb94c3 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/Writers/CalculationConfigurationWriterTest.cs (.../CalculationConfigurationWriterTest.cs) (revision b2288a6eae1568001c17d9ce7aaa5521a44595f2) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/Writers/CalculationConfigurationWriterTest.cs (.../CalculationConfigurationWriterTest.cs) (revision 7ce0229b2d4293c464479e448b092c7f83eb94c3) @@ -47,7 +47,7 @@ public void WriteDistribution_WithoutDistributions_ArgumentNullException() { // Setup - string filePath = TestHelper.GetScratchPadPath("test_distributions_write.xml"); + string filePath = TestHelper.GetScratchPadPath(nameof(WriteDistribution_WithoutDistributions_ArgumentNullException)); try { @@ -74,7 +74,7 @@ public void WriteDistribution_EmptyDistributions_NothingWrittenToFile() { // Setup - string filePath = TestHelper.GetScratchPadPath("test_distributions_write.xml"); + string filePath = TestHelper.GetScratchPadPath(nameof(WriteDistribution_EmptyDistributions_NothingWrittenToFile)); try { @@ -101,7 +101,7 @@ public void WriteDistribution_WithDistributions_WritesEachDistributionAsElement() { // Setup - string filePath = TestHelper.GetScratchPadPath("test_distributions_write.xml"); + string filePath = TestHelper.GetScratchPadPath(nameof(WriteDistribution_WithDistributions_WritesEachDistributionAsElement)); string expectedXmlFilePath = TestHelper.GetTestDataPath( TestDataPath.Ringtoets.Common.IO, Path.Combine(nameof(CalculationConfigurationWriter), "distributions.xml")); @@ -145,8 +145,113 @@ File.Delete(filePath); } } + [Test] + public void WriteVariationCoefficientDistribution_WithoutVariationCoefficientDistributions_ArgumentNullException() + { + // Setup + string filePath = TestHelper.GetScratchPadPath( + nameof(WriteVariationCoefficientDistribution_WithoutVariationCoefficientDistributions_ArgumentNullException)); + try + { + using (XmlWriter xmlWriter = CreateXmlWriter(filePath)) + { + var writer = new SimpleCalculationConfigurationWriter(); + + // Call + Assert.Throws(() => writer.PublicWriteDistributions(null, xmlWriter)); + } + + // Assert + string actualXml = File.ReadAllText(filePath); + + Assert.IsEmpty(actualXml); + } + finally + { + File.Delete(filePath); + } + } + [Test] + public void WriteVariationCoefficientDistribution_EmptyVariationCoefficientDistributions_NothingWrittenToFile() + { + // Setup + string filePath = TestHelper.GetScratchPadPath( + nameof(WriteVariationCoefficientDistribution_EmptyVariationCoefficientDistributions_NothingWrittenToFile)); + + try + { + using (XmlWriter xmlWriter = CreateXmlWriter(filePath)) + { + var writer = new SimpleCalculationConfigurationWriter(); + + // Call + writer.PublicWriteDistributions(new Dictionary(), xmlWriter); + } + + // Assert + string actualXml = File.ReadAllText(filePath); + + Assert.IsEmpty(actualXml); + } + finally + { + File.Delete(filePath); + } + } + + [Test] + public void WriteVariationCoefficientDistribution_WithVariationCoefficientDistributions_WritesEachDistributionAsElement() + { + // Setup + string filePath = TestHelper.GetScratchPadPath( + nameof(WriteVariationCoefficientDistribution_WithVariationCoefficientDistributions_WritesEachDistributionAsElement)); + string expectedXmlFilePath = TestHelper.GetTestDataPath( + TestDataPath.Ringtoets.Common.IO, + Path.Combine(nameof(CalculationConfigurationWriter), "variationCoefficientDistributions.xml")); + + var distributions = new Dictionary + { + { + "normal", new VariationCoefficientNormalDistribution + { + Mean = (RoundedDouble) 0.2, + CoefficientOfVariation = (RoundedDouble) 0.1 + } + }, + { + "lognormal", new VariationCoefficientLogNormalDistribution + { + Mean = (RoundedDouble) 0.4, + CoefficientOfVariation = (RoundedDouble) 0.3 + } + } + }; + + try + { + using (XmlWriter xmlWriter = CreateXmlWriter(filePath)) + { + var writer = new SimpleCalculationConfigurationWriter(); + + // Call + writer.PublicWriteVariationCoefficientDistributions(distributions, xmlWriter); + } + + // Assert + string actualXml = File.ReadAllText(filePath); + string expectedXml = File.ReadAllText(expectedXmlFilePath); + + Assert.AreEqual(expectedXml, actualXml); + } + finally + { + File.Delete(filePath); + } + } + + [Test] public void WriteBreakWaterProperties_BreakWaterNull_NothingWrittenToFile() { // Setup @@ -340,6 +445,12 @@ { WriteDistributions(distributions, writer); } + public void PublicWriteVariationCoefficientDistributions( + IDictionary distributions, + XmlWriter writer) + { + WriteVariationCoefficientDistributions(distributions, writer); + } public void PublicWriteBreakWaterProperties(BreakWater breakWater, XmlWriter writer) { Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/CalculationConfigurationWriter/variationCoefficientDistributions.xml =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/CalculationConfigurationWriter/variationCoefficientDistributions.xml (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/CalculationConfigurationWriter/variationCoefficientDistributions.xml (revision 7ce0229b2d4293c464479e448b092c7f83eb94c3) @@ -0,0 +1,10 @@ + + + 0.2 + 0.1 + + + 0.4 + 0.3 + + \ No newline at end of file