Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/Handlers/DuneLocationsReplacementHandler.cs =================================================================== diff -u -r9e9976818f1b446948c3bf815cafe2e023f98ac1 -rfc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/Handlers/DuneLocationsReplacementHandler.cs (.../DuneLocationsReplacementHandler.cs) (revision 9e9976818f1b446948c3bf815cafe2e023f98ac1) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/Handlers/DuneLocationsReplacementHandler.cs (.../DuneLocationsReplacementHandler.cs) (revision fc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae) @@ -72,6 +72,19 @@ newDuneLocations); } + public void RemoveLocations(IEnumerable hydraulicBoundaryLocations) + { + if (hydraulicBoundaryLocations == null) + { + throw new ArgumentNullException(nameof(hydraulicBoundaryLocations)); + } + + DuneLocation[] locationsToRemove = failureMechanism.DuneLocations.Where( + dl => hydraulicBoundaryLocations.Contains(dl.HydraulicBoundaryLocation)).ToArray(); + + failureMechanism.RemoveDuneLocations(locationsToRemove); + } + public void DoPostReplacementUpdates() { if (!failureMechanism.DuneLocations.Any()) Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/Handlers/IDuneLocationsReplacementHandler.cs =================================================================== diff -u -r9e9976818f1b446948c3bf815cafe2e023f98ac1 -rfc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/Handlers/IDuneLocationsReplacementHandler.cs (.../IDuneLocationsReplacementHandler.cs) (revision 9e9976818f1b446948c3bf815cafe2e023f98ac1) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/Handlers/IDuneLocationsReplacementHandler.cs (.../IDuneLocationsReplacementHandler.cs) (revision fc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae) @@ -41,6 +41,14 @@ void Replace(IEnumerable newHydraulicBoundaryLocations); /// + /// Removes the dune locations of the . + /// + /// The hydraulic boundary locations to remove the dune locations for. + /// Thrown when + /// is null. + void RemoveLocations(IEnumerable hydraulicBoundaryLocations); + + /// /// Performs post-replacement updates. /// void DoPostReplacementUpdates(); Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/Handlers/DuneLocationsReplacementHandlerTest.cs =================================================================== diff -u -rf86a0fa3e10e4c856ed487aa00c5fe3b22f1bbd2 -rfc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/Handlers/DuneLocationsReplacementHandlerTest.cs (.../DuneLocationsReplacementHandlerTest.cs) (revision f86a0fa3e10e4c856ed487aa00c5fe3b22f1bbd2) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/Handlers/DuneLocationsReplacementHandlerTest.cs (.../DuneLocationsReplacementHandlerTest.cs) (revision fc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae) @@ -27,6 +27,7 @@ using NUnit.Framework; using Rhino.Mocks; using Riskeer.Common.Data.Hydraulics; +using Riskeer.Common.Data.TestUtil; using Riskeer.DuneErosion.Data; using Riskeer.DuneErosion.Data.TestUtil; using Riskeer.DuneErosion.Plugin.Handlers; @@ -201,6 +202,67 @@ } [Test] + public void RemoveLocations_HydraulicBoundaryLocationsNull_ThrowsArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var viewCommands = mocks.Stub(); + mocks.ReplayAll(); + + var handler = new DuneLocationsReplacementHandler(viewCommands, new DuneErosionFailureMechanism()); + + // Call + void Call() => handler.RemoveLocations(null); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("hydraulicBoundaryLocations", exception.ParamName); + } + + [Test] + public void GivenFailureMechanismWithLocationsAndCalculations_WhenRemoveLocations_ThenExpectedLocationsRemoved() + { + // Given + var mocks = new MockRepository(); + var viewCommands = mocks.Stub(); + mocks.ReplayAll(); + + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + + var failureMechanism = new DuneErosionFailureMechanism + { + DuneLocationCalculationsForUserDefinedTargetProbabilities = + { + new DuneLocationCalculationsForTargetProbability(0.1) + } + }; + + failureMechanism.SetDuneLocations(new[] + { + new DuneLocation(string.Empty, hydraulicBoundaryLocation, new DuneLocation.ConstructionProperties()) + }); + + DuneLocationCalculationsForTargetProbability duneLocationCalculationsForTargetProbability = + failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.First(); + + // Precondition + Assert.AreEqual(1, failureMechanism.DuneLocations.Count()); + Assert.AreEqual(1, duneLocationCalculationsForTargetProbability.DuneLocationCalculations.Count); + + // When + var handler = new DuneLocationsReplacementHandler(viewCommands, failureMechanism); + handler.RemoveLocations(new[] + { + hydraulicBoundaryLocation + }); + + // Then + CollectionAssert.IsEmpty(failureMechanism.DuneLocations); + CollectionAssert.IsEmpty(duneLocationCalculationsForTargetProbability.DuneLocationCalculations); + mocks.VerifyAll(); + } + + [Test] public void DoPostReplacementUpdates_NoDuneLocationsAdded_CloseAllViewsForFailureMechanism() { // Setup Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseRemoveHandler.cs =================================================================== diff -u -r9a9ec78578a4c7b1b5e54cc6033692a25517ed68 -rfc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae --- Riskeer/Integration/src/Riskeer.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseRemoveHandler.cs (.../HydraulicBoundaryDatabaseRemoveHandler.cs) (revision 9a9ec78578a4c7b1b5e54cc6033692a25517ed68) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseRemoveHandler.cs (.../HydraulicBoundaryDatabaseRemoveHandler.cs) (revision fc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae) @@ -36,29 +36,29 @@ public class HydraulicBoundaryDatabaseRemoveHandler { private readonly AssessmentSection assessmentSection; - private readonly IDuneLocationsRemoveHandler duneLocationsRemoveHandler; + private readonly IDuneLocationsReplacementHandler duneLocationsReplacementHandler; /// /// Creates a new instance of . /// /// The assessment section to update. - /// The handler to remove dune locations. + /// The handler to remove dune locations. /// Thrown when any parameter is null. public HydraulicBoundaryDatabaseRemoveHandler(AssessmentSection assessmentSection, - IDuneLocationsRemoveHandler duneLocationsRemoveHandler) + IDuneLocationsReplacementHandler duneLocationsReplacementHandler) { if (assessmentSection == null) { throw new ArgumentNullException(nameof(assessmentSection)); } - if (duneLocationsRemoveHandler == null) + if (duneLocationsReplacementHandler == null) { - throw new ArgumentNullException(nameof(duneLocationsRemoveHandler)); + throw new ArgumentNullException(nameof(duneLocationsReplacementHandler)); } this.assessmentSection = assessmentSection; - this.duneLocationsRemoveHandler = duneLocationsRemoveHandler; + this.duneLocationsReplacementHandler = duneLocationsReplacementHandler; } /// @@ -76,7 +76,7 @@ } assessmentSection.RemoveHydraulicBoundaryLocationCalculations(hydraulicBoundaryDatabase.Locations); - duneLocationsRemoveHandler.RemoveLocations(hydraulicBoundaryDatabase.Locations); + duneLocationsReplacementHandler.RemoveLocations(hydraulicBoundaryDatabase.Locations); assessmentSection.HydraulicBoundaryData.HydraulicBoundaryDatabases.Remove(hydraulicBoundaryDatabase); var changedObjects = new List(); @@ -90,7 +90,7 @@ /// public void DoPostRemoveActions() { - duneLocationsRemoveHandler.DoPostRemoveActions(); + duneLocationsReplacementHandler.DoPostReplacementUpdates(); } private IEnumerable GetLocationsAndCalculationsObservables(HydraulicBoundaryData hydraulicBoundaryData) Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs =================================================================== diff -u -rf03c985528c494c6591a803502d8bb6b78799373 -rfc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae --- Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision f03c985528c494c6591a803502d8bb6b78799373) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision fc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae) @@ -2535,7 +2535,7 @@ private void HydraulicBoundaryDatabaseContextOnNodeRemoved(HydraulicBoundaryDatabaseContext nodeData, object parentNodeData) { var handler = new HydraulicBoundaryDatabaseRemoveHandler( - nodeData.AssessmentSection, new DuneLocationsRemoveHandler(nodeData.AssessmentSection.DuneErosion, Gui.ViewCommands)); + nodeData.AssessmentSection, new DuneLocationsReplacementHandler(Gui.ViewCommands, nodeData.AssessmentSection.DuneErosion)); IEnumerable changedObjects = handler.RemoveHydraulicBoundaryDatabase(nodeData.WrappedData); handler.DoPostRemoveActions(); Index: Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseRemoveHandlerTest.cs =================================================================== diff -u -r9a9ec78578a4c7b1b5e54cc6033692a25517ed68 -rfc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae --- Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseRemoveHandlerTest.cs (.../HydraulicBoundaryDatabaseRemoveHandlerTest.cs) (revision 9a9ec78578a4c7b1b5e54cc6033692a25517ed68) +++ Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseRemoveHandlerTest.cs (.../HydraulicBoundaryDatabaseRemoveHandlerTest.cs) (revision fc1b95fa95bde9902e4c19c7eb1cb0d3900e6fae) @@ -49,11 +49,11 @@ { // Setup var mocks = new MockRepository(); - var duneLocationsRemoveHandler = mocks.Stub(); + var duneLocationsReplacementHandler = mocks.Stub(); mocks.ReplayAll(); // Call - void Call() => new HydraulicBoundaryDatabaseRemoveHandler(null, duneLocationsRemoveHandler); + void Call() => new HydraulicBoundaryDatabaseRemoveHandler(null, duneLocationsReplacementHandler); // Assert var exception = Assert.Throws(Call); @@ -62,7 +62,7 @@ } [Test] - public void Constructor_DuneLocationsRemoveHandlerNull_ThrowsArgumentNullException() + public void Constructor_DuneLocationsReplacementHandlerNull_ThrowsArgumentNullException() { // Setup var random = new Random(21); @@ -73,21 +73,21 @@ // Assert var exception = Assert.Throws(Call); - Assert.AreEqual("duneLocationsRemoveHandler", exception.ParamName); + Assert.AreEqual("duneLocationsReplacementHandler", exception.ParamName); } [Test] public void RemoveHydraulicBoundaryDatabase_HydraulicBoundaryDatabaseNull_ThrowsArgumentNullException() { // Setup var mocks = new MockRepository(); - var duneLocationsRemoveHandler = mocks.Stub(); + var duneLocationsReplacementHandler = mocks.Stub(); mocks.ReplayAll(); var random = new Random(21); var assessmentSection = new AssessmentSection(random.NextEnumValue()); - var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsRemoveHandler); + var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsReplacementHandler); // Call void Call() => handler.RemoveHydraulicBoundaryDatabase(null); @@ -106,8 +106,8 @@ var location2 = new TestHydraulicBoundaryLocation(); var mocks = new MockRepository(); - var duneLocationsRemoveHandler = mocks.StrictMock(); - duneLocationsRemoveHandler.Expect(dlrh => dlrh.RemoveLocations(new[] + var duneLocationsReplacementHandler = mocks.Stub(); + duneLocationsReplacementHandler.Expect(dlrh => dlrh.RemoveLocations(new[] { location1, location2 @@ -139,7 +139,7 @@ location2 }); - var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsRemoveHandler); + var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsReplacementHandler); // Precondition Assert.AreEqual(1, assessmentSection.HydraulicBoundaryData.HydraulicBoundaryDatabases.Count); @@ -182,7 +182,7 @@ { // Given var mocks = new MockRepository(); - var duneLocationsRemoveHandler = mocks.Stub(); + var duneLocationsReplacementHandler = mocks.Stub(); mocks.ReplayAll(); var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); @@ -197,7 +197,7 @@ } }; - var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsRemoveHandler); + var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsReplacementHandler); // When IEnumerable changedObjects = handler.RemoveHydraulicBoundaryDatabase(hydraulicBoundaryDatabase); @@ -230,7 +230,7 @@ { // Given var mocks = new MockRepository(); - var duneLocationsRemoveHandler = mocks.Stub(); + var duneLocationsReplacementHandler = mocks.Stub(); mocks.ReplayAll(); AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurations(); @@ -248,7 +248,7 @@ .Except(calculationsWithOutput.OfType()) .ToArray(); - var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsRemoveHandler); + var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsReplacementHandler); // When IEnumerable changedObjects = handler.RemoveHydraulicBoundaryDatabase(assessmentSection.HydraulicBoundaryData.HydraulicBoundaryDatabases.First()); @@ -264,14 +264,14 @@ { // Setup var mocks = new MockRepository(); - var duneLocationsRemoveHandler = mocks.StrictMock(); - duneLocationsRemoveHandler.Expect(dlrh => dlrh.DoPostRemoveActions()); + var duneLocationsReplacementHandler = mocks.StrictMock(); + duneLocationsReplacementHandler.Expect(dlrh => dlrh.DoPostReplacementUpdates()); mocks.ReplayAll(); var random = new Random(21); var assessmentSection = new AssessmentSection(random.NextEnumValue()); - var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsRemoveHandler); + var handler = new HydraulicBoundaryDatabaseRemoveHandler(assessmentSection, duneLocationsReplacementHandler); // Call handler.DoPostRemoveActions();