// 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 System.Collections.Generic; using System.Linq; using Application.Ringtoets.Storage.DbContext; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.HeightStructures.Data; using Ringtoets.Integration.Data.StandAlone; using Ringtoets.Piping.Data; namespace Application.Ringtoets.Storage.Read { /// /// This class defines extension methods for read operations for a based on the /// . /// internal static class FailureMechanismEntityReadExtensions { /// /// Read the and use the information to update a . /// /// The to read into a . /// The target of the read operation. /// The object keeping track of read operations. /// Thrown when either: /// /// is null /// is null /// internal static void ReadAsPipingFailureMechanism(this FailureMechanismEntity entity, PipingFailureMechanism failureMechanism, ReadConversionCollector collector) { if (failureMechanism == null) { throw new ArgumentNullException("failureMechanism"); } if (collector == null) { throw new ArgumentNullException("collector"); } failureMechanism.StorageId = entity.FailureMechanismEntityId; failureMechanism.IsRelevant = entity.IsRelevant == 1; failureMechanism.Comments = entity.Comments; if (entity.PipingFailureMechanismMetaEntities.Count > 0) { ReadProbabilityAssessmentInput(entity.PipingFailureMechanismMetaEntities, failureMechanism.PipingProbabilityAssessmentInput); } foreach (var stochasticSoilModelEntity in entity.StochasticSoilModelEntities) { failureMechanism.StochasticSoilModels.Add(stochasticSoilModelEntity.Read(collector)); } foreach (SurfaceLineEntity surfaceLineEntity in entity.SurfaceLineEntities) { failureMechanism.SurfaceLines.Add(surfaceLineEntity.Read(collector)); } entity.ReadFailureMechanismSections(failureMechanism, collector); entity.ReadPipingMechanismSectionResults(failureMechanism, collector); ReadRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.CalculationsGroup, failureMechanism.GeneralInput, collector); } private static void ReadPipingMechanismSectionResults(this FailureMechanismEntity entity, PipingFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (var sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.PipingSectionResultEntities)) { var readSectionResult = sectionResultEntity.Read(collector); var failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); var result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); result.StorageId = readSectionResult.StorageId; result.AssessmentLayerOne = readSectionResult.AssessmentLayerOne; result.AssessmentLayerThree = readSectionResult.AssessmentLayerThree; } } /// /// Read the and use the information to update a . /// /// The to read into a . /// /// The object keeping track of read operations. internal static void ReadAsGrassCoverErosionInwardsFailureMechanism(this FailureMechanismEntity entity, GrassCoverErosionInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { failureMechanism.StorageId = entity.FailureMechanismEntityId; failureMechanism.IsRelevant = entity.IsRelevant == 1; failureMechanism.Comments = entity.Comments; entity.ReadFailureMechanismSections(failureMechanism, collector); entity.ReadGrassCoverErosionInwardsMechanismSectionResults(failureMechanism, collector); } private static void ReadGrassCoverErosionInwardsMechanismSectionResults(this FailureMechanismEntity entity, GrassCoverErosionInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (var sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.GrassCoverErosionInwardsSectionResultEntities)) { var readSectionResult = sectionResultEntity.Read(collector); var failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); var result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); result.StorageId = readSectionResult.StorageId; result.AssessmentLayerOne = readSectionResult.AssessmentLayerOne; result.AssessmentLayerThree = readSectionResult.AssessmentLayerThree; } } /// /// Read the and use the information to update a . /// /// The to create for. /// /// The object keeping track of read operations. internal static void ReadAsHeightStructuresFailureMechanism(this FailureMechanismEntity entity, HeightStructuresFailureMechanism failureMechanism, ReadConversionCollector collector) { failureMechanism.StorageId = entity.FailureMechanismEntityId; failureMechanism.IsRelevant = entity.IsRelevant == 1; failureMechanism.Comments = entity.Comments; entity.ReadFailureMechanismSections(failureMechanism, collector); entity.ReadHeightStructuresMechanismSectionResults(failureMechanism, collector); } private static void ReadHeightStructuresMechanismSectionResults(this FailureMechanismEntity entity, HeightStructuresFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (var sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.HeightStructuresSectionResultEntities)) { var readSectionResult = sectionResultEntity.Read(collector); var failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); var result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); result.StorageId = readSectionResult.StorageId; result.AssessmentLayerOne = readSectionResult.AssessmentLayerOne; result.AssessmentLayerThree = readSectionResult.AssessmentLayerThree; } } /// /// Read the and use the information to update a . /// /// The to create for. /// /// The object keeping track of read operations. internal static void ReadAsStrengthStabilityLengthwiseConstructionFailureMechanism(this FailureMechanismEntity entity, StrengthStabilityLengthwiseConstructionFailureMechanism failureMechanism, ReadConversionCollector collector) { failureMechanism.StorageId = entity.FailureMechanismEntityId; failureMechanism.IsRelevant = entity.IsRelevant == 1; failureMechanism.Comments = entity.Comments; entity.ReadFailureMechanismSections(failureMechanism, collector); entity.ReadStrengthStabilityLengthwiseConstructionMechanismSectionResults(failureMechanism, collector); } private static void ReadStrengthStabilityLengthwiseConstructionMechanismSectionResults(this FailureMechanismEntity entity, StrengthStabilityLengthwiseConstructionFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (var sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.StrengthStabilityLengthwiseConstructionSectionResultEntities)) { var readSectionResult = sectionResultEntity.Read(collector); var failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); var result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); result.StorageId = readSectionResult.StorageId; result.AssessmentLayerOne = readSectionResult.AssessmentLayerOne; result.AssessmentLayerThree = readSectionResult.AssessmentLayerThree; } } /// /// Read the and use the information to update a . /// /// The to create for. /// /// The object keeping track of read operations. internal static void ReadAsTechnicalInnovationFailureMechanism(this FailureMechanismEntity entity, TechnicalInnovationFailureMechanism failureMechanism, ReadConversionCollector collector) { failureMechanism.StorageId = entity.FailureMechanismEntityId; failureMechanism.IsRelevant = entity.IsRelevant == 1; failureMechanism.Comments = entity.Comments; entity.ReadFailureMechanismSections(failureMechanism, collector); entity.ReadTechnicalInnovationMechanismSectionResults(failureMechanism, collector); } private static void ReadTechnicalInnovationMechanismSectionResults(this FailureMechanismEntity entity, TechnicalInnovationFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (var sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.TechnicalInnovationSectionResultEntities)) { var readSectionResult = sectionResultEntity.Read(collector); var failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); var result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); result.StorageId = readSectionResult.StorageId; result.AssessmentLayerOne = readSectionResult.AssessmentLayerOne; result.AssessmentLayerThree = readSectionResult.AssessmentLayerThree; } } /// /// Read the and use the information to update a . /// /// The to create for. /// /// The object keeping track of read operations. internal static void ReadAsWaterPressureAsphaltCoverFailureMechanism(this FailureMechanismEntity entity, WaterPressureAsphaltCoverFailureMechanism failureMechanism, ReadConversionCollector collector) { failureMechanism.StorageId = entity.FailureMechanismEntityId; failureMechanism.IsRelevant = entity.IsRelevant == 1; failureMechanism.Comments = entity.Comments; entity.ReadFailureMechanismSections(failureMechanism, collector); entity.ReadWaterPressureAsphaltCoverMechanismSectionResults(failureMechanism, collector); } private static void ReadWaterPressureAsphaltCoverMechanismSectionResults(this FailureMechanismEntity entity, WaterPressureAsphaltCoverFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (var sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.WaterPressureAsphaltCoverSectionResultEntities)) { var readSectionResult = sectionResultEntity.Read(collector); var failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); var result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); result.StorageId = readSectionResult.StorageId; result.AssessmentLayerOne = readSectionResult.AssessmentLayerOne; result.AssessmentLayerThree = readSectionResult.AssessmentLayerThree; } } /// /// Read the and use the information to update a . /// /// The to create for. /// /// The object keeping track of read operations. internal static void ReadAsClosingStructureFailureMechanism(this FailureMechanismEntity entity, ClosingStructureFailureMechanism failureMechanism, ReadConversionCollector collector) { failureMechanism.StorageId = entity.FailureMechanismEntityId; failureMechanism.IsRelevant = entity.IsRelevant == 1; failureMechanism.Comments = entity.Comments; entity.ReadFailureMechanismSections(failureMechanism, collector); entity.ReadClosingStructureMechanismSectionResults(failureMechanism, collector); } private static void ReadClosingStructureMechanismSectionResults(this FailureMechanismEntity entity, ClosingStructureFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (var sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.ClosingStructureSectionResultEntities)) { var readSectionResult = sectionResultEntity.Read(collector); var failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); var result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); result.StorageId = readSectionResult.StorageId; result.AssessmentLayerOne = readSectionResult.AssessmentLayerOne; result.AssessmentLayerTwoA = readSectionResult.AssessmentLayerTwoA; result.AssessmentLayerThree = readSectionResult.AssessmentLayerThree; } } /// /// Read the and use the information to update a . /// /// The to read into a . /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsStandAloneFailureMechanism(this FailureMechanismEntity entity, IFailureMechanism failureMechanism, ReadConversionCollector collector) { failureMechanism.StorageId = entity.FailureMechanismEntityId; failureMechanism.IsRelevant = entity.IsRelevant == 1; failureMechanism.Comments = entity.Comments; entity.ReadFailureMechanismSections(failureMechanism, collector); } private static void ReadProbabilityAssessmentInput(ICollection pipingFailureMechanismMetaEntities, PipingProbabilityAssessmentInput pipingProbabilityAssessmentInput) { PipingProbabilityAssessmentInput probabilityAssessmentInput = pipingFailureMechanismMetaEntities.ElementAt(0).Read(); pipingProbabilityAssessmentInput.StorageId = probabilityAssessmentInput.StorageId; pipingProbabilityAssessmentInput.A = probabilityAssessmentInput.A; } private static void ReadRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, GeneralPipingInput generalPipingInput, ReadConversionCollector collector) { var rootCalculationGroup = rootCalculationGroupEntity.ReadPipingCalculationGroup(collector, generalPipingInput); targetRootCalculationGroup.StorageId = rootCalculationGroup.StorageId; foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } private static void ReadFailureMechanismSections(this FailureMechanismEntity entity, IFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (var failureMechanismSectionEntity in entity.FailureMechanismSectionEntities) { failureMechanism.AddSection(failureMechanismSectionEntity.Read(collector)); } } } }