Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs =================================================================== diff -u -rb8d852df1bd7269388f44bcb13d23a51920842fc -r2494425b0c9355fa337d49efcc0267f958ebe154 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs (.../IllustrationPointsParser.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs (.../IllustrationPointsParser.cs) (revision 2494425b0c9355fa337d49efcc0267f958ebe154) @@ -294,8 +294,12 @@ { Tuple root = results.Single(r => !r.Item1.HasValue); - rootIllustrationPoints[CreateFaultTreeKey(windDirectionClosingSituation)] = - BuildFaultTree(windDirectionClosingSituation, root.Item2, root.Item4, results); + IllustrationPointTreeNode illustrationPointTreeNode = BuildFaultTree(windDirectionClosingSituation, root.Item2, root.Item4, results); + + if (illustrationPointTreeNode != null) + { + rootIllustrationPoints[CreateFaultTreeKey(windDirectionClosingSituation)] = illustrationPointTreeNode; + } } return rootIllustrationPoints; } @@ -305,28 +309,18 @@ private Dictionary GetSubMechanismAsRootIllustrationPoint() { var rootIllustrationPoints = new Dictionary(); + int subMechanismId = subMechanisms.First().Key; + foreach (Tuple windDirectionClosingSituation in GetAllWindDirectionClosingSituationCombinations()) { - KeyValuePair subMechanismIdName = subMechanisms.First(); - string submechanismIllustrationPointName = subMechanismIdName.Value; + IllustrationPointTreeNode illustrationPointTreeNode = BuildSubMechanism( + windDirectionClosingSituation, + subMechanismId); - var key = new ThreeKeyIndex(windDirectionClosingSituation.Item1, windDirectionClosingSituation.Item3, subMechanismIdName.Key); - - double subMechanismIllustrationPointBeta = subMechanismBetaValues[key]; - - var illustrationPointStochasts = new List(); - AddRange(illustrationPointStochasts, subMechanismStochasts[key]); - - var illustrationPointResults = new List(); - AddRange(illustrationPointResults, subMechanismResults[key]); - - var illustrationPoint = new SubMechanismIllustrationPoint(submechanismIllustrationPointName, - illustrationPointStochasts, - illustrationPointResults, - subMechanismIllustrationPointBeta); - - rootIllustrationPoints[CreateFaultTreeKey(windDirectionClosingSituation)] = - new IllustrationPointTreeNode(illustrationPoint); + if (illustrationPointTreeNode != null) + { + rootIllustrationPoints[CreateFaultTreeKey(windDirectionClosingSituation)] = illustrationPointTreeNode; + } } return rootIllustrationPoints; @@ -375,9 +369,10 @@ if (!faultTreeBetaValues.ContainsKey(dataKey)) { - throw new HydraRingFileParserException(Resources.IllustrationPointsParser_Parse_No_values_for_beta_of_illustration_point_found); + return null; } var illustrationPoint = new FaultTreeIllustrationPoint(faultTrees[faultTreeId], faultTreeBetaValues[dataKey], combinationType); + if (faultTreeStochasts.ContainsKey(dataKey)) { AddRange(illustrationPoint.Stochasts, faultTreeStochasts[dataKey]); @@ -400,6 +395,13 @@ var illustrationPointStochasts = new List(); var illustrationPointResults = new List(); + if (!subMechanismBetaValues.ContainsKey(dataKey)) + { + return null; + } + + double subMechanismIllustrationPointBeta = subMechanismBetaValues[dataKey]; + if (subMechanismStochasts.ContainsKey(dataKey)) { AddRange(illustrationPointStochasts, subMechanismStochasts[dataKey]); @@ -409,12 +411,6 @@ AddRange(illustrationPointResults, subMechanismResults[dataKey]); } - if (!subMechanismBetaValues.ContainsKey(dataKey)) - { - throw new HydraRingFileParserException(Resources.IllustrationPointsParser_Parse_No_values_for_beta_of_illustration_point_found); - } - double subMechanismIllustrationPointBeta = subMechanismBetaValues[dataKey]; - string submechanismIllustrationPointName = subMechanisms[subMechanismId]; var illustrationPoint = new SubMechanismIllustrationPoint(submechanismIllustrationPointName, illustrationPointStochasts, Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs =================================================================== diff -u -rb8d852df1bd7269388f44bcb13d23a51920842fc -r2494425b0c9355fa337d49efcc0267f958ebe154 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 2494425b0c9355fa337d49efcc0267f958ebe154) @@ -158,21 +158,20 @@ } /// - /// Looks up a localized string similar to Geen waarde voor de betrouwbaarheidsindex voor 1 illustratiepunt gevonden in de uitvoer database.. + /// Looks up a localized string similar to Er is geen maatgevende windrichting gevonden in de uitvoer database.. /// - internal static string IllustrationPointsParser_Parse_No_values_for_beta_of_illustration_point_found { + internal static string IllustrationPointsParser_Parse_No_governing_wind_direction_found { get { - return ResourceManager.GetString("IllustrationPointsParser_Parse_No_values_for_beta_of_illustration_point_found", resourceCulture); + return ResourceManager.GetString("IllustrationPointsParser_Parse_No_governing_wind_direction_found", resourceCulture); } } /// - /// Looks up a localized string similar to Er is geen maatgevende windrichting gevonden in de uitvoer database.. + /// Looks up a localized string similar to Geen waarde voor de betrouwbaarheidsindex voor het algemene resultaat gevonden in de uitvoer database.. /// - internal static string IllustrationPointsParser_Parse_No_governing_wind_direction_found { + internal static string IllustrationPointsParser_Parse_No_values_for_beta_of_illustration_point_found { get { - return ResourceManager.GetString("IllustrationPointsParser_ParseWindDirections_Er_is_geen_maatgevende_windrichting_" + - "gevonden_in_de_uitvoer_database_", resourceCulture); + return ResourceManager.GetString("IllustrationPointsParser_Parse_No_values_for_beta_of_illustration_point_found", resourceCulture); } } Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx =================================================================== diff -u -rb8d852df1bd7269388f44bcb13d23a51920842fc -r2494425b0c9355fa337d49efcc0267f958ebe154 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx (.../Resources.resx) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx (.../Resources.resx) (revision 2494425b0c9355fa337d49efcc0267f958ebe154) @@ -151,7 +151,7 @@ Meerdere waarden voor de betrouwbaarheidsindex voor 1 illustratiepunt gevonden in de uitvoer database. - Geen waarde voor de betrouwbaarheidsindex voor 1 illustratiepunt gevonden in de uitvoer database. + Geen waarde voor de betrouwbaarheidsindex voor het algemene resultaat gevonden in de uitvoer database. Er is geen waarde gevonden voor kolom '{0}' tijdens het uitlezen van de illustratiepunten in de uitvoer database. @@ -160,7 +160,7 @@ Het besturingssysteem geeft de volgende melding: {0} - + Er is geen maatgevende windrichting gevonden in de uitvoer database. \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/IllustrationPoints/IllustrationPointsParserTest.cs =================================================================== diff -u -rb8d852df1bd7269388f44bcb13d23a51920842fc -r2494425b0c9355fa337d49efcc0267f958ebe154 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/IllustrationPoints/IllustrationPointsParserTest.cs (.../IllustrationPointsParserTest.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/IllustrationPoints/IllustrationPointsParserTest.cs (.../IllustrationPointsParserTest.cs) (revision 2494425b0c9355fa337d49efcc0267f958ebe154) @@ -129,21 +129,18 @@ } [Test] - [TestCase("NoBetaSubMechanism")] - [TestCase("NoBetaFaultTree")] - [TestCase("NoBetaGeneralResult")] - public void Parse_NoBetaValues_ThrowsHydraRingFileParserException(string workingDirectory) + public void Parse_NoGeneralResultBetaValue_ThrowsHydraRingFileParserException() { // Setup - string path = Path.Combine(testDirectory, workingDirectory); + string path = Path.Combine(testDirectory, "NoBetaGeneralResult"); var parser = new IllustrationPointsParser(); // Call TestDelegate test = () => parser.Parse(path, 1); // Assert var exception = Assert.Throws(test); - Assert.AreEqual("Geen waarde voor de betrouwbaarheidsindex voor 1 illustratiepunt gevonden in de uitvoer database.", exception.Message); + Assert.AreEqual("Geen waarde voor de betrouwbaarheidsindex voor het algemene resultaat gevonden in de uitvoer database.", exception.Message); } [Test] @@ -284,6 +281,50 @@ } [Test] + public void Parse_ValidFaultTreesMissingWindDirectionClosingSituationCombinations_TreesNotPartOfResult() + { + // Setup + string path = Path.Combine(testDirectory, "MissingWindDirectionClosingSituationFaultTree"); + var parser = new IllustrationPointsParser(); + + // Call + parser.Parse(path, 1); + + // Assert + GeneralResult generalResult = parser.Output; + Assert.NotNull(generalResult); + Assert.NotNull(generalResult.GoverningWindDirection); + Assert.AreEqual(315.0, generalResult.GoverningWindDirection.Angle); + Assert.AreEqual("NW", generalResult.GoverningWindDirection.Name); + Assert.AreEqual(5.98943, generalResult.Beta); + Assert.AreEqual(23, generalResult.Stochasts.Count()); + Dictionary illustrationPointNodes = generalResult.IllustrationPoints; + AssertWindDirectionClosingSituationKeysForAssessmentSection14Dash2(illustrationPointNodes); + } + + [Test] + public void Parse_ValidSubMechanismsMissingWindDirectionClosingSituationCombinations_SubMechanismsNotPartOfResult() + { + // Setup + string path = Path.Combine(testDirectory, "MissingWindDirectionClosingSituationSubMechanism"); + var parser = new IllustrationPointsParser(); + + // Call + parser.Parse(path, 1); + + // Assert + GeneralResult generalResult = parser.Output; + Assert.NotNull(generalResult); + Assert.NotNull(generalResult.GoverningWindDirection); + Assert.AreEqual(315.0, generalResult.GoverningWindDirection.Angle); + Assert.AreEqual("NW", generalResult.GoverningWindDirection.Name); + Assert.AreEqual(4.26568, generalResult.Beta); + Assert.AreEqual(9, generalResult.Stochasts.Count()); + Dictionary illustrationPointNodes = generalResult.IllustrationPoints; + AssertWindDirectionClosingSituationKeysForAssessmentSection14Dash2(illustrationPointNodes); + } + + [Test] public void Parse_ValidDataForOtherSection_SectionIdIgnoredOutputRead() { // Setup @@ -298,6 +339,36 @@ Assert.NotNull(generalResult); } + private static void AssertWindDirectionClosingSituationKeysForAssessmentSection14Dash2(Dictionary illustrationPointNodes) + { + CollectionAssert.AreEqual(new[] + { + new WindDirectionClosingSituation(new WindDirection("N", 0.0), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("N", 0.0), "closed barrier"), + new WindDirectionClosingSituation(new WindDirection("NNO", 22.5), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("NO", 45.0), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("ONO", 67.5), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("O", 90.0), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("OZO", 112.5), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("ZO", 135.0), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("ZZO", 157.5), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("Z", 180.0), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("ZZW", 202.5), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("ZW", 225.0), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("ZW", 225.0), "closed barrier"), + new WindDirectionClosingSituation(new WindDirection("WZW", 247.5), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("WZW", 247.5), "closed barrier"), + new WindDirectionClosingSituation(new WindDirection("W", 270.0), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("W", 270.0), "closed barrier"), + new WindDirectionClosingSituation(new WindDirection("WNW", 292.5), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("WNW", 292.5), "closed barrier"), + new WindDirectionClosingSituation(new WindDirection("NW", 315.0), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("NW", 315.0), "closed barrier"), + new WindDirectionClosingSituation(new WindDirection("NNW", 337.5), "open barrier"), + new WindDirectionClosingSituation(new WindDirection("NNW", 337.5), "closed barrier") + }, illustrationPointNodes.Keys); + } + private static void GetAllNodes(IllustrationPointTreeNode tree, ICollection faultTrees, ICollection subMechanisms) { var subMechanism = tree.Data as SubMechanismIllustrationPoint; Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/MissingWindDirectionClosingSituationFaultTree/1-output.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/MissingWindDirectionClosingSituationSubMechanism/1-output.sqlite =================================================================== diff -u Binary files differ