// 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.Globalization; using Core.Common.Base; using Core.Common.Base.Data; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Properties; namespace Ringtoets.Common.Data.FailureMechanism { /// /// This class is the base implementation for a failure mechanism. Classes which want /// to implement can and should most likely inherit /// from this class. /// public abstract class FailureMechanismBase : Observable, IFailureMechanism { private static readonly Range contributionValidityRange = new Range(0, 100); private readonly FailureMechanismSectionCollection sectionCollection; private double contribution; /// /// Creates a new instance of the class. /// /// The name of the failure mechanism. /// The code of the failure mechanism. /// The group that this failure mechanism belongs to. /// Thrown when either: /// /// is null or empty. /// is null or empty. /// /// protected FailureMechanismBase(string name, string failureMechanismCode, int group) { ValidateParameters(name, failureMechanismCode); Name = name; Code = failureMechanismCode; Group = group; sectionCollection = new FailureMechanismSectionCollection(); IsRelevant = true; InputComments = new Comment(); OutputComments = new Comment(); NotRelevantComments = new Comment(); } public double Contribution { get { return contribution; } set { if (!contributionValidityRange.InRange(value)) { string message = string.Format(Resources.Contribution_Value_should_be_in_Range_0_, contributionValidityRange.ToString(FormattableConstants.ShowAtLeastOneDecimal, CultureInfo.CurrentCulture)); throw new ArgumentOutOfRangeException(nameof(value), message); } contribution = value; } } public string Name { get; } public string Code { get; } public int Group { get; } public abstract IEnumerable Calculations { get; } public IEnumerable Sections { get { return sectionCollection; } } public string FailureMechanismSectionSourcePath { get { return sectionCollection.SourcePath; } } public Comment InputComments { get; } public Comment OutputComments { get; } public Comment NotRelevantComments { get; } public bool IsRelevant { get; set; } public void SetSections(IEnumerable sections, string sourcePath) { if (sections == null) { throw new ArgumentNullException(nameof(sections)); } if (sourcePath == null) { throw new ArgumentNullException(nameof(sourcePath)); } sectionCollection.SetSections(sections, sourcePath); foreach (FailureMechanismSection failureMechanismSection in sections) { AddSectionResult(failureMechanismSection); } } public virtual void ClearAllSections() { sectionCollection.Clear(); } protected virtual void AddSectionResult(FailureMechanismSection section) {} private static void ValidateParameters(string failureMechanismName, string failureMechanismCode) { const string parameterIsRequired = "Parameter is required."; if (string.IsNullOrEmpty(failureMechanismName)) { throw new ArgumentException(parameterIsRequired, nameof(failureMechanismName)); } if (string.IsNullOrEmpty(failureMechanismCode)) { throw new ArgumentException(parameterIsRequired, nameof(failureMechanismCode)); } } } }