Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs =================================================================== diff -u -r9b0f9d3bc29ce2e4ad51ed5de1e7cf320cd7b16c -rb22ebfa1f38daadd1bd4f79ac846057e7ee27976 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs (.../WaveConditionsCalculationParser.cs) (revision 9b0f9d3bc29ce2e4ad51ed5de1e7cf320cd7b16c) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs (.../WaveConditionsCalculationParser.cs) (revision b22ebfa1f38daadd1bd4f79ac846057e7ee27976) @@ -19,11 +19,11 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System.Globalization; -using System.IO; +using System; +using System.Collections.Generic; using Ringtoets.HydraRing.Calculation.Data.Output; using Ringtoets.HydraRing.Calculation.Exceptions; -using Ringtoets.HydraRing.IO; +using Ringtoets.HydraRing.Calculation.Properties; namespace Ringtoets.HydraRing.Calculation.Parsers { @@ -32,111 +32,51 @@ /// public class WaveConditionsCalculationParser : IHydraRingFileParser { - private const string waveAngleText = "Wave angle"; - private const string waveDirectionText = "Wave direction"; - private const string waveHeightText = "Wave height"; - private const string wavePeakPeriodText = "Wave period"; - private const string reductionFactorText = "reduction factor"; + private const string waveHeightColumnName = "WaveHeight"; + private const string wavePeriodColumnName = "WavePeriod"; + private const string waveDirectionColumnName = "waveDirection"; + private const string waveAngleColumnName = "WaveAngle"; - private const char equalsCharacter = '='; + private readonly string query = $"SELECT {waveHeightColumnName}, {wavePeriodColumnName}, {waveAngleColumnName}, {waveDirectionColumnName} " + + "FROM QVariantResults"; - private double? waveAngle; - private double? waveDirection; - private double? waveHeight; - private double? wavePeakPeriod; - /// /// Gets the output that was parsed from the output file. /// public WaveConditionsCalculationOutput Output { get; private set; } public void Parse(string workingDirectory, int sectionId) { - string fileName = string.Format("{0}{1}", sectionId, HydraRingFileConstants.OutputFileSuffix); + Dictionary result = HydraRingDatabaseParseHelper.ReadSingleLine( + workingDirectory, + query, + sectionId, + Resources.WaveConditionsCalculationParser_Parse_No_calculated_wave_conditions_found_in_output_file); - try - { - ReadFile(Path.Combine(workingDirectory, fileName)); - SetOutput(); - } - catch - { - throw new HydraRingFileParserException(); - } + ReadResult(result); } - private void SetOutput() + /// + /// Reads the . + /// + /// The result from the database read. + /// Thrown when the result + /// cannot be converted to the output format. + private void ReadResult(IDictionary result) { - if (waveAngle != null && waveHeight != null && wavePeakPeriod != null && waveDirection != null) + try { - Output = new WaveConditionsCalculationOutput(waveHeight.Value, wavePeakPeriod.Value, waveAngle.Value, - waveDirection.Value); - } - } + double waveHeight = Convert.ToDouble(result[waveHeightColumnName]); + double wavePeriod = Convert.ToDouble(result[wavePeriodColumnName]); + double waveAngle = Convert.ToDouble(result[waveAngleColumnName]); + double waveDirection = Convert.ToDouble(result[waveDirectionColumnName]); - private void ReadFile(string filePath) - { - if (File.Exists(filePath)) - { - using (var file = new StreamReader(File.OpenRead(filePath))) - { - while (!file.EndOfStream) - { - string currentLine = file.ReadLine(); - - waveAngle = TryParseWaveAngle(currentLine) ?? waveAngle; - waveDirection = TryParseWaveDirection(currentLine) ?? waveDirection; - waveHeight = TryParseWaveHeight(currentLine) ?? waveHeight; - wavePeakPeriod = TryParseWavePeakPeriod(currentLine) ?? wavePeakPeriod; - } - } + Output = new WaveConditionsCalculationOutput(waveHeight, wavePeriod, waveAngle, waveDirection); } - } - - private static double? TryParseWaveAngle(string line) - { - if (line.Contains(waveAngleText) && !line.Contains(reductionFactorText)) + catch (InvalidCastException e) { - string resultAsString = line.Split(equalsCharacter)[1].Trim(); - return ParseStringResult(resultAsString); + throw new HydraRingFileParserException(Resources.WaveConditionsCalculationParser_Parse_No_calculated_wave_conditions_found_in_output_file, e); } - return null; } - - private static double? TryParseWaveDirection(string line) - { - if (line.Contains(waveDirectionText)) - { - string resultAsString = line.Split(equalsCharacter)[1].Trim(); - return ParseStringResult(resultAsString); - } - - return null; - } - - private static double? TryParseWaveHeight(string line) - { - if (line.Contains(waveHeightText)) - { - string resultAsString = line.Split(equalsCharacter)[1].Trim(); - return ParseStringResult(resultAsString); - } - return null; - } - - private static double? TryParseWavePeakPeriod(string line) - { - if (line.Contains(wavePeakPeriodText)) - { - string resultAsString = line.Split(equalsCharacter)[1].Trim(); - return ParseStringResult(resultAsString); - } - return null; - } - - private static double ParseStringResult(string resultAsString) - { - return double.Parse(resultAsString, CultureInfo.InvariantCulture); - } } } \ No newline at end of file