// 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 Application.Ringtoets.Storage.DbContext; using Application.Ringtoets.Storage.Read.ClosingStructures; using Application.Ringtoets.Storage.Read.DuneErosion; using Application.Ringtoets.Storage.Read.GrassCoverErosionInwards; using Application.Ringtoets.Storage.Read.GrassCoverErosionOutwards; using Application.Ringtoets.Storage.Read.HeightStructures; using Application.Ringtoets.Storage.Read.Piping; using Application.Ringtoets.Storage.Read.PipingStructures; using Application.Ringtoets.Storage.Read.StabilityPointStructures; using Application.Ringtoets.Storage.Read.StabilityStoneCover; using Application.Ringtoets.Storage.Read.WaveImpactAsphaltCover; using Ringtoets.ClosingStructures.Data; using Ringtoets.Common.Data; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.DuneErosion.Data; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.HeightStructures.Data; using Ringtoets.Integration.Data.StandAlone; using Ringtoets.Integration.Data.StandAlone.SectionResults; using Ringtoets.Piping.Data; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityStoneCover.Data; using Ringtoets.WaveImpactAsphaltCover.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. internal static void ReadCommonFailureMechanismProperties(this FailureMechanismEntity entity, IFailureMechanism failureMechanism, ReadConversionCollector collector) { failureMechanism.IsRelevant = Convert.ToBoolean(entity.IsRelevant); failureMechanism.InputComments.Body = entity.InputComments; failureMechanism.OutputComments.Body = entity.OutputComments; failureMechanism.NotRelevantComments.Body = entity.NotRelevantComments; entity.ReadFailureMechanismSections(failureMechanism, collector); } private static void ReadFailureMechanismSections(this FailureMechanismEntity entity, IFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (FailureMechanismSectionEntity failureMechanismSectionEntity in entity.FailureMechanismSectionEntities) { failureMechanism.AddSection(failureMechanismSectionEntity.Read(collector)); } } private static void ReadForeshoreProfiles(this FailureMechanismEntity entity, ForeshoreProfileCollection foreshoreProfiles, string foreshoreProfileSourcePath, ReadConversionCollector collector) { if (foreshoreProfileSourcePath != null) { foreshoreProfiles.AddRange(entity.ForeshoreProfileEntities .OrderBy(fpe => fpe.Order) .Select(foreshoreProfileEntity => foreshoreProfileEntity.Read(collector)), foreshoreProfileSourcePath); } } #region Piping /// /// 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 /// /// Thrown when expected table entries cannot be found. internal static void ReadAsPipingFailureMechanism(this FailureMechanismEntity entity, PipingFailureMechanism failureMechanism, ReadConversionCollector collector) { if (failureMechanism == null) { throw new ArgumentNullException(nameof(failureMechanism)); } if (collector == null) { throw new ArgumentNullException(nameof(collector)); } entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); PipingFailureMechanismMetaEntity metaEntity = entity.PipingFailureMechanismMetaEntities.Single(); metaEntity.ReadProbabilityAssessmentInput(failureMechanism.PipingProbabilityAssessmentInput); metaEntity.ReadGeneralPipingInput(failureMechanism.GeneralInput); string stochasticSoilModelCollectionSourcePath = metaEntity.StochasticSoilModelCollectionSourcePath; if (stochasticSoilModelCollectionSourcePath != null) { failureMechanism.StochasticSoilModels.AddRange(entity.StochasticSoilModelEntities .OrderBy(ssm => ssm.Order) .Select(e => e.Read(collector)), stochasticSoilModelCollectionSourcePath); } string surfaceLineCollectionSourcePath = metaEntity.SurfaceLineCollectionSourcePath; if (surfaceLineCollectionSourcePath != null) { failureMechanism.SurfaceLines.AddRange(entity.SurfaceLineEntities .OrderBy(sl => sl.Order) .Select(e => e.Read(collector)), surfaceLineCollectionSourcePath); } entity.ReadPipingMechanismSectionResults(failureMechanism, collector); ReadPipingRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.CalculationsGroup, failureMechanism.GeneralInput, collector); } private static void ReadPipingMechanismSectionResults(this FailureMechanismEntity entity, PipingFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (PipingSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.PipingSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); PipingFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } private static void ReadPipingRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, GeneralPipingInput generalPipingInput, ReadConversionCollector collector) { CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsPipingCalculationGroup(collector, generalPipingInput); foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } #endregion #region Grass Cover Erosion Inwards /// /// 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 ReadAsGrassCoverErosionInwardsFailureMechanism(this FailureMechanismEntity entity, GrassCoverErosionInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadGeneralGrassCoverErosionInwardsCalculationInput(failureMechanism.GeneralInput); entity.ReadDikeProfiles(failureMechanism.DikeProfiles, collector); ReadGrassCoverErosionInwardsRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.CalculationsGroup, collector); entity.ReadGrassCoverErosionInwardsMechanismSectionResults(failureMechanism, collector); } private static void ReadGeneralGrassCoverErosionInwardsCalculationInput(this FailureMechanismEntity entity, GeneralGrassCoverErosionInwardsInput input) { entity.GrassCoverErosionInwardsFailureMechanismMetaEntities.Single().Read(input); } private static void ReadDikeProfiles(this FailureMechanismEntity entity, DikeProfileCollection dikeProfiles, ReadConversionCollector collector) { if (entity.DikeProfileEntities.Any()) { GrassCoverErosionInwardsFailureMechanismMetaEntity metaEntity = entity.GrassCoverErosionInwardsFailureMechanismMetaEntities.Single(); string sourcePath = metaEntity.DikeProfileCollectionSourcePath; dikeProfiles.AddRange(entity.DikeProfileEntities .OrderBy(dp => dp.Order) .Select(dp => dp.Read(collector)), sourcePath); } } private static void ReadGrassCoverErosionInwardsMechanismSectionResults(this FailureMechanismEntity entity, GrassCoverErosionInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (GrassCoverErosionInwardsSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.GrassCoverErosionInwardsSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); GrassCoverErosionInwardsFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result, collector); } } private static void ReadGrassCoverErosionInwardsRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, ReadConversionCollector collector) { CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector); foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } #endregion #region Height Structures /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. /// Thrown when expected table entries could not be found.> internal static void ReadAsHeightStructuresFailureMechanism(this FailureMechanismEntity entity, HeightStructuresFailureMechanism failureMechanism, ReadConversionCollector collector) { HeightStructuresFailureMechanismMetaEntity metaEntity = entity.HeightStructuresFailureMechanismMetaEntities.Single(); entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadHeightStructuresMechanismSectionResults(failureMechanism, collector); entity.ReadForeshoreProfiles(failureMechanism.ForeshoreProfiles, metaEntity.ForeshoreProfileCollectionSourcePath, collector); entity.ReadHeightStructures(failureMechanism.HeightStructures, metaEntity.HeightStructureCollectionSourcePath, collector); entity.ReadGeneralInput(failureMechanism.GeneralInput); ReadHeightStructuresRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.CalculationsGroup, collector); } private static void ReadHeightStructuresMechanismSectionResults(this FailureMechanismEntity entity, HeightStructuresFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (HeightStructuresSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.HeightStructuresSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); HeightStructuresFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result, collector); } } private static void ReadHeightStructures(this FailureMechanismEntity entity, StructureCollection heightStructures, string sourcePath, ReadConversionCollector collector) { if (sourcePath != null) { heightStructures.AddRange(entity.HeightStructureEntities.OrderBy(fpe => fpe.Order) .Select(structureEntity => structureEntity.Read(collector)), sourcePath); } } private static void ReadGeneralInput(this FailureMechanismEntity entity, GeneralHeightStructuresInput generalInput) { GeneralHeightStructuresInput generalHeightStructuresInput = entity.HeightStructuresFailureMechanismMetaEntities.First().Read(); generalInput.N = generalHeightStructuresInput.N; } private static void ReadHeightStructuresRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, ReadConversionCollector collector) { CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsHeightStructuresCalculationGroup(collector); foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } #endregion #region Strength Stability Lengthwise Construction /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsStrengthStabilityLengthwiseConstructionFailureMechanism(this FailureMechanismEntity entity, StrengthStabilityLengthwiseConstructionFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadStrengthStabilityLengthwiseConstructionMechanismSectionResults(failureMechanism, collector); } private static void ReadStrengthStabilityLengthwiseConstructionMechanismSectionResults(this FailureMechanismEntity entity, StrengthStabilityLengthwiseConstructionFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (StrengthStabilityLengthwiseConstructionSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.StrengthStabilityLengthwiseConstructionSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); StrengthStabilityLengthwiseConstructionFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Technical Innovation /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsTechnicalInnovationFailureMechanism(this FailureMechanismEntity entity, TechnicalInnovationFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadTechnicalInnovationMechanismSectionResults(failureMechanism, collector); } private static void ReadTechnicalInnovationMechanismSectionResults(this FailureMechanismEntity entity, TechnicalInnovationFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (TechnicalInnovationSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.TechnicalInnovationSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); TechnicalInnovationFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Water Pressure Asphalt /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsWaterPressureAsphaltCoverFailureMechanism(this FailureMechanismEntity entity, WaterPressureAsphaltCoverFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadWaterPressureAsphaltCoverMechanismSectionResults(failureMechanism, collector); } private static void ReadWaterPressureAsphaltCoverMechanismSectionResults(this FailureMechanismEntity entity, WaterPressureAsphaltCoverFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (WaterPressureAsphaltCoverSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.WaterPressureAsphaltCoverSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); WaterPressureAsphaltCoverFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Closing Structures /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. /// Thrown when expected table entries cannot be found. internal static void ReadAsClosingStructuresFailureMechanism(this FailureMechanismEntity entity, ClosingStructuresFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadClosingStructuresMechanismSectionResults(failureMechanism, collector); ClosingStructuresFailureMechanismMetaEntity metaEntity = entity.ClosingStructuresFailureMechanismMetaEntities.Single(); entity.ReadForeshoreProfiles(failureMechanism.ForeshoreProfiles, metaEntity.ForeshoreProfileCollectionSourcePath, collector); entity.ReadClosingStructures(failureMechanism.ClosingStructures, metaEntity.ClosingStructureCollectionSourcePath, collector); entity.ReadGeneralInput(failureMechanism.GeneralInput); ReadClosingStructuresRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.CalculationsGroup, collector); } private static void ReadClosingStructuresMechanismSectionResults(this FailureMechanismEntity entity, ClosingStructuresFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (ClosingStructuresSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.ClosingStructuresSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); ClosingStructuresFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result, collector); } } private static void ReadGeneralInput(this FailureMechanismEntity entity, GeneralClosingStructuresInput generalInput) { GeneralClosingStructuresInput generalClosingStructuresInput = entity.ClosingStructuresFailureMechanismMetaEntities.First().Read(); generalInput.N2A = generalClosingStructuresInput.N2A; } private static void ReadClosingStructures(this FailureMechanismEntity entity, StructureCollection closingStructures, string sourcePath, ReadConversionCollector collector) { if (sourcePath != null) { closingStructures.AddRange(entity.ClosingStructureEntities.OrderBy(fpe => fpe.Order) .Select(structureEntity => structureEntity.Read(collector)), sourcePath); } } private static void ReadClosingStructuresRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, ReadConversionCollector collector) { CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsClosingStructuresCalculationGroup(collector); foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } #endregion #region Macrostability Inwards /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsMacrostabilityInwardsFailureMechanism(this FailureMechanismEntity entity, MacrostabilityInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadMacrostabilityInwardsMechanismSectionResults(failureMechanism, collector); } private static void ReadMacrostabilityInwardsMechanismSectionResults(this FailureMechanismEntity entity, MacrostabilityInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (MacrostabilityInwardsSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.MacrostabilityInwardsSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); MacrostabilityInwardsFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Macrostability Outwards /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsMacrostabilityOutwardsFailureMechanism(this FailureMechanismEntity entity, MacrostabilityOutwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadMacrostabilityOutwardsMechanismSectionResults(failureMechanism, collector); } private static void ReadMacrostabilityOutwardsMechanismSectionResults(this FailureMechanismEntity entity, MacrostabilityOutwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (MacrostabilityOutwardsSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.MacrostabilityOutwardsSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); MacrostabilityOutwardsFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Wave Impact Asphalt Cover /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. /// Thrown when the expected table entries could not be found. internal static void ReadAsWaveImpactAsphaltCoverFailureMechanism(this FailureMechanismEntity entity, WaveImpactAsphaltCoverFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadWaveImpactAsphaltCoverMechanismSectionResults(failureMechanism, collector); WaveImpactAsphaltCoverFailureMechanismMetaEntity metaEntity = entity.WaveImpactAsphaltCoverFailureMechanismMetaEntities.Single(); entity.ReadForeshoreProfiles(failureMechanism.ForeshoreProfiles, metaEntity.ForeshoreProfileCollectionSourcePath, collector); ReadWaveImpactAsphaltCoverRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.WaveConditionsCalculationGroup, collector); } private static void ReadWaveImpactAsphaltCoverMechanismSectionResults(this FailureMechanismEntity entity, WaveImpactAsphaltCoverFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (WaveImpactAsphaltCoverSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.WaveImpactAsphaltCoverSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); WaveImpactAsphaltCoverFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } private static void ReadWaveImpactAsphaltCoverRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, ReadConversionCollector collector) { CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsWaveImpactAsphaltCoverWaveConditionsCalculationGroup(collector); foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } #endregion #region Grass Cover Erosion Outwards /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. /// Thrown when expected table entries could not be found. internal static void ReadAsGrassCoverErosionOutwardsFailureMechanism(this FailureMechanismEntity entity, GrassCoverErosionOutwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadGeneralGrassCoverErosionOutwardsCalculationInput(failureMechanism.GeneralInput); entity.ReadGrassCoverErosionOutwardsMechanismSectionResults(failureMechanism, collector); GrassCoverErosionOutwardsFailureMechanismMetaEntity metaEntity = entity.GrassCoverErosionOutwardsFailureMechanismMetaEntities.Single(); ReadForeshoreProfiles(entity, failureMechanism.ForeshoreProfiles, metaEntity.ForeshoreProfileCollectionSourcePath, collector); entity.ReadHydraulicBoundaryLocations(failureMechanism.HydraulicBoundaryLocations, collector); ReadGrassCoverErosionOutwardsWaveConditionsRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.WaveConditionsCalculationGroup, collector); } private static void ReadGeneralGrassCoverErosionOutwardsCalculationInput(this FailureMechanismEntity entity, GeneralGrassCoverErosionOutwardsInput input) { entity.GrassCoverErosionOutwardsFailureMechanismMetaEntities.Single().Read(input); } private static void ReadGrassCoverErosionOutwardsMechanismSectionResults(this FailureMechanismEntity entity, GrassCoverErosionOutwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (GrassCoverErosionOutwardsSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.GrassCoverErosionOutwardsSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); GrassCoverErosionOutwardsFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } private static void ReadHydraulicBoundaryLocations(this FailureMechanismEntity entity, List locations, ReadConversionCollector collector) { locations.AddRange( entity .GrassCoverErosionOutwardsHydraulicLocationEntities .OrderBy(location => location.Order) .Select(location => location.Read(collector))); } private static void ReadGrassCoverErosionOutwardsWaveConditionsRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, ReadConversionCollector collector) { CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsGrassCoverErosionOutwardsWaveConditionsCalculationGroup(collector); foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } #endregion #region Grass Cover Slip Off Inwards /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsGrassCoverSlipOffInwardsFailureMechanism(this FailureMechanismEntity entity, GrassCoverSlipOffInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadGrassCoverSlipOffInwardsMechanismSectionResults(failureMechanism, collector); } private static void ReadGrassCoverSlipOffInwardsMechanismSectionResults(this FailureMechanismEntity entity, GrassCoverSlipOffInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (GrassCoverSlipOffInwardsSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.GrassCoverSlipOffInwardsSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); GrassCoverSlipOffInwardsFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Grass Cover Slip Off Outwards /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsGrassCoverSlipOffOutwardsFailureMechanism(this FailureMechanismEntity entity, GrassCoverSlipOffOutwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadGrassCoverSlipOffOutwardsMechanismSectionResults(failureMechanism, collector); } private static void ReadGrassCoverSlipOffOutwardsMechanismSectionResults(this FailureMechanismEntity entity, GrassCoverSlipOffOutwardsFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (GrassCoverSlipOffOutwardsSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.GrassCoverSlipOffOutwardsSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); GrassCoverSlipOffOutwardsFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Microstability /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsMicrostabilityFailureMechanism(this FailureMechanismEntity entity, MicrostabilityFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadMicrostabilityMechanismSectionResults(failureMechanism, collector); } private static void ReadMicrostabilityMechanismSectionResults(this FailureMechanismEntity entity, MicrostabilityFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (MicrostabilitySectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.MicrostabilitySectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); MicrostabilityFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Piping Structure /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsPipingStructureFailureMechanism(this FailureMechanismEntity entity, PipingStructureFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadPipingStructureMechanismSectionResults(failureMechanism, collector); } private static void ReadPipingStructureMechanismSectionResults(this FailureMechanismEntity entity, PipingStructureFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (PipingStructureSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.PipingStructureSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); PipingStructureFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } #endregion #region Dune Erosion /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. internal static void ReadAsDuneErosionFailureMechanism(this FailureMechanismEntity entity, DuneErosionFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadDuneErosionMechanismSectionResults(failureMechanism, collector); entity.ReadGeneralDuneErosionInput(failureMechanism.GeneralInput); entity.ReadDuneLocations(failureMechanism.DuneLocations, collector); } private static void ReadGeneralDuneErosionInput(this FailureMechanismEntity entity, GeneralDuneErosionInput input) { entity.DuneErosionFailureMechanismMetaEntities.Single().Read(input); } private static void ReadDuneErosionMechanismSectionResults(this FailureMechanismEntity entity, DuneErosionFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (DuneErosionSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.DuneErosionSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); DuneErosionFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } private static void ReadDuneLocations(this FailureMechanismEntity entity, List locations, ReadConversionCollector collector) { locations.AddRange( entity.DuneLocationEntities .OrderBy(location => location.Order) .Select(location => location.Read(collector))); } #endregion #region Stability Stone Cover /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. /// Thrown when expected table entries cannot be found. internal static void ReadAsStabilityStoneCoverFailureMechanism(this FailureMechanismEntity entity, StabilityStoneCoverFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadStabilityStoneCoverMechanismSectionResults(failureMechanism, collector); StabilityStoneCoverFailureMechanismMetaEntity metaEntity = entity.StabilityStoneCoverFailureMechanismMetaEntities.Single(); ReadForeshoreProfiles(entity, failureMechanism.ForeshoreProfiles, metaEntity.ForeshoreProfileCollectionSourcePath, collector); ReadStabilityStoneCoverWaveConditionsRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.WaveConditionsCalculationGroup, collector); } private static void ReadStabilityStoneCoverMechanismSectionResults(this FailureMechanismEntity entity, StabilityStoneCoverFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (StabilityStoneCoverSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.StabilityStoneCoverSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); StabilityStoneCoverFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result); } } private static void ReadStabilityStoneCoverWaveConditionsRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, ReadConversionCollector collector) { CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsStabilityStoneCoverWaveConditionsCalculationGroup(collector); foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } #endregion #region Stability Point Structures /// /// Read the and use the information to update a . /// /// The to create for. /// The target of the read operation. /// The object keeping track of read operations. /// Thrown when expected table entries cannot be found. internal static void ReadAsStabilityPointStructuresFailureMechanism(this FailureMechanismEntity entity, StabilityPointStructuresFailureMechanism failureMechanism, ReadConversionCollector collector) { entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadStabilityPointStructuresMechanismSectionResults(failureMechanism, collector); StabilityPointStructuresFailureMechanismMetaEntity metaEntity = entity.StabilityPointStructuresFailureMechanismMetaEntities.Single(); entity.ReadForeshoreProfiles(failureMechanism.ForeshoreProfiles, metaEntity.ForeshoreProfileCollectionSourcePath, collector); entity.ReadStabilityPointStructures(failureMechanism.StabilityPointStructures, collector); entity.ReadGeneralInput(failureMechanism.GeneralInput); ReadStabilityPointStructuresRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.CalculationsGroup, collector); } private static void ReadStabilityPointStructuresMechanismSectionResults(this FailureMechanismEntity entity, StabilityPointStructuresFailureMechanism failureMechanism, ReadConversionCollector collector) { foreach (StabilityPointStructuresSectionResultEntity sectionResultEntity in entity.FailureMechanismSectionEntities.SelectMany(fms => fms.StabilityPointStructuresSectionResultEntities)) { FailureMechanismSection failureMechanismSection = collector.Get(sectionResultEntity.FailureMechanismSectionEntity); StabilityPointStructuresFailureMechanismSectionResult result = failureMechanism.SectionResults.Single(sr => ReferenceEquals(sr.Section, failureMechanismSection)); sectionResultEntity.Read(result, collector); } } private static void ReadStabilityPointStructures(this FailureMechanismEntity entity, StructureCollection stabilityPointStructures, ReadConversionCollector collector) { // TODO: WTI 1183 Add storage functionality stabilityPointStructures.AddRange(entity.StabilityPointStructureEntities .OrderBy(fpe => fpe.Order) .Select(structureEntity => structureEntity.Read(collector)), "path"); } private static void ReadGeneralInput(this FailureMechanismEntity entity, GeneralStabilityPointStructuresInput generalInput) { GeneralStabilityPointStructuresInput generalStabilityPointStructuresInput = entity.StabilityPointStructuresFailureMechanismMetaEntities.First().Read(); generalInput.N = generalStabilityPointStructuresInput.N; } private static void ReadStabilityPointStructuresRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, CalculationGroup targetRootCalculationGroup, ReadConversionCollector collector) { CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsStabilityPointStructuresCalculationGroup(collector); foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { targetRootCalculationGroup.Children.Add(calculationBase); } } #endregion } }