Index: Ringtoets/Common/src/Ringtoets.Common.Forms/PresentationObjects/ReferenceLineContext.cs =================================================================== diff -u -r64d5609bb2912cd52dc74deffdd189222e240599 -rf01bfd8d4c0541a96d57071b397c39792a99da26 --- Ringtoets/Common/src/Ringtoets.Common.Forms/PresentationObjects/ReferenceLineContext.cs (.../ReferenceLineContext.cs) (revision 64d5609bb2912cd52dc74deffdd189222e240599) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/PresentationObjects/ReferenceLineContext.cs (.../ReferenceLineContext.cs) (revision f01bfd8d4c0541a96d57071b397c39792a99da26) @@ -20,76 +20,21 @@ // All rights reserved. using System; -using Core.Common.Base; +using Core.Common.Controls.PresentationObjects; using Ringtoets.Common.Data.AssessmentSection; -using Ringtoets.Common.Forms.Properties; namespace Ringtoets.Common.Forms.PresentationObjects { /// /// Presentation object for instances. /// - public class ReferenceLineContext : Observable + public class ReferenceLineContext : ObservableWrappedObjectContextBase { /// /// Initializes a new instance of the class. /// - /// The parent owner of the data represented by the presentation object. - /// Thrown when is null. - public ReferenceLineContext(IAssessmentSection parent) - { - if (parent == null) - { - throw new ArgumentNullException("parent", Resources.ReferenceLineContext_Parent_assessment_section_cannot_be_null); - } - Parent = parent; - } - - /// - /// The reference line data wrapped by this presentation object. - /// - public ReferenceLine WrappedData - { - get - { - return Parent.ReferenceLine; - } - } - - /// - /// The assessment section owning . - /// - public IAssessmentSection Parent { get; private set; } - - #region Equatable - - private bool Equals(ReferenceLineContext other) - { - return Parent.Equals(other.Parent); - } - - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) - { - return false; - } - if (ReferenceEquals(this, obj)) - { - return true; - } - if (obj.GetType() != GetType()) - { - return false; - } - return Equals((ReferenceLineContext)obj); - } - - public override int GetHashCode() - { - return Parent.GetHashCode(); - } - - #endregion + /// The assessment section that is wrapped. + /// Thrown when is null. + public ReferenceLineContext(IAssessmentSection wrappedAssessmentSection) : base(wrappedAssessmentSection) {} } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLineImporter.cs =================================================================== diff -u -r63fbdd5525927fbf9d63925eef9da8e17a0d7b44 -rf01bfd8d4c0541a96d57071b397c39792a99da26 --- Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLineImporter.cs (.../ReferenceLineImporter.cs) (revision 63fbdd5525927fbf9d63925eef9da8e17a0d7b44) +++ Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLineImporter.cs (.../ReferenceLineImporter.cs) (revision f01bfd8d4c0541a96d57071b397c39792a99da26) @@ -92,9 +92,9 @@ bool clearReferenceLineDependentData = false; var importTarget = (ReferenceLineContext)targetItem; - if (importTarget.Parent.ReferenceLine != null) + if (importTarget.WrappedData.ReferenceLine != null) { - clearReferenceLineDependentData = ConfirmImportOfReferenceLineToClearReferenceLineDependentData(importTarget.Parent); + clearReferenceLineDependentData = ConfirmImportOfReferenceLineToClearReferenceLineDependentData(importTarget.WrappedData); } if (ImportIsCancelled) @@ -117,7 +117,7 @@ return false; } - AddReferenceLineToDataModel(importTarget.Parent, readResult.ImportedItems.First(), clearReferenceLineDependentData); + AddReferenceLineToDataModel(importTarget.WrappedData, readResult.ImportedItems.First(), clearReferenceLineDependentData); return true; } @@ -189,8 +189,6 @@ 2, clearReferenceLineDependentData ? 4 : 2); assessmentSection.ReferenceLine = importedReferenceLine; - changedObservables.Add(assessmentSection); // Note: Add assessmentSection to the list of changed observables. Otherwise only the reference line context item will be notified. - if (clearReferenceLineDependentData && assessmentSection.GetFailureMechanisms() != null) { ClearReferenceLineDependentData(assessmentSection); Index: Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj =================================================================== diff -u -rb79e419a1fcdf3d80760ea4bc35ac354525911d2 -rf01bfd8d4c0541a96d57071b397c39792a99da26 --- Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj (.../Ringtoets.Common.IO.csproj) (revision b79e419a1fcdf3d80760ea4bc35ac354525911d2) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj (.../Ringtoets.Common.IO.csproj) (revision f01bfd8d4c0541a96d57071b397c39792a99da26) @@ -69,6 +69,10 @@ Core.Common.Base False + + {9A2D67E6-26AC-4D17-B11A-2B4372F2F572} + Core.Common.Controls + {e344867e-9ac9-44c8-88a5-8185681679a9} Core.Common.IO Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/PresentationObjects/ReferenceLineContextTest.cs =================================================================== diff -u -r507e30ebf13ba63fcedbe9a5b8457f302da26429 -rf01bfd8d4c0541a96d57071b397c39792a99da26 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/PresentationObjects/ReferenceLineContextTest.cs (.../ReferenceLineContextTest.cs) (revision 507e30ebf13ba63fcedbe9a5b8457f302da26429) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/PresentationObjects/ReferenceLineContextTest.cs (.../ReferenceLineContextTest.cs) (revision f01bfd8d4c0541a96d57071b397c39792a99da26) @@ -19,9 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System; -using Core.Common.Base; -using Core.Common.TestUtil; +using Core.Common.Controls.PresentationObjects; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; @@ -47,123 +45,9 @@ var referenceLineContext = new ReferenceLineContext(assessmentSection); // Assert - Assert.IsInstanceOf(referenceLineContext); - Assert.AreSame(referenceLine, referenceLineContext.WrappedData); - Assert.AreSame(assessmentSection, referenceLineContext.Parent); + Assert.IsInstanceOf>(referenceLineContext); + Assert.AreSame(assessmentSection, referenceLineContext.WrappedData); mocks.VerifyAll(); } - - [Test] - public void ParameteredConstructor_AssessmentSectionIsNull_ThrowArgumentNullException() - { - // Call - TestDelegate call = () => new ReferenceLineContext(null); - - // Assert - string expectedMessage = "Kan geen presentatie object maken voor een referentielijn zonder een traject als eigenaar."; - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); - } - - [Test] - public void Equals_ContextObjectsHaveSameParent_ReturnTrue() - { - // Setup - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - mocks.ReplayAll(); - - var context1 = new ReferenceLineContext(assessmentSection); - var context2 = new ReferenceLineContext(assessmentSection); - - // Call - var contextsAreEqual1 = context1.Equals(context2); - var contextsAreEqual2 = context2.Equals(context1); - - // Assert - Assert.IsTrue(contextsAreEqual1); - Assert.IsTrue(contextsAreEqual2); - mocks.VerifyAll(); - } - - [Test] - public void Equals_TwoContextsWithDifferentParents_ReturnFalse() - { - // Setup - var mocks = new MockRepository(); - var assessmentSection1 = mocks.Stub(); - var assessmentSection2 = mocks.Stub(); - mocks.ReplayAll(); - - var context1 = new ReferenceLineContext(assessmentSection1); - var context2 = new ReferenceLineContext(assessmentSection2); - - // Call - var contextsAreEqual1 = context1.Equals(context2); - var contextsAreEqual2 = context2.Equals(context1); - - // Assert - Assert.IsFalse(contextsAreEqual1); - Assert.IsFalse(contextsAreEqual2); - mocks.VerifyAll(); - } - - [Test] - public void Equals_ComparingToItself_ReturnTrue() - { - // Setup - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - mocks.ReplayAll(); - - var context = new ReferenceLineContext(assessmentSection); - - // Call - var isEqual = context.Equals(context); - - // Assert - Assert.IsTrue(isEqual); - mocks.VerifyAll(); - } - - [Test] - public void Equals_ComparingToNull_ReturnFalse() - { - // Setup - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - mocks.ReplayAll(); - - var context = new ReferenceLineContext(assessmentSection); - - // Call - var isEqual = context.Equals(null); - - // Assert - Assert.IsFalse(isEqual); - mocks.VerifyAll(); - } - - [Test] - public void GetHashCode_TwoContextInstancesEqualToEachOther_ReturnIdenticalHashes() - { - // Setup - var mocks = new MockRepository(); - var assessmentSection = mocks.StrictMock(); - mocks.ReplayAll(); - - var context = new ReferenceLineContext(assessmentSection); - - var otherContext = new ReferenceLineContext(assessmentSection); - // Precondition - Assert.True(context.Equals(otherContext)); - - // Call - int contextHashCode = context.GetHashCode(); - int otherContextHashCode = otherContext.GetHashCode(); - - // Assert - Assert.AreEqual(contextHashCode, otherContextHashCode); - mocks.VerifyAll(); - } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLineImporterTest.cs =================================================================== diff -u -r507e30ebf13ba63fcedbe9a5b8457f302da26429 -rf01bfd8d4c0541a96d57071b397c39792a99da26 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLineImporterTest.cs (.../ReferenceLineImporterTest.cs) (revision 507e30ebf13ba63fcedbe9a5b8457f302da26429) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLineImporterTest.cs (.../ReferenceLineImporterTest.cs) (revision f01bfd8d4c0541a96d57071b397c39792a99da26) @@ -73,8 +73,7 @@ // Assert Assert.IsTrue(importSuccesful); - Assert.IsInstanceOf(assessmentSection.ReferenceLine); - Assert.AreSame(assessmentSection.ReferenceLine, referenceLineContext.WrappedData); + Assert.IsNotNull(assessmentSection.ReferenceLine); Point2D[] point2Ds = assessmentSection.ReferenceLine.Points.ToArray(); Assert.AreEqual(803, point2Ds.Length); Assert.AreEqual(193515.719, point2Ds[467].X, 1e-6); @@ -103,7 +102,7 @@ new ExpectedProgressNotification { Text = "Geïmporteerde data toevoegen aan het traject.", CurrentStep = 2, MaxNrOfSteps = 2 - }, + } }; var progressChangedCallCount = 0; var importer = new ReferenceLineImporter @@ -149,7 +148,6 @@ TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); Assert.IsFalse(importSuccesful); Assert.IsNull(assessmentSection.ReferenceLine); - Assert.IsNull(referenceLineContext.WrappedData); mocks.VerifyAll(); } @@ -177,7 +175,6 @@ TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); Assert.IsFalse(importSuccesful); Assert.IsNull(assessmentSection.ReferenceLine); - Assert.IsNull(referenceLineContext.WrappedData); mocks.VerifyAll(); } @@ -194,13 +191,13 @@ var failureMechanism1 = mocks.Stub(); failureMechanism1.Stub(fm => fm.Calculations).Return(new[] { - calculation1, + calculation1 }); var failureMechanism2 = mocks.Stub(); failureMechanism2.Stub(fm => fm.Calculations).Return(new[] { - calculation3, + calculation3 }); var assessmentSection = mocks.Stub(); @@ -234,7 +231,6 @@ // Assert Assert.IsFalse(importSuccesful); Assert.AreSame(originalReferenceLine, assessmentSection.ReferenceLine); - Assert.AreSame(assessmentSection.ReferenceLine, referenceLineContext.WrappedData); Assert.AreEqual("Bevestigen", messageBoxTitle); var expectedText = "Als u de referentielijn vervangt, zullen alle vakindelingen, berekende hydraulische randvoorwaarden en berekeningsresultaten worden verwijderd." + Environment.NewLine + @@ -369,7 +365,7 @@ new ExpectedProgressNotification { Text = "Verwijderen uitvoer van hydraulische randvoorwaarden.", CurrentStep = 4, MaxNrOfSteps = 4 - }, + } }; var progressChangedCallCount = 0; var importer = new ReferenceLineImporter(); @@ -491,8 +487,7 @@ // Assert Assert.IsTrue(importSuccesful); - Assert.IsInstanceOf(assessmentSection.ReferenceLine); - Assert.AreSame(assessmentSection.ReferenceLine, referenceLineContext.WrappedData); + Assert.IsNotNull(assessmentSection.ReferenceLine); Point2D[] point2Ds = assessmentSection.ReferenceLine.Points.ToArray(); Assert.AreEqual(803, point2Ds.Length); Assert.AreEqual(195203.563, point2Ds[321].X, 1e-6); @@ -538,17 +533,19 @@ calculation4 }); + var contextObserver = mocks.Stub(); + contextObserver.Expect(o => o.UpdateObserver()); + var assessmentSection = mocks.Stub(); assessmentSection.ReferenceLine = originalReferenceLine; assessmentSection.Stub(a => a.GetFailureMechanisms()).Return(new[] { failureMechanism1, failureMechanism2 }); - assessmentSection.Expect(section => section.NotifyObservers()); + assessmentSection.Expect(section => section.Attach(contextObserver)); + assessmentSection.Expect(section => section.NotifyObservers()).Do((Action)(() => contextObserver.UpdateObserver())); - var contextObserver = mocks.Stub(); - contextObserver.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); var path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "traject_10-2.shp"); @@ -593,7 +590,7 @@ var path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "traject_10-2.shp"); var referenceLineContext = new ReferenceLineContext(assessmentSection); - referenceLineContext.Parent.Attach(observer); + referenceLineContext.WrappedData.Attach(observer); var importer = new ReferenceLineImporter(); @@ -628,14 +625,15 @@ calculation1 }); + var contextObserver = mocks.StrictMock(); var assessmentSection = mocks.Stub(); assessmentSection.ReferenceLine = originalReferenceLine; assessmentSection.Stub(a => a.GetFailureMechanisms()).Return(new[] { failureMechanism1 }); + assessmentSection.Expect(section => section.Attach(contextObserver)); - var contextObserver = mocks.StrictMock(); mocks.ReplayAll(); var path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "traject_10-2.shp"); @@ -701,17 +699,19 @@ calculation4 }); + var contextObserver = mocks.Stub(); + contextObserver.Expect(o => o.UpdateObserver()); + var assessmentSection = mocks.Stub(); assessmentSection.ReferenceLine = originalReferenceLine; assessmentSection.Stub(a => a.GetFailureMechanisms()).Return(new[] { failureMechanism1, failureMechanism2 }); - assessmentSection.Expect(section => section.NotifyObservers()); + assessmentSection.Expect(section => section.Attach(contextObserver)); + assessmentSection.Expect(section => section.NotifyObservers()).Do((Action)(() => contextObserver.UpdateObserver())); - var contextObserver = mocks.Stub(); - contextObserver.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); var path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "traject_10-2.shp"); Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj =================================================================== diff -u -r507e30ebf13ba63fcedbe9a5b8457f302da26429 -rf01bfd8d4c0541a96d57071b397c39792a99da26 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj (.../Ringtoets.Common.IO.Test.csproj) (revision 507e30ebf13ba63fcedbe9a5b8457f302da26429) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj (.../Ringtoets.Common.IO.Test.csproj) (revision f01bfd8d4c0541a96d57071b397c39792a99da26) @@ -59,6 +59,10 @@ {3bbfd65b-b277-4e50-ae6d-bd24c3434609} Core.Common.Base + + {9A2D67E6-26AC-4D17-B11A-2B4372F2F572} + Core.Common.Controls + {e344867e-9ac9-44c8-88a5-8185681679a9} Core.Common.IO Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs =================================================================== diff -u -rf72f906a6875250a4378945ce814997ff8aaf1a7 -rf01bfd8d4c0541a96d57071b397c39792a99da26 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision f72f906a6875250a4378945ce814997ff8aaf1a7) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision f01bfd8d4c0541a96d57071b397c39792a99da26) @@ -312,7 +312,7 @@ { Text = context => RingtoetsCommonDataResources.ReferenceLine_DisplayName, Image = context => RingtoetsCommonFormsResources.ReferenceLineIcon, - ForeColor = context => context.WrappedData == null ? + ForeColor = context => context.WrappedData.ReferenceLine == null ? Color.FromKnownColor(KnownColor.GrayText) : Color.FromKnownColor(KnownColor.ControlText), ContextMenuStrip = (nodeData, parentData, treeViewControl) => Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/TreeNodeInfos/AssessmentSectionTreeNodeInfoTest.cs =================================================================== diff -u -r63fbdd5525927fbf9d63925eef9da8e17a0d7b44 -rf01bfd8d4c0541a96d57071b397c39792a99da26 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/TreeNodeInfos/AssessmentSectionTreeNodeInfoTest.cs (.../AssessmentSectionTreeNodeInfoTest.cs) (revision 63fbdd5525927fbf9d63925eef9da8e17a0d7b44) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/TreeNodeInfos/AssessmentSectionTreeNodeInfoTest.cs (.../AssessmentSectionTreeNodeInfoTest.cs) (revision f01bfd8d4c0541a96d57071b397c39792a99da26) @@ -180,8 +180,7 @@ // Assert Assert.AreEqual(22, objects.Length); var referenceLineContext = (ReferenceLineContext) objects[0]; - Assert.AreSame(assessmentSection.ReferenceLine, referenceLineContext.WrappedData); - Assert.AreSame(assessmentSection, referenceLineContext.Parent); + Assert.AreSame(assessmentSection, referenceLineContext.WrappedData); var contributionContext = (FailureMechanismContributionContext) objects[1]; Assert.AreSame(contribution, contributionContext.WrappedData);