// 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 Core.Common.Base; using Ringtoets.Common.Data; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.Structures; namespace Ringtoets.Common.Service { /// /// Service for synchronizing common data /// public static class RingtoetsCommonDataSynchronizationService { /// /// Clears the output of the hydraulic boundary locations within the collection. /// /// The locations for which the output needs to be cleared. /// All objects changed during the clear. /// Thrown when is null. public static IEnumerable ClearHydraulicBoundaryLocationOutput(IEnumerable locations) { if (locations == null) { throw new ArgumentNullException(nameof(locations)); } return locations.SelectMany(ClearHydraulicBoundaryLocationOutput) .ToArray(); } /// /// Clears the output of the given . /// /// The to clear the output for. /// Thrown when is null. /// All objects that have been changed. public static IEnumerable ClearCalculationOutput(ICalculation calculation) { if (calculation == null) { throw new ArgumentNullException(nameof(calculation)); } if (calculation.HasOutput) { calculation.ClearOutput(); return new[] { calculation }; } return Enumerable.Empty(); } /// /// Clears the given foreshore profile from a collection. /// /// Object type of the structure calculation input. /// Object type of the structure property of . /// The calculations. /// The profile to be cleared. /// All affected objects by the clear. public static IEnumerable ClearForeshoreProfile(IEnumerable> calculations, ForeshoreProfile profile) where TStructureInput : StructuresInputBase, new() where TStructure : StructureBase { var affectedObjects = new List(); foreach (StructuresCalculation calculation in calculations.Where(c => ReferenceEquals(c.InputParameters.ForeshoreProfile, profile))) { affectedObjects.AddRange(ClearCalculationOutput(calculation)); calculation.InputParameters.ForeshoreProfile = null; affectedObjects.Add(calculation.InputParameters); } return affectedObjects; } private static IEnumerable ClearHydraulicBoundaryLocationOutput(HydraulicBoundaryLocation location) { if (location.DesignWaterLevelCalculation1.HasOutput || location.DesignWaterLevelCalculation2.HasOutput || location.DesignWaterLevelCalculation3.HasOutput || location.DesignWaterLevelCalculation4.HasOutput || location.WaveHeightCalculation1.HasOutput || location.WaveHeightCalculation2.HasOutput || location.WaveHeightCalculation3.HasOutput || location.WaveHeightCalculation4.HasOutput) { location.DesignWaterLevelCalculation1.Output = null; location.DesignWaterLevelCalculation2.Output = null; location.DesignWaterLevelCalculation3.Output = null; location.DesignWaterLevelCalculation4.Output = null; location.WaveHeightCalculation1.Output = null; location.WaveHeightCalculation2.Output = null; location.WaveHeightCalculation3.Output = null; location.WaveHeightCalculation4.Output = null; return new[] { location }; } return Enumerable.Empty(); } } }