Index: Core/Common/src/Core.Common.Base/Core.Common.Base.csproj
===================================================================
diff -u -r1b4f4720632f9a691837fa97e777a4637b6739c8 -r0dbf681489bfe1d279eef99030f9ee13abebbb23
--- Core/Common/src/Core.Common.Base/Core.Common.Base.csproj (.../Core.Common.Base.csproj) (revision 1b4f4720632f9a691837fa97e777a4637b6739c8)
+++ Core/Common/src/Core.Common.Base/Core.Common.Base.csproj (.../Core.Common.Base.csproj) (revision 0dbf681489bfe1d279eef99030f9ee13abebbb23)
@@ -97,6 +97,7 @@
+
Index: Core/Common/src/Core.Common.Base/Observer.cs
===================================================================
diff -u
--- Core/Common/src/Core.Common.Base/Observer.cs (revision 0)
+++ Core/Common/src/Core.Common.Base/Observer.cs (revision 0dbf681489bfe1d279eef99030f9ee13abebbb23)
@@ -0,0 +1,84 @@
+// Copyright (C) Stichting Deltares 2016. 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 Lesser 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 Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser 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;
+
+namespace Core.Common.Base
+{
+ ///
+ /// Class that implements the pattern.
+ ///
+ ///
+ /// The being observed by instances of this class can be dynamically changed.
+ ///
+ public class Observer : IObserver, IDisposable
+ {
+ private readonly Action updateObserverAction;
+ private IObservable observable;
+
+ ///
+ /// Creates a new instance of the class.
+ ///
+ /// The action to perform on notifications coming from .
+ public Observer(Action updateObserverAction)
+ {
+ this.updateObserverAction = updateObserverAction;
+ }
+
+ ///
+ /// Gets or sets the object to observe.
+ ///
+ public IObservable Observable
+ {
+ get
+ {
+ return observable;
+ }
+ set
+ {
+ if (observable != null)
+ {
+ observable.Detach(this);
+ }
+
+ observable = value;
+
+ if (observable != null)
+ {
+ observable.Attach(this);
+ }
+ }
+ }
+
+ public void UpdateObserver()
+ {
+ updateObserverAction();
+ }
+
+ public void Dispose()
+ {
+ if (observable != null)
+ {
+ observable.Detach(this);
+ }
+ }
+ }
+}
\ No newline at end of file
Index: Core/Common/test/Core.Common.Base.Test/Core.Common.Base.Test.csproj
===================================================================
diff -u -r1b4f4720632f9a691837fa97e777a4637b6739c8 -r0dbf681489bfe1d279eef99030f9ee13abebbb23
--- Core/Common/test/Core.Common.Base.Test/Core.Common.Base.Test.csproj (.../Core.Common.Base.Test.csproj) (revision 1b4f4720632f9a691837fa97e777a4637b6739c8)
+++ Core/Common/test/Core.Common.Base.Test/Core.Common.Base.Test.csproj (.../Core.Common.Base.Test.csproj) (revision 0dbf681489bfe1d279eef99030f9ee13abebbb23)
@@ -91,6 +91,7 @@
+
Index: Core/Common/test/Core.Common.Base.Test/ObserverTest.cs
===================================================================
diff -u
--- Core/Common/test/Core.Common.Base.Test/ObserverTest.cs (revision 0)
+++ Core/Common/test/Core.Common.Base.Test/ObserverTest.cs (revision 0dbf681489bfe1d279eef99030f9ee13abebbb23)
@@ -0,0 +1,103 @@
+// Copyright (C) Stichting Deltares 2016. 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 Lesser 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 Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser 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 NUnit.Framework;
+
+namespace Core.Common.Base.Test
+{
+ [TestFixture]
+ public class ObserverTest
+ {
+ [Test]
+ public void DefaultConstructor_DefaultValues()
+ {
+ // Call
+ var observer = new Observer(() => { });
+
+ // Assert
+ Assert.IsInstanceOf(observer);
+ Assert.IsNull(observer.Observable);
+ }
+
+ [Test]
+ public void Observer_WithObservable_NotifyObserversResultsInPerformingUpdateObserversAction()
+ {
+ // Setup
+ var counter = 0;
+ var observable = new TestObservable();
+ var observer = new Observer(() => counter++)
+ {
+ Observable = observable
+ };
+
+ // Call
+ observable.NotifyObservers();
+
+ // Assert
+ Assert.AreEqual(1, counter);
+ }
+
+ [Test]
+ public void Observer_WithObservableSetAndThenUnset_NotifyObserversNoLongerResultsInPerformingUpdateObserversAction()
+ {
+ // Setup
+ var counter = 0;
+ var observable = new TestObservable();
+ var observer = new Observer(() => counter++)
+ {
+ Observable = observable
+ };
+
+ observer.Observable = null;
+
+ // Call
+ observable.NotifyObservers();
+
+ // Assert
+ Assert.AreEqual(0, counter);
+ }
+
+ [Test]
+ public void Observer_WithObservableSetAndThenDisposed_NotifyObserversNoLongerResultsInPerformingUpdateObserversAction()
+ {
+ // Setup
+ var counter = 0;
+ var observable = new TestObservable();
+ var observer = new Observer(() => counter++)
+ {
+ Observable = observable
+ };
+
+ observer.Dispose();
+
+ // Call
+ observable.NotifyObservers();
+
+ // Assert
+ Assert.AreEqual(0, counter);
+ }
+
+ private class TestObservable : Observable
+ {
+
+ }
+ }
+}
Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs
===================================================================
diff -u -r13919719112d513d5782320d8c0829c69b5e8d9e -r0dbf681489bfe1d279eef99030f9ee13abebbb23
--- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 13919719112d513d5782320d8c0829c69b5e8d9e)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 0dbf681489bfe1d279eef99030f9ee13abebbb23)
@@ -300,44 +300,6 @@
}
}
- private class Observer : IObserver
- {
- private readonly Action updateObserverAction;
- private IObservable observable;
-
- public Observer(Action updateObserverAction)
- {
- this.updateObserverAction = updateObserverAction;
- }
-
- public IObservable Observable
- {
- get
- {
- return observable;
- }
- set
- {
- if (observable != null)
- {
- observable.Detach(this);
- }
-
- observable = value;
-
- if (observable != null)
- {
- observable.Attach(this);
- }
- }
- }
-
- public void UpdateObserver()
- {
- updateObserverAction();
- }
- }
-
private class PipingCalculationRow
{
private readonly PipingCalculation pipingCalculation;