Index: Ringtoets/Integration/src/Ringtoets.Integration.IO/Creators/AggregatedSerializableFailureMechanismCreator.cs =================================================================== diff -u -r1fb8afd636f36c169e0e4ac3fa87472f372eb915 -ra4e95638762a7a1af29dd63dec477120c4faf249 --- Ringtoets/Integration/src/Ringtoets.Integration.IO/Creators/AggregatedSerializableFailureMechanismCreator.cs (.../AggregatedSerializableFailureMechanismCreator.cs) (revision 1fb8afd636f36c169e0e4ac3fa87472f372eb915) +++ Ringtoets/Integration/src/Ringtoets.Integration.IO/Creators/AggregatedSerializableFailureMechanismCreator.cs (.../AggregatedSerializableFailureMechanismCreator.cs) (revision a4e95638762a7a1af29dd63dec477120c4faf249) @@ -20,7 +20,6 @@ // All rights reserved. using System; -using System.Collections.Generic; using System.Linq; using Ringtoets.AssemblyTool.IO.Model; using Ringtoets.Integration.IO.Assembly; @@ -33,31 +32,67 @@ /// public static class AggregatedSerializableFailureMechanismCreator { + /// + /// Creates an instance of an based on its input parameters. + /// + /// The id generator to generate an id for the serializable components. + /// The the serializable components belong to. + /// The with a probability to + /// create a for. + /// A . + /// Thrown when any parameter is null. + /// Thrown when the + /// contains unsupported items in the failure mechanism section assembly results. public static AggregatedSerializableFailureMechanism Create(UniqueIdentifierGenerator idGenerator, - SerializableTotalAssemblyResult serializableTotalAssembly, + SerializableTotalAssemblyResult serializableTotalAssemblyResult, ExportableFailureMechanism failureMechanism) { - SerializableFailureMechanism serializableFailureMechanism = SerializableFailureMechanismCreator.Create(idGenerator, serializableTotalAssembly, failureMechanism); - var serializableCollection = new SerializableFailureMechanismSectionCollection(idGenerator.GetNewId("Vi"), serializableFailureMechanism); + if (idGenerator == null) + { + throw new ArgumentNullException(nameof(idGenerator)); + } - var serializableFailureMechanismSectionAssemblyResults = new List(); - foreach (ExportableAggregatedFailureMechanismSectionAssemblyResultBase sectionAssemblyResult in failureMechanism.SectionAssemblyResults) + if (serializableTotalAssemblyResult == null) { - serializableFailureMechanismSectionAssemblyResults.Add(CreateFailureMechanismSectionAssembly(idGenerator, - serializableFailureMechanism, - serializableCollection, - sectionAssemblyResult)); + throw new ArgumentNullException(nameof(serializableTotalAssemblyResult)); } + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } + + SerializableFailureMechanism serializableFailureMechanism = SerializableFailureMechanismCreator.Create(idGenerator, serializableTotalAssemblyResult, failureMechanism); + var serializableCollection = new SerializableFailureMechanismSectionCollection(idGenerator.GetNewId("Vi"), serializableFailureMechanism); + + AggregatedSerializableFailureMechanismSectionAssembly[] serializableFailureMechanismSectionAssemblyResults = + failureMechanism.SectionAssemblyResults + .Select(sectionAssemblyResult => CreateFailureMechanismSectionAssembly(idGenerator, + serializableFailureMechanism, + serializableCollection, + sectionAssemblyResult)) + .ToArray(); + return new AggregatedSerializableFailureMechanism(serializableFailureMechanism, serializableCollection, serializableFailureMechanismSectionAssemblyResults.Select(fmr => fmr.FailureMechanismSection), serializableFailureMechanismSectionAssemblyResults.Select(fmr => fmr.FailureMechanismSectionAssembly)); } + /// + /// Creates an instance of based on its input parameters. + /// + /// The id generator to generate the id for the serializable components. + /// The the section assembly belongs to. + /// The the section assembly belongs to. + /// An aggregated failure mechanism section assembly result to + /// create a for. + /// An . + /// Thrown when an + /// cannot be created for . private static AggregatedSerializableFailureMechanismSectionAssembly CreateFailureMechanismSectionAssembly( UniqueIdentifierGenerator idGenerator, - SerializableFailureMechanism serializableFailureMechanism, + SerializableFailureMechanism serializableFailureMechanism, SerializableFailureMechanismSectionCollection serializableCollection, ExportableAggregatedFailureMechanismSectionAssemblyResultBase failureMechanismSectionAssemblyResult) { @@ -67,7 +102,19 @@ return AggregatedSerializableFailureMechanismSectionAssemblyCreator.Create(idGenerator, serializableCollection, serializableFailureMechanism, resultWithProbability); } - throw new NotSupportedException(); + var resultWithoutProbability = failureMechanismSectionAssemblyResult as ExportableAggregatedFailureMechanismSectionAssemblyResult; + if (resultWithoutProbability != null) + { + return AggregatedSerializableFailureMechanismSectionAssemblyCreator.Create(idGenerator, serializableCollection, serializableFailureMechanism, resultWithoutProbability); + } + + var resultWithoutDetailedAssembly = failureMechanismSectionAssemblyResult as ExportableAggregatedFailureMechanismSectionAssemblyResultWithoutDetailedAssembly; + if (resultWithoutDetailedAssembly != null) + { + return AggregatedSerializableFailureMechanismSectionAssemblyCreator.Create(idGenerator, serializableCollection, serializableFailureMechanism, resultWithoutDetailedAssembly); + } + + throw new NotSupportedException($"{failureMechanismSectionAssemblyResult.GetType().Name} is not supported."); } } } \ No newline at end of file