Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs =================================================================== diff -u -r14bc51c4c374a77f6e5b7e4f707eb0f412bb668a -r15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01 --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs (.../PipingConfigurationReader.cs) (revision 14bc51c4c374a77f6e5b7e4f707eb0f412bb668a) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs (.../PipingConfigurationReader.cs) (revision 15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01) @@ -22,7 +22,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Xml; using System.Xml.Linq; using System.Xml.Schema; @@ -40,6 +39,8 @@ /// public class PipingConfigurationReader { + private readonly XDocument xmlDocument; + /// /// Creates a new instance of . /// @@ -58,7 +59,7 @@ ValidateFileExists(xmlFilePath); - XDocument xmlDocument = LoadDocument(xmlFilePath); + xmlDocument = LoadDocument(xmlFilePath); ValidateToSchema(xmlDocument, xmlFilePath); } @@ -69,7 +70,7 @@ /// A collection of read . public IEnumerable Read() { - return Enumerable.Empty(); + return ParseReadPipingCalculationItems(xmlDocument.Root.Elements()); // Note: root element is always present due to XSD validation } /// @@ -129,6 +130,36 @@ } } + private static IEnumerable ParseReadPipingCalculationItems(IEnumerable elements) + { + foreach (XElement element in elements) + { + if (element.Name == "berekening") + { + yield return ParseReadPipingCalculation(element); + } + + if (element.Name == "folder") + { + yield return ParseReadPipingCalculationGroup(element); + } + } + } + + private static ReadPipingCalculationGroup ParseReadPipingCalculationGroup(XElement folderElement) + { + return new ReadPipingCalculationGroup(folderElement.Attribute("naam").Value, + ParseReadPipingCalculationItems(folderElement.Elements())); + } + + private static ReadPipingCalculation ParseReadPipingCalculation(XElement element) + { + return new ReadPipingCalculation(new ReadPipingCalculation.ConstructionProperties + { + Name = element.Attribute("naam").Value + }); + } + private static XmlSchemaSet LoadXmlSchema() { Stream schemaFile = AssemblyUtils.GetAssemblyResourceStream(typeof(PipingConfigurationReader).Assembly, Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingConfigurationReaderTest.cs =================================================================== diff -u -r14bc51c4c374a77f6e5b7e4f707eb0f412bb668a -r15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01 --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingConfigurationReaderTest.cs (.../PipingConfigurationReaderTest.cs) (revision 14bc51c4c374a77f6e5b7e4f707eb0f412bb668a) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingConfigurationReaderTest.cs (.../PipingConfigurationReaderTest.cs) (revision 15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01) @@ -20,7 +20,9 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Xml; using System.Xml.Schema; using Core.Common.IO.Exceptions; @@ -151,5 +153,60 @@ Assert.AreEqual(expectedMessage, exception.Message); Assert.IsInstanceOf(exception.InnerException); } + + [Test] + public void Read_ValidConfigurationWithNesting_ReturnExpectedReadPipingCalculationItems() + { + // Setup + string filePath = Path.Combine(testDirectoryPath, "validConfigurationWithNesting.xml"); + var pipingConfigurationReader = new PipingConfigurationReader(filePath); + + // Call + IList readPipingCalculationItems = pipingConfigurationReader.Read().ToList(); + + // Assert + Assert.AreEqual(4, readPipingCalculationItems.Count); + + var group1 = readPipingCalculationItems[0] as ReadPipingCalculationGroup; + Assert.IsNotNull(group1); + Assert.AreEqual("Group 1", group1.Name); + + var calculation1 = readPipingCalculationItems[1] as ReadPipingCalculation; + Assert.IsNotNull(calculation1); + Assert.AreEqual("Calculation 1", calculation1.Name); + + var group2 = readPipingCalculationItems[2] as ReadPipingCalculationGroup; + Assert.IsNotNull(group2); + Assert.AreEqual("Group 2", group2.Name); + + var calculation2 = readPipingCalculationItems[3] as ReadPipingCalculation; + Assert.IsNotNull(calculation2); + Assert.AreEqual("Calculation 2", calculation2.Name); + + List group1Items = group1.Items.ToList(); + Assert.AreEqual(1, group1Items.Count); + + var calculation3 = group1Items[0] as ReadPipingCalculation; + Assert.IsNotNull(calculation3); + Assert.AreEqual("Calculation 3", calculation3.Name); + + List group2Items = group2.Items.ToList(); + Assert.AreEqual(2, group2Items.Count); + + var group3 = group2Items[0] as ReadPipingCalculationGroup; + Assert.IsNotNull(group3); + Assert.AreEqual("Group 3", group3.Name); + + var calculation4 = group2Items[1] as ReadPipingCalculation; + Assert.IsNotNull(calculation4); + Assert.AreEqual("Calculation 4", calculation4.Name); + + List group3Items = group3.Items.ToList(); + Assert.AreEqual(1, group3Items.Count); + + var calculation5 = group3Items[0] as ReadPipingCalculation; + Assert.IsNotNull(calculation5); + Assert.AreEqual("Calculation 5", calculation5.Name); + } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/invalidXmlContent.xml =================================================================== diff -u -refdfbe3c54d3743aa50b0fc7be73e417638f2732 -r15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01 --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/invalidXmlContent.xml (.../invalidXmlContent.xml) (revision efdfbe3c54d3743aa50b0fc7be73e417638f2732) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/invalidXmlContent.xml (.../invalidXmlContent.xml) (revision 15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01) @@ -1,7 +1,7 @@ - - + + PUNT_KAT_18 PK001_0001 10.00 @@ -18,7 +18,7 @@ - + PUNT_SCH_17 PK001_0002 10.00 Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfiguration.xml =================================================================== diff -u -refdfbe3c54d3743aa50b0fc7be73e417638f2732 -r15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01 --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfiguration.xml (.../validConfiguration.xml) (revision efdfbe3c54d3743aa50b0fc7be73e417638f2732) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfiguration.xml (.../validConfiguration.xml) (revision 15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01) @@ -1,7 +1,7 @@ - - + + PUNT_KAT_18 PK001_0001 10.00 @@ -18,7 +18,7 @@ - + PUNT_SCH_17 PK001_0002 10.00 Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationWithNesting.xml =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationWithNesting.xml (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationWithNesting.xml (revision 15d97cb9dc7d76f8c8f89261d7ea8a46b9643b01) @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file