Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/FileImporters/StabilityPointStructureUpdateDataStrategy.cs =================================================================== diff -u -r89541dc8ef2d8b38372169ddecc0b37e9b225f6d -r0e100db56270f5f51374771a049b20dec82df128 --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/FileImporters/StabilityPointStructureUpdateDataStrategy.cs (.../StabilityPointStructureUpdateDataStrategy.cs) (revision 89541dc8ef2d8b38372169ddecc0b37e9b225f6d) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/FileImporters/StabilityPointStructureUpdateDataStrategy.cs (.../StabilityPointStructureUpdateDataStrategy.cs) (revision 0e100db56270f5f51374771a049b20dec82df128) @@ -29,6 +29,7 @@ using Ringtoets.Common.Forms; using Ringtoets.Common.IO.Structures; using Ringtoets.Common.Service; +using Ringtoets.Common.Utils; using Ringtoets.StabilityPointStructures.Data; namespace Ringtoets.StabilityPointStructures.Plugin.FileImporters @@ -58,29 +59,51 @@ return UpdateTargetCollectionData(targetDataCollection, readStructures, sourceFilePath); } + #region Removing Data Functions + + protected override IEnumerable RemoveObjectAndDependentData(StabilityPointStructure removedObject) + { + return RingtoetsCommonDataSynchronizationService.RemoveStructure(removedObject, + FailureMechanism.Calculations + .Cast>(), + FailureMechanism.StabilityPointStructures, + FailureMechanism.SectionResults); + } + + #endregion + + #region Updating Data Functions + protected override IEnumerable UpdateObjectAndDependentData(StabilityPointStructure objectToUpdate, StabilityPointStructure objectToUpdateFrom) { objectToUpdate.CopyProperties(objectToUpdateFrom); - var affectedObjects = new List - { - objectToUpdate - }; - affectedObjects.AddRange(FailureMechanism.Calculations - .OfType>() - .Select(calc => calc.InputParameters) - .Where(inp => ReferenceEquals(inp.Structure, objectToUpdate))); + return UpdateStabilityPointStructureDependentData(objectToUpdate); + } + private IEnumerable UpdateStabilityPointStructureDependentData(StabilityPointStructure structure) + { + var affectedObjects = new List(); + + affectedObjects.AddRange(GetAffectedCalculationsWithStabilityPointStructure(structure) + .Select(affectedCalculation => affectedCalculation.InputParameters)); + + affectedObjects.AddRange(StructuresHelper.UpdateCalculationToSectionResultAssignments( + FailureMechanism.SectionResults, + FailureMechanism.Calculations.Cast>())); + return affectedObjects; } - protected override IEnumerable RemoveObjectAndDependentData(StabilityPointStructure removedObject) + private IEnumerable> GetAffectedCalculationsWithStabilityPointStructure(StabilityPointStructure structure) { - return RingtoetsCommonDataSynchronizationService.RemoveStructure(removedObject, FailureMechanism.Calculations - .OfType>() - .Where(calc => ReferenceEquals(calc.InputParameters.Structure, removedObject)), - FailureMechanism.StabilityPointStructures, - FailureMechanism.SectionResults); + IEnumerable> affectedCalculations = + FailureMechanism.Calculations + .Cast>() + .Where(calc => ReferenceEquals(calc.InputParameters.Structure, structure)); + return affectedCalculations; } + + #endregion } } \ No newline at end of file Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/FileImporters/StabilityPointStructuresUpdateDataStrategyTest.cs =================================================================== diff -u -r8938c3f81d71ac84b914945f6b3b2107841993bf -r0e100db56270f5f51374771a049b20dec82df128 --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/FileImporters/StabilityPointStructuresUpdateDataStrategyTest.cs (.../StabilityPointStructuresUpdateDataStrategyTest.cs) (revision 8938c3f81d71ac84b914945f6b3b2107841993bf) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/FileImporters/StabilityPointStructuresUpdateDataStrategyTest.cs (.../StabilityPointStructuresUpdateDataStrategyTest.cs) (revision 0e100db56270f5f51374771a049b20dec82df128) @@ -23,12 +23,16 @@ using System.Collections.Generic; using System.Linq; using Core.Common.Base; +using Core.Common.Base.Geometry; using NUnit.Framework; using Ringtoets.Common.Data; using Ringtoets.Common.Data.Exceptions; +using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Data.UpdateDataStrategies; using Ringtoets.Common.IO.Structures; +using Ringtoets.Common.Utils; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityPointStructures.Data.TestUtil; using Ringtoets.StabilityPointStructures.Plugin.FileImporters; @@ -611,6 +615,89 @@ }, affectedObjects); } + [Test] + public void UpdateStructuresWithImportedData_SectionResultWithStructureImportedStructureWithSameId_UpdatesCalculationInput() + { + // Setup + const string sameId = "sameId"; + var originalMatchingPoint = new Point2D(0, 0); + var updatedMatchingPoint = new Point2D(20, 20); + StabilityPointStructure readStructure = new TestStabilityPointStructure(updatedMatchingPoint, sameId); + StabilityPointStructure structure = new TestStabilityPointStructure(originalMatchingPoint, sameId); + + var calculation = new TestStabilityPointStructuresCalculation + { + InputParameters = + { + Structure = structure + } + }; + var failureMechanism = new TestStabilityPointStructuresFailureMechanism + { + CalculationsGroup = + { + Children = + { + calculation + } + } + }; + failureMechanism.StabilityPointStructures.AddRange(new[] + { + structure + }, sourceFilePath); + + var intersectionPoint = new Point2D(10, 10); + failureMechanism.AddSection(new FailureMechanismSection("OldSection", new[] + { + originalMatchingPoint, + intersectionPoint + })); + failureMechanism.AddSection(new FailureMechanismSection("NewSection", new[] + { + intersectionPoint, + updatedMatchingPoint + })); + + StructuresHelper.UpdateCalculationToSectionResultAssignments(failureMechanism.SectionResults, + failureMechanism.Calculations + .Cast>()); + + StabilityPointStructuresFailureMechanismSectionResult[] sectionResults = failureMechanism.SectionResults.ToArray(); + + var strategy = new StabilityPointStructureUpdateDataStrategy(failureMechanism); + + // Precondition + Assert.AreSame(calculation, sectionResults[0].Calculation); + Assert.IsNull(sectionResults[1].Calculation); + + // Call + IEnumerable affectedObjects = strategy.UpdateStructuresWithImportedData( + failureMechanism.StabilityPointStructures, + new[] + { + readStructure + }, + sourceFilePath); + + // Assert + AssertStabilityPointStructure(readStructure, structure); + + CollectionAssert.AreEqual(new IObservable[] + { + failureMechanism.StabilityPointStructures, + structure, + calculation.InputParameters, + sectionResults[0], + sectionResults[1] + }, affectedObjects); + + sectionResults = failureMechanism.SectionResults.ToArray(); + Assert.AreEqual(2, sectionResults.Length); + Assert.IsNull(sectionResults[0].Calculation); + Assert.AreSame(calculation, sectionResults[1].Calculation); + } + private static void AssertStabilityPointStructure(StabilityPointStructure expectedStabilityPointStructure, StabilityPointStructure actualStabilityPointStructure) { Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/Ringtoets.StabilityPointStructures.Plugin.Test.csproj =================================================================== diff -u -r89541dc8ef2d8b38372169ddecc0b37e9b225f6d -r0e100db56270f5f51374771a049b20dec82df128 --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/Ringtoets.StabilityPointStructures.Plugin.Test.csproj (.../Ringtoets.StabilityPointStructures.Plugin.Test.csproj) (revision 89541dc8ef2d8b38372169ddecc0b37e9b225f6d) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/Ringtoets.StabilityPointStructures.Plugin.Test.csproj (.../Ringtoets.StabilityPointStructures.Plugin.Test.csproj) (revision 0e100db56270f5f51374771a049b20dec82df128) @@ -133,6 +133,10 @@ {52ba7627-cbab-4209-be77-3b5f31378277} Ringtoets.Common.IO + + {6A074D65-A81C-4C1C-8E24-F36C916E4ED7} + Ringtoets.Common.Utils + {4843d6e5-066f-4795-94f5-1d53932dd03c} Ringtoets.Common.Data.TestUtil