// 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.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 .
///
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 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 the result 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 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 FmSectionAssemblyDirectResult CreateFailureMechanismSectionAssemblyDirectResult(FailureMechanismSectionAssembly assembly)
{
if (assembly == null)
{
throw new ArgumentNullException(nameof(assembly));
}
return new FmSectionAssemblyDirectResult(
ConvertFailureMechanismSectionAssemblyCategoryGroup(assembly.Group),
assembly.Probability);
}
///
/// Creates based on the given parameters.
///
/// The category group to convert.
/// The created .
/// Thrown when is
/// an invalid .
/// Thrown when is
/// a valid but unsupported .
/// Thrown when any input parameter has an
/// invalid value.
public static FmSectionAssemblyDirectResult CreateFailureMechanismSectionAssemblyDirectResult(
FailureMechanismSectionAssemblyCategoryGroup categoryGroup)
{
return new FmSectionAssemblyDirectResult(ConvertFailureMechanismSectionAssemblyCategoryGroup(categoryGroup));
}
///
/// Creates a based on the given parameters.
///
/// The detailed assessment result
/// for category Iv - IIv.
/// The detailed assessment result for category
/// IIv - IIIv.
/// The detailed assessment
/// result for category IIIv - IVv.
/// The detailed assessment result for category
/// IVv - Vv.
/// The detailed assessment result
/// for category Vv - VIv.
/// 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 detailed assessment result to create the result for.
/// The created detailed calculation result.
/// 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 detailed assessment result to create the result for.
/// The created detailed calculation result.
/// 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 tailor made assessment result to create the result for.
/// The created tailor made calculation result.
/// 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 tailor made assessment result to create the result for.
/// The created tailor made calculation result.
/// 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 tailor made assessment result to create the result for.
/// The created tailor made calculation result.
/// 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();
}
}
///
/// 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 Tuple ConvertTailorMadeFailureMechanismSectionAssemblyCategoryGroup(
FailureMechanismSectionAssemblyCategoryGroup category)
{
if (!Enum.IsDefined(typeof(FailureMechanismSectionAssemblyCategoryGroup), category))
{
throw new InvalidEnumArgumentException(nameof(category),
(int) category,
typeof(FailureMechanismSectionAssemblyCategoryGroup));
}
switch (category)
{
case FailureMechanismSectionAssemblyCategoryGroup.Iv:
return new Tuple(EAssessmentResultTypeT3.ResultSpecified, EFmSectionCategory.Iv);
case FailureMechanismSectionAssemblyCategoryGroup.IIv:
return new Tuple(EAssessmentResultTypeT3.ResultSpecified, EFmSectionCategory.IIv);
case FailureMechanismSectionAssemblyCategoryGroup.IIIv:
return new Tuple(EAssessmentResultTypeT3.ResultSpecified, EFmSectionCategory.IIIv);
case FailureMechanismSectionAssemblyCategoryGroup.IVv:
return new Tuple(EAssessmentResultTypeT3.ResultSpecified, EFmSectionCategory.IVv);
case FailureMechanismSectionAssemblyCategoryGroup.Vv:
return new Tuple(EAssessmentResultTypeT3.ResultSpecified, EFmSectionCategory.Vv);
case FailureMechanismSectionAssemblyCategoryGroup.VIv:
return new Tuple(EAssessmentResultTypeT3.ResultSpecified, EFmSectionCategory.VIv);
case FailureMechanismSectionAssemblyCategoryGroup.VIIv:
return new Tuple(EAssessmentResultTypeT3.ResultSpecified, EFmSectionCategory.VIIv);
case FailureMechanismSectionAssemblyCategoryGroup.NotApplicable:
return new Tuple(EAssessmentResultTypeT3.ResultSpecified, EFmSectionCategory.NotApplicable);
case FailureMechanismSectionAssemblyCategoryGroup.None:
return new Tuple(EAssessmentResultTypeT3.Gr, null);
default:
throw new NotSupportedException();
}
}
///
/// Converts a into a .
///
/// The to convert.
/// A based on .
/// Thrown when
/// is an invalid value.
/// Thrown when
/// is a valid value, but unsupported.
private static EFmSectionCategory ConvertFailureMechanismSectionAssemblyCategoryGroup(
FailureMechanismSectionAssemblyCategoryGroup category)
{
if (!Enum.IsDefined(typeof(FailureMechanismSectionAssemblyCategoryGroup), category))
{
throw new InvalidEnumArgumentException(nameof(category),
(int) category,
typeof(FailureMechanismSectionAssemblyCategoryGroup));
}
switch (category)
{
case FailureMechanismSectionAssemblyCategoryGroup.Iv:
return EFmSectionCategory.Iv;
case FailureMechanismSectionAssemblyCategoryGroup.IIv:
return EFmSectionCategory.IIv;
case FailureMechanismSectionAssemblyCategoryGroup.IIIv:
return EFmSectionCategory.IIIv;
case FailureMechanismSectionAssemblyCategoryGroup.IVv:
return EFmSectionCategory.IVv;
case FailureMechanismSectionAssemblyCategoryGroup.Vv:
return EFmSectionCategory.Vv;
case FailureMechanismSectionAssemblyCategoryGroup.VIv:
return EFmSectionCategory.VIv;
case FailureMechanismSectionAssemblyCategoryGroup.VIIv:
return EFmSectionCategory.VIIv;
case FailureMechanismSectionAssemblyCategoryGroup.NotApplicable:
return EFmSectionCategory.NotApplicable;
case FailureMechanismSectionAssemblyCategoryGroup.None:
return EFmSectionCategory.Gr;
default:
throw new NotSupportedException();
}
}
///
/// Creates a based on the given .
///
/// The detailed assessment result to create the category compliancy for.
/// The created detailed calculation result.
/// 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();
}
}
}
}