Index: Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableAssessmentSectionFactory.cs =================================================================== diff -u -rb355635a42391cc4f1699f6d3a0e3439ef7a7e52 -r6a22c3ff4de0702b053397d1560f18d69155d6a2 --- Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableAssessmentSectionFactory.cs (.../ExportableAssessmentSectionFactory.cs) (revision b355635a42391cc4f1699f6d3a0e3439ef7a7e52) +++ Riskeer/Integration/src/Riskeer.Integration.IO/Factories/ExportableAssessmentSectionFactory.cs (.../ExportableAssessmentSectionFactory.cs) (revision 6a22c3ff4de0702b053397d1560f18d69155d6a2) @@ -58,17 +58,14 @@ public static class ExportableAssessmentSectionFactory { /// - /// Creates an with assembly results - /// based on . + /// Creates an with assembly results based on . /// /// The generator to generate ids for the exportable components. - /// The to create - /// an for. + /// The to create an for. /// An with assembly results. /// Thrown when any parameter is null. /// Thrown when no reference line is set for . - /// Thrown when assembly results cannot be created for - /// . + /// Thrown when assembly results cannot be created for . /// Thrown when assembly results are invalid and cannot be exported. public static ExportableAssessmentSection CreateExportableAssessmentSection(IdentifierGenerator idGenerator, AssessmentSection assessmentSection) { @@ -87,13 +84,14 @@ .ToArray(); var registry = new ExportableModelRegistry(); - return new ExportableAssessmentSection(IdentifierGenerator.GenerateId(assessmentSection), - assessmentSection.Name, - assessmentSection.ReferenceLine.Points, - CreateExportableFailureMechanismSectionCollections(idGenerator, registry, assessmentSection, combinedSectionAssemblyResults), - CreateExportableAssessmentSectionAssemblyResult(idGenerator, assessmentSection), - CreateExportableFailureMechanisms(idGenerator, registry, assessmentSection), - CreateExportableCombinedSectionAssemblyCollection(idGenerator, registry, assessmentSection, combinedSectionAssemblyResults)); + return new ExportableAssessmentSection( + IdentifierGenerator.GenerateId(assessmentSection), + assessmentSection.Name, + assessmentSection.ReferenceLine.Points, + CreateExportableFailureMechanismSectionCollections(idGenerator, registry, assessmentSection, combinedSectionAssemblyResults), + CreateExportableAssessmentSectionAssemblyResult(idGenerator, assessmentSection), + CreateExportableFailureMechanisms(idGenerator, registry, assessmentSection), + CreateExportableCombinedSectionAssemblyCollection(idGenerator, registry, assessmentSection, combinedSectionAssemblyResults)); } /// @@ -173,75 +171,86 @@ var exportableFailureMechanisms = new List(); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.Piping, assessmentSection, PipingFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.Piping, assessmentSection, + PipingFailureMechanismAssemblyFactory.AssembleFailureMechanism, PipingFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.GrassCoverErosionInwards, assessmentSection, GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.GrassCoverErosionInwards, assessmentSection, + GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism, GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.MacroStabilityInwards, assessmentSection, MacroStabilityInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.MacroStabilityInwards, assessmentSection, + MacroStabilityInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism, MacroStabilityInwardsFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.Microstability, assessmentSection, FailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.Microstability, assessmentSection, + FailureMechanismAssemblyFactory.AssembleFailureMechanism, FailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.StabilityStoneCover, assessmentSection, StabilityStoneCoverFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.StabilityStoneCover, assessmentSection, + StabilityStoneCoverFailureMechanismAssemblyFactory.AssembleFailureMechanism, StabilityStoneCoverFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.WaveImpactAsphaltCover, assessmentSection, WaveImpactAsphaltCoverFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.WaveImpactAsphaltCover, assessmentSection, + WaveImpactAsphaltCoverFailureMechanismAssemblyFactory.AssembleFailureMechanism, WaveImpactAsphaltCoverFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.WaterPressureAsphaltCover, assessmentSection, FailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.WaterPressureAsphaltCover, assessmentSection, + FailureMechanismAssemblyFactory.AssembleFailureMechanism, FailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.GrassCoverErosionOutwards, assessmentSection, GrassCoverErosionOutwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.GrassCoverErosionOutwards, assessmentSection, + GrassCoverErosionOutwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism, GrassCoverErosionOutwardsFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.GrassCoverSlipOffOutwards, assessmentSection, FailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.GrassCoverSlipOffOutwards, assessmentSection, + FailureMechanismAssemblyFactory.AssembleFailureMechanism, FailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.GrassCoverSlipOffInwards, assessmentSection, FailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.GrassCoverSlipOffInwards, assessmentSection, + FailureMechanismAssemblyFactory.AssembleFailureMechanism, FailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.HeightStructures, assessmentSection, HeightStructuresFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.HeightStructures, assessmentSection, + HeightStructuresFailureMechanismAssemblyFactory.AssembleFailureMechanism, StructuresFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.ClosingStructures, assessmentSection, ClosingStructuresFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.ClosingStructures, assessmentSection, + ClosingStructuresFailureMechanismAssemblyFactory.AssembleFailureMechanism, StructuresFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.PipingStructure, assessmentSection, PipingStructureFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.PipingStructure, assessmentSection, + PipingStructureFailureMechanismAssemblyFactory.AssembleFailureMechanism, (sr, fm, ass) => FailureMechanismSectionAssemblyResultFactory.AssembleSection(sr, ass)); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.StabilityPointStructures, assessmentSection, StabilityPointStructuresFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.StabilityPointStructures, assessmentSection, + StabilityPointStructuresFailureMechanismAssemblyFactory.AssembleFailureMechanism, StructuresFailureMechanismAssemblyFactory.AssembleSection); AddGenericFailureMechanismWhenInAssembly( - idGenerator, registry, exportableFailureMechanisms, assessmentSection.DuneErosion, assessmentSection, DuneErosionFailureMechanismAssemblyFactory.AssembleFailureMechanism, + idGenerator, registry, exportableFailureMechanisms, assessmentSection.DuneErosion, assessmentSection, + DuneErosionFailureMechanismAssemblyFactory.AssembleFailureMechanism, (sr, fm, ass) => FailureMechanismSectionAssemblyResultFactory.AssembleSection(sr, ass)); - foreach (SpecificFailureMechanism specificFailureMechanism in assessmentSection.SpecificFailureMechanisms) - { - if (specificFailureMechanism.InAssembly) - { - exportableFailureMechanisms.Add( - ExportableFailureMechanismFactory.CreateExportableSpecificFailureMechanism( - idGenerator, registry, specificFailureMechanism, assessmentSection, FailureMechanismAssemblyFactory.AssembleFailureMechanism, - FailureMechanismAssemblyFactory.AssembleSection)); - } - } + exportableFailureMechanisms.AddRange( + assessmentSection.SpecificFailureMechanisms.Where(fm => fm.InAssembly) + .Select(fm => ExportableFailureMechanismFactory.CreateExportableSpecificFailureMechanism( + idGenerator, registry, fm, assessmentSection, + FailureMechanismAssemblyFactory.AssembleFailureMechanism, + FailureMechanismAssemblyFactory.AssembleSection))); return exportableFailureMechanisms; } @@ -260,8 +269,7 @@ /// mechanism section. /// The type of failure mechanism. /// The type of section result. - /// Thrown when assembly results cannot be created for - /// . + /// Thrown when assembly results cannot be created for . /// Thrown when assembly results are invalid and cannot be exported. private static void AddGenericFailureMechanismWhenInAssembly( IdentifierGenerator idGenerator, ExportableModelRegistry registry, List exportableFailureMechanisms, @@ -280,7 +288,7 @@ } private static IEnumerable CreateExportableFailureMechanismSectionCollections( - IdentifierGenerator idGenerator, ExportableModelRegistry registry, AssessmentSection assessmentSection, + IdentifierGenerator idGenerator, ExportableModelRegistry registry, IAssessmentSection assessmentSection, IEnumerable combinedSectionAssemblyResults) { IEnumerable failureMechanismsInAssembly = assessmentSection.GetFailureMechanisms() Index: Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableAssessmentSectionFactoryTest.cs =================================================================== diff -u -r30d63f2cf5c708feb8ea4b0a74ac29d65658e685 -r6a22c3ff4de0702b053397d1560f18d69155d6a2 --- Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableAssessmentSectionFactoryTest.cs (.../ExportableAssessmentSectionFactoryTest.cs) (revision 30d63f2cf5c708feb8ea4b0a74ac29d65658e685) +++ Riskeer/Integration/test/Riskeer.Integration.IO.Test/Factories/ExportableAssessmentSectionFactoryTest.cs (.../ExportableAssessmentSectionFactoryTest.cs) (revision 6a22c3ff4de0702b053397d1560f18d69155d6a2) @@ -109,7 +109,8 @@ using (new AssemblyToolCalculatorFactoryConfig()) { // Call - ExportableAssessmentSection exportableAssessmentSection = ExportableAssessmentSectionFactory.CreateExportableAssessmentSection(idGenerator, assessmentSection); + ExportableAssessmentSection exportableAssessmentSection = ExportableAssessmentSectionFactory.CreateExportableAssessmentSection( + idGenerator, assessmentSection); // Assert Assert.AreEqual(name, exportableAssessmentSection.Name); @@ -222,12 +223,15 @@ FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverSlipOffInwards, random.Next(1, 10)); FailureMechanismTestHelper.AddSections(assessmentSection.PipingStructure, random.Next(1, 10)); FailureMechanismTestHelper.AddSections(assessmentSection.WaterPressureAsphaltCover, random.Next(1, 10)); - FailureMechanismTestHelper.AddSections(assessmentSection.SpecificFailureMechanisms.First(), random.Next(1, 10)); - FailureMechanismTestHelper.AddSections(assessmentSection.SpecificFailureMechanisms.Last(), random.Next(1, 10)); + + foreach (SpecificFailureMechanism specificFailureMechanism in assessmentSection.SpecificFailureMechanisms) + { + FailureMechanismTestHelper.AddSections(specificFailureMechanism, random.Next(1, 10)); + } } private static void AssertExportableFailureMechanismSectionCollections( - AssessmentSection assessmentSection, IEnumerable failureMechanismSectionCollections) + IAssessmentSection assessmentSection, IEnumerable failureMechanismSectionCollections) { IEnumerable failureMechanismsInAssembly = assessmentSection.GetFailureMechanisms() .Concat(assessmentSection.SpecificFailureMechanisms) @@ -334,7 +338,7 @@ } private static void AssertExportableFailureMechanismCombinedSectionAssemblyResults( - ExportableCombinedFailureMechanismSection combinedFailureMechanismSection, IEnumerable exportableFailureMechanisms, + ExportableFailureMechanismSection combinedFailureMechanismSection, IEnumerable exportableFailureMechanisms, IEnumerable exportableFailureMechanismCombinedSectionAssemblyResults) { Assert.AreEqual(17, exportableFailureMechanismCombinedSectionAssemblyResults.Count()); @@ -409,31 +413,28 @@ } private static void AssertExportableFailureMechanismCombinedSectionAssemblyResult( - ExportableCombinedFailureMechanismSection combinedFailureMechanismSectionAssembly, + ExportableFailureMechanismSection combinedFailureMechanismSectionAssembly, IEnumerable failureMechanismSectionAssemblyResults, ExportableFailureMechanismCombinedSectionAssemblyResult actualExportableFailureMechanismCombinedSectionAssemblyResult) { - ExportableFailureMechanismSectionAssemblyResult associatedAssemblyResult = GetCorrespondingSectionAssemblyResultResult(combinedFailureMechanismSectionAssembly, failureMechanismSectionAssemblyResults); + ExportableFailureMechanismSectionAssemblyResult associatedAssemblyResult = GetCorrespondingSectionAssemblyResultResult( + combinedFailureMechanismSectionAssembly, failureMechanismSectionAssemblyResults); Assert.AreSame(associatedAssemblyResult, actualExportableFailureMechanismCombinedSectionAssemblyResult.FailureMechanismSectionResult); Assert.AreEqual(FailureMechanismSectionAssemblyGroup.Dominant, actualExportableFailureMechanismCombinedSectionAssemblyResult.AssemblyGroup); Assert.AreEqual(ExportableAssemblyMethod.BOI3B1, actualExportableFailureMechanismCombinedSectionAssemblyResult.AssemblyMethod); } private static ExportableFailureMechanismSectionAssemblyResult GetCorrespondingSectionAssemblyResultResult( - ExportableCombinedFailureMechanismSection combinedFailureMechanismSection, + ExportableFailureMechanismSection combinedFailureMechanismSection, IEnumerable sectionAssemblyResults) { - foreach (ExportableFailureMechanismSectionAssemblyResult assemblyResult in sectionAssemblyResults) + return sectionAssemblyResults.FirstOrDefault(assemblyResult => { ExportableFailureMechanismSection exportableFailureMechanismSection = assemblyResult.FailureMechanismSection; - if (combinedFailureMechanismSection.StartDistance >= exportableFailureMechanismSection.StartDistance - && combinedFailureMechanismSection.EndDistance <= exportableFailureMechanismSection.EndDistance) - { - return assemblyResult; - } - } - throw new Exception("Match not found"); + return combinedFailureMechanismSection.StartDistance >= exportableFailureMechanismSection.StartDistance + && combinedFailureMechanismSection.EndDistance <= exportableFailureMechanismSection.EndDistance; + }); } } } \ No newline at end of file