// 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.Collections.Generic; using System.ComponentModel; using Core.Common.IO.Exceptions; using Ringtoets.HydraRing.Calculation.Data; using Ringtoets.HydraRing.Calculation.Data.Settings; namespace Ringtoets.Common.IO.HydraRing { /// /// Provider of by reading from the settings database or by resorting /// to defaults if no settings could be found. /// public class DesignTablesSettingsProvider : IDisposable { private readonly HydraRingSettingsDatabaseReader designTableSettingsReader; private IDictionary defaultDesignTablesSettings; /// /// Creates a new instance of the class. /// /// The full path to the database file to use when reading settings. /// Thrown when: /// /// The contains invalid characters. /// No file could be found at . /// Unable to open database file. /// The opened database doesn't have the expected schema. /// /// public DesignTablesSettingsProvider(string databaseFilePath) { InitializeDefaultDesignTablesSettings(); designTableSettingsReader = new HydraRingSettingsDatabaseReader(databaseFilePath); } /// /// Gets based on the provided failure mechanism type and location id. /// /// The location id to obtain the for. /// The to obtain the for. /// The corresponding to the provided failure mechanism type and location id. /// Thrown when is not a valid /// value. /// Thrown when a column that is being read doesn't /// contain expected type. public DesignTablesSetting GetDesignTablesSetting(long locationId, HydraRingFailureMechanismType failureMechanismType) { return designTableSettingsReader.ReadDesignTableSetting(locationId, failureMechanismType) ?? defaultDesignTablesSettings[failureMechanismType]; } public void Dispose() { designTableSettingsReader.Dispose(); } private void InitializeDefaultDesignTablesSettings() { defaultDesignTablesSettings = new Dictionary { { HydraRingFailureMechanismType.AssessmentLevel, new DesignTablesSetting(2, 4) }, { HydraRingFailureMechanismType.WaveHeight, new DesignTablesSetting(1, 4) }, { HydraRingFailureMechanismType.WavePeakPeriod, new DesignTablesSetting(5, 15) }, { HydraRingFailureMechanismType.WaveSpectralPeriod, new DesignTablesSetting(5, 15) }, { HydraRingFailureMechanismType.QVariant, new DesignTablesSetting(10, 50) }, { HydraRingFailureMechanismType.DikesOvertopping, new DesignTablesSetting(double.NaN, double.NaN) }, { HydraRingFailureMechanismType.DikesHeight, new DesignTablesSetting(2, 4) }, { HydraRingFailureMechanismType.StructuresOvertopping, new DesignTablesSetting(double.NaN, double.NaN) }, { HydraRingFailureMechanismType.StructuresClosure, new DesignTablesSetting(double.NaN, double.NaN) }, { HydraRingFailureMechanismType.StructuresStructuralFailure, new DesignTablesSetting(double.NaN, double.NaN) }, { HydraRingFailureMechanismType.DunesBoundaryConditions, new DesignTablesSetting(2, 4) } }; } } }