Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj =================================================================== diff -u -r3a78d46ff29f71c0de1e46381ea3aed557903eec -r94a8886b6ba34f9c005ddb7b1e949dfdde8634f2 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj (.../Ringtoets.HydraRing.Calculation.csproj) (revision 3a78d46ff29f71c0de1e46381ea3aed557903eec) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj (.../Ringtoets.HydraRing.Calculation.csproj) (revision 94a8886b6ba34f9c005ddb7b1e949dfdde8634f2) @@ -73,6 +73,7 @@ + Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingCalculationService.cs =================================================================== diff -u -r8b314e225c508616076c3cd8345286505711981f -r94a8886b6ba34f9c005ddb7b1e949dfdde8634f2 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingCalculationService.cs (.../HydraRingCalculationService.cs) (revision 8b314e225c508616076c3cd8345286505711981f) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingCalculationService.cs (.../HydraRingCalculationService.cs) (revision 94a8886b6ba34f9c005ddb7b1e949dfdde8634f2) @@ -20,15 +20,12 @@ // All rights reserved. using System; -using System.Collections.Generic; using System.Diagnostics; using System.IO; -using System.Reflection; using Ringtoets.HydraRing.Calculation.Data; using Ringtoets.HydraRing.Calculation.Data.Input; using Ringtoets.HydraRing.Calculation.Data.Output; using Ringtoets.HydraRing.Calculation.Parsers; -using Ringtoets.HydraRing.Calculation.Providers; namespace Ringtoets.HydraRing.Calculation.Service { @@ -68,52 +65,23 @@ private static T PerformCalculation(string hlcdDirectory, string ringId, HydraRingTimeIntegrationSchemeType timeIntegrationSchemeType, HydraRingUncertaintiesType uncertaintiesType, HydraRingCalculationInput hydraRingCalculationInput, Func parseFunction) { var hydraulicBoundaryLocationId = hydraRingCalculationInput.HydraulicBoundaryLocationId; - var mechanismId = new FailureMechanismDefaultsProvider().GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType).MechanismId; - // Calculation file names - var outputFileName = "designTable.txt"; - var logFileName = hydraulicBoundaryLocationId + ".log"; - var iniFileName = hydraulicBoundaryLocationId + ".ini"; - var dataBaseCreationScriptFileName = hydraulicBoundaryLocationId + ".sql"; - - // Obtain some calculation file paths + // Create a working directory var workingDirectory = CreateWorkingDirectory(hydraulicBoundaryLocationId.ToString()); - var outputFilePath = Path.Combine(workingDirectory, outputFileName); - var outputDatabasePath = Path.Combine(workingDirectory, "temp.sqlite"); - var iniFilePath = Path.Combine(workingDirectory, iniFileName); - var dataBaseCreationScriptFilePath = Path.Combine(workingDirectory, dataBaseCreationScriptFileName); - var hlcdFilePath = Path.Combine(hlcdDirectory, "HLCD.sqlite"); - // Obtain some Hydra-Ring related paths - var hydraRingDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"HydraRing"); - var mechanismComputationExeFilePath = Path.Combine(hydraRingDirectory, "MechanismComputation.exe"); - var configurationDatabaseFilePath = Path.Combine(hydraRingDirectory, "config.sqlite"); + // Write the initialization script + var hydraRingInitializationService = new HydraRingInitializationService(hydraRingCalculationInput.FailureMechanismType, hydraulicBoundaryLocationId, hlcdDirectory, workingDirectory); + File.WriteAllText(hydraRingInitializationService.IniFilePath, hydraRingInitializationService.GenerateInitializationScript()); - // Write the ini file - File.WriteAllLines(Path.Combine(workingDirectory, iniFilePath), new List - { - "section = " + hydraulicBoundaryLocationId, - "mechanism = " + mechanismId, - "alternative = 1", // Fixed: no support for piping - "layer = 1", // Fixed: no support for revetments - "logfile = " + logFileName, - "outputverbosity = basic", - "outputtofile = file", - "projectdbfilename = " + dataBaseCreationScriptFileName, - "outputfilename = " + outputFileName, - "configdbfilename = " + configurationDatabaseFilePath, - "hydraulicdbfilename = " + hlcdFilePath - }); - // Write the database creation script var hydraRingConfigurationService = new HydraRingConfigurationService(ringId, timeIntegrationSchemeType, uncertaintiesType); hydraRingConfigurationService.AddHydraRingCalculationInput(hydraRingCalculationInput); - File.WriteAllText(dataBaseCreationScriptFilePath, hydraRingConfigurationService.GenerateDataBaseCreationScript()); + File.WriteAllText(hydraRingInitializationService.DataBaseCreationScriptFilePath, hydraRingConfigurationService.GenerateDataBaseCreationScript()); // Perform the calculation hydraRingProcess = new Process { - StartInfo = new ProcessStartInfo(mechanismComputationExeFilePath, iniFilePath) + StartInfo = new ProcessStartInfo(hydraRingInitializationService.MechanismComputationExeFilePath, hydraRingInitializationService.IniFilePath) { WorkingDirectory = workingDirectory, UseShellExecute = false, @@ -127,7 +95,8 @@ hydraRingProcess.Start(); hydraRingProcess.WaitForExit(); - return parseFunction(outputFilePath, outputDatabasePath); + // Parse and return the output + return parseFunction(hydraRingInitializationService.OutputFilePath, hydraRingInitializationService.OutputDataBasePath); } private static string CreateWorkingDirectory(string folderName) Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingConfigurationService.cs =================================================================== diff -u -r8b314e225c508616076c3cd8345286505711981f -r94a8886b6ba34f9c005ddb7b1e949dfdde8634f2 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingConfigurationService.cs (.../HydraRingConfigurationService.cs) (revision 8b314e225c508616076c3cd8345286505711981f) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingConfigurationService.cs (.../HydraRingConfigurationService.cs) (revision 94a8886b6ba34f9c005ddb7b1e949dfdde8634f2) @@ -31,7 +31,7 @@ namespace Ringtoets.HydraRing.Calculation.Service { /// - /// Service for generating the database initialization script that is necessary for performing Hydra-Ring calculations. + /// Service for generating the database creation script that is necessary for performing Hydra-Ring calculations. /// The following Hydra-Ring features are not exposed (yet): /// /// Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingInitializationService.cs =================================================================== diff -u --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingInitializationService.cs (revision 0) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingInitializationService.cs (revision 94a8886b6ba34f9c005ddb7b1e949dfdde8634f2) @@ -0,0 +1,184 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.IO; +using System.Reflection; +using Ringtoets.HydraRing.Calculation.Data; +using Ringtoets.HydraRing.Calculation.Providers; + +namespace Ringtoets.HydraRing.Calculation.Service +{ + /// + /// Service for: + /// + /// + /// generating an initialization script that is necessary for performing Hydra-Ring calculations; + /// + /// + /// providing the corresponding file paths. + /// + /// + /// + internal class HydraRingInitializationService + { + private readonly int mechanismId; + private readonly int sectionId; + private readonly string iniFilePath; + private readonly string dataBaseCreationScriptFileName; + private readonly string dataBaseCreationScriptFilePath; + private readonly string logFileName; + private readonly string logFilePath; + private readonly string outputFileName; + private readonly string outputFilePath; + private readonly string outputDataBasePath; + private readonly string hlcdFilePath; + private readonly string mechanismComputationExeFilePath; + private readonly string configurationDatabaseFilePath; + + /// + /// Creates a new instance of the class. + /// + /// The failure mechanism type. + /// The section id. + /// The HLCD directory. + /// The working directory. + public HydraRingInitializationService(HydraRingFailureMechanismType failureMechanismType, int sectionId, string hlcdDirectory, string workingDirectory) + { + mechanismId = new FailureMechanismDefaultsProvider().GetFailureMechanismDefaults(failureMechanismType).MechanismId; + this.sectionId = sectionId; + + // Initialize input/output file paths + var iniFileName = sectionId + ".ini"; + iniFilePath = Path.Combine(workingDirectory, iniFileName); + dataBaseCreationScriptFileName = sectionId + ".sql"; + dataBaseCreationScriptFilePath = Path.Combine(workingDirectory, dataBaseCreationScriptFileName); + logFileName = sectionId + ".log"; + logFilePath = Path.Combine(workingDirectory, logFileName); + outputFileName = "designTable.txt"; + outputFilePath = Path.Combine(workingDirectory, outputFileName); + outputDataBasePath = Path.Combine(workingDirectory, "temp.sqlite"); + hlcdFilePath = Path.Combine(hlcdDirectory, "HLCD.sqlite"); + + // Initialize Hydra-Ring file paths + var hydraRingDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"HydraRing"); + mechanismComputationExeFilePath = Path.Combine(hydraRingDirectory, "MechanismComputation.exe"); + configurationDatabaseFilePath = Path.Combine(hydraRingDirectory, "config.sqlite"); + } + + /// + /// Gets the ini file path. + /// + public string IniFilePath + { + get + { + return iniFilePath; + } + } + + /// + /// Gets the database creation script file path. + /// + public string DataBaseCreationScriptFilePath + { + get + { + return dataBaseCreationScriptFilePath; + } + } + + /// + /// Gets the log file path. + /// + public string LogFilePath + { + get + { + return logFilePath; + } + } + + /// + /// Gets the output file path. + /// + public string OutputFilePath + { + get + { + return outputFilePath; + } + } + + /// + /// Gets the output database path. + /// + public string OutputDataBasePath + { + get + { + return outputDataBasePath; + } + } + + /// + /// Gets the HLCD file path. + /// + public string HlcdFilePath + { + get + { + return outputDataBasePath; + } + } + + /// + /// Gets the path of the MechanismComputation.exe file. + /// + public string MechanismComputationExeFilePath + { + get + { + return mechanismComputationExeFilePath; + } + } + + /// + /// Generates the initialization script necessary for performing Hydra-Ring calculations. + /// + /// The initialization script. + public string GenerateInitializationScript() + { + return string.Join(Environment.NewLine, + "section = " + sectionId, + "mechanism = " + mechanismId, + "alternative = 1", // Fixed: no support for piping + "layer = 1", // Fixed: no support for revetments + "logfile = " + logFileName, + "outputverbosity = basic", + "outputtofile = file", + "projectdbfilename = " + dataBaseCreationScriptFileName, + "outputfilename = " + outputFileName, + "configdbfilename = " + configurationDatabaseFilePath, + "hydraulicdbfilename = " + hlcdFilePath); + } + } +}