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