// Copyright (C) Stichting Deltares 2017. 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 Core.Common.Base.IO;
using Core.Common.Utils;
using Ringtoets.Common.IO.HydraRing;
using Ringtoets.HydraRing.Calculation.Data.Input;
namespace Ringtoets.Common.Service
{
///
/// Helper class for providing a convenient method for obtaining and updating Hydra-Ring settings per location from the settings database
/// based on .
///
public static class HydraRingSettingsDatabaseHelper
{
///
/// Obtains the Hydra-Ring settings based on the location and the failure mechanism obtained from the
/// and sets these value on the .
///
/// The calculation input for which the settings are updated.
/// The path to the hydraulic boundary database file.
/// Thrown when the
/// contains invalid characters.
/// Thrown when:
///
/// - No settings database file could be found at the location of
/// with the same name.
/// - Unable to open settings database file.
/// - Unable to read required data from database file.
///
///
public static void AssignSettingsFromDatabase(HydraRingCalculationInput calculationInput, string hydraulicBoundaryDatabaseFilePath)
{
IOUtils.ValidateFilePath(hydraulicBoundaryDatabaseFilePath);
long locationId = calculationInput.HydraulicBoundaryLocationId;
string settingsDatabaseFileName = HydraulicDatabaseHelper.GetHydraulicBoundarySettingsDatabase(hydraulicBoundaryDatabaseFilePath);
using (var designTablesSettingsProviders = new DesignTablesSettingsProvider(settingsDatabaseFileName))
{
calculationInput.DesignTablesSetting = designTablesSettingsProviders.GetDesignTablesSetting(
locationId,
calculationInput.FailureMechanismType);
}
using (var numericsSettingsProvider = new NumericsSettingsProvider(settingsDatabaseFileName))
{
calculationInput.NumericsSettings = numericsSettingsProvider.GetNumericsSettings(
locationId,
calculationInput.FailureMechanismType);
}
using (var timeIntegrationSettingsProvider = new TimeIntegrationSettingsProvider(settingsDatabaseFileName))
{
calculationInput.TimeIntegrationSetting = timeIntegrationSettingsProvider.GetTimeIntegrationSetting(
locationId,
calculationInput.FailureMechanismType);
}
}
}
}