// 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.Collections.Generic;
using System.ComponentModel;
using Core.Common.Base;
using Core.Common.Base.Geometry;
using Ringtoets.ClosingStructures.Data;
using Ringtoets.Common.Data;
using Ringtoets.Common.Data.AssessmentSection;
using Ringtoets.Common.Data.Contribution;
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.Properties;
using Ringtoets.Integration.Data.StandAlone;
using Ringtoets.MacroStabilityInwards.Data;
using Ringtoets.Piping.Data;
using Ringtoets.StabilityPointStructures.Data;
using Ringtoets.StabilityStoneCover.Data;
using Ringtoets.WaveImpactAsphaltCover.Data;
namespace Ringtoets.Integration.Data
{
///
/// The section to be assessed by the user for safety in regards of various failure mechanisms.
///
public sealed class AssessmentSection : Observable, IAssessmentSection
{
private const RingtoetsWellKnownTileSource defaultWellKnownTileSource = RingtoetsWellKnownTileSource.BingAerial;
private ReferenceLine referenceLine;
///
/// Initializes a new instance of the class.
///
/// The composition of the assessment section, e.g. what
/// type of elements can be found within the assessment section.
public AssessmentSection(AssessmentSectionComposition composition)
{
Name = Resources.AssessmentSection_DisplayName;
Comments = new Comment();
BackgroundData = new BackgroundData(new WellKnownBackgroundDataConfiguration(defaultWellKnownTileSource))
{
Name = defaultWellKnownTileSource.GetDisplayName()
};
PipingFailureMechanism = new PipingFailureMechanism();
GrassCoverErosionInwards = new GrassCoverErosionInwardsFailureMechanism();
MacroStabilityInwards = new MacroStabilityInwardsFailureMechanism();
MacrostabilityOutwards = new MacrostabilityOutwardsFailureMechanism();
Microstability = new MicrostabilityFailureMechanism();
StabilityStoneCover = new StabilityStoneCoverFailureMechanism();
WaveImpactAsphaltCover = new WaveImpactAsphaltCoverFailureMechanism();
WaterPressureAsphaltCover = new WaterPressureAsphaltCoverFailureMechanism();
GrassCoverErosionOutwards = new GrassCoverErosionOutwardsFailureMechanism();
GrassCoverSlipOffOutwards = new GrassCoverSlipOffOutwardsFailureMechanism();
GrassCoverSlipOffInwards = new GrassCoverSlipOffInwardsFailureMechanism();
HeightStructures = new HeightStructuresFailureMechanism();
ClosingStructures = new ClosingStructuresFailureMechanism();
StabilityPointStructures = new StabilityPointStructuresFailureMechanism();
StrengthStabilityLengthwiseConstruction = new StrengthStabilityLengthwiseConstructionFailureMechanism();
PipingStructure = new PipingStructureFailureMechanism();
DuneErosion = new DuneErosionFailureMechanism();
TechnicalInnovation = new TechnicalInnovationFailureMechanism();
const double norm = 1.0 / 30000;
const int otherContribution = 30;
FailureMechanismContribution = new FailureMechanismContribution(GetContributingFailureMechanisms(),
otherContribution,
norm);
ChangeComposition(composition);
}
///
/// Gets the "Dijken en dammen - Piping" failure mechanism.
///
public PipingFailureMechanism PipingFailureMechanism { get; }
///
/// Gets the "Dijken en dammen - Grasbekleding erosie kruin en binnentalud" failure mechanism.
///
public GrassCoverErosionInwardsFailureMechanism GrassCoverErosionInwards { get; }
///
/// Gets the "Dijken en dammen - Macrostabiliteit binnenwaarts" failure mechanism.
///
public MacroStabilityInwardsFailureMechanism MacroStabilityInwards { get; }
///
/// Gets the "Dijken en dammen - Macrostabiliteit buitenwaarts" failure mechanism.
///
public MacrostabilityOutwardsFailureMechanism MacrostabilityOutwards { get; }
///
/// Gets the "Dijken en dammen - Microstabiliteit" failure mechanism.
///
public MicrostabilityFailureMechanism Microstability { get; }
///
/// Gets the "Dijken en dammen - Stabiliteit steenzetting" failure mechanism.
///
public StabilityStoneCoverFailureMechanism StabilityStoneCover { get; }
///
/// Gets the "Dijken en dammen - Golfklappen op asfaltbekledingen" failure mechanism.
///
public WaveImpactAsphaltCoverFailureMechanism WaveImpactAsphaltCover { get; }
///
/// Gets the "Dijken en dammen - Wateroverdruk bij asfaltbekleding" failure mechanism.
///
public WaterPressureAsphaltCoverFailureMechanism WaterPressureAsphaltCover { get; }
///
/// Gets the "Dijken en dammen - Grasbekleding erosie buitentalud" failure mechanism.
///
public GrassCoverErosionOutwardsFailureMechanism GrassCoverErosionOutwards { get; }
///
/// Gets the "Dijken en dammen - Grasbekleding afschuiven buitentalud" failure mechanism.
///
public GrassCoverSlipOffOutwardsFailureMechanism GrassCoverSlipOffOutwards { get; }
///
/// Gets the "Dijken en dammen - Grasbekleding afschuiven binnentalud" failure mechanism.
///
public GrassCoverSlipOffInwardsFailureMechanism GrassCoverSlipOffInwards { get; }
///
/// Gets the "Kunstwerken - Hoogte kunstwerk" failure mechanism.
///
public HeightStructuresFailureMechanism HeightStructures { get; }
///
/// Gets the "Kunstwerken - Betrouwbaarheid sluiting kunstwerk" failure mechanism.
///
public ClosingStructuresFailureMechanism ClosingStructures { get; }
///
/// Gets the "Kunstwerken - Piping bij kunstwerk" failure mechanism.
///
public PipingStructureFailureMechanism PipingStructure { get; }
///
/// Gets the "Kunstwerken - Sterkte en stabiliteit puntconstructies" failure mechanism.
///
public StabilityPointStructuresFailureMechanism StabilityPointStructures { get; }
///
/// Gets the "Kunstwerken - Sterkte en stabiliteit langsconstructies" failure mechanism.
///
public StrengthStabilityLengthwiseConstructionFailureMechanism StrengthStabilityLengthwiseConstruction { get; }
///
/// Gets the "Duinwaterkering - Duinafslag" failure mechanism.
///
public DuneErosionFailureMechanism DuneErosion { get; }
///
/// Gets the "Technische innovaties - Technische innovaties" failure mechanism.
///
public TechnicalInnovationFailureMechanism TechnicalInnovation { get; }
public string Id { get; set; }
public string Name { get; set; }
public Comment Comments { get; }
public AssessmentSectionComposition Composition { get; private set; }
public ReferenceLine ReferenceLine
{
get
{
return referenceLine;
}
set
{
referenceLine = value;
PipingFailureMechanism.PipingProbabilityAssessmentInput.SectionLength = value == null ? double.NaN : Math2D.Length(value.Points);
}
}
public FailureMechanismContribution FailureMechanismContribution { get; }
public HydraulicBoundaryDatabase HydraulicBoundaryDatabase { get; set; }
public BackgroundData BackgroundData { get; }
public IEnumerable GetFailureMechanisms()
{
yield return PipingFailureMechanism;
yield return GrassCoverErosionInwards;
yield return MacroStabilityInwards;
yield return MacrostabilityOutwards;
yield return Microstability;
yield return StabilityStoneCover;
yield return WaveImpactAsphaltCover;
yield return WaterPressureAsphaltCover;
yield return GrassCoverErosionOutwards;
yield return GrassCoverSlipOffOutwards;
yield return GrassCoverSlipOffInwards;
yield return HeightStructures;
yield return ClosingStructures;
yield return PipingStructure;
yield return StabilityPointStructures;
yield return StrengthStabilityLengthwiseConstruction;
yield return DuneErosion;
yield return TechnicalInnovation;
}
public void ChangeComposition(AssessmentSectionComposition newComposition)
{
switch (newComposition)
{
case AssessmentSectionComposition.Dike:
PipingFailureMechanism.Contribution = 24;
GrassCoverErosionInwards.Contribution = 24;
MacroStabilityInwards.Contribution = 4;
StabilityStoneCover.Contribution = 5;
WaveImpactAsphaltCover.Contribution = 5;
GrassCoverErosionOutwards.Contribution = 5;
HeightStructures.Contribution = 24;
ClosingStructures.Contribution = 4;
PipingStructure.Contribution = 2;
StabilityPointStructures.Contribution = 2;
DuneErosion.Contribution = 0;
FailureMechanismContribution.UpdateContributions(GetContributingFailureMechanisms(), 30);
break;
case AssessmentSectionComposition.Dune:
PipingFailureMechanism.Contribution = 0;
GrassCoverErosionInwards.Contribution = 0;
MacroStabilityInwards.Contribution = 0;
StabilityStoneCover.Contribution = 0;
WaveImpactAsphaltCover.Contribution = 0;
GrassCoverErosionOutwards.Contribution = 0;
HeightStructures.Contribution = 0;
ClosingStructures.Contribution = 0;
PipingStructure.Contribution = 0;
StabilityPointStructures.Contribution = 0;
DuneErosion.Contribution = 70;
FailureMechanismContribution.UpdateContributions(GetContributingFailureMechanisms(), 30);
break;
case AssessmentSectionComposition.DikeAndDune:
PipingFailureMechanism.Contribution = 24;
GrassCoverErosionInwards.Contribution = 24;
MacroStabilityInwards.Contribution = 4;
StabilityStoneCover.Contribution = 5;
WaveImpactAsphaltCover.Contribution = 5;
GrassCoverErosionOutwards.Contribution = 5;
HeightStructures.Contribution = 24;
ClosingStructures.Contribution = 4;
PipingStructure.Contribution = 2;
StabilityPointStructures.Contribution = 2;
DuneErosion.Contribution = 10;
FailureMechanismContribution.UpdateContributions(GetContributingFailureMechanisms(), 20);
break;
default:
throw new InvalidEnumArgumentException(nameof(newComposition),
(int) newComposition,
typeof(AssessmentSectionComposition));
}
Composition = newComposition;
}
private IEnumerable GetContributingFailureMechanisms()
{
yield return PipingFailureMechanism;
yield return GrassCoverErosionInwards;
yield return MacroStabilityInwards;
yield return StabilityStoneCover;
yield return WaveImpactAsphaltCover;
yield return GrassCoverErosionOutwards;
yield return HeightStructures;
yield return ClosingStructures;
yield return PipingStructure;
yield return StabilityPointStructures;
yield return DuneErosion;
}
}
}