Index: Ringtoets/Common/src/Ringtoets.Common.IO/Readers/ConfigurationReader.cs =================================================================== diff -u -r3937c582facb03372a3676b1ebf0ef158005a9ab -r24a4e65f8626b984a0345e3b3b505c768da360f3 --- Ringtoets/Common/src/Ringtoets.Common.IO/Readers/ConfigurationReader.cs (.../ConfigurationReader.cs) (revision 3937c582facb03372a3676b1ebf0ef158005a9ab) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Readers/ConfigurationReader.cs (.../ConfigurationReader.cs) (revision 24a4e65f8626b984a0345e3b3b505c768da360f3) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml; @@ -39,8 +40,9 @@ /// /// The type of calculation items read from XML. public abstract class ConfigurationReader + where TCalculationItem : IReadCalculationItem { - protected readonly XDocument xmlDocument; + private readonly XDocument xmlDocument; /// /// Creates a new instance of . @@ -69,6 +71,22 @@ } /// + /// Reads the configuration from the XML and creates a collection of corresponding . + /// + /// A collection of read . + public IEnumerable Read() + { + return ParseReadCalculationItems(xmlDocument.Root?.Elements()); + } + + /// + /// Parses a read calculation element. + /// + /// The read calculation element to parse. + /// A parsed . + protected abstract TCalculationItem ParseReadCalculation(XElement calculationElement); + + /// /// Validates whether a file exists at the provided . /// /// The file path to validate. @@ -152,5 +170,27 @@ throw new CriticalFileReadException(message); } } + + private IEnumerable ParseReadCalculationItems(IEnumerable elements) + { + foreach (XElement element in elements) + { + if (element.Name == ConfigurationSchemaIdentifiers.CalculationElement) + { + yield return ParseReadCalculation(element); + } + + if (element.Name == ConfigurationSchemaIdentifiers.FolderElement) + { + yield return ParseReadCalculationGroup(element); + } + } + } + + private ReadCalculationGroup ParseReadCalculationGroup(XElement folderElement) + { + return new ReadCalculationGroup(folderElement.Attribute(ConfigurationSchemaIdentifiers.NameAttribute)?.Value, + ParseReadCalculationItems(folderElement.Elements())); + } } } \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs =================================================================== diff -u -r59fcd17973dee55b14a079325767f28e8cb535c2 -r24a4e65f8626b984a0345e3b3b505c768da360f3 --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs (.../PipingConfigurationReader.cs) (revision 59fcd17973dee55b14a079325767f28e8cb535c2) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs (.../PipingConfigurationReader.cs) (revision 24a4e65f8626b984a0345e3b3b505c768da360f3) @@ -20,7 +20,6 @@ // All rights reserved. using System; -using System.Collections.Generic; using System.Linq; using System.Xml; using System.Xml.Linq; @@ -52,39 +51,8 @@ internal PipingConfigurationReader(string xmlFilePath) : base(xmlFilePath, Resources.PipingConfigurationSchema) {} - /// - /// Reads the piping configuration from the XML and creates a collection of corresponding . - /// - /// A collection of read . - internal IEnumerable Read() + protected override IReadCalculationItem ParseReadCalculation(XElement calculationElement) { - return ParseReadPipingCalculationItems(xmlDocument.Root?.Elements()); - } - - private static IEnumerable ParseReadPipingCalculationItems(IEnumerable elements) - { - foreach (XElement element in elements) - { - if (element.Name == ConfigurationSchemaIdentifiers.CalculationElement) - { - yield return ParseReadPipingCalculation(element); - } - - if (element.Name == ConfigurationSchemaIdentifiers.FolderElement) - { - yield return ParseReadPipingCalculationGroup(element); - } - } - } - - private static ReadCalculationGroup ParseReadPipingCalculationGroup(XElement folderElement) - { - return new ReadCalculationGroup(folderElement.Attribute(ConfigurationSchemaIdentifiers.NameAttribute)?.Value, - ParseReadPipingCalculationItems(folderElement.Elements())); - } - - private static ReadPipingCalculation ParseReadPipingCalculation(XElement calculationElement) - { var constructionProperties = new ReadPipingCalculation.ConstructionProperties { Name = calculationElement.Attribute(ConfigurationSchemaIdentifiers.NameAttribute)?.Value,