Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveConditionsCosineCalculator.cs
===================================================================
diff -u -rae74507edbfc4fe632ba5f964a147aff630dfe6e -rb22ebfa1f38daadd1bd4f79ac846057e7ee27976
--- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveConditionsCosineCalculator.cs (.../WaveConditionsCosineCalculator.cs) (revision ae74507edbfc4fe632ba5f964a147aff630dfe6e)
+++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveConditionsCosineCalculator.cs (.../WaveConditionsCosineCalculator.cs) (revision b22ebfa1f38daadd1bd4f79ac846057e7ee27976)
@@ -65,6 +65,7 @@
public double WaveDirection { get; private set; }
public double ReliabilityIndex { get; private set; }
+
public bool? Converged { get; private set; }
public void Calculate(WaveConditionsCosineCalculationInput input)
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
Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs
===================================================================
diff -u -r9bc5d8bc179ba0be25c9746859da3726b8b6a33e -rb22ebfa1f38daadd1bd4f79ac846057e7ee27976
--- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 9bc5d8bc179ba0be25c9746859da3726b8b6a33e)
+++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision b22ebfa1f38daadd1bd4f79ac846057e7ee27976)
@@ -163,5 +163,15 @@
return ResourceManager.GetString("ReliabilityIndexCalculationParser_Parse_No_reliability_found_in_output_file", resourceCulture);
}
}
+
+ ///
+ /// Looks up a localized string similar to Er zijn geen berekende golfcondities gevonden in de Hydra-Ring uitvoerdatabase..
+ ///
+ internal static string WaveConditionsCalculationParser_Parse_No_calculated_wave_conditions_found_in_output_file {
+ get {
+ return ResourceManager.GetString("WaveConditionsCalculationParser_Parse_No_calculated_wave_conditions_found_in_outp" +
+ "ut_file", resourceCulture);
+ }
+ }
}
}
Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx
===================================================================
diff -u -r9bc5d8bc179ba0be25c9746859da3726b8b6a33e -rb22ebfa1f38daadd1bd4f79ac846057e7ee27976
--- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx (.../Resources.resx) (revision 9bc5d8bc179ba0be25c9746859da3726b8b6a33e)
+++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Properties/Resources.resx (.../Resources.resx) (revision b22ebfa1f38daadd1bd4f79ac846057e7ee27976)
@@ -144,4 +144,7 @@
Er is geen resultaat voor de betrouwbaarheidsindex van de berekende kans van voorkomen gevonden in de Hydra-Ring uitvoerdatabase.
+
+ Er zijn geen berekende golfcondities gevonden in de Hydra-Ring uitvoerdatabase.
+
\ No newline at end of file
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs
===================================================================
diff -u -r0e9042f3bb1c6b0615400c2dbf45a2a06cc024e1 -rb22ebfa1f38daadd1bd4f79ac846057e7ee27976
--- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs (.../WaveConditionsCalculationParserTest.cs) (revision 0e9042f3bb1c6b0615400c2dbf45a2a06cc024e1)
+++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs (.../WaveConditionsCalculationParserTest.cs) (revision b22ebfa1f38daadd1bd4f79ac846057e7ee27976)
@@ -19,20 +19,25 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
+using System.Data.SQLite;
using System.IO;
+using System.Security.AccessControl;
using Core.Common.TestUtil;
using NUnit.Framework;
+using Ringtoets.HydraRing.Calculation.Exceptions;
using Ringtoets.HydraRing.Calculation.Parsers;
namespace Ringtoets.HydraRing.Calculation.Test.Parsers
{
[TestFixture]
public class WaveConditionsCalculationParserTest
{
- private const int sectionId = 1;
- private readonly string testDataPath = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Ringtoets.HydraRing.Calculation, "Parsers"), "WaveConditionsCalculationParser");
- private readonly string outputFileName = sectionId + "-output.txt";
+ private const string validFile = "ValidFile";
+ private readonly string testDirectory = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Ringtoets.HydraRing.Calculation, "Parsers"),
+ nameof(WaveConditionsCalculationParser));
+
[Test]
public void Constructor_ExpectedValues()
{
@@ -45,109 +50,121 @@
}
[Test]
- public void Parse_NotExistingOutputFile_OutputNull()
+ public void Parse_WorkingDirectoryNull_ThrowsArgumentNullException()
{
// Setup
var parser = new WaveConditionsCalculationParser();
// Call
- parser.Parse(testDataPath, sectionId);
+ TestDelegate test = () => parser.Parse(null, 1);
// Assert
- Assert.IsNull(parser.Output);
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("workingDirectory", exception.ParamName);
}
[Test]
- public void Parse_EmptyOutputFile_OutputNull()
+ public void Parse_WithWorkingDirectoryWithoutExpectedFile_ThrowsHydraRingFileParserException()
{
// Setup
+ string path = Path.Combine(testDirectory, "EmptyWorkingDirectory");
var parser = new WaveConditionsCalculationParser();
- var workingDirectory = Path.Combine(testDataPath, "empty");
// Call
- parser.Parse(workingDirectory, sectionId);
+ TestDelegate test = () => parser.Parse(path, 1);
// Assert
- Assert.IsNull(parser.Output);
- Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName)));
+ var exception = Assert.Throws(test);
+ Assert.IsInstanceOf(exception.InnerException);
}
[Test]
- public void Parse_ValidHydraRingOutputFile_OutputSetWithExpectedCalculationResult()
+ public void Parse_WithWorkingDirectoryWithInvalidOutputFile_ThrowsHydraRingFileParserException()
{
// Setup
+ string path = Path.Combine(testDirectory, "InvalidFile");
var parser = new WaveConditionsCalculationParser();
- var workingDirectory = Path.Combine(testDataPath, "valid");
// Call
- parser.Parse(workingDirectory, sectionId);
+ TestDelegate test = () => parser.Parse(path, 1);
// Assert
- Assert.AreEqual(22.01300, parser.Output.WaveAngle);
- Assert.AreEqual(1.87957, parser.Output.WaveHeight);
- Assert.AreEqual(11.15140, parser.Output.WavePeakPeriod);
- Assert.AreEqual(337.98700, parser.Output.WaveDirection);
- Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName)));
+ var exception = Assert.Throws(test);
+ Assert.IsInstanceOf(exception.InnerException);
+ Assert.AreEqual("Er kon geen resultaat gelezen worden uit de Hydra-Ring uitvoerdatabase.", exception.Message);
}
[Test]
- public void Parse_InvalidHydraRingOutputFileWaveAngleMissing_OutputNull()
+ public void Parse_WithWorkingDirectoryWithEmptyFile_ThrowsHydraRingFileParserException()
{
// Setup
+ string path = Path.Combine(testDirectory, "EmptyDatabase");
var parser = new WaveConditionsCalculationParser();
- var workingDirectory = Path.Combine(testDataPath, "output-no-waveAngle");
// Call
- parser.Parse(workingDirectory, sectionId);
+ TestDelegate test = () => parser.Parse(path, 1);
// Assert
- Assert.IsNull(parser.Output);
- Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName)));
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("Er zijn geen berekende golfcondities gevonden in de Hydra-Ring uitvoerdatabase.", exception.Message);
+ Assert.IsInstanceOf(exception.InnerException);
}
[Test]
- public void Parse_InvalidHydraRingOutputFileWaveDirectionMissing_OutputNull()
+ public void Parse_ErrorWhileReadingFile_ThrowsHydraRingFileParserException()
{
// Setup
var parser = new WaveConditionsCalculationParser();
- var workingDirectory = Path.Combine(testDataPath, "output-no-waveDirection");
+ string workingDirectory = Path.Combine(testDirectory, validFile);
- // Call
- parser.Parse(workingDirectory, sectionId);
+ using (new DirectoryPermissionsRevoker(testDirectory, FileSystemRights.ReadData))
+ {
+ // Call
+ TestDelegate call = () => parser.Parse(workingDirectory, 1);
- // Assert
- Assert.IsNull(parser.Output);
- Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName)));
+ // Assert
+ var exception = Assert.Throws(call);
+ var expectedMessage = "Er kon geen resultaat gelezen worden uit de Hydra-Ring uitvoerdatabase.";
+ Assert.AreEqual(expectedMessage, exception.Message);
+ Assert.IsInstanceOf(exception.InnerException);
+ }
}
[Test]
- public void Parse_InvalidHydraRingOutputFileWaveHeightMissing_OutputNull()
+ [TestCase("ValidFileNoWaveHeight")]
+ [TestCase("ValidFileNoWavePeriod")]
+ [TestCase("ValidFileNoWaveDirection")]
+ [TestCase("ValidFileNoWaveAngle")]
+ public void Parse_NotAllColumnsHasResults_ThrowsHydraRingFileParserException(string subFolder)
{
// Setup
+ string path = Path.Combine(testDirectory, subFolder);
var parser = new WaveConditionsCalculationParser();
- var workingDirectory = Path.Combine(testDataPath, "output-no-waveHeight");
// Call
- parser.Parse(workingDirectory, sectionId);
+ TestDelegate test = () => parser.Parse(path, 1);
// Assert
- Assert.IsNull(parser.Output);
- Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName)));
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("Er zijn geen berekende golfcondities gevonden in de Hydra-Ring uitvoerdatabase.", exception.Message);
+ Assert.IsInstanceOf(exception.InnerException);
}
[Test]
- public void Parse_InvalidHydraRingOutputFileWavePeakPeriodMissing_OutputNull()
+ public void Parse_ValidData_OutputSet()
{
// Setup
+ string path = Path.Combine(testDirectory, validFile);
var parser = new WaveConditionsCalculationParser();
- var workingDirectory = Path.Combine(testDataPath, "output-no-wavePeakPeriod");
// Call
- parser.Parse(workingDirectory, sectionId);
+ parser.Parse(path, 1);
// Assert
- Assert.IsNull(parser.Output);
- Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName)));
+ Assert.AreEqual(2.76672, parser.Output.WaveHeight);
+ Assert.AreEqual(-7.97903, parser.Output.WaveAngle);
+ Assert.AreEqual(292.021, parser.Output.WaveDirection);
+ Assert.AreEqual(5.02556, parser.Output.WavePeakPeriod);
}
}
}
\ No newline at end of file
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/EmptyDatabase/output.sqlite
===================================================================
diff -u
Binary files differ
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/InvalidFile/output.sqlite
===================================================================
diff -u
--- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/InvalidFile/output.sqlite (revision 0)
+++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/InvalidFile/output.sqlite (revision b22ebfa1f38daadd1bd4f79ac846057e7ee27976)
@@ -0,0 +1 @@
\ No newline at end of file
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/ValidFile/output.sqlite
===================================================================
diff -u
Binary files differ
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/ValidFileNoWaveAngle/output.sqlite
===================================================================
diff -u
Binary files differ
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/ValidFileNoWaveDirection/output.sqlite
===================================================================
diff -u
Binary files differ
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/ValidFileNoWaveHeight/output.sqlite
===================================================================
diff -u
Binary files differ
Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/ValidFileNoWavePeriod/output.sqlite
===================================================================
diff -u
Binary files differ
Fisheye: Tag b22ebfa1f38daadd1bd4f79ac846057e7ee27976 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/empty/1-output.txt'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag b22ebfa1f38daadd1bd4f79ac846057e7ee27976 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/output-no-waveAngle/1-output.txt'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag b22ebfa1f38daadd1bd4f79ac846057e7ee27976 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/output-no-waveDirection/1-output.txt'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag b22ebfa1f38daadd1bd4f79ac846057e7ee27976 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/output-no-waveHeight/1-output.txt'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag b22ebfa1f38daadd1bd4f79ac846057e7ee27976 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/output-no-wavePeakPeriod/1-output.txt'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag b22ebfa1f38daadd1bd4f79ac846057e7ee27976 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/valid/1-output.txt'.
Fisheye: No comparison available. Pass `N' to diff?