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