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