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);
+ }
+ }
+}