// Copyright (C) Stichting Deltares 2018. 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.ComponentModel; using Assembly.Kernel.Exceptions; using Assembly.Kernel.Interfaces; using Assembly.Kernel.Model; using Assembly.Kernel.Model.AssessmentResultTypes; using Assembly.Kernel.Model.FmSectionTypes; using Ringtoets.AssemblyTool.Data; using Ringtoets.Common.Primitives; namespace Ringtoets.AssemblyTool.KernelWrapper.Creators { /// /// Creates input instances that can be used in . /// internal static class FailureMechanismSectionAssemblyCalculatorInputCreator { /// /// Creates based on the given . /// /// The to create an /// for. /// The created . /// Thrown when /// is an invalid value. /// Thrown when /// is a valid value, but unsupported. public static EAssessmentResultTypeE1 CreateAssessmentResultTypeE1(SimpleAssessmentResultType input) { if (!Enum.IsDefined(typeof(SimpleAssessmentResultType), input)) { throw new InvalidEnumArgumentException(nameof(input), (int) input, typeof(SimpleAssessmentResultType)); } switch (input) { case SimpleAssessmentResultType.None: return EAssessmentResultTypeE1.Gr; case SimpleAssessmentResultType.NotApplicable: return EAssessmentResultTypeE1.Nvt; case SimpleAssessmentResultType.ProbabilityNegligible: return EAssessmentResultTypeE1.Fv; case SimpleAssessmentResultType.AssessFurther: return EAssessmentResultTypeE1.Vb; default: throw new NotSupportedException(); } } /// /// Creates based on the given . /// /// The to create an /// for. /// The created . /// Thrown when /// is an invalid value. /// Thrown when /// is a valid value, but unsupported. public static EAssessmentResultTypeE2 CreateAssessmentResultTypeE2(SimpleAssessmentValidityOnlyResultType input) { if (!Enum.IsDefined(typeof(SimpleAssessmentValidityOnlyResultType), input)) { throw new InvalidEnumArgumentException(nameof(input), (int) input, typeof(SimpleAssessmentValidityOnlyResultType)); } switch (input) { case SimpleAssessmentValidityOnlyResultType.None: return EAssessmentResultTypeE2.Gr; case SimpleAssessmentValidityOnlyResultType.NotApplicable: return EAssessmentResultTypeE2.Nvt; case SimpleAssessmentValidityOnlyResultType.Applicable: return EAssessmentResultTypeE2.Wvt; default: throw new NotSupportedException(); } } /// /// Creates based on the given parameters. /// /// The to create /// a for. /// The created . /// Thrown when /// is null. /// Thrown when contains /// an invalid . /// Thrown when contains /// a valid but unsupported . /// Thrown when has an /// invalid value. public static FmSectionAssemblyDirectResultWithProbability CreateFailureMechanismSectionAssemblyDirectResult(FailureMechanismSectionAssembly assembly) { if (assembly == null) { throw new ArgumentNullException(nameof(assembly)); } return new FmSectionAssemblyDirectResultWithProbability(AssemblyCalculatorInputCreator.CreateFailureMechanismSectionCategory(assembly.Group), assembly.Probability); } /// /// Creates based on the given parameters. /// /// The /// to create a for. /// The created . /// Thrown when is /// an invalid . /// Thrown when is /// a valid but unsupported . /// Thrown when has an /// invalid value. public static FmSectionAssemblyDirectResult CreateFailureMechanismSectionAssemblyDirectResult( FailureMechanismSectionAssemblyCategoryGroup categoryGroup) { return new FmSectionAssemblyDirectResult(AssemblyCalculatorInputCreator.CreateFailureMechanismSectionCategory(categoryGroup)); } /// /// Creates a based on the given parameters. /// /// The /// for category boundary Iv. /// The for category /// boundary IIv. /// The /// result for category boundary IIIv. /// The for category /// boundary IVv. /// The /// for category boundary Vv. /// The created . /// Thrown when any parameter is an invalid /// . /// Thrown when any parameter is a valid, but unsupported /// . public static FmSectionCategoryCompliancyResults CreateCategoryCompliancyResults( DetailedAssessmentResultType detailedAssessmentResultForFactorizedSignalingNorm, DetailedAssessmentResultType detailedAssessmentResultForSignalingNorm, DetailedAssessmentResultType detailedAssessmentResultForMechanismSpecificLowerLimitNorm, DetailedAssessmentResultType detailedAssessmentResultForLowerLimitNorm, DetailedAssessmentResultType detailedAssessmentResultForFactorizedLowerLimitNorm) { var compliancyResults = new FmSectionCategoryCompliancyResults(); compliancyResults.Set(EFmSectionCategory.Iv, CreateCategoryCompliancy(detailedAssessmentResultForFactorizedSignalingNorm)); compliancyResults.Set(EFmSectionCategory.IIv, CreateCategoryCompliancy(detailedAssessmentResultForSignalingNorm)); compliancyResults.Set(EFmSectionCategory.IIIv, CreateCategoryCompliancy(detailedAssessmentResultForMechanismSpecificLowerLimitNorm)); compliancyResults.Set(EFmSectionCategory.IVv, CreateCategoryCompliancy(detailedAssessmentResultForLowerLimitNorm)); compliancyResults.Set(EFmSectionCategory.Vv, CreateCategoryCompliancy(detailedAssessmentResultForFactorizedLowerLimitNorm)); return compliancyResults; } /// /// Creates a based on the given . /// /// The to create an /// for. /// The created . /// Thrown when /// is an invalid . /// Thrown when /// is a valid, but unsupported . public static EAssessmentResultTypeG1 CreateAssessmentResultTypeG1(DetailedAssessmentResultType detailedAssessmentResult) { if (!Enum.IsDefined(typeof(DetailedAssessmentResultType), detailedAssessmentResult)) { throw new InvalidEnumArgumentException(nameof(detailedAssessmentResult), (int) detailedAssessmentResult, typeof(DetailedAssessmentResultType)); } switch (detailedAssessmentResult) { case DetailedAssessmentResultType.None: return EAssessmentResultTypeG1.Gr; case DetailedAssessmentResultType.Sufficient: return EAssessmentResultTypeG1.V; case DetailedAssessmentResultType.Insufficient: return EAssessmentResultTypeG1.Vn; case DetailedAssessmentResultType.NotAssessed: return EAssessmentResultTypeG1.Ngo; default: throw new NotSupportedException(); } } /// /// Creates a based on the given . /// /// The to create an /// for. /// The created . /// Thrown when /// is an invalid . /// Thrown when /// is a valid, but unsupported . public static EAssessmentResultTypeG2 CreateAssessmentResultTypeG2(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult) { if (!Enum.IsDefined(typeof(DetailedAssessmentProbabilityOnlyResultType), detailedAssessmentResult)) { throw new InvalidEnumArgumentException(nameof(detailedAssessmentResult), (int) detailedAssessmentResult, typeof(DetailedAssessmentProbabilityOnlyResultType)); } switch (detailedAssessmentResult) { case DetailedAssessmentProbabilityOnlyResultType.Probability: return EAssessmentResultTypeG2.ResultSpecified; case DetailedAssessmentProbabilityOnlyResultType.NotAssessed: return EAssessmentResultTypeG2.Ngo; default: throw new NotSupportedException(); } } /// /// Creates a based on the given . /// /// The result to create /// an for. /// The created . /// Thrown when /// is an invalid . /// Thrown when /// is a valid, but unsupported . public static EAssessmentResultTypeT1 CreateAssessmentResultTypeT1(TailorMadeAssessmentResultType tailorMadeAssessmentResult) { if (!Enum.IsDefined(typeof(TailorMadeAssessmentResultType), tailorMadeAssessmentResult)) { throw new InvalidEnumArgumentException(nameof(tailorMadeAssessmentResult), (int) tailorMadeAssessmentResult, typeof(TailorMadeAssessmentResultType)); } switch (tailorMadeAssessmentResult) { case TailorMadeAssessmentResultType.None: return EAssessmentResultTypeT1.Gr; case TailorMadeAssessmentResultType.ProbabilityNegligible: return EAssessmentResultTypeT1.Fv; case TailorMadeAssessmentResultType.Sufficient: return EAssessmentResultTypeT1.V; case TailorMadeAssessmentResultType.Insufficient: return EAssessmentResultTypeT1.Vn; case TailorMadeAssessmentResultType.NotAssessed: return EAssessmentResultTypeT1.Ngo; default: throw new NotSupportedException(); } } /// /// Creates a based on the given . /// /// The to create an /// for. /// The created . /// Thrown when /// is an invalid . /// Thrown when /// is a valid, but unsupported . public static EAssessmentResultTypeT3 CreateAssessmentResultTypeT3(TailorMadeAssessmentProbabilityCalculationResultType tailorMadeAssessmentResult) { if (!Enum.IsDefined(typeof(TailorMadeAssessmentProbabilityCalculationResultType), tailorMadeAssessmentResult)) { throw new InvalidEnumArgumentException(nameof(tailorMadeAssessmentResult), (int) tailorMadeAssessmentResult, typeof(TailorMadeAssessmentProbabilityCalculationResultType)); } switch (tailorMadeAssessmentResult) { case TailorMadeAssessmentProbabilityCalculationResultType.None: return EAssessmentResultTypeT3.Gr; case TailorMadeAssessmentProbabilityCalculationResultType.ProbabilityNegligible: return EAssessmentResultTypeT3.Fv; case TailorMadeAssessmentProbabilityCalculationResultType.Probability: return EAssessmentResultTypeT3.ResultSpecified; case TailorMadeAssessmentProbabilityCalculationResultType.NotAssessed: return EAssessmentResultTypeT3.Ngo; default: throw new NotSupportedException(); } } /// /// Creates a based on the /// given . /// /// The to create an /// for. /// The created . /// Thrown when /// is an invalid . /// Thrown when /// is a valid, but unsupported . public static EAssessmentResultTypeT4 CreateAssessmentResultTypeT4( TailorMadeAssessmentProbabilityAndDetailedCalculationResultType tailorMadeAssessmentResult) { if (!Enum.IsDefined(typeof(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType), tailorMadeAssessmentResult)) { throw new InvalidEnumArgumentException(nameof(tailorMadeAssessmentResult), (int) tailorMadeAssessmentResult, typeof(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType)); } switch (tailorMadeAssessmentResult) { case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.None: return EAssessmentResultTypeT4.Gr; case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.ProbabilityNegligible: return EAssessmentResultTypeT4.Fv; case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.Probability: return EAssessmentResultTypeT4.ResultSpecified; case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.Sufficient: return EAssessmentResultTypeT4.V; case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.Insufficient: return EAssessmentResultTypeT4.Vn; case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.NotAssessed: return EAssessmentResultTypeT4.Ngo; default: throw new NotSupportedException(); } } /// /// Creates a from a . /// /// The to create a /// for. /// A based on . /// Thrown when /// is an invalid value. /// Thrown when /// is a valid value, but unsupported. public static Tuple CreateAssessmentResultTypeT3WithCategoryGroupResult( TailorMadeAssessmentCategoryGroupResultType category) { EFmSectionCategory result = CreateFailureMechanismSectionCategory(category); return result == EFmSectionCategory.Gr ? new Tuple(EAssessmentResultTypeT3.Gr, null) : new Tuple(EAssessmentResultTypeT3.ResultSpecified, result); } /// /// Creates a from a . /// /// The to create /// an . /// A based on . /// Thrown when /// is an invalid value. /// Thrown when /// is a valid value, but unsupported. private static EFmSectionCategory CreateFailureMechanismSectionCategory( TailorMadeAssessmentCategoryGroupResultType tailorMadeAssessmentResult) { if (!Enum.IsDefined(typeof(TailorMadeAssessmentCategoryGroupResultType), tailorMadeAssessmentResult)) { throw new InvalidEnumArgumentException(nameof(tailorMadeAssessmentResult), (int) tailorMadeAssessmentResult, typeof(TailorMadeAssessmentCategoryGroupResultType)); } switch (tailorMadeAssessmentResult) { case TailorMadeAssessmentCategoryGroupResultType.Iv: return EFmSectionCategory.Iv; case TailorMadeAssessmentCategoryGroupResultType.IIv: return EFmSectionCategory.IIv; case TailorMadeAssessmentCategoryGroupResultType.IIIv: return EFmSectionCategory.IIIv; case TailorMadeAssessmentCategoryGroupResultType.IVv: return EFmSectionCategory.IVv; case TailorMadeAssessmentCategoryGroupResultType.Vv: return EFmSectionCategory.Vv; case TailorMadeAssessmentCategoryGroupResultType.VIv: return EFmSectionCategory.VIv; case TailorMadeAssessmentCategoryGroupResultType.VIIv: return EFmSectionCategory.VIIv; case TailorMadeAssessmentCategoryGroupResultType.None: return EFmSectionCategory.Gr; default: throw new NotSupportedException(); } } /// /// Creates a based on the given . /// /// The to create an /// for. /// The created . /// Thrown when /// is an invalid . /// Thrown when /// is a valid, but unsupported . private static ECategoryCompliancy CreateCategoryCompliancy(DetailedAssessmentResultType detailedAssessmentResult) { if (!Enum.IsDefined(typeof(DetailedAssessmentResultType), detailedAssessmentResult)) { throw new InvalidEnumArgumentException(nameof(detailedAssessmentResult), (int) detailedAssessmentResult, typeof(DetailedAssessmentResultType)); } switch (detailedAssessmentResult) { case DetailedAssessmentResultType.None: return ECategoryCompliancy.NoResult; case DetailedAssessmentResultType.Sufficient: return ECategoryCompliancy.Complies; case DetailedAssessmentResultType.Insufficient: return ECategoryCompliancy.DoesNotComply; case DetailedAssessmentResultType.NotAssessed: return ECategoryCompliancy.Ngo; default: throw new NotSupportedException(); } } } }