// 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 Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Forms.TypeConverters; using Ringtoets.Common.Forms.Views; using Ringtoets.Common.Primitives; using Ringtoets.Piping.Data; namespace Ringtoets.Piping.Forms.Views { /// /// Container of a , which takes care of the /// representation of properties in a grid. /// internal class PipingFailureMechanismSectionResultRow : FailureMechanismSectionResultRow { private const double tolerance = 1e-6; private readonly IEnumerable calculations; private readonly PipingFailureMechanism failureMechanism; private readonly IAssessmentSection assessmentSection; /// /// Creates a new instance of . /// /// The that is /// the source of this row. /// All calculations in the failure mechanism. /// The failure mechanism the section result belongs to. /// The assessment section the section result belongs to. /// Throw when any parameter is null. public PipingFailureMechanismSectionResultRow(PipingFailureMechanismSectionResult sectionResult, IEnumerable calculations, PipingFailureMechanism failureMechanism, IAssessmentSection assessmentSection) : base(sectionResult) { if (calculations == null) { throw new ArgumentNullException(nameof(calculations)); } if (failureMechanism == null) { throw new ArgumentNullException(nameof(failureMechanism)); } if (assessmentSection == null) { throw new ArgumentNullException(nameof(assessmentSection)); } this.calculations = calculations; this.failureMechanism = failureMechanism; this.assessmentSection = assessmentSection; } /// /// Gets or sets the value representing the simple assessment result. /// public SimpleAssessmentResultType SimpleAssessmentResult { get { return SectionResult.SimpleAssessmentResult; } set { SectionResult.SimpleAssessmentResult = value; SectionResult.NotifyObservers(); } } /// /// Gets or sets the value of the tailored assessment of safety. /// /// Thrown when /// is outside of the valid ranges. [TypeConverter(typeof(NoProbabilityValueDoubleConverter))] public double AssessmentLayerThree { get { return SectionResult.AssessmentLayerThree; } set { SectionResult.AssessmentLayerThree = value; } } /// /// Gets the assessment layer two a of the . /// [TypeConverter(typeof(NoProbabilityValueDoubleConverter))] public double AssessmentLayerTwoA { get { PipingCalculationScenario[] relevantScenarios = SectionResult.GetCalculationScenarios(calculations).ToArray(); bool relevantScenarioAvailable = relevantScenarios.Length != 0; if (relevantScenarioAvailable && Math.Abs(SectionResult.GetTotalContribution(relevantScenarios) - 1.0) > tolerance) { return double.NaN; } if (!relevantScenarioAvailable || SectionResult.GetCalculationScenarioStatus(relevantScenarios) != CalculationScenarioStatus.Done) { return double.NaN; } return SectionResult.GetAssessmentLayerTwoA(relevantScenarios, failureMechanism, assessmentSection); } } /// /// Gets the that is the source of this row. /// public PipingFailureMechanismSectionResult GetSectionResult { get { return SectionResult; } } } }