// 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.Linq; using Ringtoets.ClosingStructures.Data; using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Util; namespace Ringtoets.ClosingStructures.Util { /// /// Class holds helper methods to match objects /// with objects. /// public static class ClosingStructuresHelper { /// /// Updates the for each element /// of if required due to a change. /// /// The of /// to possibly reassign a calculation to. /// The of to try /// and match with the . /// All affected objects by the update. /// Thrown when any input parameter is null or when an element /// in is null. /// Thrown when element in is /// null. public static IEnumerable UpdateCalculationToSectionResultAssignments( IEnumerable sectionResults, IEnumerable> calculations) { ValidateSectionResults(sectionResults); return AssignUnassignCalculations.Update(sectionResults.Select(AsCalculationAssignment), AsCalculationsWithLocations(calculations)) .Cast() .ToArray(); } /// /// Transforms the into and filter out the calculations /// for which a could not be made. /// /// The collection to transform. /// A collection of . /// Thrown when is null or when /// an element in is null. private static IEnumerable AsCalculationsWithLocations( IEnumerable> calculations) { if (calculations == null) { throw new ArgumentNullException(nameof(calculations)); } return calculations.Select(AsCalculationWithLocation).Where(c => c != null); } /// /// Validates the section results. /// /// The to validate. /// Thrown when is null. /// Thrown when contains null items. private static void ValidateSectionResults(IEnumerable sectionResults) { if (sectionResults == null) { throw new ArgumentNullException(nameof(sectionResults)); } if (sectionResults.Any(sr => sr == null)) { throw new ArgumentException(@"SectionResults contains an entry without value.", nameof(sectionResults)); } } private static CalculationWithLocation AsCalculationWithLocation(StructuresCalculation calculation) { if (calculation == null) { throw new ArgumentNullException(nameof(calculation)); } if (calculation.InputParameters.Structure == null) { return null; } return new CalculationWithLocation(calculation, calculation.InputParameters.Structure.Location); } private static SectionResultWithCalculationAssignment AsCalculationAssignment( ClosingStructuresFailureMechanismSectionResult failureMechanismSectionResult) { return new SectionResultWithCalculationAssignment( failureMechanismSectionResult, result => ((ClosingStructuresFailureMechanismSectionResult) result).Calculation, (result, calculation) => ((ClosingStructuresFailureMechanismSectionResult) result).Calculation = (StructuresCalculation) calculation); } } }