Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ReliabilityIndexCalculationParser.cs =================================================================== diff -u -r12fa48e392e145311f2f6fe5822a8692594aaf0f -r9a23940073476cb6293dd921afb5298d0aeaab7d --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ReliabilityIndexCalculationParser.cs (.../ReliabilityIndexCalculationParser.cs) (revision 12fa48e392e145311f2f6fe5822a8692594aaf0f) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ReliabilityIndexCalculationParser.cs (.../ReliabilityIndexCalculationParser.cs) (revision 9a23940073476cb6293dd921afb5298d0aeaab7d) @@ -20,12 +20,9 @@ // All rights reserved. using System; -using System.Globalization; -using System.IO; -using System.Linq; using Ringtoets.HydraRing.Calculation.Data.Output; -using Ringtoets.HydraRing.Calculation.Exceptions; -using Ringtoets.HydraRing.IO; +using Ringtoets.HydraRing.Calculation.Properties; +using Ringtoets.HydraRing.Calculation.Readers; namespace Ringtoets.HydraRing.Calculation.Parsers { @@ -34,6 +31,16 @@ /// public class ReliabilityIndexCalculationParser : IHydraRingFileParser { + private const string sectionIdParameterName = "@sectionId"; + private const string betaColumnName = "BetaValue"; + private const string valueColumnName = "Value"; + + private readonly string query = $"SELECT {betaColumnName}, {valueColumnName} " + + "FROM IterateToGivenBetaConvergence " + + $"WHERE SectionId = {sectionIdParameterName} " + + "ORDER BY OuterIterationId DESC " + + "LIMIT 1;"; + /// /// Gets a /// corresponding to the section id if executed successfully; or null otherwise. @@ -42,33 +49,29 @@ public void Parse(string workingDirectory, int sectionId) { - try + if (workingDirectory == null) { - using (var streamReader = new StreamReader(Path.Combine(workingDirectory, HydraRingFileConstants.DesignTablesFileName))) - { - var fileContents = streamReader.ReadToEnd(); - var lines = fileContents.Split('\n'); - - foreach (var resultLine in lines.Skip(3)) // Skip the header lines - { - var results = resultLine.Split((char[]) null, StringSplitOptions.RemoveEmptyEntries); - - if (results.Any() && results.ElementAt(0) == sectionId.ToString()) - { - Output = new ReliabilityIndexCalculationOutput(GetDoubleValueFromElement(results.ElementAt(results.Length - 2)), GetDoubleValueFromElement(results.ElementAt(results.Length - 1))); - } - } - } + throw new ArgumentNullException(nameof(workingDirectory)); } - catch (Exception e) - { - throw new HydraRingFileParserException("", e); - } + + HydraRingDatabaseParseHelper.Parse(workingDirectory, + query, + sectionId, + Resources.ReliabilityIndexCalculationParser_Parse_No_reliability_found_in_output_file, + ReadResult); } - private static double GetDoubleValueFromElement(string element) + /// + /// Reads the result of the . + /// + /// The reader to get the result from. + /// Thrown when the the result + /// cannot be converted to the output format. + private void ReadResult(HydraRingDatabaseReader reader) { - return double.Parse(element, CultureInfo.InvariantCulture); + Output = new ReliabilityIndexCalculationOutput( + Convert.ToDouble(reader.ReadColumn("Value")), + Convert.ToDouble(reader.ReadColumn("BetaValue"))); } } } \ No newline at end of file