// 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
}
}