Index: Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoAssessmentSectionCommand.cs
===================================================================
diff -u -r3d92d0715a889b25fcf76e04d6536168d670328c -r7135385a10443af1369b1b9e814b8b762366f64b
--- Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoAssessmentSectionCommand.cs (.../AddNewDemoAssessmentSectionCommand.cs) (revision 3d92d0715a889b25fcf76e04d6536168d670328c)
+++ Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoAssessmentSectionCommand.cs (.../AddNewDemoAssessmentSectionCommand.cs) (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -140,19 +140,21 @@
for (var i = 0; i < failureMechanisms.Length; i++)
{
+ IFailureMechanism failureMechanism = failureMechanisms[i];
+
if (i == 0)
{
-
- var importer = new FailureMechanismSectionsImporter(failureMechanisms[i],
+ var importer = new FailureMechanismSectionsImporter(failureMechanism,
demoAssessmentSection.ReferenceLine,
- filePath);
+ filePath,
+ new FailureMechanismSectionReplaceStrategy(failureMechanism));
importer.Import();
}
else
{
// Copy same FailureMechanismSection instances to other failure mechanisms
FailureMechanismSection[] clonedSections = failureMechanisms[0].Sections.Select(DeepCloneSection).ToArray();
- failureMechanisms[i].SetSections(clonedSections, filePath);
+ failureMechanism.SetSections(clonedSections, filePath);
}
}
}
Index: Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/FailureMechanismSectionReplaceStrategy.cs
===================================================================
diff -u
--- Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/FailureMechanismSectionReplaceStrategy.cs (revision 0)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/FailureMechanismSectionReplaceStrategy.cs (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -0,0 +1,68 @@
+// Copyright (C) Stichting Deltares 2017. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Collections.Generic;
+using Ringtoets.Common.Data.FailureMechanism;
+
+namespace Ringtoets.Common.IO.FileImporters
+{
+ ///
+ /// A replace strategy that can be used to replace failure mechanism sections with
+ /// imported failure mechanism sections.
+ ///
+ public class FailureMechanismSectionReplaceStrategy : IFailureMechanismSectionUpdateStrategy
+ {
+ private readonly IFailureMechanism failureMechanism;
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// The to set the sections to.
+ /// Thrown when
+ /// is null.
+ public FailureMechanismSectionReplaceStrategy(IFailureMechanism failureMechanism)
+ {
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ this.failureMechanism = failureMechanism;
+ }
+
+ public void UpdateSectionsWithImportedData(IEnumerable importedFailureMechanismSections,
+ string sourcePath)
+ {
+ if (importedFailureMechanismSections == null)
+ {
+ throw new ArgumentNullException(nameof(importedFailureMechanismSections));
+ }
+
+ if (sourcePath == null)
+ {
+ throw new ArgumentNullException(nameof(sourcePath));
+ }
+
+ failureMechanism.SetSections(importedFailureMechanismSections, sourcePath);
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/FailureMechanismSectionsImporter.cs
===================================================================
diff -u -r88ba44b92caad86cf1343d9c191bc22761463c8c -r7135385a10443af1369b1b9e814b8b762366f64b
--- Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/FailureMechanismSectionsImporter.cs (.../FailureMechanismSectionsImporter.cs) (revision 88ba44b92caad86cf1343d9c191bc22761463c8c)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/FailureMechanismSectionsImporter.cs (.../FailureMechanismSectionsImporter.cs) (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -48,23 +48,35 @@
private const double lengthDifferenceTolerance = 1;
private readonly ReferenceLine referenceLine;
+ private readonly IFailureMechanismSectionUpdateStrategy failureMechanismSectionUpdateStrategy;
///
/// Initializes a new instance of the class.
///
/// The failure mechanism to update.
/// The reference line used to check correspondence with.
/// The path to the file to import from.
+ /// The strategy to update the failure mechanism sections
+ /// with the imported data.
/// Thrown when any input argument is null.
///
- public FailureMechanismSectionsImporter(IFailureMechanism importTarget, ReferenceLine referenceLine, string filePath) : base(filePath, importTarget)
+ public FailureMechanismSectionsImporter(IFailureMechanism importTarget,
+ ReferenceLine referenceLine,
+ string filePath,
+ IFailureMechanismSectionUpdateStrategy failureMechanismSectionUpdateStrategy) : base(filePath, importTarget)
{
if (referenceLine == null)
{
throw new ArgumentNullException(nameof(referenceLine));
}
+ if (failureMechanismSectionUpdateStrategy == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanismSectionUpdateStrategy));
+ }
+
this.referenceLine = referenceLine;
+ this.failureMechanismSectionUpdateStrategy = failureMechanismSectionUpdateStrategy;
}
protected override bool OnImport()
@@ -227,7 +239,7 @@
{
IEnumerable snappedSections = SnapReadSectionsToReferenceLine(failureMechanismSections, referenceLine);
- ImportTarget.SetSections(snappedSections, FilePath);
+ failureMechanismSectionUpdateStrategy.UpdateSectionsWithImportedData(snappedSections, FilePath);
}
private static IEnumerable SnapReadSectionsToReferenceLine(IEnumerable failureMechanismSections,
Index: Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/IFailureMechanismSectionUpdateStrategy.cs
===================================================================
diff -u
--- Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/IFailureMechanismSectionUpdateStrategy.cs (revision 0)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/IFailureMechanismSectionUpdateStrategy.cs (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -0,0 +1,45 @@
+// Copyright (C) Stichting Deltares 2017. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Ringtoets.Common.Data.Exceptions;
+using Ringtoets.Common.Data.FailureMechanism;
+
+namespace Ringtoets.Common.IO.FileImporters
+{
+ ///
+ /// Interface describing the method of updating the data model after new
+ /// failure mechanism sections have been imported.
+ ///
+ public interface IFailureMechanismSectionUpdateStrategy
+ {
+ ///
+ /// Updates the data model with data from .
+ ///
+ /// The imported failure mechanism sections.
+ /// The source path from where the failure mechanism sections were imported.
+ /// Thrown when any input argument is null.
+ void UpdateSectionsWithImportedData(IEnumerable importedFailureMechanismSections,
+ string sourcePath);
+ }
+}
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj
===================================================================
diff -u -reb0206bf27d75fbfeb403b365a4218a228f007e4 -r7135385a10443af1369b1b9e814b8b762366f64b
--- Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj (.../Ringtoets.Common.IO.csproj) (revision eb0206bf27d75fbfeb403b365a4218a228f007e4)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj (.../Ringtoets.Common.IO.csproj) (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -47,10 +47,13 @@
+
+
+
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/FailureMechanismSectionReplaceStrategyTest.cs
===================================================================
diff -u
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/FailureMechanismSectionReplaceStrategyTest.cs (revision 0)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/FailureMechanismSectionReplaceStrategyTest.cs (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -0,0 +1,98 @@
+// Copyright (C) Stichting Deltares 2017. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Linq;
+using NUnit.Framework;
+using Rhino.Mocks;
+using Ringtoets.Common.Data.FailureMechanism;
+using Ringtoets.Common.IO.FileImporters;
+
+namespace Ringtoets.Common.IO.Test.FileImporters
+{
+ [TestFixture]
+ public class FailureMechanismSectionReplaceStrategyTest
+ {
+ [Test]
+ public void Constructor_FailureMechanismNull_ThrowsArgumentNullException()
+ {
+ // Call
+ TestDelegate call = () => new FailureMechanismSectionReplaceStrategy(null);
+
+ // Assert
+ string paramName = Assert.Throws(call).ParamName;
+ Assert.AreEqual("failureMechanism", paramName);
+ }
+
+ [Test]
+ public void Constructor_ExpectedValues()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ var importer = new FailureMechanismSectionReplaceStrategy(failureMechanism);
+
+ // Assert
+ Assert.IsInstanceOf(importer);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void UpdateSectionsWithImportedData_ImportedFailureMechanismSectionsNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ TestDelegate call = () => new FailureMechanismSectionReplaceStrategy(failureMechanism).UpdateSectionsWithImportedData(null, "");
+
+ // Assert
+ string paramName = Assert.Throws(call).ParamName;
+ Assert.AreEqual("importedFailureMechanismSections", paramName);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void UpdateSectionsWithImportedData_SourcePathNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ mocks.ReplayAll();
+
+ var failureMechanismSectionReplaceStrategy = new FailureMechanismSectionReplaceStrategy(failureMechanism);
+
+ // Call
+ TestDelegate call = () => failureMechanismSectionReplaceStrategy.UpdateSectionsWithImportedData(
+ Enumerable.Empty(), null);
+
+ // Assert
+ string paramName = Assert.Throws(call).ParamName;
+ Assert.AreEqual("sourcePath", paramName);
+ mocks.VerifyAll();
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/FailureMechanismSectionsImporterTest.cs
===================================================================
diff -u -r67846d2c26e292748851a4ecbee2a050ffffa721 -r7135385a10443af1369b1b9e814b8b762366f64b
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/FailureMechanismSectionsImporterTest.cs (.../FailureMechanismSectionsImporterTest.cs) (revision 67846d2c26e292748851a4ecbee2a050ffffa721)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/FailureMechanismSectionsImporterTest.cs (.../FailureMechanismSectionsImporterTest.cs) (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -42,33 +42,36 @@
public class FailureMechanismSectionsImporterTest
{
[Test]
- public void Constructor_FailureMechanismNull_ThrowArgumentNullException()
+ public void Constructor_ReferenceLineNull_ThrowsArgumentNullException()
{
// Setup
- var referenceLine = new ReferenceLine();
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ mocks.ReplayAll();
// Call
- TestDelegate call = () => new FailureMechanismSectionsImporter(null, referenceLine, "");
+ TestDelegate call = () => new FailureMechanismSectionsImporter(failureMechanism, null, "", new TestFailureMechanismSectionUpdateStrategy());
// Assert
string paramName = Assert.Throws(call).ParamName;
- Assert.AreEqual("importTarget", paramName);
+ Assert.AreEqual("referenceLine", paramName);
+ mocks.VerifyAll();
}
[Test]
- public void Constructor_ReferenceLineNull_ThrowsArgumentNullException()
+ public void Constructor_FailureMechanismSectionUpdateStrategyNull_ThrowsArgumentNullException()
{
// Setup
var mocks = new MockRepository();
var failureMechanism = mocks.Stub();
mocks.ReplayAll();
// Call
- TestDelegate call = () => new FailureMechanismSectionsImporter(failureMechanism, null, "");
+ TestDelegate call = () => new FailureMechanismSectionsImporter(failureMechanism, new ReferenceLine(), "", null);
// Assert
string paramName = Assert.Throws(call).ParamName;
- Assert.AreEqual("referenceLine", paramName);
+ Assert.AreEqual("failureMechanismSectionUpdateStrategy", paramName);
mocks.VerifyAll();
}
@@ -83,7 +86,7 @@
var referenceLine = new ReferenceLine();
// Call
- var importer = new FailureMechanismSectionsImporter(failureMechanism, referenceLine, "");
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, referenceLine, "", new TestFailureMechanismSectionUpdateStrategy());
// Assert
Assert.IsInstanceOf>(importer);
@@ -103,17 +106,19 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
+
// Call
bool importSuccessful = importer.Import();
// Assert
Assert.IsTrue(importSuccessful);
- Assert.AreEqual(sectionsFilePath, failureMechanism.FailureMechanismSectionSourcePath);
- FailureMechanismSection[] sections = failureMechanism.Sections.ToArray();
- Assert.AreEqual(sectionCount, sections.Length);
+ Assert.AreEqual(sectionsFilePath, updateStrategy.SourcePath);
+ IEnumerable sections = updateStrategy.ImportedFailureMechanismSections;
+ Assert.AreEqual(sectionCount, sections.Count());
AssertSectionsAreValidForReferenceLine(sections, importReferenceLine);
}
@@ -133,16 +138,18 @@
{
new FailureMechanismSection("A", importReferenceLine.Points)
});
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
+
// Call
bool importSuccessful = importer.Import();
// Assert
Assert.IsTrue(importSuccessful);
- FailureMechanismSection[] sections = failureMechanism.Sections.ToArray();
- Assert.AreEqual(62, sections.Length);
+ IEnumerable sections = updateStrategy.ImportedFailureMechanismSections;
+ Assert.AreEqual(62, sections.Count());
AssertSectionsAreValidForReferenceLine(sections, importReferenceLine);
}
@@ -158,17 +165,18 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
bool importSuccessful = importer.Import();
// Assert
Assert.IsTrue(importSuccessful);
- FailureMechanismSection[] sections = failureMechanism.Sections.ToArray();
- Assert.AreEqual(7, sections.Length);
+ IEnumerable sections = updateStrategy.ImportedFailureMechanismSections;
+ Assert.AreEqual(7, sections.Count());
AssertSectionsAreValidForReferenceLine(sections, importReferenceLine);
}
@@ -189,17 +197,18 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
bool importSuccessful = importer.Import();
// Assert
Assert.IsTrue(importSuccessful);
- FailureMechanismSection[] sections = failureMechanism.Sections.ToArray();
- Assert.AreEqual(7, sections.Length);
+ IEnumerable sections = updateStrategy.ImportedFailureMechanismSections;
+ Assert.AreEqual(7, sections.Count());
AssertSectionsAreValidForReferenceLine(sections, importReferenceLine);
}
@@ -217,8 +226,9 @@
var progressChangeNotifications = new List();
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
importer.SetProgressChanged((description, step, steps) => progressChangeNotifications.Add(new ProgressNotification(description, step, steps)));
// Call
@@ -248,8 +258,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -274,8 +285,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -302,8 +314,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -332,8 +345,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -362,8 +376,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -389,8 +404,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -416,8 +432,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -444,8 +461,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -467,8 +485,9 @@
Path.Combine("FailureMechanismSections", "vakindeling_Empty_Name_Value.shp"));
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, new ReferenceLine(), sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, new ReferenceLine(), sectionsFilePath, updateStrategy);
// Call
var importSuccessful = true;
@@ -494,8 +513,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
importer.SetProgressChanged((description, step, steps) =>
{
if (description.Contains("Inlezen vakindeling."))
@@ -527,8 +547,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
importer.SetProgressChanged((description, step, steps) =>
{
if (description.Contains("Valideren ingelezen vakindeling."))
@@ -560,8 +581,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
importer.SetProgressChanged((description, step, steps) =>
{
if (description.Contains("Geïmporteerde data toevoegen aan het toetsspoor."))
@@ -578,7 +600,7 @@
// Assert
TestHelper.AssertLogMessageIsGenerated(call, "Huidige actie was niet meer te annuleren en is daarom voortgezet.", 1);
Assert.IsTrue(importSuccessful);
- CollectionAssert.IsNotEmpty(failureMechanism.Sections);
+ CollectionAssert.IsNotEmpty(updateStrategy.ImportedFailureMechanismSections);
}
[Test]
@@ -593,8 +615,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
importer.SetProgressChanged((description, step, steps) => importer.Cancel());
Assert.IsFalse(importer.Import());
@@ -606,8 +629,8 @@
// Assert
Assert.IsTrue(importSuccessful);
- FailureMechanismSection[] sections = failureMechanism.Sections.ToArray();
- Assert.AreEqual(62, sections.Length);
+ IEnumerable sections = updateStrategy.ImportedFailureMechanismSections;
+ Assert.AreEqual(62, sections.Count());
AssertSectionsAreValidForReferenceLine(sections, importReferenceLine);
}
@@ -628,8 +651,9 @@
ReferenceLine importReferenceLine = ImportReferenceLine(referenceLineFilePath);
var failureMechanism = new TestFailureMechanism();
+ var updateStrategy = new TestFailureMechanismSectionUpdateStrategy();
- var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath);
+ var importer = new FailureMechanismSectionsImporter(failureMechanism, importReferenceLine, sectionsFilePath, updateStrategy);
importer.Import();
failureMechanism.SectionResults.Attach(observable);
@@ -641,6 +665,22 @@
mocks.VerifyAll();
}
+ private class TestFailureMechanismSectionUpdateStrategy : IFailureMechanismSectionUpdateStrategy
+ {
+ public bool Updated { get; private set; }
+
+ public string SourcePath { get; private set; }
+
+ public IEnumerable ImportedFailureMechanismSections { get; private set; }
+
+ public void UpdateSectionsWithImportedData(IEnumerable importedFailureMechanismSections, string sourcePath)
+ {
+ Updated = true;
+ SourcePath = sourcePath;
+ ImportedFailureMechanismSections = importedFailureMechanismSections;
+ }
+ }
+
private static ReferenceLine ImportReferenceLine(string referenceLineFilePath)
{
ReferenceLine importedReferenceLine = null;
@@ -663,12 +703,12 @@
return importedReferenceLine;
}
- private void AssertSectionsAreValidForReferenceLine(FailureMechanismSection[] sections, ReferenceLine referenceLine)
+ private void AssertSectionsAreValidForReferenceLine(IEnumerable sections, ReferenceLine referenceLine)
{
Point2D[] referenceLineGeometry = referenceLine.Points.ToArray();
// 1. Start & End coherence:
- Assert.AreEqual(referenceLineGeometry[0], sections[0].StartPoint,
+ Assert.AreEqual(referenceLineGeometry[0], sections.First().StartPoint,
"Start of the sections should correspond to the Start of the reference line.");
Assert.AreEqual(referenceLineGeometry.Last(), sections.Last().EndPoint,
"End of the sections should correspond to the End of the reference line.");
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj
===================================================================
diff -u -reb0206bf27d75fbfeb403b365a4218a228f007e4 -r7135385a10443af1369b1b9e814b8b762366f64b
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj (.../Ringtoets.Common.IO.Test.csproj) (revision eb0206bf27d75fbfeb403b365a4218a228f007e4)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj (.../Ringtoets.Common.IO.Test.csproj) (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -52,6 +52,7 @@
+
Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs
===================================================================
diff -u -r77f43b2f296c4b9515556f289d8b74bbb172f9cd -r7135385a10443af1369b1b9e814b8b762366f64b
--- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision 77f43b2f296c4b9515556f289d8b74bbb172f9cd)
+++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -649,7 +649,8 @@
IsEnabled = context => context.AssessmentSection.ReferenceLine != null,
CreateFileImporter = (context, filePath) => new FailureMechanismSectionsImporter(context.WrappedData,
context.AssessmentSection.ReferenceLine,
- filePath)
+ filePath,
+ new FailureMechanismSectionReplaceStrategy(context.WrappedData))
};
yield return new ImportInfo
{
@@ -1332,6 +1333,7 @@
.AddOpenItem()
.AddSeparator()
.AddImportItem()
+ .AddUpdateItem()
.AddSeparator()
.AddPropertiesItem()
.Build();
Index: Ringtoets/Integration/test/Ringtoets.Integration.TestUtil/DataImportHelper.cs
===================================================================
diff -u -ra90ecfec7dc128234360d4a55ee646928c133b75 -r7135385a10443af1369b1b9e814b8b762366f64b
--- Ringtoets/Integration/test/Ringtoets.Integration.TestUtil/DataImportHelper.cs (.../DataImportHelper.cs) (revision a90ecfec7dc128234360d4a55ee646928c133b75)
+++ Ringtoets/Integration/test/Ringtoets.Integration.TestUtil/DataImportHelper.cs (.../DataImportHelper.cs) (revision 7135385a10443af1369b1b9e814b8b762366f64b)
@@ -103,7 +103,10 @@
"traject_6-3_vakken.shx"))
{
string filePath = Path.Combine(embeddedResourceFileWriter.TargetFolderPath, "traject_6-3_vakken.shp");
- var activity = new FileImportActivity(new FailureMechanismSectionsImporter(failureMechanism, assessmentSection.ReferenceLine, filePath),
+ var activity = new FileImportActivity(new FailureMechanismSectionsImporter(failureMechanism,
+ assessmentSection.ReferenceLine,
+ filePath,
+ new FailureMechanismSectionReplaceStrategy(failureMechanism)),
"FailureMechanismSectionsImporter");
activity.Run();
activity.Finish();
@@ -132,19 +135,21 @@
IFailureMechanism[] failureMechanisms = targetFailureMechanisms.ToArray();
for (var i = 0; i < failureMechanisms.Length; i++)
{
+ IFailureMechanism failureMechanism = failureMechanisms[i];
if (i == 0)
{
string filePath = Path.Combine(embeddedResourceFileWriter.TargetFolderPath,
"traject_6-3_vakken.shp");
- var importer = new FailureMechanismSectionsImporter(failureMechanisms[i],
+ var importer = new FailureMechanismSectionsImporter(failureMechanism,
assessmentSection.ReferenceLine,
- filePath);
+ filePath,
+ new FailureMechanismSectionReplaceStrategy(failureMechanism));
importer.Import();
}
else
{
// Copy same FailureMechanismSection instances to other failure mechanisms
- FailureMechanismTestHelper.SetSections(failureMechanisms[i], failureMechanisms[0].Sections.Select(DeepCloneSection).ToList());
+ FailureMechanismTestHelper.SetSections(failureMechanism, failureMechanisms[0].Sections.Select(DeepCloneSection).ToList());
}
}
}