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