Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/DesignWaterLevelCalculator.cs =================================================================== diff -u -r0fd23ff8e68b5f0d18d344d104bc68216cb49b51 -rb8d852df1bd7269388f44bcb13d23a51920842fc --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/DesignWaterLevelCalculator.cs (.../DesignWaterLevelCalculator.cs) (revision 0fd23ff8e68b5f0d18d344d104bc68216cb49b51) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/DesignWaterLevelCalculator.cs (.../DesignWaterLevelCalculator.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) @@ -72,7 +72,14 @@ public void CalculateWithIllustrationPoints(AssessmentLevelCalculationInput input) { includeIllustrationPoints = true; - Calculate(input); + try + { + Calculate(input); + } + finally + { + includeIllustrationPoints = false; + } } protected override IEnumerable GetParsers() Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveHeightCalculator.cs =================================================================== diff -u -r0fd23ff8e68b5f0d18d344d104bc68216cb49b51 -rb8d852df1bd7269388f44bcb13d23a51920842fc --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveHeightCalculator.cs (.../WaveHeightCalculator.cs) (revision 0fd23ff8e68b5f0d18d344d104bc68216cb49b51) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveHeightCalculator.cs (.../WaveHeightCalculator.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) @@ -66,7 +66,14 @@ public void CalculateWithIllustrationPoints(WaveHeightCalculationInput input) { includeIllustrationPoints = true; - Calculate(input); + try + { + Calculate(input); + } + finally + { + includeIllustrationPoints = false; + } } public void Calculate(WaveHeightCalculationInput input) Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointQueries.cs =================================================================== diff -u -r2cfb421b8f27d648e22b13453ae1f2d9deb54f65 -rb8d852df1bd7269388f44bcb13d23a51920842fc --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointQueries.cs (.../IllustrationPointQueries.cs) (revision 2cfb421b8f27d648e22b13453ae1f2d9deb54f65) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointQueries.cs (.../IllustrationPointQueries.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) @@ -26,9 +26,6 @@ /// internal static class IllustrationPointQueries { - private const string firstPeriod = "PeriodId = (SELECT MIN(PeriodId) FROM GoverningWind)"; - private const string lastIteration = "OuterIterationId = (SELECT MAX(OuterIterationId) FROM GoverningWind)"; - /// /// Selects all the closing situations. /// @@ -38,13 +35,13 @@ "FROM ClosingSituations;"; /// - /// Selects all wind direction with a flag whether it is the wind direction is governing. + /// Selects all wind direction with a flag whether it the wind direction is governing. /// public static readonly string WindDirections = $"SELECT WindDirections.{IllustrationPointsDatabaseConstants.WindDirectionId}, " + $"{IllustrationPointsDatabaseConstants.WindDirectionName}, " + $"{IllustrationPointsDatabaseConstants.WindDirectionAngle}, " + - $"WindDirections.WindDirectionId = GoverningWind.WindDirectionId as {IllustrationPointsDatabaseConstants.IsGoverning} " + + $"WindDirections.WindDirectionId = GoverningWind.WindDirectionId AS {IllustrationPointsDatabaseConstants.IsGoverning} " + "FROM WindDirections " + "JOIN GoverningWind " + $"WHERE {lastIteration}" + @@ -185,7 +182,7 @@ $"{IllustrationPointsDatabaseConstants.RecursiveFaultTreeChildId}, " + $"{IllustrationPointsDatabaseConstants.RecursiveFaultTreeType}, " + $"{IllustrationPointsDatabaseConstants.RecursiveFaultTreeCombine}" + - ") AS(" + + ") AS (" + "SELECT FaultTreeId, Id1, Type1, CombinFunction " + "FROM FaultTrees " + "LEFT OUTER JOIN combineFunctions ON combineFunctions.id = Id1 " + @@ -198,7 +195,7 @@ $"{IllustrationPointsDatabaseConstants.RecursiveFaultTreeId}, " + $"{IllustrationPointsDatabaseConstants.RecursiveFaultTreeType}, " + $"{IllustrationPointsDatabaseConstants.RecursiveFaultTreeCombine}" + - ") AS(" + + ") AS (" + "SELECT null, " + "FaultTreeId, " + "\"faulttree\", " + @@ -220,5 +217,8 @@ $"{IllustrationPointsDatabaseConstants.RecursiveFaultTreeType}, " + $"{IllustrationPointsDatabaseConstants.RecursiveFaultTreeCombine} " + "FROM children;"; + + private const string firstPeriod = "PeriodId = (SELECT MIN(PeriodId) FROM GoverningWind)"; + private const string lastIteration = "OuterIterationId = (SELECT MAX(OuterIterationId) FROM GoverningWind)"; } } \ No newline at end of file Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs =================================================================== diff -u -r2cfb421b8f27d648e22b13453ae1f2d9deb54f65 -rb8d852df1bd7269388f44bcb13d23a51920842fc --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs (.../IllustrationPointsParser.cs) (revision 2cfb421b8f27d648e22b13453ae1f2d9deb54f65) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs (.../IllustrationPointsParser.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) @@ -45,7 +45,6 @@ private double beta = double.NaN; private WindDirection governingWindDirection; private IEnumerable stochasts; - private Dictionary rootIllustrationPoints; private IDictionary windDirections; private IDictionary closingSituations; @@ -115,16 +114,11 @@ ProceedOrThrow(reader); ParseSubMechanismResults(reader); ProceedOrThrow(reader); - ParseFaultTree(reader); - if (rootIllustrationPoints == null) - { - SetSubMechanismAsRootIllustrationPoint(); - } + Dictionary rootIllustrationPoints = + ParseFaultTree(reader) + ?? GetSubMechanismAsRootIllustrationPoint(); - if (governingWindDirection != null && stochasts != null && rootIllustrationPoints != null) - { - Output = new GeneralResult(beta, governingWindDirection, stochasts, rootIllustrationPoints); - } + Output = new GeneralResult(beta, governingWindDirection, stochasts, rootIllustrationPoints); } /// @@ -140,39 +134,11 @@ } } - private void SetSubMechanismAsRootIllustrationPoint() - { - rootIllustrationPoints = new Dictionary(); - foreach (Tuple windDirectionClosingSituation in GetAllWindDirectionClosingSituationCombinations()) - { - KeyValuePair subMechanismIdName = subMechanisms.First(); - string submechanismIllustrationPointName = subMechanismIdName.Value; - - 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); - } - } - /// /// Parses objects from the . /// /// The database reader. - /// Throw when the read + /// Thrown when the read /// or is . private void ParseFaultTreeAlphaValues(HydraRingDatabaseReader reader) { @@ -201,7 +167,7 @@ /// Parses fault tree beta values from the . /// /// The database reader. - /// Throw when: + /// Thrown when: /// /// The read is ; /// Multiple values for beta of illustration point found. @@ -229,7 +195,7 @@ /// Parses objects from the . /// /// The database reader. - /// Throw when the read , + /// Thrown when the read , /// , or /// is . private void ParseSubMechanismAlphaValues(HydraRingDatabaseReader reader) @@ -261,7 +227,7 @@ /// Parses sub-mechanism beta values from the . /// /// The database reader. - /// Throw when: + /// Thrown when: /// /// The read is ; /// Multiple values for beta of illustration point found. @@ -290,7 +256,7 @@ /// Parses objects from the . /// /// The database reader. - /// Throw when the read + /// Thrown when the read /// is . private void ParseSubMechanismResults(HydraRingDatabaseReader reader) { @@ -313,7 +279,7 @@ } } - private void ParseFaultTree(HydraRingDatabaseReader reader) + private Dictionary ParseFaultTree(HydraRingDatabaseReader reader) { IEnumerable> windDirectionClosingSituations = GetAllWindDirectionClosingSituationCombinations(); @@ -323,17 +289,49 @@ { List> results = CreateResultTuples(readFaultTrees); - rootIllustrationPoints = new Dictionary(); + var rootIllustrationPoints = new Dictionary(); foreach (Tuple windDirectionClosingSituation in windDirectionClosingSituations) { Tuple root = results.Single(r => !r.Item1.HasValue); rootIllustrationPoints[CreateFaultTreeKey(windDirectionClosingSituation)] = BuildFaultTree(windDirectionClosingSituation, root.Item2, root.Item4, results); } + return rootIllustrationPoints; } + return null; } + private Dictionary GetSubMechanismAsRootIllustrationPoint() + { + var rootIllustrationPoints = new Dictionary(); + foreach (Tuple windDirectionClosingSituation in GetAllWindDirectionClosingSituationCombinations()) + { + KeyValuePair subMechanismIdName = subMechanisms.First(); + string submechanismIllustrationPointName = subMechanismIdName.Value; + + 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); + } + + return rootIllustrationPoints; + } + private static List> CreateResultTuples(Dictionary[] readFaultTrees) { var results = new List>(); @@ -438,7 +436,7 @@ /// Parses beta values from the . /// /// The database reader. - /// Throw when: + /// Thrown when: /// /// The read is ; /// Multiple values for beta of illustration point found. @@ -465,7 +463,7 @@ /// The object to convert. /// The identifier. /// The converted double. - /// Throw when + /// Thrown when /// is . /// private static double ConvertToDouble(object doubleValue, string identifier) @@ -481,7 +479,7 @@ /// Parses objects from the . /// /// The database reader. - /// Throw when the read + /// Thrown when the read /// or is . private void ParseGeneralAlphaValues(HydraRingDatabaseReader reader) { @@ -505,8 +503,8 @@ /// Parses objects from the . /// /// The database reader. - /// Throw when the read - /// is . + /// Thrown when the read + /// is or when no governing wind direction is found. private void ParseWindDirections(HydraRingDatabaseReader reader) { windDirections = new Dictionary(); @@ -527,6 +525,11 @@ governingWindDirection = windDirection; } } + + if (governingWindDirection == null) + { + throw new HydraRingFileParserException(Resources.IllustrationPointsParser_Parse_No_governing_wind_direction_found); + } } private void ParseSubMechanisms(HydraRingDatabaseReader reader) Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs =================================================================== diff -u -r2cfb421b8f27d648e22b13453ae1f2d9deb54f65 -rb8d852df1bd7269388f44bcb13d23a51920842fc --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 2cfb421b8f27d648e22b13453ae1f2d9deb54f65) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) @@ -167,6 +167,16 @@ } /// + /// Looks up a localized string similar to Er is geen maatgevende windrichting gevonden in de uitvoer database.. + /// + internal static string IllustrationPointsParser_Parse_No_governing_wind_direction_found { + get { + return ResourceManager.GetString("IllustrationPointsParser_ParseWindDirections_Er_is_geen_maatgevende_windrichting_" + + "gevonden_in_de_uitvoer_database_", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Er is geen resultaat voor overslag en overloop gevonden in de Hydra-Ring uitvoerdatabase.. /// internal static string OvertoppingCalculationWaveHeightParser_No_overtopping_found_in_output_file { Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx =================================================================== diff -u -r2cfb421b8f27d648e22b13453ae1f2d9deb54f65 -rb8d852df1bd7269388f44bcb13d23a51920842fc --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx (.../Resources.resx) (revision 2cfb421b8f27d648e22b13453ae1f2d9deb54f65) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx (.../Resources.resx) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) @@ -160,4 +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 -r2cfb421b8f27d648e22b13453ae1f2d9deb54f65 -rb8d852df1bd7269388f44bcb13d23a51920842fc --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/IllustrationPoints/IllustrationPointsParserTest.cs (.../IllustrationPointsParserTest.cs) (revision 2cfb421b8f27d648e22b13453ae1f2d9deb54f65) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/IllustrationPoints/IllustrationPointsParserTest.cs (.../IllustrationPointsParserTest.cs) (revision b8d852df1bd7269388f44bcb13d23a51920842fc) @@ -147,6 +147,21 @@ } [Test] + public void Parse_NoGoverningWindDirection_ThrowsHydraRingFileParserException() + { + // Setup + string path = Path.Combine(testDirectory, "NoGoverningWindDirection"); + var parser = new IllustrationPointsParser(); + + // Call + TestDelegate test = () => parser.Parse(path, 1); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("Er is geen maatgevende windrichting gevonden in de uitvoer database.", exception.Message); + } + + [Test] [TestCase(nameof(IllustrationPointsDatabaseConstants.AlphaValue), IllustrationPointsDatabaseConstants.AlphaValue)] [TestCase(nameof(IllustrationPointsDatabaseConstants.BetaValue), IllustrationPointsDatabaseConstants.BetaValue)] [TestCase(nameof(IllustrationPointsDatabaseConstants.Duration), IllustrationPointsDatabaseConstants.Duration)] Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/NoGoverningWindDirection/1-output.sqlite =================================================================== diff -u Binary files differ