// Copyright (C) Stichting Deltares 2016. 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 Application.Ringtoets.Storage.Create; using Application.Ringtoets.Storage.Create.GrassCoverErosionInwards; using Application.Ringtoets.Storage.DbContext; using Application.Ringtoets.Storage.Exceptions; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.HydraRing.Data; namespace Application.Ringtoets.Storage.Update.GrassCoverErosionInwards { /// /// Extension methods for related /// to updating a . /// internal static class GrassCoverErosionInwardsCalculationUpdateExtensions { /// /// Updates a in /// the database based on the information of the . /// /// The Grass Cover Erosion Inwards calculation. /// The object keeping track of update operations. /// The context to obtain the existing entity from. /// The index in the parent collection where /// resides. /// Thrown when either: /// /// is null /// is null /// /// When /// does not have a corresponding entity in the database. internal static void Update(this GrassCoverErosionInwardsCalculation calculation, PersistenceRegistry registry, IRingtoetsEntities context, int order) { if (context == null) { throw new ArgumentNullException("context"); } if (registry == null) { throw new ArgumentNullException("registry"); } GrassCoverErosionInwardsCalculationEntity entity = calculation.GetCorrespondingEntity( context.GrassCoverErosionInwardsCalculationEntities, inputEntity => inputEntity.GrassCoverErosionInwardsCalculationEntityId); entity.Name = calculation.Name; entity.Comments = calculation.Comments; entity.Order = order; UpdateInput(entity, calculation.InputParameters, registry, context); UpdateOutput(entity, calculation, registry, context); registry.Register(entity, calculation); } private static void UpdateInput(GrassCoverErosionInwardsCalculationEntity entity, GrassCoverErosionInwardsInput input, PersistenceRegistry registry, IRingtoetsEntities context) { DikeProfile dikeProfile = input.DikeProfile; entity.DikeProfileEntity = dikeProfile != null ? registry.Get(dikeProfile) : null; HydraulicBoundaryLocation hydraulicBoundaryLocation = input.HydraulicBoundaryLocation; entity.HydraulicLocationEntity = hydraulicBoundaryLocation != null ? registry.Get(hydraulicBoundaryLocation) : null; entity.Orientation = input.Orientation.Value.ToNaNAsNull(); entity.CriticalFlowRateMean = input.CriticalFlowRate.Mean.Value.ToNaNAsNull(); entity.CriticalFlowRateStandardDeviation = input.CriticalFlowRate.StandardDeviation.Value.ToNaNAsNull(); entity.UseForeshore = Convert.ToByte(input.UseForeshore); entity.DikeHeight = input.DikeHeight.Value.ToNaNAsNull(); entity.UseBreakWater = Convert.ToByte(input.UseBreakWater); entity.BreakWaterType = (short)input.BreakWater.Type; entity.BreakWaterHeight = input.BreakWater.Height.Value.ToNaNAsNull(); entity.CalculateDikeHeight = Convert.ToByte(input.CalculateDikeHeight); } private static void UpdateOutput(GrassCoverErosionInwardsCalculationEntity entity, GrassCoverErosionInwardsCalculation calculation, PersistenceRegistry registry, IRingtoetsEntities context) { if (calculation.HasOutput) { if (calculation.Output.IsNew()) { entity.GrassCoverErosionInwardsOutputEntity = calculation.Output.Create(registry); } else { calculation.Output.Update(registry, context); } } else { entity.GrassCoverErosionInwardsOutputEntity = null; } } } }