Index: Ringtoets/Common/src/Ringtoets.Common.Utils/AssignUnassignCalculations.cs =================================================================== diff -u -re60dbf2fd41434270cad4efba20446e19ede0d2e -r2a0fbe6ec22928831305671ecd4f41030b827250 --- Ringtoets/Common/src/Ringtoets.Common.Utils/AssignUnassignCalculations.cs (.../AssignUnassignCalculations.cs) (revision e60dbf2fd41434270cad4efba20446e19ede0d2e) +++ Ringtoets/Common/src/Ringtoets.Common.Utils/AssignUnassignCalculations.cs (.../AssignUnassignCalculations.cs) (revision 2a0fbe6ec22928831305671ecd4f41030b827250) @@ -36,55 +36,30 @@ public static class AssignUnassignCalculations { /// - /// Update objects which used or can use the . + /// Update objects with the . /// /// The objects which contain the /// information about assigning calculations to sections. - /// The which's location is used to match with the - /// location of the section. + /// All the currently known calculations to try and match with section results. + /// All affected objects by the update. /// Thrown when any input parameter is null. - /// Thrown when contains a null element. - public static void Update(IEnumerable sectionResults, CalculationWithLocation calculation) - { - ValidateSectionResults(sectionResults); - ValidateCalculationWithLocation(calculation); - - var sectionResultsArray = sectionResults.ToArray(); - - FailureMechanismSection failureMechanismSectionContainingCalculation = - FailureMechanismSectionForCalculation(sectionResultsArray.Select(sr => sr.Result.Section), calculation); - - UnassignCalculationInSectionResultsNotContainingCalculation(calculation, sectionResultsArray, failureMechanismSectionContainingCalculation); - - AssignCalculationIfContainingSectionResultHasNoCalculationAssigned(calculation, sectionResultsArray, failureMechanismSectionContainingCalculation); - } - - /// - /// Update objects which use the deleted . - /// - /// The objects which contain the - /// information about assigning calculations to sections. - /// The that was removed. - /// All the remaining calculations after deletion of the . - /// All affected objects by the deletion. - /// Thrown when any input parameter is null. /// Thrown when or /// contains a null element. - public static IEnumerable Delete( + public static IEnumerable Update( IEnumerable sectionResults, - ICalculation calculation, IEnumerable calculations) { ValidateSectionResults(sectionResults); ValidateCalculations(calculations); - ValidateCalculation(calculation); var sectionResultsArray = sectionResults.ToArray(); Dictionary> calculationsPerSegmentName = CollectCalculationsPerSection(sectionResultsArray.Select(sr => sr.Result.Section), calculations); - return UnassignCalculationInAllSectionResultsAndAssignSingleRemainingCalculation(sectionResultsArray, calculation, calculationsPerSegmentName); + return UnassignCalculationInAllSectionResultsAndAssignSingleRemainingCalculation( + sectionResultsArray, + calculationsPerSegmentName); } /// @@ -147,56 +122,38 @@ private static IEnumerable UnassignCalculationInAllSectionResultsAndAssignSingleRemainingCalculation( IEnumerable sectionResults, - ICalculation calculation, Dictionary> calculationsPerSegmentName) + Dictionary> calculationsPerSegmentName) { - IEnumerable sectionResultsUsingCalculation = - sectionResults.Where(sr => sr.Calculation != null && ReferenceEquals(sr.Calculation, calculation)); - var affectedObjects = new Collection(); - foreach (SectionResultWithCalculationAssignment sectionResult in sectionResultsUsingCalculation) + foreach (SectionResultWithCalculationAssignment sectionResult in sectionResults) { string sectionName = sectionResult.Result.Section.Name; - if (calculationsPerSegmentName.ContainsKey(sectionName) && calculationsPerSegmentName[sectionName].Count == 1) + var affected = false; + if (!calculationsPerSegmentName.ContainsKey(sectionName)) { - sectionResult.Calculation = calculationsPerSegmentName[sectionName].Single(); - } - else - { sectionResult.Calculation = null; + affected = true; } - affectedObjects.Add(sectionResult.Result); - } - return affectedObjects; - } - - private static void AssignCalculationIfContainingSectionResultHasNoCalculationAssigned( - CalculationWithLocation calculationWithLocation, - IEnumerable sectionResults, - FailureMechanismSection failureMechanismSection) - { - foreach (var sectionResult in sectionResults) - { - if (ReferenceEquals(sectionResult.Result.Section, failureMechanismSection) && sectionResult.Calculation == null) + if (calculationsPerSegmentName.ContainsKey(sectionName)) { - sectionResult.Calculation = calculationWithLocation.Calculation; + var calculationsInCurrentSection = calculationsPerSegmentName[sectionName]; + if (!calculationsInCurrentSection.Contains(sectionResult.Calculation)) + { + sectionResult.Calculation = null; + affected = true; + } + if (sectionResult.Calculation == null && calculationsInCurrentSection.Count == 1) + { + sectionResult.Calculation = calculationsInCurrentSection.Single(); + affected = true; + } } - } - } - - private static void UnassignCalculationInSectionResultsNotContainingCalculation( - CalculationWithLocation calculationWithLocation, - IEnumerable sectionResults, - FailureMechanismSection failureMechanismSection) - { - IEnumerable sectionResultsUsingCalculation = - sectionResults.Where(sr => sr.Calculation != null && ReferenceEquals(sr.Calculation, calculationWithLocation.Calculation)); - foreach (var sectionResult in sectionResultsUsingCalculation) - { - if (!ReferenceEquals(sectionResult.Result.Section, failureMechanismSection)) + if (affected) { - sectionResult.Calculation = null; + affectedObjects.Add(sectionResult.Result); } } + return affectedObjects; } private static FailureMechanismSection FindSectionAtLocation(IEnumerable sectionSegmentsCollection, @@ -229,14 +186,6 @@ } } - private static void ValidateCalculation(ICalculation calculation) - { - if (calculation == null) - { - throw new ArgumentNullException("calculation"); - } - } - private static void ValidateCalculationWithLocation(CalculationWithLocation calculation) { if (calculation == null)