Index: Riskeer/Piping/src/Riskeer.Piping.Plugin/FileImporter/PipingFailureMechanismSectionUpdateStrategy.cs =================================================================== diff -u -r2ceb7d86b0d6e584f5aef913de96c88789e9cf0e -r5d4c739ad955814539e4c55f7db209763bfa8ffd --- Riskeer/Piping/src/Riskeer.Piping.Plugin/FileImporter/PipingFailureMechanismSectionUpdateStrategy.cs (.../PipingFailureMechanismSectionUpdateStrategy.cs) (revision 2ceb7d86b0d6e584f5aef913de96c88789e9cf0e) +++ Riskeer/Piping/src/Riskeer.Piping.Plugin/FileImporter/PipingFailureMechanismSectionUpdateStrategy.cs (.../PipingFailureMechanismSectionUpdateStrategy.cs) (revision 5d4c739ad955814539e4c55f7db209763bfa8ffd) @@ -55,7 +55,12 @@ public override IEnumerable UpdateSectionsWithImportedData(IEnumerable importedFailureMechanismSections, string sourcePath) { + PipingScenarioConfigurationPerFailureMechanismSection[] oldScenarioConfigurationsPerFailureMechanismSection = failureMechanism.ScenarioConfigurationsPerFailureMechanismSection.ToArray(); + List affectedObjects = base.UpdateSectionsWithImportedData(importedFailureMechanismSections, sourcePath).ToList(); + + UpdateScenarioConfigurations(oldScenarioConfigurationsPerFailureMechanismSection); + affectedObjects.Add(failureMechanism.ScenarioConfigurationsPerFailureMechanismSection); return affectedObjects; } @@ -64,5 +69,20 @@ { return PipingDataSynchronizationService.ClearAllProbabilisticCalculationOutput(failureMechanism); } + + private void UpdateScenarioConfigurations(PipingScenarioConfigurationPerFailureMechanismSection[] oldScenarioConfigurationsPerFailureMechanismSection) + { + foreach (PipingScenarioConfigurationPerFailureMechanismSection newScenarioConfiguration in failureMechanism.ScenarioConfigurationsPerFailureMechanismSection) + { + PipingScenarioConfigurationPerFailureMechanismSection scenarioConfigurationToCopy = oldScenarioConfigurationsPerFailureMechanismSection.FirstOrDefault( + oldScenarioConfiguration => oldScenarioConfiguration.Section.StartPoint.Equals(newScenarioConfiguration.Section.StartPoint) + && oldScenarioConfiguration.Section.EndPoint.Equals(newScenarioConfiguration.Section.EndPoint)); + + if (scenarioConfigurationToCopy != null) + { + newScenarioConfiguration.ScenarioConfigurationType = scenarioConfigurationToCopy.ScenarioConfigurationType; + } + } + } } } \ No newline at end of file Index: Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/FileImporter/PipingFailureMechanismSectionUpdateStrategyTest.cs =================================================================== diff -u -r2ceb7d86b0d6e584f5aef913de96c88789e9cf0e -r5d4c739ad955814539e4c55f7db209763bfa8ffd --- Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/FileImporter/PipingFailureMechanismSectionUpdateStrategyTest.cs (.../PipingFailureMechanismSectionUpdateStrategyTest.cs) (revision 2ceb7d86b0d6e584f5aef913de96c88789e9cf0e) +++ Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/FileImporter/PipingFailureMechanismSectionUpdateStrategyTest.cs (.../PipingFailureMechanismSectionUpdateStrategyTest.cs) (revision 5d4c739ad955814539e4c55f7db209763bfa8ffd) @@ -22,6 +22,7 @@ using System.Collections.Generic; using System.Linq; using Core.Common.Base; +using Core.Common.Base.Geometry; using Core.Common.TestUtil; using NUnit.Framework; using Riskeer.Common.Data.FailureMechanism; @@ -76,6 +77,45 @@ } [Test] + public void GivenFailureMechanismWithSections_WhenUpdateSectionsWithImportedData_ThenDataUpdatedAndReturnsAffectedObjects() + { + // Given + var failureMechanism = new PipingFailureMechanism(); + var failureMechanismSectionUpdateStrategy = new PipingFailureMechanismSectionUpdateStrategy( + failureMechanism, new PipingFailureMechanismSectionResultUpdateStrategy()); + + FailureMechanismSection[] sections = + { + FailureMechanismSectionTestFactory.CreateFailureMechanismSection(), + FailureMechanismSectionTestFactory.CreateFailureMechanismSection(new[] + { + new Point2D(1, 0), + new Point2D(3, 0) + }) + }; + string sourcePath = TestHelper.GetScratchPadPath(); + + failureMechanism.SetSections(sections, sourcePath); + failureMechanism.ScenarioConfigurationsPerFailureMechanismSection.First().ScenarioConfigurationType = PipingScenarioConfigurationPerFailureMechanismSectionType.Probabilistic; + + // When + IEnumerable affectedObjects = failureMechanismSectionUpdateStrategy.UpdateSectionsWithImportedData(sections, sourcePath); + + // Then + CollectionAssert.AreEqual(new[] + { + PipingScenarioConfigurationPerFailureMechanismSectionType.Probabilistic, + PipingScenarioConfigurationPerFailureMechanismSectionType.SemiProbabilistic + }, failureMechanism.ScenarioConfigurationsPerFailureMechanismSection.Select(sc => sc.ScenarioConfigurationType)); + CollectionAssert.AreEqual(new IObservable[] + { + failureMechanism, + failureMechanism.SectionResults, + failureMechanism.ScenarioConfigurationsPerFailureMechanismSection + }, affectedObjects); + } + + [Test] public void DoPostUpdateActions_Always_ClearsOutputAndReturnsAffectedObjects() { // Setup