Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ExceedanceProbabilityCalculationParser.cs
===================================================================
diff -u -rae74507edbfc4fe632ba5f964a147aff630dfe6e -rb253fd5ebc5d5800f5757be8b04820cb4ca05724
--- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ExceedanceProbabilityCalculationParser.cs (.../ExceedanceProbabilityCalculationParser.cs) (revision ae74507edbfc4fe632ba5f964a147aff630dfe6e)
+++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ExceedanceProbabilityCalculationParser.cs (.../ExceedanceProbabilityCalculationParser.cs) (revision b253fd5ebc5d5800f5757be8b04820cb4ca05724)
@@ -20,13 +20,8 @@
// All rights reserved.
using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Data.SQLite;
-using System.IO;
-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
{
@@ -35,169 +30,43 @@
///
public class ExceedanceProbabilityCalculationParser : IHydraRingFileParser
{
- private const string betaResultQuery = "SELECT BetaId, RingCombinMethod, PresentationSectionId, MainMechanismId, MainMechanismCombinMethod, MechanismId, LayerId, AlternativeId, Beta " +
- "FROM BetaResults " +
- "WHERE SectionId = @SectionId " +
- "ORDER BY BetaId DESC LIMIT 0,1;";
+ private const string sectionIdParameterName = "@sectionId";
+ private const string betaColumnName = "BetaValue";
- private const string alphaResultsQuery = "SELECT RingCombinMethod, PresentationSectionId, MainMechanismId, MainMechanismCombinMethod, MechanismId, LayerId, AlternativeId, VariableId, LoadVariableId, Alpha " +
- "FROM AlphaResults " +
- "WHERE BetaId = @BetaId " +
- "ORDER BY BetaId, VariableId, LoadVariableId;";
+ private readonly string query = $"SELECT {betaColumnName} " +
+ "FROM DesignBeta " +
+ $"WHERE SectionId = {sectionIdParameterName} AND LevelType=4 " +
+ "ORDER BY OuterIterationId DESC " +
+ "LIMIT 1;";
///
- /// Gets the output of a successful parse of the output file.
+ /// Gets the value of the exceedence probability calculation.
///
- /// A corresponding to the section id if executed
- /// successfully; or null otherwise.
- public ExceedanceProbabilityCalculationOutput Output { get; private set; }
+ public double? Output { get; private set; }
public void Parse(string workingDirectory, int sectionId)
{
- try
+ if (workingDirectory == null)
{
- Output = DoParse(Path.Combine(workingDirectory, HydraRingFileConstants.WorkingDatabaseFileName), sectionId);
+ throw new ArgumentNullException(nameof(workingDirectory));
}
- catch
- {
- throw new HydraRingFileParserException();
- }
- }
- private static ExceedanceProbabilityCalculationOutput DoParse(string outputFilePath, int sectionId)
- {
- using (var sqLiteConnection = CreateConnection(outputFilePath))
- {
- sqLiteConnection.Open();
-
- int betaId;
- var exceedanceProbabilityCalculationOutput = ReadExceedanceProbabilityCalculationOutput(sectionId, sqLiteConnection, out betaId);
-
- foreach (var alpha in ReadExceedanceProbabilityCalculationAlphaOutput(sectionId, betaId, sqLiteConnection))
- {
- exceedanceProbabilityCalculationOutput.Alphas.Add(alpha);
- }
-
- return exceedanceProbabilityCalculationOutput;
- }
+ HydraRingDatabaseParseHelper.Parse(workingDirectory,
+ query,
+ sectionId,
+ Resources.ExceedanceProbabilityCalculationParser_Parse_No_beta_found_in_output_file,
+ ReadResult);
}
- private static SQLiteDataReader CreateDataReader(SQLiteConnection connection, string queryString, params SQLiteParameter[] parameters)
+ ///
+ /// 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)
{
- using (var query = new SQLiteCommand(connection)
- {
- CommandText = queryString
- })
- {
- query.Parameters.AddRange(parameters);
- return query.ExecuteReader();
- }
+ Output = Convert.ToDouble(reader.ReadColumn(betaColumnName));
}
-
- private static SQLiteConnection CreateConnection(string databaseFile)
- {
- var connectionStringBuilder = new SQLiteConnectionStringBuilder
- {
- FailIfMissing = true,
- DataSource = databaseFile,
- ReadOnly = true
- }.ConnectionString;
-
- return new SQLiteConnection(connectionStringBuilder);
- }
-
- #region Read AlphaResults
-
- private static IList ReadExceedanceProbabilityCalculationAlphaOutput(int sectionId, int betaId, SQLiteConnection sqLiteConnection)
- {
- var sectionIdParameter = new SQLiteParameter
- {
- DbType = DbType.String,
- ParameterName = "@sectionId",
- Value = sectionId
- };
- var betaIdParameter = new SQLiteParameter
- {
- DbType = DbType.String,
- ParameterName = "@BetaId",
- Value = betaId
- };
- using (var sqLiteDataReader = CreateDataReader(sqLiteConnection, alphaResultsQuery, sectionIdParameter, betaIdParameter))
- {
- return ReadAlphaResults(sectionId, sqLiteDataReader);
- }
- }
-
- private static IList ReadAlphaResults(int sectionId, SQLiteDataReader sqLiteDataReader)
- {
- var alphaResults = new List();
- while (sqLiteDataReader.Read())
- {
- alphaResults.Add(ReadExceedanceProbabilityCalculationAlphaOutput(sectionId, sqLiteDataReader));
- }
- return alphaResults;
- }
-
- private static ExceedanceProbabilityCalculationAlphaOutput ReadExceedanceProbabilityCalculationAlphaOutput(int sectionId, SQLiteDataReader sqLiteDataReader)
- {
- var ringCombinMethod = Convert.ToInt32(sqLiteDataReader["RingCombinMethod"]);
- var presentationSectionId = Convert.ToInt32(sqLiteDataReader["PresentationSectionId"]);
- var mainMechanismId = Convert.ToInt32(sqLiteDataReader["MainMechanismId"]);
- var mainMechanismCombinMethod = Convert.ToInt32(sqLiteDataReader["MainMechanismCombinMethod"]);
- var mechanismId = Convert.ToInt32(sqLiteDataReader["MechanismId"]);
- var layerId = Convert.ToInt32(sqLiteDataReader["LayerId"]);
- var alternativeId = Convert.ToInt32(sqLiteDataReader["AlternativeId"]);
- var variableId = Convert.ToInt32(sqLiteDataReader["VariableId"]);
- var loadVariableId = Convert.ToInt32(sqLiteDataReader["LoadVariableId"]);
- var alpha = Convert.ToDouble(sqLiteDataReader["Alpha"]);
- return new ExceedanceProbabilityCalculationAlphaOutput(
- ringCombinMethod, presentationSectionId, mainMechanismId, mainMechanismCombinMethod,
- mechanismId, sectionId, layerId, alternativeId, variableId, loadVariableId, alpha);
- }
-
- #endregion
-
- #region Read BetaResults
-
- private static ExceedanceProbabilityCalculationOutput ReadExceedanceProbabilityCalculationOutput(int sectionId, SQLiteConnection sqLiteConnection, out int betaId)
- {
- var sectionIdParameter = new SQLiteParameter
- {
- DbType = DbType.String,
- ParameterName = "@sectionId",
- Value = sectionId
- };
- using (var sqLiteDataReader = CreateDataReader(sqLiteConnection, betaResultQuery, sectionIdParameter))
- {
- if (!sqLiteDataReader.Read())
- {
- throw new HydraRingFileParserException();
- }
- betaId = ReadBetaId(sqLiteDataReader);
- return ReadExceedanceProbabilityCalculationOutput(sectionId, sqLiteDataReader);
- }
- }
-
- private static int ReadBetaId(SQLiteDataReader sqLiteDataReader)
- {
- return Convert.ToInt32(sqLiteDataReader["BetaId"]);
- }
-
- private static ExceedanceProbabilityCalculationOutput ReadExceedanceProbabilityCalculationOutput(int sectionId, SQLiteDataReader sqLiteDataReader)
- {
- var ringCombinMethod = Convert.ToInt32(sqLiteDataReader["RingCombinMethod"]);
- var presentationSectionId = Convert.ToInt32(sqLiteDataReader["PresentationSectionId"]);
- var mainMechanismId = Convert.ToInt32(sqLiteDataReader["MainMechanismId"]);
- var mainMechanismCombinMethod = Convert.ToInt32(sqLiteDataReader["MainMechanismCombinMethod"]);
- var mechanismId = Convert.ToInt32(sqLiteDataReader["MechanismId"]);
- var layerId = Convert.ToInt32(sqLiteDataReader["LayerId"]);
- var alternativeId = Convert.ToInt32(sqLiteDataReader["AlternativeId"]);
- var beta = Convert.ToDouble(sqLiteDataReader["Beta"]);
- return new ExceedanceProbabilityCalculationOutput(
- ringCombinMethod, presentationSectionId, mainMechanismId, mainMechanismCombinMethod,
- mechanismId, sectionId, layerId, alternativeId, beta);
- }
-
- #endregion
}
}
\ No newline at end of file