// Copyright (C) Stichting Deltares 2018. 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.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Util; using Ringtoets.GrassCoverErosionInwards.Data; namespace Ringtoets.GrassCoverErosionInwards.Util { /// /// Class which defines helper methods to match objects /// with objects. /// public static class GrassCoverErosionInwardsHelper { /// /// Determine which objects are available for a /// . /// /// The objects. /// The objects. /// A containing a /// of objects /// for each section which has calculations. /// Thrown when any input parameter is null /// or when an element in is null. /// Thrown when an element in is /// null. public static IDictionary> CollectCalculationsPerSection(IEnumerable sections, IEnumerable calculations) { return AssignUnassignCalculations.CollectCalculationsPerSection(sections, CalculationsToCalculationsWithLocations(calculations)); } /// /// Removed 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 section results affected by the deletion. /// 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), CalculationsToCalculationsWithLocations(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 CalculationsToCalculationsWithLocations( IEnumerable calculations) { if (calculations == null) { throw new ArgumentNullException(nameof(calculations)); } return calculations.Select(AsCalculationWithLocation).Where(c => c != null); } 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)); } } /// /// Transforms the into a . /// /// The to transform. /// A new or null if the calculation had no dike profile assigned. /// Thrown when is null. private static CalculationWithLocation AsCalculationWithLocation(GrassCoverErosionInwardsCalculation calculation) { if (calculation == null) { throw new ArgumentNullException(nameof(calculation)); } if (calculation.InputParameters.DikeProfile == null) { return null; } return new CalculationWithLocation(calculation, calculation.InputParameters.DikeProfile.WorldReferencePoint); } private static SectionResultWithCalculationAssignment AsCalculationAssignment( GrassCoverErosionInwardsFailureMechanismSectionResult failureMechanismSectionResult) { return new SectionResultWithCalculationAssignment(failureMechanismSectionResult, result => ((GrassCoverErosionInwardsFailureMechanismSectionResult) result).Calculation, (result, calculation) => ((GrassCoverErosionInwardsFailureMechanismSectionResult) result).Calculation = (GrassCoverErosionInwardsCalculation) calculation); } } }