using System; using System.Collections; using System.Collections.Generic; namespace Deltares.Dam.Data.UISupport { public class ConfigurationManager { private const int MaxModelCount = 10; // #Bka added SpencerHigh/SpencerLow as quick fix. Should be reset to 8 [ThreadStatic] private static readonly ConfigurationManager instance = new ConfigurationManager(); private static ConfigurationStatus[,,,,] configurationStatus; /// /// Initializes a new instance of the class. /// public ConfigurationManager() { InitDefaultStatus(); } public static ConfigurationManager Instance { get { return instance; } } /// /// Gets or sets a value indicating whether this is wti. /// /// /// true if wti; otherwise, false. /// public static bool Wti { get; set; } /// /// Indexer /// /// /// /// /// /// /// public ConfigurationStatus this[StabilityKernelType kernelType, DamProjectType damProjectType, ProbabilisticType probabilisticType, FailureMechanismSystemType failureMechanismSystemType, int i] { get { return configurationStatus[(int) kernelType, (int) damProjectType, (int) probabilisticType, (int) failureMechanismSystemType, i]; } set { configurationStatus[(int) kernelType, (int) damProjectType, (int) probabilisticType, (int) failureMechanismSystemType, i] = value; } } /// /// Gets the available dam project types. /// /// public ICollection GetAvailableDamProjectTypes() { return new[] { DamProjectType.Calamity, DamProjectType.Assessment, DamProjectType.Design }; } /// /// Gets the available probabilistic types. /// /// Type of the dam project. /// public ICollection GetAvailableProbabilisticTypes(DamProjectType damProjectType) { switch (damProjectType) { // For DAM 1.0 probabilistic is not to be used as this is not yet tested. case DamProjectType.Design: return new[] { ProbabilisticType.Deterministic }; case DamProjectType.Calamity: return new[] { ProbabilisticType.Deterministic }; case DamProjectType.Assessment: return new[] { ProbabilisticType.Deterministic }; default: return new[] { ProbabilisticType.Deterministic, ProbabilisticType.Probabilistic, ProbabilisticType.ProbabilisticFragility }; } } /// /// Gets the available failure mechanisms. /// /// /// Type of the dam project. /// Type of the probabilistic. /// public ICollection GetAvailableFailureMechanisms(StabilityKernelType kernelType, DamProjectType damProjectType, ProbabilisticType probabilisticType) { var availableList = new List(); foreach (FailureMechanismSystemType failureMechanismSystemType in Enum.GetValues(typeof(FailureMechanismSystemType))) { for (int i = 0; i < MaxModelCount; i++) { if (this[kernelType, damProjectType, probabilisticType, failureMechanismSystemType, i] == ConfigurationStatus.Available) { availableList.Add(failureMechanismSystemType); break; } } } return availableList; } /// /// Gets the available mechanism models. /// /// /// Type of the dam project. /// Type of the probabilistic. /// Type of the failure mechanism system. /// public ICollection GetAvailableMechanismModels(StabilityKernelType kernelType, DamProjectType damProjectType, ProbabilisticType probabilisticType, FailureMechanismSystemType failureMechanismSystemType) { var availableList = new List(); for (int i = 0; i < MaxModelCount; i++) { if (this[kernelType, damProjectType, probabilisticType, failureMechanismSystemType, i] == ConfigurationStatus.Available) { switch (failureMechanismSystemType) { case FailureMechanismSystemType.Piping: bool isAddModel = true; var pipingModeltype = (PipingModelType) i; if (failureMechanismSystemType == FailureMechanismSystemType.Piping && !Wti && pipingModeltype == PipingModelType.Wti2017) { isAddModel = false; } if (isAddModel) { availableList.Add(pipingModeltype); } break; case FailureMechanismSystemType.StabilityInside: case FailureMechanismSystemType.StabilityOutside: case FailureMechanismSystemType.HorizontalBalance: availableList.Add((MStabModelType) i); break; case FailureMechanismSystemType.FlowSlide: availableList.Add((FlowSlideModelType) i); break; } } } return availableList; } private static int GetLength() where T : struct { return Enum.GetValues(typeof(T)).Length; } /// /// Inits the default status. /// private void InitDefaultStatus() { Wti = false; configurationStatus = new ConfigurationStatus[GetLength(), GetLength(), GetLength(), GetLength(), MaxModelCount]; foreach (StabilityKernelType kernelType in Enum.GetValues(typeof(StabilityKernelType))) { foreach (DamProjectType damProjectType in Enum.GetValues(typeof(DamProjectType))) { foreach (ProbabilisticType probabilisticType in Enum.GetValues(typeof(ProbabilisticType))) { foreach ( FailureMechanismSystemType failureMechanismSystemType in Enum.GetValues(typeof(FailureMechanismSystemType))) { for (int i = 0; i < MaxModelCount; i++) { this[kernelType, damProjectType, probabilisticType, failureMechanismSystemType, i] = ConfigurationStatus.NotImplemented; } } } } } // This is the place to enable new possible failure mechanisms and models this[StabilityKernelType.DamClassic, DamProjectType.Assessment, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Assessment, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer4Forces] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Assessment, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Bligh] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Assessment, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Wti2017] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.UpliftVan] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.BishopUpliftVan] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityOutside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer2Forces] = ConfigurationStatus.NotAvailable; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer4Forces] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Bligh] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Wti2017] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.FlowSlide, (int) FlowSlideModelType.All] = ConfigurationStatus.NotAvailable; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.Probabilistic, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Design, ProbabilisticType.ProbabilisticFragility, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Calamity, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Calamity, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.UpliftVan] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Calamity, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityOutside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Calamity, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Calamity, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Sellmeijer4Forces] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassic, DamProjectType.Calamity, ProbabilisticType.Deterministic, FailureMechanismSystemType.Piping, (int) PipingModelType.Bligh] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassicDotNet, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassicDotNet, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.UpliftVan] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassicDotNet, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityOutside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.AdvancedDotNet, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.AdvancedDotNet, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.UpliftVan] = ConfigurationStatus.Available; this[StabilityKernelType.AdvancedDotNet, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityOutside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassicWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassicWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.UpliftVan] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassicWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.Spencer] = ConfigurationStatus.Available; this[StabilityKernelType.DamClassicWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityOutside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.AdvancedWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; this[StabilityKernelType.AdvancedWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.UpliftVan] = ConfigurationStatus.Available; this[StabilityKernelType.AdvancedWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.SpencerHigh] = ConfigurationStatus.Available; this[StabilityKernelType.AdvancedWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityInside, (int) MStabModelType.SpencerLow] = ConfigurationStatus.Available; this[StabilityKernelType.AdvancedWti, DamProjectType.Design, ProbabilisticType.Deterministic, FailureMechanismSystemType.StabilityOutside, (int) MStabModelType.Bishop] = ConfigurationStatus.Available; } } }