Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs =================================================================== diff -u -r5f1c70d7eea83fca2ef6305a87a8098820ded1d9 -r02bec66c8cb3d6e26100d11cb842428144f91965 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs (.../IllustrationPointsParser.cs) (revision 5f1c70d7eea83fca2ef6305a87a8098820ded1d9) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs (.../IllustrationPointsParser.cs) (revision 02bec66c8cb3d6e26100d11cb842428144f91965) @@ -112,6 +112,11 @@ } } + /// + /// Proceeds to the next result in the data set. + /// + /// The database reader. + /// Thrown there was no other result in the data set. private static void ProceedOrThrow(HydraRingDatabaseReader reader) { if (!reader.NextResult()) @@ -147,8 +152,10 @@ int windDirectionId = Convert.ToInt32(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.WindDirectionId]); int closingSituationid = Convert.ToInt32(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.ClosingSituationId]); string name = Convert.ToString(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.StochastName]); - double duration = Convert.ToDouble(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.Duration]); - double alpha = Convert.ToDouble(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.AlphaValue]); + double duration = ConvertToDouble(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.Duration], + IllustrationPointsDatabaseConstants.Duration); + double alpha = ConvertToDouble(readFaultTreeAlphaValue[IllustrationPointsDatabaseConstants.AlphaValue], + IllustrationPointsDatabaseConstants.AlphaValue); var key = new ThreeKeyIndex(windDirectionId, closingSituationid, faultTreeId); if (!faultTreeStochasts.ContainsKey(key)) @@ -172,8 +179,8 @@ int faultTreeId = Convert.ToInt32(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.FaultTreeId]); int windDirectionId = Convert.ToInt32(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.WindDirectionId]); int closingSituationid = Convert.ToInt32(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.ClosingSituationId]); - double beta = Convert.ToDouble(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.BetaValue]); - + double beta = ConvertToDouble(readFaultTreeBetaValue[IllustrationPointsDatabaseConstants.BetaValue], + IllustrationPointsDatabaseConstants.BetaValue); var threeKeyIndex = new ThreeKeyIndex(windDirectionId, closingSituationid, faultTreeId); if (faultTreeBetaValues.ContainsKey(threeKeyIndex)) { @@ -191,9 +198,12 @@ int windDirectionId = Convert.ToInt32(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.WindDirectionId]); int closingSituationid = Convert.ToInt32(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.ClosingSituationId]); string name = Convert.ToString(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.StochastName]); - double duration = Convert.ToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.Duration]); - double alpha = Convert.ToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.AlphaValue]); - double realization = Convert.ToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.Realization]); + double duration = ConvertToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.Duration], + IllustrationPointsDatabaseConstants.Duration); + double alpha = ConvertToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.AlphaValue], + IllustrationPointsDatabaseConstants.AlphaValue); + double realization = ConvertToDouble(readSubMechanismAlphaValue[IllustrationPointsDatabaseConstants.Realization], + IllustrationPointsDatabaseConstants.Realization); var key = new ThreeKeyIndex(windDirectionId, closingSituationid, subMechanismId); if (!subMechanismStochasts.ContainsKey(key)) @@ -237,7 +247,8 @@ int windDirectionId = Convert.ToInt32(readSubMechanismResult[IllustrationPointsDatabaseConstants.WindDirectionId]); int closingSituationid = Convert.ToInt32(readSubMechanismResult[IllustrationPointsDatabaseConstants.ClosingSituationId]); string description = Convert.ToString(readSubMechanismResult[IllustrationPointsDatabaseConstants.IllustrationPointResultDescription]); - double value = Convert.ToDouble(readSubMechanismResult[IllustrationPointsDatabaseConstants.IllustrationPointResultValue]); + double value = ConvertToDouble(readSubMechanismResult[IllustrationPointsDatabaseConstants.IllustrationPointResultValue], + IllustrationPointsDatabaseConstants.IllustrationPointResultValue); var key = new ThreeKeyIndex(windDirectionId, closingSituationid, subMechanismId); if (!subMechanismResults.ContainsKey(key)) @@ -367,16 +378,35 @@ { throw new HydraRingFileParserException(Resources.IllustrationPointsParser_Parse_Multiple_values_for_beta_of_illustration_point_found); } - Output.Beta = Convert.ToDouble(betaValues[0][IllustrationPointsDatabaseConstants.BetaValue]); + Output.Beta = ConvertToDouble(betaValues[0][IllustrationPointsDatabaseConstants.BetaValue], + IllustrationPointsDatabaseConstants.BetaValue); } + /// + /// Converts to . + /// + /// + /// The identifier. + /// The converted double. + /// Throw when + /// is . + /// + private static double ConvertToDouble(object doubleValue, string identifier) + { + if (doubleValue.Equals(DBNull.Value)) + { + throw new HydraRingFileParserException(string.Format(Resources.IllustrationPointsParser_Parse_Column_0_is_Null, identifier)); + } + return Convert.ToDouble(doubleValue); + } + private void ParseGeneralAlphaValues(HydraRingDatabaseReader reader) { Output.Stochasts = GetIterator(reader).Select(a => new Stochast { Name = Convert.ToString(a[IllustrationPointsDatabaseConstants.StochastName]), - Duration = Convert.ToDouble(a[IllustrationPointsDatabaseConstants.Duration]), - Alpha = Convert.ToDouble(a[IllustrationPointsDatabaseConstants.AlphaValue]) + Duration = ConvertToDouble(a[IllustrationPointsDatabaseConstants.Duration], IllustrationPointsDatabaseConstants.Duration), + Alpha = ConvertToDouble(a[IllustrationPointsDatabaseConstants.AlphaValue], IllustrationPointsDatabaseConstants.AlphaValue) }).ToArray(); } @@ -395,7 +425,8 @@ { int key = Convert.ToInt32(readWindDirection[IllustrationPointsDatabaseConstants.WindDirectionId]); string name = Convert.ToString(readWindDirection[IllustrationPointsDatabaseConstants.WindDirectionName]); - double angle = Convert.ToDouble(readWindDirection[IllustrationPointsDatabaseConstants.WindDirectionAngle]); + double angle = ConvertToDouble(readWindDirection[IllustrationPointsDatabaseConstants.WindDirectionAngle], + IllustrationPointsDatabaseConstants.WindDirectionAngle); bool isGoverning = Convert.ToBoolean(readWindDirection[IllustrationPointsDatabaseConstants.IsGoverning]); var windDirection = new WindDirection(name, angle); Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs =================================================================== diff -u -rb75888ac4a86ce24369ba0dad93cfe5bcd3fc794 -r02bec66c8cb3d6e26100d11cb842428144f91965 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision b75888ac4a86ce24369ba0dad93cfe5bcd3fc794) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 02bec66c8cb3d6e26100d11cb842428144f91965) @@ -129,6 +129,15 @@ } /// + /// Looks up a localized string similar to Er is geen waarde gevonden voor kolom '{0}' tijdens het uitlezen van de illustratiepunten in de uitvoer database.. + /// + internal static string IllustrationPointsParser_Parse_Column_0_is_Null { + get { + return ResourceManager.GetString("IllustrationPointsParser_Parse_Column_0_is_Null", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Er konden geen illustratiepunten worden uitgelezen.. /// internal static string IllustrationPointsParser_Parse_Could_not_read_illustration_point_data { Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx =================================================================== diff -u -rb75888ac4a86ce24369ba0dad93cfe5bcd3fc794 -r02bec66c8cb3d6e26100d11cb842428144f91965 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx (.../Resources.resx) (revision b75888ac4a86ce24369ba0dad93cfe5bcd3fc794) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx (.../Resources.resx) (revision 02bec66c8cb3d6e26100d11cb842428144f91965) @@ -153,4 +153,7 @@ Meerdere waarden voor de betrouwbaarheidsindex voor 1 illustratiepunt gevonden in de uitvoer database. + + Er is geen waarde gevonden voor kolom '{0}' tijdens het uitlezen van de illustratiepunten in de uitvoer database. + \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/IllustrationPoints/IllustrationPointsParserTest.cs =================================================================== diff -u -r0fd23ff8e68b5f0d18d344d104bc68216cb49b51 -r02bec66c8cb3d6e26100d11cb842428144f91965 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/IllustrationPoints/IllustrationPointsParserTest.cs (.../IllustrationPointsParserTest.cs) (revision 0fd23ff8e68b5f0d18d344d104bc68216cb49b51) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/IllustrationPoints/IllustrationPointsParserTest.cs (.../IllustrationPointsParserTest.cs) (revision 02bec66c8cb3d6e26100d11cb842428144f91965) @@ -129,6 +129,28 @@ } [Test] + [TestCase(nameof(IllustrationPointsDatabaseConstants.AlphaValue), IllustrationPointsDatabaseConstants.AlphaValue)] + [TestCase(nameof(IllustrationPointsDatabaseConstants.BetaValue), IllustrationPointsDatabaseConstants.BetaValue)] + [TestCase(nameof(IllustrationPointsDatabaseConstants.Duration), IllustrationPointsDatabaseConstants.Duration)] + [TestCase(nameof(IllustrationPointsDatabaseConstants.IllustrationPointResultValue), IllustrationPointsDatabaseConstants.IllustrationPointResultValue)] + [TestCase(nameof(IllustrationPointsDatabaseConstants.Realization), IllustrationPointsDatabaseConstants.Realization)] + [TestCase(nameof(IllustrationPointsDatabaseConstants.WindDirectionAngle), IllustrationPointsDatabaseConstants.WindDirectionAngle)] + public void Parse_ValueNullInDatabase_ThrowsHydraRingFileParserException(string directoryIdentifier, string identifier) + { + // Setup + string path = Path.Combine(testDirectory, $"Null{directoryIdentifier}"); + var parser = new IllustrationPointsParser(); + + // Call + TestDelegate test = () => parser.Parse(path, 1); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual($"Er is geen waarde gevonden voor kolom '{identifier}' tijdens het " + + "uitlezen van de illustratiepunten in de uitvoer database.", exception.Message); + } + + [Test] public void Parse_ValidStructuresStabilityData_SetsOutputAsExpected() { // Setup Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/NullAlphaValue/1-output.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/NullBetaValue/1-output.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/NullDuration/1-output.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/NullIllustrationPointResultValue/1-output.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/NullRealization/1-output.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/IllustrationPointsParser/NullWindDirectionAngle/1-output.sqlite =================================================================== diff -u Binary files differ