// 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 Assembly.Kernel.Model;
using Assembly.Kernel.Model.AssessmentResultTypes;
using Assembly.Kernel.Model.FmSectionTypes;
using Ringtoets.AssemblyTool.Data;
using Ringtoets.AssemblyTool.KernelWrapper.Creators;
using Ringtoets.AssemblyTool.KernelWrapper.Kernels;
using Ringtoets.Common.Primitives;
using IFailureMechanismSectionAssemblyCalculatorKernel = Assembly.Kernel.Interfaces.IAssessmentResultsTranslator;
namespace Ringtoets.AssemblyTool.KernelWrapper.Calculators.Assembly
{
///
/// Class representing a failure mechanism section assembly calculator.
///
public class FailureMechanismSectionAssemblyCalculator : IFailureMechanismSectionAssemblyCalculator
{
private readonly IAssemblyToolKernelFactory factory;
///
/// Creates a new instance of .
///
/// The factory responsible for creating the assembly kernel.
/// Thrown when any parameter is null.
public FailureMechanismSectionAssemblyCalculator(IAssemblyToolKernelFactory factory)
{
if (factory == null)
{
throw new ArgumentNullException(nameof(factory));
}
this.factory = factory;
}
#region Simple Assessment
public FailureMechanismSectionAssembly AssembleSimpleAssessment(SimpleAssessmentResultType input)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0E1(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultE1(input));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssembly AssembleSimpleAssessment(SimpleAssessmentValidityOnlyResultType input)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0E3(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeE2(input));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
#endregion
#region Detailed Assessment
public FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment(DetailedAssessmentResultType detailedAssessmentResult)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0G1(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG1(detailedAssessmentResult));
return FailureMechanismSectionAssemblyCreator.ConvertFailureMechanismSectionCategory(output.Result);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssembly AssembleDetailedAssessment(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult,
double probability,
AssessmentSection assessmentSection,
FailureMechanism failureMechanism)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0G3(
assessmentSection,
failureMechanism,
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG2(detailedAssessmentResult),
probability);
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssembly AssembleDetailedAssessment(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult,
double probability,
double n,
AssessmentSection assessmentSection,
FailureMechanism failureMechanism)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0G5(
assessmentSection,
failureMechanism,
n,
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG2(detailedAssessmentResult),
probability);
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment(
DetailedAssessmentResultType detailedAssessmentResultForFactorizedSignalingNorm,
DetailedAssessmentResultType detailedAssessmentResultForSignalingNorm,
DetailedAssessmentResultType detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
DetailedAssessmentResultType detailedAssessmentResultForLowerLimitNorm,
DetailedAssessmentResultType detailedAssessmentResultForFactorizedLowerLimitNorm)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0G6(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateCategoryCompliancyResults(
detailedAssessmentResultForFactorizedSignalingNorm,
detailedAssessmentResultForSignalingNorm,
detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
detailedAssessmentResultForLowerLimitNorm,
detailedAssessmentResultForFactorizedLowerLimitNorm));
return FailureMechanismSectionAssemblyCreator.ConvertFailureMechanismSectionCategory(output.Result);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
#endregion
#region Tailor Made Assessment
public FailureMechanismSectionAssemblyCategoryGroup AssembleTailorMadeAssessment(TailorMadeAssessmentResultType tailorMadeAssessmentResult)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0T1(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT1(tailorMadeAssessmentResult));
return FailureMechanismSectionAssemblyCreator.ConvertFailureMechanismSectionCategory(output.Result);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType tailorMadeAssessmentResult,
double probability,
AssessmentSection assessmentSection,
FailureMechanism failureMechanism)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0T7(
assessmentSection,
failureMechanism,
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT4(tailorMadeAssessmentResult),
probability);
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityCalculationResultType tailorMadeAssessmentResult,
double probability,
AssessmentSection assessmentSection,
FailureMechanism failureMechanism)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0T3(
assessmentSection,
failureMechanism,
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT3(tailorMadeAssessmentResult),
probability);
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityCalculationResultType tailorMadeAssessmentResult,
double probability,
double n,
AssessmentSection assessmentSection,
FailureMechanism failureMechanism)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0T5(
assessmentSection,
failureMechanism,
n,
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT3(tailorMadeAssessmentResult),
probability);
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssemblyCategoryGroup AssembleTailorMadeAssessment(FailureMechanismSectionAssemblyCategoryGroup tailorMadeAssessmentResult)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
Tuple input =
FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertTailorMadeFailureMechanismSectionAssemblyCategoryGroup(tailorMadeAssessmentResult);
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0T4(input.Item1, input.Item2);
return FailureMechanismSectionAssemblyCreator.ConvertFailureMechanismSectionCategory(output.Result);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
#endregion
#region Combined Assembly
public FailureMechanismSectionAssembly AssembleCombined(FailureMechanismSectionAssembly simpleAssembly,
FailureMechanismSectionAssembly detailedAssembly,
FailureMechanismSectionAssembly tailorMadeAssembly)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
CalculationOutput output = kernel.CombinedAssessmentFromFailureMechanismSectionResults(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(simpleAssembly),
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(detailedAssembly),
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(tailorMadeAssembly));
return FailureMechanismSectionAssemblyCreator.Create(output.Result);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
public FailureMechanismSectionAssemblyCategoryGroup AssembleCombined(FailureMechanismSectionAssemblyCategoryGroup simpleAssembly,
FailureMechanismSectionAssemblyCategoryGroup detailedAssembly,
FailureMechanismSectionAssemblyCategoryGroup tailorMadeAssembly)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
CalculationOutput output = kernel.CombinedAssessmentFromFailureMechanismSectionResults(
FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertFailureMechanismSectionAssemblyCategoryGroup(simpleAssembly),
FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertFailureMechanismSectionAssemblyCategoryGroup(detailedAssembly),
FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertFailureMechanismSectionAssemblyCategoryGroup(tailorMadeAssembly));
return FailureMechanismSectionAssemblyCreator.ConvertFailureMechanismSectionCategory(output.Result);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e);
}
}
#endregion
}
}