Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs =================================================================== diff -u -rfac9694977a32d8ce6ae3c1e994b3a13b8aa48fe -rf72f906a6875250a4378945ce814997ff8aaf1a7 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision fac9694977a32d8ce6ae3c1e994b3a13b8aa48fe) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision f72f906a6875250a4378945ce814997ff8aaf1a7) @@ -57,11 +57,11 @@ using Ringtoets.HydraRing.Data; using Ringtoets.HydraRing.IO; using Ringtoets.Integration.Data.StandAlone; -using Ringtoets.Integration.Data.StandAlone.SectionResult; +using Ringtoets.Integration.Data.StandAlone.SectionResults; using Ringtoets.Integration.Forms.PresentationObjects; using Ringtoets.Integration.Forms.PropertyClasses; using Ringtoets.Integration.Forms.Views; -using Ringtoets.Integration.Forms.Views.SectionResultView; +using Ringtoets.Integration.Forms.Views.SectionResultViews; using Ringtoets.Integration.Plugin.FileImporters; using Ringtoets.Integration.Plugin.Properties; using Ringtoets.Piping.Data; @@ -82,6 +82,86 @@ { private static readonly ILog log = LogManager.GetLogger(typeof(GuiPlugin)); + #region failureMechanismAssociations + + private static readonly IEnumerable failureMechanismAssociations = new[] + { + new FailureMechanismContextAssociation( + typeof(PipingFailureMechanism), + (mechanism, assessmentSection) => new PipingFailureMechanismContext((PipingFailureMechanism) mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(GrassCoverErosionInwardsFailureMechanism), + (mechanism, assessmentSection) => new GrassCoverErosionInwardsFailureMechanismContext((GrassCoverErosionInwardsFailureMechanism) mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(HeightStructuresFailureMechanism), + (mechanism, assessmentSection) => new HeightStructuresFailureMechanismContext((HeightStructuresFailureMechanism) mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(DuneErosionFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(GrassCoverErosionOutwardsFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(GrassCoverSlipOffInwardsFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(GrassCoverSlipOffOutwardsFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(MicrostabilityFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(PipingStructureFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(StabilityStoneCoverFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(TechnicalInnovationFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(StrengthStabilityLengthwiseConstructionFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(WaterPressureAsphaltCoverFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(WaveImpactAsphaltCoverFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(ClosingStructureFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(MacrostabilityInwardsFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(MacrostabilityOutwardsFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ), + new FailureMechanismContextAssociation( + typeof(StrengthStabilityPointConstructionFailureMechanism), + (mechanism, assessmentSection) => new FailureMechanismContext(mechanism, assessmentSection) + ) + }; + + #endregion + public override IRibbonCommandHandler RibbonCommandHandler { get @@ -483,7 +563,7 @@ #endregion - # region assessmentSection + #region assessmentSection private object[] AssessmentSectionChildNodeObjects(IAssessmentSection nodeData) { @@ -501,109 +581,14 @@ return childNodes.ToArray(); } - private static IEnumerable WrapFailureMechanismsInContexts(IAssessmentSection nodeData) + private static IEnumerable WrapFailureMechanismsInContexts(IAssessmentSection assessmentSection) { - foreach (IFailureMechanism failureMechanism in nodeData.GetFailureMechanisms()) - { - var piping = failureMechanism as PipingFailureMechanism; - var grassCoverErosionInwards = failureMechanism as GrassCoverErosionInwardsFailureMechanism; - var heightStructuresFailureMechanism = failureMechanism as HeightStructuresFailureMechanism; - - var duneErosion = failureMechanism as DuneErosionFailureMechanism; - var grassCoverErosionOutwards = failureMechanism as GrassCoverErosionOutwardsFailureMechanism; - var grassCoverSlipOffInwards = failureMechanism as GrassCoverSlipOffInwardsFailureMechanism; - var grassCoverSlipOffOutwards = failureMechanism as GrassCoverSlipOffOutwardsFailureMechanism; - var microstability = failureMechanism as MicrostabilityFailureMechanism; - var pipingStructure = failureMechanism as PipingStructureFailureMechanism; - var stabilityStoneCover = failureMechanism as StabilityStoneCoverFailureMechanism; - var technicalInnovation = failureMechanism as TechnicalInnovationFailureMechanism; - - var strengthStabilityLengthwiseConstruction = failureMechanism as StrengthStabilityLengthwiseConstructionFailureMechanism; - var waterPressureAsphaltCover = failureMechanism as WaterPressureAsphaltCoverFailureMechanism; - var waveImpactAsphaltCover = failureMechanism as WaveImpactAsphaltCoverFailureMechanism; - - var closingStructure = failureMechanism as ClosingStructureFailureMechanism; - var macrostabilityInwards = failureMechanism as MacrostabilityInwardsFailureMechanism; - var macrostabilityOutwards = failureMechanism as MacrostabilityOutwardsFailureMechanism; - var strengthStabilityPointConstruction = failureMechanism as StrengthStabilityPointConstructionFailureMechanism; - - if (piping != null) - { - yield return new PipingFailureMechanismContext(piping, nodeData); - } - else if (grassCoverErosionInwards != null) - { - yield return new GrassCoverErosionInwardsFailureMechanismContext(grassCoverErosionInwards, nodeData); - } - else if (heightStructuresFailureMechanism != null) - { - yield return new HeightStructuresFailureMechanismContext(heightStructuresFailureMechanism, nodeData); - } - else if (duneErosion != null) - { - yield return new FailureMechanismContext(duneErosion, nodeData); - } - else if (grassCoverErosionOutwards != null) - { - yield return new FailureMechanismContext(grassCoverErosionOutwards, nodeData); - } - else if (grassCoverSlipOffInwards != null) - { - yield return new FailureMechanismContext(grassCoverSlipOffInwards, nodeData); - } - else if (grassCoverSlipOffOutwards != null) - { - yield return new FailureMechanismContext(grassCoverSlipOffOutwards, nodeData); - } - else if (microstability != null) - { - yield return new FailureMechanismContext(microstability, nodeData); - } - else if (pipingStructure != null) - { - yield return new FailureMechanismContext(pipingStructure, nodeData); - } - else if (stabilityStoneCover != null) - { - yield return new FailureMechanismContext(stabilityStoneCover, nodeData); - } - else if (technicalInnovation != null) - { - yield return new FailureMechanismContext(technicalInnovation, nodeData); - } - else if (strengthStabilityLengthwiseConstruction != null) - { - yield return new FailureMechanismContext(strengthStabilityLengthwiseConstruction, nodeData); - } - else if (waterPressureAsphaltCover != null) - { - yield return new FailureMechanismContext(waterPressureAsphaltCover, nodeData); - } - else if (waveImpactAsphaltCover != null) - { - yield return new FailureMechanismContext(waveImpactAsphaltCover, nodeData); - } - else if (closingStructure != null) - { - yield return new FailureMechanismContext(closingStructure, nodeData); - } - else if (macrostabilityInwards != null) - { - yield return new FailureMechanismContext(macrostabilityInwards, nodeData); - } - else if (macrostabilityOutwards != null) - { - yield return new FailureMechanismContext(macrostabilityOutwards, nodeData); - } - else if (strengthStabilityPointConstruction != null) - { - yield return new FailureMechanismContext(strengthStabilityPointConstruction, nodeData); - } - else - { - throw new NotImplementedException(); - } - } + return assessmentSection + .GetFailureMechanisms() + .Select(failureMechanism => failureMechanismAssociations + .First(a => a.Match(failureMechanism)) + .Create(failureMechanism, assessmentSection) + ); } private void AssessmentSectionOnNodeRenamed(IAssessmentSection nodeData, string newName) @@ -638,9 +623,9 @@ .Build(); } - # endregion + #endregion - # region StandAloneFailureMechanismContext + #region StandAloneFailureMechanismContext private object[] StandAloneFailureMechanismEnabledChildNodeObjects(FailureMechanismContext nodeData) { @@ -801,9 +786,9 @@ .Build(); } - # endregion + #endregion - # region CategoryTreeFolder + #region CategoryTreeFolder private Image GetFolderIcon(TreeFolderCategory category) { @@ -990,5 +975,27 @@ } #endregion + + private class FailureMechanismContextAssociation + { + private readonly Func createFailureMechanismContext; + private readonly Type failureMechanismType; + + public FailureMechanismContextAssociation(Type failureMechanismType, Func createFailureMechanismContext) + { + this.createFailureMechanismContext = createFailureMechanismContext; + this.failureMechanismType = failureMechanismType; + } + + public bool Match(IFailureMechanism failureMechanism) + { + return failureMechanism.GetType() == failureMechanismType; + } + + public object Create(IFailureMechanism failureMechanism, IAssessmentSection assessmentSection) + { + return createFailureMechanismContext(failureMechanism, assessmentSection); + } + } } } \ No newline at end of file