Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs =================================================================== diff -u -r15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01 -r6ed40142f26dda106581e03da03fcf411fc0514d --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs (.../PipingConfigurationReader.cs) (revision 15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs (.../PipingConfigurationReader.cs) (revision 6ed40142f26dda106581e03da03fcf411fc0514d) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Xml; using System.Xml.Linq; using System.Xml.Schema; @@ -70,7 +71,7 @@ /// A collection of read . public IEnumerable Read() { - return ParseReadPipingCalculationItems(xmlDocument.Root.Elements()); // Note: root element is always present due to XSD validation + return ParseReadPipingCalculationItems(xmlDocument.Root?.Elements()); } /// @@ -148,18 +149,62 @@ private static ReadPipingCalculationGroup ParseReadPipingCalculationGroup(XElement folderElement) { - return new ReadPipingCalculationGroup(folderElement.Attribute("naam").Value, + return new ReadPipingCalculationGroup(folderElement.Attribute("naam")?.Value, ParseReadPipingCalculationItems(folderElement.Elements())); } - private static ReadPipingCalculation ParseReadPipingCalculation(XElement element) + private static ReadPipingCalculation ParseReadPipingCalculation(XElement calculationElement) { - return new ReadPipingCalculation(new ReadPipingCalculation.ConstructionProperties + var constructionProperties = new ReadPipingCalculation.ConstructionProperties { - Name = element.Attribute("naam").Value - }); + Name = calculationElement.Attribute("naam")?.Value, + AssessmentLevel = GetDoubleValueFromChildElement(calculationElement, "toetspeil"), + HydraulicBoundaryLocation = GetStringValueFromChildElement(calculationElement, "hrlocatie"), + SurfaceLine = GetStringValueFromChildElement(calculationElement, "profielschematisatie"), + EntryPointL = GetDoubleValueFromChildElement(calculationElement, "intredepunt"), + ExitPointL = GetDoubleValueFromChildElement(calculationElement, "uittredepunt"), + StochasticSoilModel = GetStringValueFromChildElement(calculationElement, "ondergrondmodel"), + StochasticSoilProfile = GetStringValueFromChildElement(calculationElement, "ondergrondschematisatie") + }; + + XElement phreaticLevelExitElement = GetStochastChildElement(calculationElement, "polderpeil"); + if (phreaticLevelExitElement != null) + { + constructionProperties.PhreaticLevelExitMean = GetDoubleValueFromChildElement(phreaticLevelExitElement, "verwachtingswaarde"); + constructionProperties.PhreaticLevelExitStandardDeviation = GetDoubleValueFromChildElement(phreaticLevelExitElement, "standaardafwijking"); + } + + XElement dampingFactorExitElement = GetStochastChildElement(calculationElement, "dempingsfactor"); + if (dampingFactorExitElement != null) + { + constructionProperties.DampingFactorExitMean = GetDoubleValueFromChildElement(dampingFactorExitElement, "verwachtingswaarde"); + constructionProperties.DampingFactorExitStandardDeviation = GetDoubleValueFromChildElement(dampingFactorExitElement, "standaardafwijking"); + } + + return new ReadPipingCalculation(constructionProperties); } + private static double? GetDoubleValueFromChildElement(XElement parentElement, string childElementName) + { + XElement childElement = parentElement.Elements(childElementName).FirstOrDefault(); + + return childElement != null + ? (double?) Convert.ToDouble(childElement.Value) + : null; + } + + private static string GetStringValueFromChildElement(XElement parentElement, string childElementName) + { + XElement childElement = parentElement.Elements(childElementName).FirstOrDefault(); + + return childElement?.Value; + } + + private static XElement GetStochastChildElement(XElement parentElement, string stochastName) + { + return parentElement.Elements("stochast").FirstOrDefault(e => e.Attribute("naam")?.Value == stochastName); + } + private static XmlSchemaSet LoadXmlSchema() { Stream schemaFile = AssemblyUtils.GetAssemblyResourceStream(typeof(PipingConfigurationReader).Assembly,