// 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 System.Collections.Generic; using System.ComponentModel; using System.Linq; using AssemblyTool.Kernel.Assembly; using AssemblyTool.Kernel.Assembly.CalculatorInput; using AssemblyTool.Kernel.Data; using AssemblyTool.Kernel.Data.AssemblyCategories; using AssemblyTool.Kernel.Data.CalculationResults; using AssemblyTool.Kernel.ErrorHandling; using Ringtoets.AssemblyTool.Data; using Ringtoets.Common.Primitives; namespace Ringtoets.AssemblyTool.KernelWrapper.Creators { /// /// Creates input instances that can be used in . /// public static class FailureMechanismSectionAssemblyCalculatorInputCreator { /// /// Creates based on the given . /// /// The to create the result for. /// The created . /// Thrown when /// is an invalid value. /// Thrown when /// is a valid value, but unsupported. public static SimpleCalculationResult CreateSimpleCalculationResult(SimpleAssessmentResultType input) { if (!Enum.IsDefined(typeof(SimpleAssessmentResultType), input)) { throw new InvalidEnumArgumentException(nameof(input), (int) input, typeof(SimpleAssessmentResultType)); } switch (input) { case SimpleAssessmentResultType.None: return SimpleCalculationResult.None; case SimpleAssessmentResultType.NotApplicable: return SimpleCalculationResult.NVT; case SimpleAssessmentResultType.ProbabilityNegligible: return SimpleCalculationResult.FV; case SimpleAssessmentResultType.AssessFurther: return SimpleCalculationResult.VB; default: throw new NotSupportedException(); } } /// /// Creates based on the given . /// /// The to create the result for. /// The created . /// Thrown when /// is an invalid value. /// Thrown when /// is a valid value, but unsupported. public static SimpleCalculationResultValidityOnly CreateSimpleCalculationResultValidityOnly(SimpleAssessmentResultValidityOnlyType input) { if (!Enum.IsDefined(typeof(SimpleAssessmentResultValidityOnlyType), input)) { throw new InvalidEnumArgumentException(nameof(input), (int) input, typeof(SimpleAssessmentResultValidityOnlyType)); } switch (input) { case SimpleAssessmentResultValidityOnlyType.None: return SimpleCalculationResultValidityOnly.None; case SimpleAssessmentResultValidityOnlyType.NotApplicable: return SimpleCalculationResultValidityOnly.NVT; case SimpleAssessmentResultValidityOnlyType.Applicable: return SimpleCalculationResultValidityOnly.WVT; default: throw new NotSupportedException(); } } /// /// Creates based on the given parameters. /// /// The calculated probability to create the input for. /// A collection of to /// create the input for. /// The created . /// Thrown when /// is null. /// Thrown when contains /// an invalid . /// Thrown when contains /// a valid but unsupported . /// Thrown when any input parameter has an /// invalid value. public static DetailedCalculationInputFromProbability CreateDetailedCalculationInputFromProbability( double probability, IEnumerable categories) { if (categories == null) { throw new ArgumentNullException(nameof(categories)); } return new DetailedCalculationInputFromProbability(new Probability(probability), categories.Select(category => new FailureMechanismSectionCategory( ConvertFailureMechanismSectionAssemblyCategoryGroup(category.Group), new Probability(category.LowerBoundary), new Probability(category.UpperBoundary))).ToArray()); } /// /// Creates based on the given parameters. /// /// The calculated probability to create the input for. /// A collection of to /// create the input for. /// The 'N' parameter used to factor in the 'length effect'. /// The created . /// Thrown when /// is null. /// Thrown when contains /// an invalid . /// Thrown when contains /// a valid but unsupported . /// Thrown when any input parameter has an /// invalid value. public static DetailedCalculationInputFromProbabilityWithLengthEffect CreateDetailedCalculationInputFromProbabilityWithLengthEffect( double probability, IEnumerable categories, double n) { if (categories == null) { throw new ArgumentNullException(nameof(categories)); } return new DetailedCalculationInputFromProbabilityWithLengthEffect( new Probability(probability), categories.Select(category => new FailureMechanismSectionCategory( ConvertFailureMechanismSectionAssemblyCategoryGroup(category.Group), new Probability(category.LowerBoundary), new Probability(category.UpperBoundary))).ToArray(), n); } /// /// Creates based on the given parameters. /// /// The assembly to convert. /// The created . /// Thrown when /// is null. /// Thrown when contains /// an invalid . /// Thrown when contains /// a valid but unsupported . /// Thrown when any input parameter has an /// invalid value. public static FailureMechanismSectionAssemblyCategoryResult CreateFailureMechanismSectionAssemblyCategoryResult(FailureMechanismSectionAssembly assembly) { if (assembly == null) { throw new ArgumentNullException(nameof(assembly)); } return new FailureMechanismSectionAssemblyCategoryResult( ConvertFailureMechanismSectionAssemblyCategoryGroup(assembly.Group), new Probability(assembly.Probability)); } /// /// Creates based on the given parameters. /// /// The tailor made assessment result to create /// the input for. /// The calculated probability to create the input for. /// A collection of to /// create the input for. /// The created . /// Thrown when /// is null. /// Thrown when: /// /// contains an invalid ; /// is an invalid . /// /// /// Thrown when: /// /// contains a valid but unsupported ; /// a valid but unsupported . /// /// /// Thrown when any input parameter has an /// invalid value. public static TailorMadeCalculationInputFromProbability CreateTailorMadeCalculationInputFromProbability( TailorMadeAssessmentProbabilityCalculationResultType tailorMadeAssessmentResult, double probability, IEnumerable categories) { if (categories == null) { throw new ArgumentNullException(nameof(categories)); } if (!Enum.IsDefined(typeof(TailorMadeAssessmentProbabilityCalculationResultType), tailorMadeAssessmentResult)) { throw new InvalidEnumArgumentException(nameof(tailorMadeAssessmentResult), (int) tailorMadeAssessmentResult, typeof(TailorMadeAssessmentProbabilityCalculationResultType)); } TailorMadeProbabilityCalculationResult tailorMadeProbabilityCalculationResult; switch (tailorMadeAssessmentResult) { case TailorMadeAssessmentProbabilityCalculationResultType.None: tailorMadeProbabilityCalculationResult = new TailorMadeProbabilityCalculationResult(TailorMadeProbabilityCalculationResultGroup.None); break; case TailorMadeAssessmentProbabilityCalculationResultType.ProbabilityNegligible: tailorMadeProbabilityCalculationResult = new TailorMadeProbabilityCalculationResult(TailorMadeProbabilityCalculationResultGroup.FV); break; case TailorMadeAssessmentProbabilityCalculationResultType.NotAssessed: tailorMadeProbabilityCalculationResult = new TailorMadeProbabilityCalculationResult(TailorMadeProbabilityCalculationResultGroup.NGO); break; case TailorMadeAssessmentProbabilityCalculationResultType.Probability: tailorMadeProbabilityCalculationResult = new TailorMadeProbabilityCalculationResult(new Probability(probability)); break; default: throw new NotSupportedException(); } return new TailorMadeCalculationInputFromProbability(tailorMadeProbabilityCalculationResult, categories.Select(category => new FailureMechanismSectionCategory( ConvertFailureMechanismSectionAssemblyCategoryGroup(category.Group), new Probability(category.LowerBoundary), new Probability(category.UpperBoundary))).ToArray()); } /// /// Converts a into a . /// /// The to convert. /// A based on . /// Thrown when /// is an invalid value. /// Thrown when /// is a valid value, but unsupported. public static FailureMechanismSectionCategoryGroup ConvertFailureMechanismSectionAssemblyCategoryGroup( FailureMechanismSectionAssemblyCategoryGroup category) { if (!Enum.IsDefined(typeof(FailureMechanismSectionAssemblyCategoryGroup), category)) { throw new InvalidEnumArgumentException(nameof(category), (int) category, typeof(FailureMechanismSectionAssemblyCategoryGroup)); } switch (category) { case FailureMechanismSectionAssemblyCategoryGroup.Iv: return FailureMechanismSectionCategoryGroup.Iv; case FailureMechanismSectionAssemblyCategoryGroup.IIv: return FailureMechanismSectionCategoryGroup.IIv; case FailureMechanismSectionAssemblyCategoryGroup.IIIv: return FailureMechanismSectionCategoryGroup.IIIv; case FailureMechanismSectionAssemblyCategoryGroup.IVv: return FailureMechanismSectionCategoryGroup.IVv; case FailureMechanismSectionAssemblyCategoryGroup.Vv: return FailureMechanismSectionCategoryGroup.Vv; case FailureMechanismSectionAssemblyCategoryGroup.VIv: return FailureMechanismSectionCategoryGroup.VIv; case FailureMechanismSectionAssemblyCategoryGroup.VIIv: return FailureMechanismSectionCategoryGroup.VIIv; case FailureMechanismSectionAssemblyCategoryGroup.NotApplicable: return FailureMechanismSectionCategoryGroup.NotApplicable; case FailureMechanismSectionAssemblyCategoryGroup.None: return FailureMechanismSectionCategoryGroup.None; default: throw new NotSupportedException(); } } } }