Index: Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs =================================================================== diff -u -r99f9004206bfb9de084275d749b7aeccafd6da18 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs (.../MapControl.cs) (revision 99f9004206bfb9de084275d749b7aeccafd6da18) +++ Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs (.../MapControl.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -29,7 +29,6 @@ using Core.Components.DotSpatial.Layer; using Core.Components.DotSpatial.Layer.BruTile; using Core.Components.DotSpatial.MapFunctions; -using Core.Components.Gis; using Core.Components.Gis.Data; using Core.Components.Gis.Exceptions; using Core.Components.Gis.Forms; @@ -50,7 +49,6 @@ private readonly Cursor defaultCursor = Cursors.Default; private readonly RecursiveObserver mapDataCollectionObserver; private readonly Observer backGroundMapDataObserver; - private readonly Observer mapDataContainerObserver; private readonly IList drawnMapDataList = new List(); private readonly WmtsBackgroundLayerStatus backgroundLayerStatus = new WmtsBackgroundLayerStatus(); @@ -60,7 +58,6 @@ private RdNewMouseCoordinatesMapExtension mouseCoordinatesMapExtension; private MapDataCollection data; - private BackgroundMapDataContainer backgroundMapDataContainer; private WmtsMapData backgroundMapData; /// @@ -73,7 +70,6 @@ mapDataCollectionObserver = new RecursiveObserver(HandleMapDataCollectionChange, mdc => mdc.Collection); backGroundMapDataObserver = new Observer(HandleBackgroundMapDataChange); - mapDataContainerObserver = new Observer(HandleMapDataContainerChange); } public bool IsPanningEnabled { get; private set; } @@ -106,11 +102,11 @@ } } - public BackgroundMapDataContainer BackgroundMapData + public WmtsMapData BackgroundMapData { get { - return backgroundMapDataContainer; + return backgroundMapData; } set { @@ -119,11 +115,8 @@ ClearAllMapData(false); } - backgroundMapDataContainer = value; - backgroundMapData = (WmtsMapData) backgroundMapDataContainer?.MapData; - + backgroundMapData = value; backGroundMapDataObserver.Observable = backgroundMapData; - mapDataContainerObserver.Observable = backgroundMapDataContainer; if (HasMapData) { @@ -198,28 +191,6 @@ } } - private void HandleMapDataContainerChange() - { - if (!ReferenceEquals(backgroundMapData, backgroundMapDataContainer.MapData)) - { - backgroundMapData = (WmtsMapData) backgroundMapDataContainer.MapData; - backGroundMapDataObserver.Observable = backgroundMapData; - - if (backgroundMapData != null) - { - HandleBackgroundMapDataChange(); - } - else - { - map.Layers.Remove(backgroundLayerStatus.BackgroundLayer); - backgroundLayerStatus.ClearConfiguration(); - - map.Projection = MapDataConstants.FeatureBasedMapDataCoordinateSystem; - ReprojectLayers(map.Layers); - } - } - } - private void HandleBackgroundMapDataChange() { if (backgroundLayerStatus.BackgroundLayer != null) Index: Core/Components/src/Core.Components.Gis.Forms/IMapControl.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Core/Components/src/Core.Components.Gis.Forms/IMapControl.cs (.../IMapControl.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Core/Components/src/Core.Components.Gis.Forms/IMapControl.cs (.../IMapControl.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -52,7 +52,7 @@ /// /// Gets or sets the data to show in the background of the . /// - BackgroundMapDataContainer BackgroundMapData { get; set; } + WmtsMapData BackgroundMapData { get; set; } /// /// Zooms to a level so that all visible layers are in view. Index: Core/Components/test/Core.Components.DotSpatial.Forms.Test/MapControlTest.cs =================================================================== diff -u -r396d39591f11aad05a6cd0e66ead43fefd9713c3 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Core/Components/test/Core.Components.DotSpatial.Forms.Test/MapControlTest.cs (.../MapControlTest.cs) (revision 396d39591f11aad05a6cd0e66ead43fefd9713c3) +++ Core/Components/test/Core.Components.DotSpatial.Forms.Test/MapControlTest.cs (.../MapControlTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -35,7 +35,6 @@ using Core.Components.BruTile.TestUtil; using Core.Components.DotSpatial.Layer.BruTile; using Core.Components.DotSpatial.MapFunctions; -using Core.Components.Gis; using Core.Components.Gis.Data; using Core.Components.Gis.Exceptions; using Core.Components.Gis.Features; @@ -105,59 +104,18 @@ [Test] [TestCase(true)] [TestCase(false)] - public void GivenMapControlWithEmptyBackgroundMapDataContainer_WhenMapDataSetAndNotified_ThenMapControlUpdated(bool isVisible) - { - // Given - WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - - var mapDataContainer = new BackgroundMapDataContainer - { - IsVisible = isVisible, - Transparency = (RoundedDouble) 0.25 - }; - - using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) - using (var map = new MapControl - { - BackgroundMapData = mapDataContainer - }) - { - // When - mapDataContainer.MapData = backgroundMapData; - mapDataContainer.NotifyObservers(); - - // Then - var mapView = map.Controls.OfType().First(); - Assert.AreEqual(1, mapView.Layers.Count); - BruTileLayer bruTileLayer = (BruTileLayer) mapView.Layers[0]; - Assert.AreEqual(isVisible, bruTileLayer.IsVisible); - Assert.AreEqual(backgroundMapData.Transparency.Value, bruTileLayer.Transparency); - - Assert.IsTrue(bruTileLayer.Projection.Equals(mapView.Projection), - "The background layer's Project should define the Projection of 'mapView'."); - } - } - - [Test] - [TestCase(true)] - [TestCase(false)] public void GivenMapControlWithoutBackgroundMapData_WhenBackgroundMapDataSet_ThenMapControlUpdated(bool isVisible) { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); + backgroundMapData.IsVisible = isVisible; + backgroundMapData.Transparency = (RoundedDouble) 0.25; - var mapDataContainer = new BackgroundMapDataContainer - { - IsVisible = isVisible, - Transparency = (RoundedDouble) 0.25, - MapData = backgroundMapData - }; - using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl()) { // When - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = backgroundMapData; // Then var mapView = map.Controls.OfType().First(); @@ -173,55 +131,14 @@ [Test] [TestCaseSource(nameof(GetProblematicTileSourceFactoryTestCaseData), new object[] - { - "MapControlWithEmptyBackgroundMapData" - }) - ] - public void GivenMapControlWithEmptyBackgroundMapDataContainer_WhenTileSourceFactoryProblematic_ThenLogErrorAndDoNotAddBackgroundLayer(ITileSourceFactory problematicFactory) { - // Given - WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var container = new BackgroundMapDataContainer(); - - using (new UseCustomTileSourceFactoryConfig(problematicFactory)) - using (var map = new MapControl - { - BackgroundMapData = container - }) - { - var mapView = map.Controls.OfType().First(); - var originalProjection = mapView.Projection; - - // When - Action call = () => - { - container.MapData = backgroundMapData; - container.NotifyObservers(); - }; - - // Then - const string expectedMessage = "Verbinden met WMTS is mislukt waardoor geen kaartgegevens ingeladen kunnen worden. De achtergrondkaart kan nu niet getoond worden."; - TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); - - Assert.AreEqual(0, mapView.Layers.Count); - - Assert.AreSame(originalProjection, mapView.Projection); - } - } - - [Test] - [TestCaseSource(nameof(GetProblematicTileSourceFactoryTestCaseData), new object[] - { "MapControlWithoutBackgroundMapData" })] - public void GivenMapControlWithoutBackgroundMapData_WhenTileSourceFactoryProblematic_ThenLogErrorAndDoNotAddBackgroundLayer(ITileSourceFactory problematicFactory) + public void GivenMapControlWithoutBackgroundMapData_WhenTileSourceFactoryProblematic_ThenLogErrorAndDoNotAddBackgroundLayer( + ITileSourceFactory problematicFactory) { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var container = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(problematicFactory)) using (var map = new MapControl()) @@ -230,7 +147,7 @@ var originalProjection = mapView.Projection; // When - Action call = () => map.BackgroundMapData = container; + Action call = () => map.BackgroundMapData = backgroundMapData; // Then const string expectedMessage = "Verbinden met WMTS is mislukt waardoor geen kaartgegevens ingeladen kunnen worden. " @@ -244,57 +161,11 @@ } [Test] - public void GivenMapControlWithEmptyBackgroundMapDataContainer_WhenSettingBackgroundAndFailingToCreateCache_ThenLogErrorAndDoNotAddBackgroundLayer() - { - // Given - string folderWithoutPermission = Path.GetRandomFileName(); - WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer(); - - using (new UseCustomSettingsHelper(new TestSettingsHelper - { - ApplicationLocalUserSettingsDirectory = Path.Combine(rootPath, folderWithoutPermission) - })) - using (var disposeHelper = new DirectoryDisposeHelper(rootPath, folderWithoutPermission, tileCachesFolder)) - using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) - using (var map = new MapControl - { - BackgroundMapData = mapDataContainer - }) - { - var mapView = map.Controls.OfType().First(); - var originalProjection = mapView.Projection; - - disposeHelper.LockDirectory(FileSystemRights.Write); - - // When - Action call = () => - { - mapDataContainer.MapData = backgroundMapData; - mapDataContainer.NotifyObservers(); - }; - - // Then - const string expectedMessage = "Configuratie van kaartgegevens hulpbestanden is mislukt. " - + "De achtergrondkaart kan nu niet getoond worden."; - TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); - - Assert.AreEqual(0, mapView.Layers.Count); - - Assert.AreSame(originalProjection, mapView.Projection); - } - } - - [Test] public void GivenMapControlWithoutBackgroundMapData_WhenSettingBackgroundAndFailingToCreateCache_ThenLogErrorAndDoNotAddBackgroundLayer() { // Given string folderWithoutPermission = Path.GetRandomFileName(); WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomSettingsHelper(new TestSettingsHelper { @@ -310,7 +181,7 @@ disposeHelper.LockDirectory(FileSystemRights.Write); // When - Action call = () => map.BackgroundMapData = mapDataContainer; + Action call = () => map.BackgroundMapData = backgroundMapData; // Then const string expectedMessage = "Configuratie van kaartgegevens hulpbestanden is mislukt. " @@ -332,16 +203,12 @@ { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(problematicFactory)) using (var map = new MapControl()) { // Precondition - Action setAndCauseFailingInitialization = () => map.BackgroundMapData = mapDataContainer; + Action setAndCauseFailingInitialization = () => map.BackgroundMapData = backgroundMapData; const string expectedMessage = "Verbinden met WMTS is mislukt waardoor geen kaartgegevens ingeladen kunnen worden. " + "De achtergrondkaart kan nu niet getoond worden."; TestHelper.AssertLogMessageIsGenerated(setAndCauseFailingInitialization, expectedMessage, 1); @@ -370,10 +237,6 @@ string settingsDirectory = Path.Combine(rootPath, folderWithoutPermission); WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomSettingsHelper(new TestSettingsHelper { @@ -386,7 +249,7 @@ using (new DirectoryPermissionsRevoker(settingsDirectory, FileSystemRights.Write)) { // Precondition - Action setAndCauseCacheInitializationFailure = () => map.BackgroundMapData = mapDataContainer; + Action setAndCauseCacheInitializationFailure = () => map.BackgroundMapData = backgroundMapData; const string expectedMessage = "Configuratie van kaartgegevens hulpbestanden is mislukt. " + "De achtergrondkaart kan nu niet getoond worden."; TestHelper.AssertLogMessageIsGenerated(setAndCauseCacheInitializationFailure, expectedMessage, 1); @@ -414,10 +277,6 @@ { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(problematicFactory)) using (var map = new MapControl()) @@ -426,7 +285,7 @@ var originalProjection = mapView.Projection; // Precondition - Action setAndCauseFailToInitializeLayer = () => map.BackgroundMapData = mapDataContainer; + Action setAndCauseFailToInitializeLayer = () => map.BackgroundMapData = backgroundMapData; const string expectedMessage = "Verbinden met WMTS is mislukt waardoor geen kaartgegevens ingeladen kunnen worden. " + "De achtergrondkaart kan nu niet getoond worden."; TestHelper.AssertLogMessageIsGenerated(setAndCauseFailToInitializeLayer, expectedMessage, 1); @@ -450,10 +309,6 @@ string folderWithoutPermission = Path.GetRandomFileName(); WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomSettingsHelper(new TestSettingsHelper { @@ -469,7 +324,7 @@ disposeHelper.LockDirectory(FileSystemRights.Write); // Precondition - Action setAndCauseCacheInitializationFailure = () => map.BackgroundMapData = mapDataContainer; + Action setAndCauseCacheInitializationFailure = () => map.BackgroundMapData = backgroundMapData; const string expectedMessage = "Configuratie van kaartgegevens hulpbestanden is mislukt. " + "De achtergrondkaart kan nu niet getoond worden."; TestHelper.AssertLogMessageIsGenerated(setAndCauseCacheInitializationFailure, expectedMessage, 1); @@ -487,51 +342,6 @@ } [Test] - public void GivenMapControlWithoutBackgroundMapData_WhenEmptyBackgroundMapDataContainerSet_NoChangedToMap() - { - // Given - using (var map = new MapControl()) - { - var mapView = map.Controls.OfType().First(); - ProjectionInfo originalProjection = mapView.Projection; - - var mapDataContainer = new BackgroundMapDataContainer(); - - // When - map.BackgroundMapData = mapDataContainer; - - // Then - Assert.AreEqual(0, mapView.Layers.Count); - - Assert.AreEqual(originalProjection, mapView.Projection); - } - } - - [Test] - public void GivenMapControlWithoutBackgroundMapData_WhenUnconfiguredMapDataContainerSetAndNotified_NoChangedToMap() - { - // Given - var mapDataContainer = new BackgroundMapDataContainer(); - using (var map = new MapControl - { - BackgroundMapData = mapDataContainer - }) - { - var mapView = map.Controls.OfType().First(); - ProjectionInfo originalProjection = mapView.Projection; - - // When - mapDataContainer.MapData = WmtsMapData.CreateUnconnectedMapData(); - mapDataContainer.NotifyObservers(); - - // Then - Assert.AreEqual(0, mapView.Layers.Count); - - Assert.AreEqual(originalProjection, mapView.Projection); - } - } - - [Test] public void GivenMapControlWithoutBackgroundMapData_WhenUnconfiguredBackgroundMapDataSet_NoChangedToMap() { // Given @@ -541,13 +351,9 @@ ProjectionInfo originalProjection = mapView.Projection; WmtsMapData backgroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; // When - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = backgroundMapData; // Then Assert.AreEqual(0, mapView.Layers.Count); @@ -557,64 +363,21 @@ } [Test] - public void GivenMapControlWithBackgroundMapData_WhenUnconfiguredMapDataSetAndNotified_ThenMapControlUpdated() - { - // Given - WmtsMapData originalBackGroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - IsVisible = true, - Transparency = (RoundedDouble) 0.25, - MapData = originalBackGroundMapData - }; - - using (new UseCustomTileSourceFactoryConfig(originalBackGroundMapData)) - using (var map = new MapControl()) - - { - var mapView = map.Controls.OfType().First(); - ProjectionInfo originalProjection = mapView.Projection; - - map.BackgroundMapData = mapDataContainer; - - // Precondition - Assert.AreEqual(1, mapView.Layers.Count); - var layer = (BruTileLayer) mapView.Layers[0]; - Assert.AreEqual(true, layer.IsVisible); - Assert.AreEqual(0.25, layer.Transparency); - Assert.AreEqual(layer.Projection, mapView.Projection); - - // When - var newBackGroundMapData = WmtsMapData.CreateUnconnectedMapData(); - mapDataContainer.MapData = newBackGroundMapData; - mapDataContainer.NotifyObservers(); - - // Then - Assert.AreEqual(0, mapView.Layers.Count); - Assert.IsTrue(originalProjection.Equals(mapView.Projection)); - } - } - - [Test] public void GivenMapControlWithBackgroundMapData_WhenBackgroundMapDataSetToUnconfigured_ThenMapControlUpdated() { // Given - WmtsMapData originalBackGroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - IsVisible = true, - Transparency = (RoundedDouble) 0.25, - MapData = originalBackGroundMapData - }; + WmtsMapData originalBackgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); + originalBackgroundMapData.IsVisible = true; + originalBackgroundMapData.Transparency = (RoundedDouble)0.25; - using (new UseCustomTileSourceFactoryConfig(originalBackGroundMapData)) + using (new UseCustomTileSourceFactoryConfig(originalBackgroundMapData)) using (var map = new MapControl()) { var mapView = map.Controls.OfType().First(); ProjectionInfo originalProjection = mapView.Projection; - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = originalBackgroundMapData; // Precondition Assert.AreEqual(1, mapView.Layers.Count); @@ -624,12 +387,8 @@ Assert.AreEqual(layer.Projection, mapView.Projection); // When - var newBackGroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var newMapDataContainer = new BackgroundMapDataContainer - { - MapData = newBackGroundMapData - }; - map.BackgroundMapData = newMapDataContainer; + var newBackgroundMapData = WmtsMapData.CreateUnconnectedMapData(); + map.BackgroundMapData= newBackgroundMapData; // Then Assert.AreEqual(0, mapView.Layers.Count); @@ -638,76 +397,29 @@ } [Test] - public void GivenContainerWithUnconfiguredMapData_WhenMapDataSetAndNotified_ThenMapControlUpdated() - { - // Given - var newBackGroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - - using (new UseCustomTileSourceFactoryConfig(newBackGroundMapData)) - using (var map = new MapControl()) - { - WmtsMapData originalBackGroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = originalBackGroundMapData - }; - - var mapView = map.Controls.OfType().First(); - ProjectionInfo originalProjection = mapView.Projection; - - map.BackgroundMapData = mapDataContainer; - - // Precondition - Assert.AreEqual(0, mapView.Layers.Count); - Assert.IsTrue(originalProjection.Equals(mapView.Projection)); - - // When - mapDataContainer.MapData = newBackGroundMapData; - mapDataContainer.IsVisible = true; - mapDataContainer.Transparency = (RoundedDouble) 0.75; - mapDataContainer.NotifyObservers(); - - // Then - Assert.AreEqual(1, mapView.Layers.Count); - var layer = (BruTileLayer) mapView.Layers[0]; - Assert.AreEqual(true, layer.IsVisible); - Assert.AreEqual(0.75, layer.Transparency); - Assert.IsTrue(layer.Projection.Equals(mapView.Projection)); - } - } - - [Test] public void GivenMapControlWithUnconfiguredBackgroundMapData_WhenBackgroundMapDataSet_ThenMapControlUpdated() { // Given - var newBackGroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var newMapDataContainer = new BackgroundMapDataContainer - { - IsVisible = true, - Transparency = (RoundedDouble) 0.75, - MapData = newBackGroundMapData - }; + var newBackgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); + newBackgroundMapData.IsVisible = true; + newBackgroundMapData.Transparency = (RoundedDouble) 0.75; - using (new UseCustomTileSourceFactoryConfig(newBackGroundMapData)) + using (new UseCustomTileSourceFactoryConfig(newBackgroundMapData)) using (var map = new MapControl()) { - WmtsMapData originalBackGroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var originalMapDataContainer = new BackgroundMapDataContainer - { - MapData = originalBackGroundMapData - }; + WmtsMapData originalBackgroundMapData = WmtsMapData.CreateUnconnectedMapData(); var mapView = map.Controls.OfType().First(); ProjectionInfo originalProjection = mapView.Projection; - map.BackgroundMapData = originalMapDataContainer; + map.BackgroundMapData = originalBackgroundMapData; // Precondition Assert.AreEqual(0, mapView.Layers.Count); Assert.IsTrue(originalProjection.Equals(mapView.Projection)); // When - map.BackgroundMapData = newMapDataContainer; + map.BackgroundMapData = newBackgroundMapData; // Then Assert.AreEqual(1, mapView.Layers.Count); @@ -723,17 +435,13 @@ { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - IsVisible = true, - Transparency = (RoundedDouble) 0.25, - MapData = backgroundMapData - }; + backgroundMapData.IsVisible = true; + backgroundMapData.Transparency = (RoundedDouble) 0.25; using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl { - BackgroundMapData = mapDataContainer + BackgroundMapData = backgroundMapData }) { var mapView = map.Controls.OfType().First(); @@ -755,84 +463,16 @@ } [Test] - public void GivenMapDataContainerWithUnconfiguredMapDataAndMapWithMapDataCollection_WhenMapDataSetAndNotified_ThenLayerIsReusedAndUpdatedFeaturesReprojected() - { - // Given - var newBackgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var startingBackgroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = startingBackgroundMapData - }; - - using (new UseCustomTileSourceFactoryConfig(newBackgroundMapData)) - using (var map = new MapControl - { - BackgroundMapData = mapDataContainer - }) - { - var mapView = map.Controls.OfType().First(); - - var mapPointData = new MapPointData("Points") - { - Features = new[] - { - new MapFeature(new[] - { - new MapGeometry(new[] - { - new[] - { - new Point2D(1.1, 2.2) - } - }) - }) - } - }; - var mapDataCollection = new MapDataCollection("Root collection"); - mapDataCollection.Add(mapPointData); - - map.Data = mapDataCollection; - - // Precondition - IMapLayer[] layersBeforeUpdate = mapView.Layers.ToArray(); - var pointFeatureLayer = (FeatureLayer) layersBeforeUpdate[0]; - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(1.1, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X); - Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y); - - // When - mapDataContainer.MapData = newBackgroundMapData; - mapDataContainer.NotifyObservers(); - - // Then - Assert.AreEqual(2, mapView.Layers.Count); - CollectionAssert.AreEqual(layersBeforeUpdate, mapView.Layers.Skip(1)); - Assert.IsInstanceOf(mapView.Layers[0]); - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(523414.9114786592, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X, - "Coordinate does not match. (Ball park expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - Assert.AreEqual(5313600.4932731427, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y, - "Coordinate does not match (Estimate of expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - } - } - - [Test] public void GivenMapWithUnconfiguredBackgroundAndMapDataCollection_WhenBackgroundMapDataConfigured_ThenLayerIsReusedAndUpdatedFeaturesReprojected() { // Given var newBackgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); var startingBackgroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = startingBackgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(newBackgroundMapData)) using (var map = new MapControl { - BackgroundMapData = mapDataContainer + BackgroundMapData = startingBackgroundMapData }) { var mapView = map.Controls.OfType().First(); @@ -885,86 +525,15 @@ } [Test] - public void GivenContainerWithBackgroundAndMapWithMapDataCollection_WhenMapDataRemovedAndNotified_ThenLayerIsReusedAndUpdatedFeaturesReprojected() - { - // Given - var startingBackgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = startingBackgroundMapData - }; - - using (new UseCustomTileSourceFactoryConfig(startingBackgroundMapData)) - using (var map = new MapControl - { - BackgroundMapData = mapDataContainer - }) - { - var mapView = map.Controls.OfType().First(); - - var mapPointData = new MapPointData("Points") - { - Features = new[] - { - new MapFeature(new[] - { - new MapGeometry(new[] - { - new[] - { - new Point2D(1.1, 2.2) - } - }) - }) - } - }; - var mapDataCollection = new MapDataCollection("Root collection"); - mapDataCollection.Add(mapPointData); - - map.Data = mapDataCollection; - - // Precondition - Assert.AreEqual(2, mapView.Layers.Count); - IMapLayer[] layersBeforeUpdate = mapView.Layers.ToArray(); - Assert.IsInstanceOf(mapView.Layers[0]); - var pointFeatureLayer = (FeatureLayer) layersBeforeUpdate[1]; - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(523414.9114786592, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X, - "Coordinate does not match. (Ball park expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - Assert.AreEqual(5313600.4932731427, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y, - "Coordinate does not match (Estimate of expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - - // When - mapDataContainer.MapData = null; - mapDataContainer.NotifyObservers(); - - // Then - Assert.IsTrue(MapDataConstants.FeatureBasedMapDataCoordinateSystem.Equals(mapView.Projection)); - Assert.AreEqual(1, mapView.Layers.Count); - CollectionAssert.DoesNotContain(mapView.Layers, layersBeforeUpdate[0]); - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(1.1, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X, 1e-6, - "Minimal drift is acceptable (if it becomes a problem, we need to keep original coordinates in the layer)."); - Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y, 1e-6, - "Minimal drift is acceptable (if it becomes a problem, we need to keep original coordinates in the layer)."); - } - } - - [Test] public void GivenMapWithBackgroundAndMapDataCollection_WhenBackgroundMapDataConfigurationRemoved_ThenLayerIsReusedAndUpdatedFeaturesReprojected() { // Given - var startingBackgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = startingBackgroundMapData - }; + var backgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - using (new UseCustomTileSourceFactoryConfig(startingBackgroundMapData)) + using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl { - BackgroundMapData = mapDataContainer + BackgroundMapData = backgroundMapData }) { var mapView = map.Controls.OfType().First(); @@ -1003,8 +572,8 @@ "Coordinate does not match (Estimate of expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); // When - startingBackgroundMapData.RemoveConfiguration(); - startingBackgroundMapData.NotifyObservers(); + backgroundMapData.RemoveConfiguration(); + backgroundMapData.NotifyObservers(); // Then Assert.IsTrue(MapDataConstants.FeatureBasedMapDataCoordinateSystem.Equals(mapView.Projection)); @@ -1019,69 +588,10 @@ } [Test] - public void GivenContainerWithoutMapData_WhenMapDataSetAndNotified_ThenDataLayersReprojected() - { - // Given - WmtsMapData backgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer(); - - using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) - using (var map = new MapControl - { - BackgroundMapData = mapDataContainer - }) - { - var mapDataCollection = new MapDataCollection("A"); - mapDataCollection.Add(new MapPointData("points") - { - Features = new[] - { - new MapFeature(new[] - { - new MapGeometry(new[] - { - new[] - { - new Point2D(1.1, 2.2) - } - }) - }) - } - }); - map.Data = mapDataCollection; - - // Precondition - var mapView = map.Controls.OfType().First(); - var pointFeatureLayer = (FeatureLayer) mapView.Layers[0]; - Assert.AreEqual(1, mapView.Layers.Count); - Assert.AreEqual(1.1, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X); - Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y); - - // When - mapDataContainer.MapData = backgroundMapData; - mapDataContainer.NotifyObservers(); - - // Then - Assert.AreEqual(2, mapView.Layers.Count); - Assert.IsInstanceOf(mapView.Layers[0]); - pointFeatureLayer = (FeatureLayer) mapView.Layers[1]; - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(523414.9114786592, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X, - "Coordinate does not match. (Ball park expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - Assert.AreEqual(5313600.4932731427, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y, - "Coordinate does not match (Estimate of expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - } - } - - [Test] public void GivenMapControlWithData_WhenBackgroundMapDataSet_ThenDataLayersReprojected() { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl()) @@ -1113,7 +623,7 @@ Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y); // When - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = backgroundMapData; // Then Assert.AreEqual(2, mapView.Layers.Count); @@ -1128,66 +638,10 @@ } [Test] - public void GivenContainerWithoutMapData_WhenUnconfiguredBackgroundMapDataSetAndNotified_NoChangesToLayerConfiguration() - { - // Given - WmtsMapData backgroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var mapDataContainer = new BackgroundMapDataContainer(); - - using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) - using (var map = new MapControl - { - BackgroundMapData = mapDataContainer - }) - { - var mapDataCollection = new MapDataCollection("A"); - mapDataCollection.Add(new MapPointData("points") - { - Features = new[] - { - new MapFeature(new[] - { - new MapGeometry(new[] - { - new[] - { - new Point2D(1.1, 2.2) - } - }) - }) - } - }); - map.Data = mapDataCollection; - - // Precondition - var mapView = map.Controls.OfType().First(); - var pointFeatureLayer = (FeatureLayer) mapView.Layers[0]; - Assert.AreEqual(1, mapView.Layers.Count); - Assert.AreEqual(1.1, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X); - Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y); - - // When - mapDataContainer.MapData = backgroundMapData; - mapDataContainer.NotifyObservers(); - - // Then - Assert.AreEqual(1, mapView.Layers.Count); - pointFeatureLayer = (FeatureLayer) mapView.Layers[0]; - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(1.1, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X); - Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y); - } - } - - [Test] public void GivenMapControlWithData_WhenUnconfiguredBackgroundMapDataSet_NoChangesToLayerConfiguration() { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl()) @@ -1219,7 +673,7 @@ Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y); // When - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = backgroundMapData; // Then Assert.AreEqual(1, mapView.Layers.Count); @@ -1231,121 +685,10 @@ } [Test] - public void GivenMapControlWithDataAndBackground_WhenDifferentBackgroundMapDataSetAndNotified_LayersReprojected() - { - // Given - WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; - - using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) - using (var map = new MapControl()) - { - var mapDataCollection = new MapDataCollection("A"); - mapDataCollection.Add(new MapPointData("points") - { - Features = new[] - { - new MapFeature(new[] - { - new MapGeometry(new[] - { - new[] - { - new Point2D(1.1, 2.2) - } - }) - }) - } - }); - map.Data = mapDataCollection; - map.BackgroundMapData = mapDataContainer; - - // Precondition - var mapView = map.Controls.OfType().First(); - Assert.AreEqual(2, mapView.Layers.Count); - Assert.IsInstanceOf(mapView.Layers[0]); - var pointFeatureLayer = (FeatureLayer) mapView.Layers[1]; - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(1.1, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X); - Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y); - - // When - var differentBackgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - using (new UseCustomTileSourceFactoryConfig(differentBackgroundMapData)) - { - mapDataContainer.MapData = differentBackgroundMapData; - mapDataContainer.NotifyObservers(); - - // Then - Assert.AreEqual(2, mapView.Layers.Count); - Assert.IsInstanceOf(mapView.Layers[0]); - pointFeatureLayer = (FeatureLayer) mapView.Layers[1]; - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(523414.9114786592, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X, - "Coordinate does not match. (Ball park expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - Assert.AreEqual(5313600.4932731427, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y, - "Coordinate does not match (Estimate of expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - } - } - } - - [Test] - [TestCase(false, 0)] - [TestCase(true, 1)] - public void GivenMapControlWithDataDifferentMapDataSet_WhenNotified_LayerVisibilityAsExpected(bool newMapDataNotify, int layerVisibilityChanged) - { - // Given - var actualLayerVisibilityChanged = 0; - WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - WmtsMapData differentBackgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; - - using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) - using (new UseCustomTileSourceFactoryConfig(differentBackgroundMapData)) - using (var map = new MapControl()) - { - map.BackgroundMapData = mapDataContainer; - mapDataContainer.IsVisible = false; - - mapDataContainer.MapData = differentBackgroundMapData; - mapDataContainer.NotifyObservers(); - - IMapLayerCollection layers = map.Controls.OfType().First().Layers; - layers.LayerVisibleChanged += (sender, args) => { actualLayerVisibilityChanged++; }; - - differentBackgroundMapData.IsVisible = true; - backgroundMapData.IsVisible = true; - - // When - if (newMapDataNotify) - { - differentBackgroundMapData.NotifyObservers(); - } - else - { - backgroundMapData.NotifyObservers(); - } - - // Then - Assert.AreEqual(layerVisibilityChanged, actualLayerVisibilityChanged); - } - } - - [Test] public void GivenMapControlWithDataAndBackground_WhenDifferentBackgroundMapDataSet_LayersReprojected() { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl()) @@ -1368,7 +711,7 @@ } }); map.Data = mapDataCollection; - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = backgroundMapData; // Precondition var mapView = map.Controls.OfType().First(); @@ -1380,14 +723,10 @@ Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y); // When - var differentBackgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var differentMapDataContainer = new BackgroundMapDataContainer - { - MapData = differentBackgroundMapData - }; + WmtsMapData differentBackgroundMapData = WmtsMapData.CreateAlternativePdokMapData();; using (new UseCustomTileSourceFactoryConfig(differentBackgroundMapData)) { - map.BackgroundMapData = differentMapDataContainer; + map.BackgroundMapData = differentBackgroundMapData; // Then Assert.AreEqual(2, mapView.Layers.Count); @@ -1403,77 +742,10 @@ } [Test] - public void GivenMapControlWithDataAndBackground_WhenUnconfiguredBackgroundMapDataSetAndNotified_LayersReprojected() - { - // Given - WmtsMapData backgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; - - using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) - using (var map = new MapControl()) - { - var mapDataCollection = new MapDataCollection("A"); - mapDataCollection.Add(new MapPointData("points") - { - Features = new[] - { - new MapFeature(new[] - { - new MapGeometry(new[] - { - new[] - { - new Point2D(1.1, 2.2) - } - }) - }) - } - }); - map.Data = mapDataCollection; - map.BackgroundMapData = mapDataContainer; - - // Precondition - var mapView = map.Controls.OfType().First(); - Assert.AreEqual(2, mapView.Layers.Count); - Assert.IsInstanceOf(mapView.Layers[0]); - var pointFeatureLayer = (FeatureLayer) mapView.Layers[1]; - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(523414.9114786592, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X, - "Coordinate does not match. (Ball park expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - Assert.AreEqual(5313600.4932731427, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y, - "Coordinate does not match (Estimate of expected value can be calculated from https://epsg.io/transform#s_srs=28992&t_srs=25831&x=1.1000000&y=2.2000000)."); - - // When - var differentBackgroundMapData = WmtsMapData.CreateUnconnectedMapData(); - using (new UseCustomTileSourceFactoryConfig(differentBackgroundMapData)) - { - mapDataContainer.MapData = differentBackgroundMapData; - mapDataContainer.NotifyObservers(); - - // Then - Assert.AreEqual(1, mapView.Layers.Count); - pointFeatureLayer = (FeatureLayer) mapView.Layers[0]; - Assert.IsTrue(mapView.Projection.Equals(pointFeatureLayer.Projection)); - Assert.AreEqual(1.1, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].X, 1e-8, - "Layer is reprojected, so minor delta is acceptable."); - Assert.AreEqual(2.2, pointFeatureLayer.FeatureSet.Features[0].BasicGeometry.Coordinates[0].Y, 1e-8, - "Layer is reprojected, so minor delta is acceptable."); - } - } - } - - [Test] public void GivenMapControlWithDataAndBackground_WhenUnconfiguredBackgroundMapDataSet_LayersReprojected() { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl()) @@ -1496,7 +768,7 @@ } }); map.Data = mapDataCollection; - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = backgroundMapData; // Precondition var mapView = map.Controls.OfType().First(); @@ -1511,13 +783,10 @@ // When var differentBackgroundMapData = WmtsMapData.CreateUnconnectedMapData(); - var differentMapDataContainer = new BackgroundMapDataContainer - { - MapData = differentBackgroundMapData - }; + using (new UseCustomTileSourceFactoryConfig(differentBackgroundMapData)) { - map.BackgroundMapData = differentMapDataContainer; + map.BackgroundMapData = differentBackgroundMapData; // Then Assert.AreEqual(1, mapView.Layers.Count); @@ -1586,15 +855,11 @@ { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl { - BackgroundMapData = mapDataContainer + BackgroundMapData = backgroundMapData }) { var mapPointData = new MapPointData("Points") @@ -1654,10 +919,6 @@ { // Given WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(problematicFactory)) using (var map = new MapControl()) @@ -1687,7 +948,7 @@ // When Action call = () => { - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = backgroundMapData; map.Data = mapDataCollection; }; @@ -1711,10 +972,6 @@ string folderWithoutPermission = Path.GetRandomFileName(); WmtsMapData backgroundMapData = WmtsMapData.CreateDefaultPdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomSettingsHelper(new TestSettingsHelper { @@ -1751,7 +1008,7 @@ // When Action call = () => { - map.BackgroundMapData = mapDataContainer; + map.BackgroundMapData = backgroundMapData; map.Data = mapDataCollection; }; @@ -1964,15 +1221,11 @@ { // Given var backgroundMapData = WmtsMapData.CreateAlternativePdokMapData(); - var mapDataContainer = new BackgroundMapDataContainer - { - MapData = backgroundMapData - }; using (new UseCustomTileSourceFactoryConfig(backgroundMapData)) using (var map = new MapControl { - BackgroundMapData = mapDataContainer + BackgroundMapData = backgroundMapData }) { var mapView = map.Controls.OfType().First(); Index: Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoAssessmentSectionCommand.cs =================================================================== diff -u -r49adfd44a6a7ffd0cb8eedc291b2343f4c0bc632 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoAssessmentSectionCommand.cs (.../AddNewDemoAssessmentSectionCommand.cs) (revision 49adfd44a6a7ffd0cb8eedc291b2343f4c0bc632) +++ Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoAssessmentSectionCommand.cs (.../AddNewDemoAssessmentSectionCommand.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -116,6 +116,15 @@ backgroundMapData.Configure(targetConfiguration.SourceCapabilitiesUrl, targetConfiguration.SelectedCapabilityIdentifier, targetConfiguration.PreferredFormat); + + demoAssessmentSection.BackgroundMapData2.Name = targetConfiguration.Name; + demoAssessmentSection.BackgroundMapData2.BackgroundMapDataType = BackgroundMapDataType.Wmts; + demoAssessmentSection.BackgroundMapData2.IsVisible = targetConfiguration.IsVisible; + demoAssessmentSection.BackgroundMapData2.Transparency = targetConfiguration.Transparency; + demoAssessmentSection.BackgroundMapData2.IsConfigured = targetConfiguration.IsConfigured; + demoAssessmentSection.BackgroundMapData2.Parameters.Add("SourceCapabilitiesUrl", targetConfiguration.SourceCapabilitiesUrl); + demoAssessmentSection.BackgroundMapData2.Parameters.Add("SelectedCapabilityIdentifier", targetConfiguration.SelectedCapabilityIdentifier); + demoAssessmentSection.BackgroundMapData2.Parameters.Add("PreferredFormat", targetConfiguration.PreferredFormat); } private void InitializeDemoReferenceLine(AssessmentSection demoAssessmentSection) Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismView.cs (.../ClosingStructuresFailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismView.cs (.../ClosingStructuresFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -48,6 +48,7 @@ private readonly Observer hydraulicBoundaryDatabaseObserver; private readonly Observer foreshoreProfilesObserver; private readonly Observer structuresObserver; + private readonly Observer backgroundMapDataObserver; private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; @@ -63,6 +64,8 @@ private readonly MapPointData structuresMapData; private readonly MapLineData calculationsMapData; + private WmtsMapData backgroundMapData; + private ClosingStructuresFailureMechanismContext data; /// @@ -85,6 +88,7 @@ hydraulicBoundaryDatabaseObserver = new Observer(UpdateMapData); foreshoreProfilesObserver = new Observer(UpdateMapData); structuresObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); calculationInputObserver = new RecursiveObserver( UpdateMapData, pcg => pcg.Children.Concat(pcg.Children.OfType>().Select(pc => pc.InputParameters))); @@ -132,6 +136,8 @@ calculationGroupObserver.Observable = null; calculationObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -146,10 +152,14 @@ calculationGroupObserver.Observable = data.WrappedData.CalculationsGroup; calculationObserver.Observable = data.WrappedData.CalculationsGroup; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -180,6 +190,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/Views/ClosingStructuresFailureMechanismViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/Views/ClosingStructuresFailureMechanismViewTest.cs (.../ClosingStructuresFailureMechanismViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/Views/ClosingStructuresFailureMechanismViewTest.cs (.../ClosingStructuresFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -39,6 +39,7 @@ using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; namespace Ringtoets.ClosingStructures.Forms.Test.Views { @@ -116,7 +117,8 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -181,6 +183,9 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -421,6 +426,32 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new ClosingStructuresFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new ClosingStructuresFailureMechanismContext(new ClosingStructuresFailureMechanism(), assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup Index: Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/BackgroundMapData.cs =================================================================== diff -u -r7342bdbb53114c7b63144219a8fa9df9a097192a -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/BackgroundMapData.cs (.../BackgroundMapData.cs) (revision 7342bdbb53114c7b63144219a8fa9df9a097192a) +++ Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/BackgroundMapData.cs (.../BackgroundMapData.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -19,14 +19,17 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.Collections.Generic; +using Core.Common.Base; using Core.Common.Base.Data; namespace Ringtoets.Common.Data.AssessmentSection { /// /// Class that holds information about configured background data. /// - public class BackgroundMapData + public class BackgroundMapData : Observable + { /// /// Creates a new . @@ -35,8 +38,11 @@ { IsVisible = true; Transparency = new RoundedDouble(2); + Parameters = new Dictionary(); } + public string Name { get; set; } + /// /// Gets or sets a value indicating whether the background is visible. /// @@ -51,5 +57,15 @@ /// Gets or sets the type of the background map data. /// public BackgroundMapDataType BackgroundMapDataType { get; set; } + + /// + /// Gets or sets whether a background map data is configured. + /// + public bool IsConfigured { get; set; } + + /// + /// Gets the parameters that are configured for a background map data. + /// + public IDictionary Parameters { get; } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/IAssessmentSection.cs =================================================================== diff -u -r7799a03be5a1c2ad6bebcddea11e3e10c6c03ea7 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/IAssessmentSection.cs (.../IAssessmentSection.cs) (revision 7799a03be5a1c2ad6bebcddea11e3e10c6c03ea7) +++ Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/IAssessmentSection.cs (.../IAssessmentSection.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -76,6 +76,8 @@ /// BackgroundMapDataContainer BackgroundMapData { get; } + BackgroundMapData BackgroundMapData2 { get; } + /// /// Gets the failure mechanisms corresponding to the assessment section. /// Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj =================================================================== diff -u -rd5a0bce3d53deb3aef237c365018096e9bc83bb1 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj (.../Ringtoets.Common.Forms.csproj) (revision d5a0bce3d53deb3aef237c365018096e9bc83bb1) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj (.../Ringtoets.Common.Forms.csproj) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -145,6 +145,7 @@ HydraulicBoundaryLocationsView.cs + Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismView.cs (.../FailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismView.cs (.../FailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -41,6 +41,7 @@ private readonly Observer failureMechanismObserver; private readonly Observer assessmentSectionObserver; private readonly Observer hydraulicBoundaryDatabaseObserver; + private readonly Observer backgroundMapDataObserver; private readonly MapDataCollection mapDataCollection; private readonly MapLineData referenceLineMapData; @@ -49,6 +50,8 @@ private readonly MapPointData sectionsEndPointMapData; private readonly MapPointData hydraulicBoundaryLocationsMapData; + private WmtsMapData backgroundMapData; + private FailureMechanismContext data; /// @@ -69,6 +72,7 @@ UpdateMapData(); }); hydraulicBoundaryDatabaseObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); mapDataCollection = new MapDataCollection(defaultMapDataCollectionName); referenceLineMapData = RingtoetsMapDataFactory.CreateReferenceLineMapData(); @@ -100,6 +104,8 @@ assessmentSectionObserver.Observable = null; hydraulicBoundaryDatabaseObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + mapDataCollection.Name = defaultMapDataCollectionName; Map.Data = null; @@ -113,10 +119,14 @@ mapDataCollection.Name = data.WrappedData.Name; hydraulicBoundaryDatabaseObserver.Observable = data.Parent.HydraulicBoundaryDatabase; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -142,6 +152,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/RingtoetsBackgroundMapDataFactory.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/RingtoetsBackgroundMapDataFactory.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/RingtoetsBackgroundMapDataFactory.cs (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -0,0 +1,114 @@ +// 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 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 Core.Components.Gis.Data; +using Ringtoets.Common.Data.AssessmentSection; + +namespace Ringtoets.Common.Forms.Views +{ + /// + /// Factory for creating for data used in the map. + /// + public static class RingtoetsBackgroundMapDataFactory + { + /// + /// Creates from a . + /// + /// The to create + /// the for. + /// The created . + /// Thrown when + /// is null. + public static WmtsMapData CreateBackgroundMapData(BackgroundMapData backgroundMapData) + { + if (backgroundMapData == null) + { + throw new ArgumentNullException(nameof(backgroundMapData)); + } + + if (backgroundMapData.BackgroundMapDataType == BackgroundMapDataType.Wmts) + { + return CreateWmtsBackgroundMapData(backgroundMapData); + } + + return null; + } + + /// + /// Updates an existing . + /// + /// The to update. + /// The used + /// to update the map data. + /// The updated . + /// Thrown when any parameter is null. + public static void UpdateBackgroundMapData(WmtsMapData mapData, BackgroundMapData backgroundMapData) + { + if (mapData == null) + { + throw new ArgumentNullException(nameof(mapData)); + } + if (backgroundMapData == null) + { + throw new ArgumentNullException(nameof(backgroundMapData)); + } + + if (backgroundMapData.BackgroundMapDataType == BackgroundMapDataType.Wmts) + { + WmtsMapData newMapData = CreateWmtsBackgroundMapData(backgroundMapData); + + if (newMapData.IsConfigured) + { + mapData.Configure(newMapData.SourceCapabilitiesUrl, + newMapData.SelectedCapabilityIdentifier, + newMapData.PreferredFormat); + } + else + { + mapData.RemoveConfiguration(); + } + + mapData.Name = newMapData.Name; + mapData.Transparency = newMapData.Transparency; + mapData.IsVisible = newMapData.IsVisible; + } + } + + private static WmtsMapData CreateWmtsBackgroundMapData(BackgroundMapData backgroundData) + { + WmtsMapData mapData = WmtsMapData.CreateUnconnectedMapData(); + mapData.Name = backgroundData.Name; + + if (backgroundData.IsConfigured) + { + mapData.Configure(backgroundData.Parameters["SourceCapabilitiesUrl"], + backgroundData.Parameters["SelectedCapabilityIdentifier"], + backgroundData.Parameters["PreferredFormat"]); + } + + mapData.IsVisible = backgroundData.IsVisible; + mapData.Transparency = backgroundData.Transparency; + + return mapData; + } + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/RingtoetsMapDataFactory.cs =================================================================== diff -u -r327876f1787e48f6b29dd65393d749854c4a95dd -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/RingtoetsMapDataFactory.cs (.../RingtoetsMapDataFactory.cs) (revision 327876f1787e48f6b29dd65393d749854c4a95dd) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/RingtoetsMapDataFactory.cs (.../RingtoetsMapDataFactory.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -91,9 +91,7 @@ /// The created . public static MapPointData CreateFailureMechanismSectionsStartPointMapData() { - var mapDataName = String.Format("{0} ({1})", - Resources.FailureMechanism_Sections_DisplayName, - Resources.FailureMechanismSections_StartPoints_DisplayName); + var mapDataName = $"{Resources.FailureMechanism_Sections_DisplayName} ({Resources.FailureMechanismSections_StartPoints_DisplayName})"; return new MapPointData(mapDataName) { @@ -107,9 +105,7 @@ /// The created . public static MapPointData CreateFailureMechanismSectionsEndPointMapData() { - var mapDataName = String.Format("{0} ({1})", - Resources.FailureMechanism_Sections_DisplayName, - Resources.FailureMechanismSections_EndPoints_DisplayName); + var mapDataName = $"{Resources.FailureMechanism_Sections_DisplayName} ({Resources.FailureMechanismSections_EndPoints_DisplayName})"; return new MapPointData(mapDataName) { Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/BackgroundMapDataTest.cs =================================================================== diff -u -r7342bdbb53114c7b63144219a8fa9df9a097192a -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/BackgroundMapDataTest.cs (.../BackgroundMapDataTest.cs) (revision 7342bdbb53114c7b63144219a8fa9df9a097192a) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/BackgroundMapDataTest.cs (.../BackgroundMapDataTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -38,6 +38,8 @@ Assert.AreEqual(2, backgroundMapData.Transparency.NumberOfDecimalPlaces); Assert.AreEqual(0, backgroundMapData.Transparency.Value); Assert.AreEqual(BackgroundMapDataType.Wmts, backgroundMapData.BackgroundMapDataType); + Assert.IsFalse(backgroundMapData.IsConfigured); + CollectionAssert.IsEmpty(backgroundMapData.Parameters); } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/ObservableTestAssessmentSectionStubTest.cs =================================================================== diff -u -r3014d0ced22c45300938639e7958ea0850485240 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/ObservableTestAssessmentSectionStubTest.cs (.../ObservableTestAssessmentSectionStubTest.cs) (revision 3014d0ced22c45300938639e7958ea0850485240) +++ Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/ObservableTestAssessmentSectionStubTest.cs (.../ObservableTestAssessmentSectionStubTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -50,6 +50,8 @@ Assert.IsNull(assessmentSection.ReferenceLine); Assert.IsNull(assessmentSection.HydraulicBoundaryDatabase); Assert.IsNull(assessmentSection.BackgroundMapData.MapData); + Assert.IsNotNull(assessmentSection.BackgroundMapData2); + Assert.AreEqual("Background data", assessmentSection.BackgroundMapData2.Name); Assert.AreEqual(1.0 / 300000.0, assessmentSection.FailureMechanismContribution.Norm); FailureMechanismContributionItem[] contributionItems = assessmentSection.FailureMechanismContribution.Distribution.ToArray(); Index: Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/BackgroundMapDataTestDataGenerator.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/BackgroundMapDataTestDataGenerator.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/BackgroundMapDataTestDataGenerator.cs (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -0,0 +1,58 @@ +// 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 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 Core.Components.Gis.Data; +using Ringtoets.Common.Data.AssessmentSection; + +namespace Ringtoets.Common.Data.TestUtil +{ + public static class BackgroundMapDataTestDataGenerator + { + public static BackgroundMapData GetWmtsBackgroundMapData(WmtsMapData wmtsMapData) + { + var backgroundMapData = new BackgroundMapData + { + Name = wmtsMapData.Name, + IsVisible = wmtsMapData.IsVisible, + IsConfigured = wmtsMapData.IsConfigured, + Transparency = wmtsMapData.Transparency, + BackgroundMapDataType = BackgroundMapDataType.Wmts + }; + + if (wmtsMapData.IsConfigured) + { + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = wmtsMapData.SourceCapabilitiesUrl; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = wmtsMapData.SelectedCapabilityIdentifier; + backgroundMapData.Parameters["PreferredFormat"] = wmtsMapData.PreferredFormat; + } + + return backgroundMapData; + } + + public static BackgroundMapData GetWellKnownBackgroundMapData() + { + return new BackgroundMapData + { + BackgroundMapDataType = BackgroundMapDataType.WellKnown + }; + } + } +} Index: Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/ObservableTestAssessmentSectionStub.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/ObservableTestAssessmentSectionStub.cs (.../ObservableTestAssessmentSectionStub.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/ObservableTestAssessmentSectionStub.cs (.../ObservableTestAssessmentSectionStub.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -24,7 +24,6 @@ using System.Linq; using Core.Common.Base; using Core.Components.Gis; -using Core.Components.Gis.Data; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Contribution; using Ringtoets.Common.Data.FailureMechanism; @@ -40,8 +39,12 @@ { public ObservableTestAssessmentSectionStub() { - FailureMechanismContribution = new FailureMechanismContribution(Enumerable.Empty(), 0, 1.0/300000); + FailureMechanismContribution = new FailureMechanismContribution(Enumerable.Empty(), 0, 1.0 / 300000); BackgroundMapData = new BackgroundMapDataContainer(); + BackgroundMapData2 = new BackgroundMapData + { + Name = "Background data" + }; } public string Id { get; } @@ -52,6 +55,7 @@ public FailureMechanismContribution FailureMechanismContribution { get; } public HydraulicBoundaryDatabase HydraulicBoundaryDatabase { get; set; } public BackgroundMapDataContainer BackgroundMapData { get; } + public BackgroundMapData BackgroundMapData2 { get; } public IEnumerable GetFailureMechanisms() { Index: Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/Ringtoets.Common.Data.TestUtil.csproj =================================================================== diff -u -r6a5d7b40b7ba4dcb73e393075338352d194e97c2 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/Ringtoets.Common.Data.TestUtil.csproj (.../Ringtoets.Common.Data.TestUtil.csproj) (revision 6a5d7b40b7ba4dcb73e393075338352d194e97c2) +++ Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/Ringtoets.Common.Data.TestUtil.csproj (.../Ringtoets.Common.Data.TestUtil.csproj) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -54,6 +54,7 @@ Properties\GlobalAssembly.cs + Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj =================================================================== diff -u -rd5a0bce3d53deb3aef237c365018096e9bc83bb1 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj (.../Ringtoets.Common.Forms.Test.csproj) (revision d5a0bce3d53deb3aef237c365018096e9bc83bb1) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj (.../Ringtoets.Common.Forms.Test.csproj) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -118,6 +118,7 @@ + Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismViewTest.cs (.../FailureMechanismViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismViewTest.cs (.../FailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -107,7 +107,8 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -156,14 +157,18 @@ // Setup using (var view = new FailureMechanismView()) { - var failureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub()); + var assessmentSection = new ObservableTestAssessmentSectionStub(); + var failureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), assessmentSection); // Call view.Data = failureMechanismContext; // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -362,6 +367,32 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new FailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new FailureMechanismContext(new TestFailureMechanism(), assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/RingtoetsBackgroundMapDataFactoryTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/RingtoetsBackgroundMapDataFactoryTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/RingtoetsBackgroundMapDataFactoryTest.cs (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -0,0 +1,191 @@ +// 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 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 Core.Common.Base.Data; +using Core.Components.Gis.Data; +using NUnit.Framework; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.TestUtil; +using Ringtoets.Common.Forms.Views; + +namespace Ringtoets.Common.Forms.Test.Views +{ + [TestFixture] + public class RingtoetsBackgroundMapDataFactoryTest + { + [Test] + public void CreateBackgroundMapData_BackgroundMapDataNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(null); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("backgroundMapData", exception.ParamName); + } + + [Test] + public void CreateBackgroundMapData_BackgroundMapDataTypeWellKnown_ReturnNull() + { + // Setup + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWellKnownBackgroundMapData(); + + // Call + WmtsMapData mapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + + // Assert + Assert.IsNull(mapData); + } + + [Test] + public void CreateBackgroundMapData_BackgroundMapDataTypeWmtsAndConfigured_ReturnConfiguredMapData() + { + // Setup + WmtsMapData wmtsMapData = WmtsMapData.CreateDefaultPdokMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(wmtsMapData); + + // Call + WmtsMapData mapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + + // Assert + Assert.AreEqual(wmtsMapData.Name, mapData.Name); + Assert.AreEqual(wmtsMapData.IsVisible, mapData.IsVisible); + Assert.AreEqual(wmtsMapData.IsConfigured, mapData.IsConfigured); + Assert.AreEqual(wmtsMapData.Transparency, mapData.Transparency); + Assert.AreEqual(wmtsMapData.SourceCapabilitiesUrl, mapData.SourceCapabilitiesUrl); + Assert.AreEqual(wmtsMapData.SelectedCapabilityIdentifier, mapData.SelectedCapabilityIdentifier); + Assert.AreEqual(wmtsMapData.PreferredFormat, mapData.PreferredFormat); + } + + [Test] + public void CreateBackgroundMapData_BackgroundMapDataTypeWmtsAndNotConfigured_ReturnUnconfiguredMapData() + { + // Setup + WmtsMapData wmtsMapData = WmtsMapData.CreateUnconnectedMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(wmtsMapData); + + // Call + WmtsMapData mapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + + // Assert + Assert.AreEqual(wmtsMapData.Name, mapData.Name); + Assert.AreEqual(wmtsMapData.IsVisible, mapData.IsVisible); + Assert.AreEqual(wmtsMapData.IsConfigured, mapData.IsConfigured); + Assert.AreEqual(wmtsMapData.Transparency, mapData.Transparency); + Assert.IsNull(mapData.SourceCapabilitiesUrl); + Assert.IsNull(mapData.SelectedCapabilityIdentifier); + Assert.IsNull(mapData.PreferredFormat); + } + + [Test] + public void UpdateBackgroundMapData_WmtsMapDataNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(null, new BackgroundMapData()); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("mapData", exception.ParamName); + } + + [Test] + public void UpdateBackgroundMapData_BackgroundMapDataNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(WmtsMapData.CreateUnconnectedMapData(), null); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("backgroundMapData", exception.ParamName); + } + + [Test] + public void UpdateBackgroundMapData_BackgroundMapDataTypeWellKnown_ReturnUnchangedWmtsMapData() + { + // Setup + WmtsMapData wmtsMapData = WmtsMapData.CreateDefaultPdokMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWellKnownBackgroundMapData(); + + string originalName = wmtsMapData.Name; + bool originalVisibility = wmtsMapData.IsVisible; + RoundedDouble originalTransparancy = wmtsMapData.Transparency; + + backgroundMapData.Name = "new name"; + backgroundMapData.IsVisible = true; + backgroundMapData.Transparency = (RoundedDouble) 0.4; + + // Call + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(wmtsMapData, backgroundMapData); + + // Assert + Assert.AreEqual(originalName, wmtsMapData.Name); + Assert.AreEqual(originalVisibility, wmtsMapData.IsVisible); + Assert.AreEqual(originalTransparancy, wmtsMapData.Transparency); + } + + [Test] + public void UpdateBackgroundMapData_BackgroundMapDataTypeWmtsAndConfigured_ReturnChangedWmtsMapData() + { + // Setup + WmtsMapData wmtsMapData = WmtsMapData.CreateDefaultPdokMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(wmtsMapData); + + string originalSourceCapabilitiesUrl = backgroundMapData.Parameters["SourceCapabilitiesUrl"]; + string originalSelectedCapabilityIdentifier = backgroundMapData.Parameters["SelectedCapabilityIdentifier"]; + string originalPreferredFormat = backgroundMapData.Parameters["PreferredFormat"]; + + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some/url"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/format"; + + // Call + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(wmtsMapData, backgroundMapData); + + // Assert + Assert.AreNotEqual(originalSourceCapabilitiesUrl, wmtsMapData.SourceCapabilitiesUrl); + Assert.AreNotEqual(originalSelectedCapabilityIdentifier, wmtsMapData.SelectedCapabilityIdentifier); + Assert.AreNotEqual(originalPreferredFormat, wmtsMapData.PreferredFormat); + } + + [Test] + public void GivenConfiguredMapData_WhenBackgroundMapDataConfiguredSetToFalse_ConfigurationRemovedFromWmtsMapData() + { + // Given + WmtsMapData wmtsMapData = WmtsMapData.CreateDefaultPdokMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(wmtsMapData); + + // Precondition + Assert.IsNotNull(wmtsMapData.SourceCapabilitiesUrl); + Assert.IsNotNull(wmtsMapData.SelectedCapabilityIdentifier); + Assert.IsNotNull(wmtsMapData.PreferredFormat); + + // When + backgroundMapData.IsConfigured = false; + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(wmtsMapData, backgroundMapData); + + // Then + Assert.IsNull(wmtsMapData.SourceCapabilitiesUrl); + Assert.IsNull(wmtsMapData.SelectedCapabilityIdentifier); + Assert.IsNull(wmtsMapData.PreferredFormat); + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil.Test/MapDataTestHelperTest.cs =================================================================== diff -u -r5ef0531f6fb4e9003bd9c6bf647504d748c188c9 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil.Test/MapDataTestHelperTest.cs (.../MapDataTestHelperTest.cs) (revision 5ef0531f6fb4e9003bd9c6bf647504d748c188c9) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil.Test/MapDataTestHelperTest.cs (.../MapDataTestHelperTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -19,7 +19,9 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.Collections.Generic; using System.Linq; +using Core.Common.Base.Data; using Core.Common.Base.Geometry; using Core.Components.Gis.Data; using Core.Components.Gis.Features; @@ -1100,5 +1102,98 @@ } #endregion + + #region AssertWmtsMapData + + [Test] + public void AssertWmtsMapData_MapDataNotWmtsMapData_ThrowAssertionException() + { + // Setup + var mapData = new MapPointData("MapPointData"); + + // Call + TestDelegate test = () => MapDataTestHelper.AssertWmtsMapData(WmtsMapData.CreateUnconnectedMapData(), + mapData); + + // Assert + Assert.Throws(test); + } + + [Test] + public void AssertWmtsMapData_WmtsMapDataNull_ThrowAssertionException() + { + // Setup + var mapData = new MapPointData("MapPointData"); + + // Call + TestDelegate test = () => MapDataTestHelper.AssertWmtsMapData(null, mapData); + + // Assert + Assert.Throws(test); + } + + [Test] + public void AssertWmtsMapData_DataNull_ThrowAssertionException() + { + // Call + TestDelegate test = () => MapDataTestHelper.AssertWmtsMapData(WmtsMapData.CreateUnconnectedMapData(), + null); + + // Assert + Assert.Throws(test); + } + + [Test] + [TestCaseSource(nameof(NotEqualToDefaultPdokMapData))] + public void AssertWmtsMapData_MapDataNotEqual_ThrowAssertionException(WmtsMapData wmtsMapData) + { + // Setup + var mapData = WmtsMapData.CreateDefaultPdokMapData(); + + // Call + TestDelegate test = () => MapDataTestHelper.AssertWmtsMapData(wmtsMapData, mapData); + + // Assert + Assert.Throws(test); + } + + private static IEnumerable NotEqualToDefaultPdokMapData() + { + var defaultMapData = WmtsMapData.CreateDefaultPdokMapData(); + + var otherName = new WmtsMapData("otherName", + defaultMapData.SourceCapabilitiesUrl, + defaultMapData.SelectedCapabilityIdentifier, + defaultMapData.PreferredFormat); + yield return new TestCaseData(otherName); + + var otherPreferredFormat = new WmtsMapData(defaultMapData.Name, + defaultMapData.SourceCapabilitiesUrl, + defaultMapData.SelectedCapabilityIdentifier, + "image/otherPreferredFormat"); + yield return new TestCaseData(otherPreferredFormat); + + var otherSelectedCapabilityIdentifier = new WmtsMapData(defaultMapData.Name, + defaultMapData.SourceCapabilitiesUrl, + "otherSelectedCapabilityIdentifier", + defaultMapData.PreferredFormat); + yield return new TestCaseData(otherSelectedCapabilityIdentifier); + + var otherSourceCapabilitiesUrl = new WmtsMapData(defaultMapData.Name, + "otherSourceCapabilitiesUrl", + defaultMapData.SelectedCapabilityIdentifier, + defaultMapData.PreferredFormat); + yield return new TestCaseData(otherSourceCapabilitiesUrl); + + WmtsMapData otherVisibility = defaultMapData; + otherVisibility.IsVisible = !otherVisibility.IsVisible; + yield return new TestCaseData(otherVisibility); + + WmtsMapData otherTransparency = defaultMapData; + otherTransparency.Transparency = (RoundedDouble) ((otherVisibility.Transparency + 0.5) % 1); + yield return new TestCaseData(otherTransparency); + } + + #endregion } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil/MapDataTestHelper.cs =================================================================== diff -u -r5ef0531f6fb4e9003bd9c6bf647504d748c188c9 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil/MapDataTestHelper.cs (.../MapDataTestHelper.cs) (revision 5ef0531f6fb4e9003bd9c6bf647504d748c188c9) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil/MapDataTestHelper.cs (.../MapDataTestHelper.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -206,6 +206,31 @@ } } + /// + /// Asserts whether the is equivalent to + /// + /// The original WMTS map data. + /// The that needs to be asserted. + /// Thrown when: + /// + /// is no ; + /// One of the properties of is not equal to . + /// + public static void AssertWmtsMapData(WmtsMapData wmtsMapData, MapData mapData) + { + Assert.IsInstanceOf(mapData); + Assert.IsNotNull(wmtsMapData); + Assert.AreEqual(wmtsMapData.Name, mapData.Name); + + var actualMapData = (WmtsMapData)mapData; + Assert.AreEqual(wmtsMapData.PreferredFormat, actualMapData.PreferredFormat); + Assert.AreEqual(wmtsMapData.SelectedCapabilityIdentifier, actualMapData.SelectedCapabilityIdentifier); + Assert.AreEqual(wmtsMapData.SourceCapabilitiesUrl, actualMapData.SourceCapabilitiesUrl); + Assert.AreEqual(wmtsMapData.IsConfigured, actualMapData.IsConfigured); + Assert.AreEqual(wmtsMapData.IsVisible, actualMapData.IsVisible); + Assert.AreEqual(wmtsMapData.Transparency, actualMapData.Transparency); + } + private static Point2D[] GetWorldPoints(ForeshoreProfile foreshoreProfile) { return AdvancedMath2D.FromXToXY( Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Views/DuneErosionFailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Views/DuneErosionFailureMechanismView.cs (.../DuneErosionFailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Views/DuneErosionFailureMechanismView.cs (.../DuneErosionFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -41,6 +41,7 @@ private readonly Observer failureMechanismObserver; private readonly Observer assessmentSectionObserver; private readonly Observer duneLocationsObserver; + private readonly Observer backgroundMapDataObserver; private readonly MapDataCollection mapDataCollection; private readonly MapLineData referenceLineMapData; @@ -49,6 +50,8 @@ private readonly MapPointData sectionsEndPointMapData; private readonly MapPointData duneLocationsMapData; + private WmtsMapData backgroundMapData; + private DuneErosionFailureMechanismContext data; /// @@ -61,6 +64,7 @@ failureMechanismObserver = new Observer(UpdateMapData); assessmentSectionObserver = new Observer(UpdateMapData); duneLocationsObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); mapDataCollection = new MapDataCollection(DuneErosionDataResources.DuneErosionFailureMechanism_DisplayName); referenceLineMapData = RingtoetsMapDataFactory.CreateReferenceLineMapData(); @@ -92,6 +96,8 @@ assessmentSectionObserver.Observable = null; duneLocationsObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -103,10 +109,14 @@ mapDataCollection.Name = data.WrappedData.Name; duneLocationsObserver.Observable = data.WrappedData.DuneLocations; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -132,6 +142,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Views/DuneErosionFailureMechanismViewTest.cs =================================================================== diff -u -r7799a03be5a1c2ad6bebcddea11e3e10c6c03ea7 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Views/DuneErosionFailureMechanismViewTest.cs (.../DuneErosionFailureMechanismViewTest.cs) (revision 7799a03be5a1c2ad6bebcddea11e3e10c6c03ea7) +++ Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Views/DuneErosionFailureMechanismViewTest.cs (.../DuneErosionFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -31,6 +31,7 @@ using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.DuneErosion.Data; using Ringtoets.DuneErosion.Data.TestUtil; using Ringtoets.DuneErosion.Forms.PresentationObjects; @@ -126,7 +127,8 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -171,6 +173,9 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -340,6 +345,32 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new DuneErosionFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new DuneErosionFailureMechanismContext(new DuneErosionFailureMechanism(), assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismView.cs (.../GrassCoverErosionInwardsFailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismView.cs (.../GrassCoverErosionInwardsFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -46,6 +46,7 @@ private readonly Observer assessmentSectionObserver; private readonly Observer hydraulicBoundaryDatabaseObserver; private readonly Observer dikeProfilesObserver; + private readonly Observer backgroundMapDataObserver; private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; @@ -61,6 +62,8 @@ private readonly MapLineData foreshoreProfilesMapData; private readonly MapLineData calculationsMapData; + private WmtsMapData backgroundMapData; + private GrassCoverErosionInwardsFailureMechanismContext data; /// @@ -82,6 +85,7 @@ }); hydraulicBoundaryDatabaseObserver = new Observer(UpdateMapData); dikeProfilesObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); calculationInputObserver = new RecursiveObserver( UpdateMapData, pcg => pcg.Children.Concat(pcg.Children.OfType().Select(pc => pc.InputParameters))); @@ -128,6 +132,8 @@ calculationGroupObserver.Observable = null; calculationObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -141,10 +147,14 @@ calculationGroupObserver.Observable = data.WrappedData.CalculationsGroup; calculationObserver.Observable = data.WrappedData.CalculationsGroup; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -174,6 +184,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsFailureMechanismViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsFailureMechanismViewTest.cs (.../GrassCoverErosionInwardsFailureMechanismViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsFailureMechanismViewTest.cs (.../GrassCoverErosionInwardsFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -33,6 +33,7 @@ using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionInwards.Forms.PresentationObjects; using Ringtoets.GrassCoverErosionInwards.Forms.Views; @@ -127,7 +128,8 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -172,6 +174,9 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -408,6 +413,32 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new GrassCoverErosionInwardsFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new GrassCoverErosionInwardsFailureMechanismContext(new GrassCoverErosionInwardsFailureMechanism(), assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void NotifyObservers_ReferenceLineUpdated_MapDataUpdated() { // Setup Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Views/GrassCoverErosionOutwardsFailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Views/GrassCoverErosionOutwardsFailureMechanismView.cs (.../GrassCoverErosionOutwardsFailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Views/GrassCoverErosionOutwardsFailureMechanismView.cs (.../GrassCoverErosionOutwardsFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -47,6 +47,7 @@ private readonly Observer assessmentSectionObserver; private readonly Observer hydraulicBoundaryLocationsObserver; private readonly Observer foreshoreProfilesObserver; + private readonly Observer backgroundMapDataObserver; private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; @@ -61,6 +62,8 @@ private readonly MapLineData foreshoreProfilesMapData; private readonly MapLineData calculationsMapData; + private WmtsMapData backgroundMapData; + private GrassCoverErosionOutwardsFailureMechanismContext data; /// @@ -74,6 +77,7 @@ assessmentSectionObserver = new Observer(UpdateMapData); hydraulicBoundaryLocationsObserver = new Observer(UpdateMapData); foreshoreProfilesObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); calculationInputObserver = new RecursiveObserver( UpdateMapData, pcg => pcg.Children.Concat(pcg.Children.OfType().Select(pc => pc.InputParameters))); @@ -118,6 +122,8 @@ calculationGroupObserver.Observable = null; calculationObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -131,10 +137,14 @@ calculationGroupObserver.Observable = data.WrappedData.WaveConditionsCalculationGroup; calculationObserver.Observable = data.WrappedData.WaveConditionsCalculationGroup; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -164,6 +174,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Views/GrassCoverErosionOutwardsFailureMechanismViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Views/GrassCoverErosionOutwardsFailureMechanismViewTest.cs (.../GrassCoverErosionOutwardsFailureMechanismViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Views/GrassCoverErosionOutwardsFailureMechanismViewTest.cs (.../GrassCoverErosionOutwardsFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -32,6 +32,7 @@ using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.GrassCoverErosionOutwards.Forms.PresentationObjects; using Ringtoets.GrassCoverErosionOutwards.Forms.Views; @@ -126,7 +127,8 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -173,6 +175,9 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -302,6 +307,32 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new GrassCoverErosionOutwardsFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new GrassCoverErosionOutwardsFailureMechanismContext(new GrassCoverErosionOutwardsFailureMechanism(), assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Forms/Views/HeightStructuresFailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Forms/Views/HeightStructuresFailureMechanismView.cs (.../HeightStructuresFailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Forms/Views/HeightStructuresFailureMechanismView.cs (.../HeightStructuresFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -48,6 +48,7 @@ private readonly Observer hydraulicBoundaryDatabaseObserver; private readonly Observer foreshoreProfilesObserver; private readonly Observer structuresObserver; + private readonly Observer backgroundMapDataObserver; private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; @@ -63,6 +64,8 @@ private readonly MapPointData structuresMapData; private readonly MapLineData calculationsMapData; + private WmtsMapData backgroundMapData; + private HeightStructuresFailureMechanismContext data; /// @@ -85,6 +88,7 @@ hydraulicBoundaryDatabaseObserver = new Observer(UpdateMapData); foreshoreProfilesObserver = new Observer(UpdateMapData); structuresObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); calculationInputObserver = new RecursiveObserver( UpdateMapData, pcg => pcg.Children.Concat(pcg.Children.OfType>().Select(pc => pc.InputParameters))); @@ -132,6 +136,8 @@ calculationGroupObserver.Observable = null; calculationObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -147,10 +153,14 @@ calculationGroupObserver.Observable = data.WrappedData.CalculationsGroup; calculationObserver.Observable = data.WrappedData.CalculationsGroup; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -181,6 +191,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/Views/HeightStructuresFailureMechanismViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/Views/HeightStructuresFailureMechanismViewTest.cs (.../HeightStructuresFailureMechanismViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/Views/HeightStructuresFailureMechanismViewTest.cs (.../HeightStructuresFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -34,6 +34,7 @@ using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.HeightStructures.Data; using Ringtoets.HeightStructures.Data.TestUtil; using Ringtoets.HeightStructures.Forms.PresentationObjects; @@ -131,7 +132,8 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -178,6 +180,9 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -418,6 +423,32 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new HeightStructuresFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new HeightStructuresFailureMechanismContext(new HeightStructuresFailureMechanism(), assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup Index: Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSection.cs =================================================================== diff -u -r7799a03be5a1c2ad6bebcddea11e3e10c6c03ea7 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSection.cs (.../AssessmentSection.cs) (revision 7799a03be5a1c2ad6bebcddea11e3e10c6c03ea7) +++ Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSection.cs (.../AssessmentSection.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -69,6 +69,13 @@ MapData = mapData }; + BackgroundMapData2 = new BackgroundMapData + { + IsVisible = mapData.IsVisible, + Transparency = mapData.Transparency, + IsConfigured = mapData.IsConfigured + }; + PipingFailureMechanism = new PipingFailureMechanism(); GrassCoverErosionInwards = new GrassCoverErosionInwardsFailureMechanism(); @@ -214,6 +221,8 @@ public BackgroundMapDataContainer BackgroundMapData { get; } + public BackgroundMapData BackgroundMapData2 { get; } + public IEnumerable GetFailureMechanisms() { yield return PipingFailureMechanism; Fisheye: Tag b519fc798c63691f04bb8008b562a94ed9232d51 refers to a dead (removed) revision in file `Ringtoets/Integration/src/Ringtoets.Integration.Forms/PropertyClasses/BackgroundMapDataContainerProperties.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/PropertyClasses/BackgroundMapDataProperties.cs =================================================================== diff -u --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/PropertyClasses/BackgroundMapDataProperties.cs (revision 0) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/PropertyClasses/BackgroundMapDataProperties.cs (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -0,0 +1,171 @@ +// 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 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 Core.Common.Base.Data; +using Core.Common.Gui.Attributes; +using Core.Common.Gui.PropertyBag; +using Core.Common.Utils.Attributes; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Integration.Forms.Properties; +using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; +using GisFormsResources = Core.Components.Gis.Forms.Properties.Resources; + +namespace Ringtoets.Integration.Forms.PropertyClasses +{ + /// + /// ViewModel of the for properties panel. + /// + public class BackgroundMapDataProperties : ObjectProperties + { + /// + /// Creates a new instance of . + /// + /// The data for which the properties are shown. + /// Thrown when + /// is null. + public BackgroundMapDataProperties(BackgroundMapData backgroundMapData) + { + if (backgroundMapData == null) + { + throw new ArgumentNullException(nameof(backgroundMapData)); + } + + Data = backgroundMapData; + } + + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.BackgroundMapDataContainerProperties_Name_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.BackgroundMapDataContainerProperties_Name_Description))] + public string Name + { + get + { + return data.IsConfigured ? data.Name : string.Empty; + } + } + + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.BackgroundMapDataContainerProperties_Transparency_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.BackgroundMapDataContainerProperties_Transparency_Description))] + public RoundedDouble Transparency + { + get + { + return data.Transparency; + } + set + { + data.Transparency = value; + data.NotifyObservers(); + } + } + + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.BackgroundMapDataContainerProperties_IsVisible_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.BackgroundMapDataContainerProperties_IsVisible_Description))] + public bool IsVisible + { + get + { + return data.IsVisible; + } + set + { + data.IsVisible = value; + data.NotifyObservers(); + } + } + + [DynamicVisibleValidationMethod] + public bool DynamicVisibleValidationMethod(string propertyName) + { + return data.IsConfigured + && data.BackgroundMapDataType == BackgroundMapDataType.Wmts + && WmtsProperties.Contains(propertyName); + } + + #region Wmts MapData + + [DynamicVisible] + [ResourcesCategory(typeof(Resources), nameof(Resources.BackgroundWmtsMapDataContainerProperties_WMTS_Category))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.BackgroundWmtsMapDataContainerProperties_Url_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.BackgroundWmtsMapDataContainerProperties_Url_Description))] + public string SourceCapabilitiesUrl + { + get + { + return GetBackgroundMapDataParameter(data, nameof(SourceCapabilitiesUrl)); + } + } + + [DynamicVisible] + [ResourcesCategory(typeof(Resources), nameof(Resources.BackgroundWmtsMapDataContainerProperties_WMTS_Category))] + [ResourcesDisplayName(typeof(GisFormsResources), nameof(GisFormsResources.WmtsCapability_MapLayer_Id))] + [ResourcesDescription(typeof(Resources), nameof(Resources.BackgroundWmtsMapDataContainerProperties_SelectedCapabilityIdentifier_Description))] + public string SelectedCapabilityIdentifier + { + get + { + return GetBackgroundMapDataParameter(data, nameof(SelectedCapabilityIdentifier)); + } + } + + [DynamicVisible] + [ResourcesCategory(typeof(Resources), nameof(Resources.BackgroundWmtsMapDataContainerProperties_WMTS_Category))] + [ResourcesDisplayName(typeof(GisFormsResources), nameof(GisFormsResources.WmtsCapability_MapLayer_Format))] + [ResourcesDescription(typeof(Resources), nameof(Resources.BackgroundWmtsMapDataContainerProperties_PreferredFormat_Description))] + public string PreferredFormat + { + get + { + return GetBackgroundMapDataParameter(data, nameof(PreferredFormat)); + } + } + + private string GetBackgroundMapDataParameter(BackgroundMapData backgroundMapData, string parameterName) + { + if (backgroundMapData.IsConfigured + && backgroundMapData.BackgroundMapDataType == BackgroundMapDataType.Wmts + && WmtsProperties.Contains(parameterName) + && backgroundMapData.Parameters.ContainsKey(parameterName)) + { + return backgroundMapData.Parameters[parameterName]; + } + + return string.Empty; + } + + private IEnumerable WmtsProperties + { + get + { + yield return nameof(SourceCapabilitiesUrl); + yield return nameof(SelectedCapabilityIdentifier); + yield return nameof(PreferredFormat); + } + } + + #endregion + } +} \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Ringtoets.Integration.Forms.csproj =================================================================== diff -u -r99f9004206bfb9de084275d749b7aeccafd6da18 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Ringtoets.Integration.Forms.csproj (.../Ringtoets.Integration.Forms.csproj) (revision 99f9004206bfb9de084275d749b7aeccafd6da18) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Ringtoets.Integration.Forms.csproj (.../Ringtoets.Integration.Forms.csproj) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -60,7 +60,7 @@ - + Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs (.../AssessmentSectionView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs (.../AssessmentSectionView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -36,11 +36,14 @@ { private readonly Observer assessmentSectionObserver; private readonly Observer hydraulicBoundaryDatabaseObserver; + private readonly Observer backgroundMapDataObserver; private readonly MapDataCollection mapDataCollection; private readonly MapLineData referenceLineMapData; private readonly MapPointData hydraulicBoundaryLocationsMapData; + private WmtsMapData backgroundMapData; + private IAssessmentSection data; /// @@ -60,6 +63,7 @@ UpdateMapData(); }); hydraulicBoundaryDatabaseObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); mapDataCollection = new MapDataCollection(Resources.AssessmentSectionMap_DisplayName); referenceLineMapData = RingtoetsMapDataFactory.CreateReferenceLineMapData(); @@ -80,7 +84,8 @@ data = value as IAssessmentSection; assessmentSectionObserver.Observable = data; - hydraulicBoundaryDatabaseObserver.Observable = data != null ? data.HydraulicBoundaryDatabase : null; + hydraulicBoundaryDatabaseObserver.Observable = data?.HydraulicBoundaryDatabase; + backgroundMapDataObserver.Observable = data?.BackgroundMapData2; if (data == null) { @@ -91,8 +96,10 @@ { SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -117,6 +124,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs =================================================================== diff -u -rb0af17a5bd9c637b182784a75123ad2ca898b152 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision b0af17a5bd9c637b182784a75123ad2ca898b152) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -94,7 +94,6 @@ using RingtoetsCommonIOResources = Ringtoets.Common.IO.Properties.Resources; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; using RingtoetsCommonServiceResources = Ringtoets.Common.Service.Properties.Resources; -using RingtoetsCommonIoResources = Ringtoets.Common.IO.Properties.Resources; using RingtoetsIntegrationPluginResources = Ringtoets.Integration.Plugin.Properties.Resources; using BaseResources = Core.Common.Base.Properties.Resources; using GuiResources = Core.Common.Gui.Properties.Resources; @@ -275,9 +274,9 @@ { yield return new PropertyInfo(); yield return new PropertyInfo(); - yield return new PropertyInfo + yield return new PropertyInfo { - CreateInstance = container => new BackgroundMapDataContainerProperties(container) + CreateInstance = container => new BackgroundMapDataProperties(container) }; yield return new PropertyInfo(); yield return new PropertyInfo @@ -515,14 +514,14 @@ OnNodeRemoved = AssessmentSectionOnNodeRemoved }; - yield return new TreeNodeInfo + yield return new TreeNodeInfo { Text = container => RingtoetsIntegrationPluginResources.RingtoetsPlugin_BackgroundMapDataContext_Text, Image = container => RingtoetsFormsResources.Map, - ContextMenuStrip = BackgroundMapDataContainerMenuStrip, - ForeColor = container => container.MapData != null && container.MapData.IsConfigured ? - Color.FromKnownColor(KnownColor.ControlText) : - Color.FromKnownColor(KnownColor.GrayText) + ContextMenuStrip = BackgroundMapDataMenuStrip, + ForeColor = data => data.IsConfigured ? + Color.FromKnownColor(KnownColor.ControlText) : + Color.FromKnownColor(KnownColor.GrayText) }; yield return new TreeNodeInfo @@ -884,32 +883,32 @@ } } - #region BackgroundMapDataContext treeNodeInfo + #region BackgroundMapData treeNodeInfo - private ContextMenuStrip BackgroundMapDataContainerMenuStrip(BackgroundMapDataContainer nodeData, object parentData, TreeViewControl treeViewControl) + private ContextMenuStrip BackgroundMapDataMenuStrip(BackgroundMapData nodeData, object parentData, TreeViewControl treeViewControl) { var assessmentSection = parentData as IAssessmentSection; var mapDataItem = new StrictContextMenuItem( RingtoetsIntegrationPluginResources.BackgroundMapData_SelectMapData, RingtoetsIntegrationPluginResources.BackgroundMapData_SelectMapData_Tooltip, - RingtoetsCommonFormsResources.MapsIcon, (sender, args) => SelectMapData(assessmentSection, nodeData)); + RingtoetsCommonFormsResources.MapsIcon, (sender, args) => { SelectMapData(assessmentSection, nodeData); }); return Gui.Get(nodeData, treeViewControl) .AddCustomItem(mapDataItem) .AddPropertiesItem() .Build(); } - private void SelectMapData(IAssessmentSection assessmentSection, BackgroundMapDataContainer container) + private void SelectMapData(IAssessmentSection assessmentSection, BackgroundMapData backgroundMapData) { if (assessmentSection == null) { return; } - WmtsMapData currentMapData = container.MapData as WmtsMapData; - using (var dialog = new BackgroundMapDataSelectionDialog(Gui.MainWindow, currentMapData)) + WmtsMapData currentData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + using (var dialog = new BackgroundMapDataSelectionDialog(Gui.MainWindow, currentData)) { if (dialog.ShowDialog() == DialogResult.OK) { @@ -920,9 +919,27 @@ private static void SetSelectedMapData(IAssessmentSection assessmentSection, ImageBasedMapData selectedMapData) { - assessmentSection.BackgroundMapData.MapData = selectedMapData; - assessmentSection.BackgroundMapData.IsVisible = selectedMapData != null; - assessmentSection.BackgroundMapData.NotifyObservers(); + assessmentSection.BackgroundMapData2.Name = string.Empty; + assessmentSection.BackgroundMapData2.IsVisible = false; + assessmentSection.BackgroundMapData2.Parameters.Clear(); + + if (selectedMapData != null) + { + selectedMapData.IsVisible = true; + assessmentSection.BackgroundMapData2.IsVisible = selectedMapData.IsVisible; + assessmentSection.BackgroundMapData2.IsConfigured = selectedMapData.IsConfigured; + assessmentSection.BackgroundMapData2.Name = selectedMapData.Name; + + var selectedWmtsMapData = selectedMapData as WmtsMapData; + if (selectedWmtsMapData != null) + { + assessmentSection.BackgroundMapData2.Parameters["SourceCapabilitiesUrl"] = selectedWmtsMapData.SourceCapabilitiesUrl; + assessmentSection.BackgroundMapData2.Parameters["SelectedCapabilityIdentifier"] = selectedWmtsMapData.SelectedCapabilityIdentifier; + assessmentSection.BackgroundMapData2.Parameters["PreferredFormat"] = selectedWmtsMapData.PreferredFormat; + } + } + + assessmentSection.BackgroundMapData2.NotifyObservers(); assessmentSection.NotifyObservers(); } @@ -1101,7 +1118,7 @@ { var childNodes = new List { - nodeData.BackgroundMapData, + nodeData.BackgroundMapData2, new ReferenceLineContext(nodeData), new FailureMechanismContributionContext(nodeData.FailureMechanismContribution, nodeData), new HydraulicBoundaryDatabaseContext(nodeData), Fisheye: Tag b519fc798c63691f04bb8008b562a94ed9232d51 refers to a dead (removed) revision in file `Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/PropertyClasses/BackgroundMapDataContainerPropertiesTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/PropertyClasses/BackgroundMapDataPropertiesTest.cs =================================================================== diff -u --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/PropertyClasses/BackgroundMapDataPropertiesTest.cs (revision 0) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/PropertyClasses/BackgroundMapDataPropertiesTest.cs (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -0,0 +1,351 @@ +// 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 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.ComponentModel; +using Core.Common.Base; +using Core.Common.Base.Data; +using Core.Common.Gui.PropertyBag; +using Core.Common.TestUtil; +using Core.Components.Gis.Data; +using Core.Components.Gis.TestUtil; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.TestUtil; +using Ringtoets.Integration.Forms.PropertyClasses; + +namespace Ringtoets.Integration.Forms.Test.PropertyClasses +{ + [TestFixture] + public class BackgroundMapDataPropertiesTest + { + private const int requiredNamePropertyIndex = 0; + private const int requiredTransparencyPropertyIndex = 1; + private const int requiredVisibilityPropertyIndex = 2; + + private const int wmtsUrlPropertyIndex = 3; + private const int wmtsSelectedCapabilityPropertyIndex = 4; + private const int wmtsPreferredFormatPropertyIndex = 5; + + [Test] + public void Constructor_ContainerNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => new BackgroundMapDataProperties(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("backgroundMapData", paramName); + } + + [Test] + public void Constructor_ValidContainer_ExpectedValues() + { + // Setup + var backgroundMapData = new BackgroundMapData(); + + // Call + var properties = new BackgroundMapDataProperties(backgroundMapData); + + // Assert + Assert.IsInstanceOf>(properties); + Assert.AreSame(backgroundMapData, properties.Data); + } + + [Test] + public void GetProperties_ContainerWithoutMapData_ReturnExpectedValues() + { + // Setup + var backgroundMapData = new BackgroundMapData(); + + // Call + var properties = new BackgroundMapDataProperties(backgroundMapData); + + // Assert + Assert.AreEqual(backgroundMapData.IsVisible, properties.IsVisible); + Assert.AreEqual(backgroundMapData.Transparency, properties.Transparency); + Assert.AreEqual(string.Empty, properties.Name); + Assert.AreEqual(string.Empty, properties.SourceCapabilitiesUrl); + Assert.AreEqual(string.Empty, properties.SelectedCapabilityIdentifier); + Assert.AreEqual(string.Empty, properties.PreferredFormat); + } + + [Test] + public void GetProperties_ContainerWithConfiguredMapData_ReturnExpectedValues() + { + // Setup + const string name = "A"; + + var mapData = new TestImageBasedMapData(name, true); + + var backGroundMapData = new BackgroundMapData + { + Name = mapData.Name, + IsVisible = false, + Transparency = (RoundedDouble)0.5, + IsConfigured = mapData.IsConfigured + }; + + // Call + var properties = new BackgroundMapDataProperties(backGroundMapData); + + // Assert + Assert.AreEqual(backGroundMapData.IsVisible, properties.IsVisible); + Assert.AreEqual(backGroundMapData.Transparency, properties.Transparency); + Assert.AreEqual(name, properties.Name); + Assert.AreEqual(string.Empty, properties.SourceCapabilitiesUrl); + Assert.AreEqual(string.Empty, properties.SelectedCapabilityIdentifier); + Assert.AreEqual(string.Empty, properties.PreferredFormat); + } + + [Test] + public void GetProperties_ContainerWithWmtsMapData_ReturnExpectedValues() + { + // Setup + var mapData = WmtsMapData.CreateDefaultPdokMapData(); + + var backgroundMapData = new BackgroundMapData + { + IsVisible = false, + Transparency = (RoundedDouble)0.5, + Name = mapData.Name, + IsConfigured = mapData.IsConfigured, + BackgroundMapDataType = BackgroundMapDataType.Wmts, + Parameters = + { + { "SourceCapabilitiesUrl", mapData.SourceCapabilitiesUrl }, + { "SelectedCapabilityIdentifier", mapData.SelectedCapabilityIdentifier }, + { "PreferredFormat", mapData.PreferredFormat } + } + }; + + // Call + var properties = new BackgroundMapDataProperties(backgroundMapData); + + // Assert + Assert.AreEqual(backgroundMapData.IsVisible, properties.IsVisible); + Assert.AreEqual(backgroundMapData.Transparency, properties.Transparency); + Assert.AreEqual(mapData.Name, properties.Name); + Assert.AreEqual(mapData.SourceCapabilitiesUrl, properties.SourceCapabilitiesUrl); + Assert.AreEqual(mapData.SelectedCapabilityIdentifier, properties.SelectedCapabilityIdentifier); + Assert.AreEqual(mapData.PreferredFormat, properties.PreferredFormat); + } + + [Test] + public void GetProperties_ContainerWithUnconfiguredMapData_ReturnExpectedValues() + { + // Setup + const string name = "A"; + + var mapData = new TestImageBasedMapData(name, false); + + var backgroundMapData = new BackgroundMapData + { + Name = mapData.Name, + Transparency = mapData.Transparency, + IsVisible = mapData.IsVisible, + IsConfigured = mapData.IsConfigured + }; + + // Call + var properties = new BackgroundMapDataProperties(backgroundMapData); + + // Assert + Assert.AreEqual(backgroundMapData.IsVisible, properties.IsVisible); + Assert.AreEqual(backgroundMapData.Transparency, properties.Transparency); + Assert.AreEqual(string.Empty, properties.Name); + } + + [Test] + public void SetProperties_IndividualProperties_UpdateDataAndNotifyObservers() + { + // Setup + const int numberOfChangedProperties = 2; + + var mockRepository = new MockRepository(); + var observer = mockRepository.StrictMock(); + observer.Expect(o => o.UpdateObserver()).Repeat.Times(numberOfChangedProperties); + mockRepository.ReplayAll(); + + var backgroundMapData = new BackgroundMapData(); + backgroundMapData.Attach(observer); + + var properties = new BackgroundMapDataProperties(backgroundMapData); + + var random = new Random(123); + bool newVisibility = random.NextBoolean(); + RoundedDouble newTransparency = random.NextRoundedDouble(); + + // Call + properties.IsVisible = newVisibility; + properties.Transparency = newTransparency; + + // Assert + Assert.AreEqual(newTransparency, properties.Transparency, properties.Transparency.GetAccuracy()); + Assert.AreEqual(newVisibility, properties.IsVisible); + + mockRepository.VerifyAll(); + } + + [Test] + public void Constructor_WithoutMapData_PropertiesHaveExpectedAttributesValues() + { + // Setup + var backgroundMapData = new BackgroundMapData(); + + // Call + var properties = new BackgroundMapDataProperties(backgroundMapData); + + // Assert + PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); + Assert.AreEqual(3, dynamicProperties.Count); + + PropertyDescriptor nameProperty = dynamicProperties[requiredNamePropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty, + "Algemeen", + "Omschrijving", + "Omschrijving van de achtergrond kaartlaag.", + true); + + PropertyDescriptor transparencyPropertyIndex = dynamicProperties[requiredTransparencyPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(transparencyPropertyIndex, + "Algemeen", + "Transparantie", + "Transparantie waarmee de achtergrond kaartlaag wordt weergegeven."); + + PropertyDescriptor visibilityProperty = dynamicProperties[requiredVisibilityPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(visibilityProperty, + "Algemeen", + "Weergeven", + "Geeft aan of de geselecteerde achtergrond kaartlaag in alle kaarten van dit traject wordt weergegeven."); + } + + [Test] + public void Constructor_WithUnconfiguredMapData_PropertiesHaveExpectedAttributesValues() + { + // Setup + var testImageBasedMapData = new TestImageBasedMapData("name", false); + var backgroundMapData = new BackgroundMapData + { + Name = testImageBasedMapData.Name, + IsVisible = testImageBasedMapData.IsVisible, + IsConfigured = testImageBasedMapData.IsConfigured, + Transparency = testImageBasedMapData.Transparency + }; + + // Call + var properties = new BackgroundMapDataProperties(backgroundMapData); + + // Assert + PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); + Assert.AreEqual(3, dynamicProperties.Count); + + PropertyDescriptor nameProperty = dynamicProperties[requiredNamePropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty, + "Algemeen", + "Omschrijving", + "Omschrijving van de achtergrond kaartlaag.", + true); + + PropertyDescriptor transparencyPropertyIndex = dynamicProperties[requiredTransparencyPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(transparencyPropertyIndex, + "Algemeen", + "Transparantie", + "Transparantie waarmee de achtergrond kaartlaag wordt weergegeven."); + + PropertyDescriptor visibilityProperty = dynamicProperties[requiredVisibilityPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(visibilityProperty, + "Algemeen", + "Weergeven", + "Geeft aan of de geselecteerde achtergrond kaartlaag in alle kaarten van dit traject wordt weergegeven."); + } + + [Test] + public void Constructor_WithWmtsMapData_PropertiesHaveExpectedAttributesValues() + { + // Setup + WmtsMapData defaultPdokMapData = WmtsMapData.CreateDefaultPdokMapData(); + var backgroundMapData = new BackgroundMapData + { + Name = defaultPdokMapData.Name, + Transparency = defaultPdokMapData.Transparency, + IsVisible = defaultPdokMapData.IsVisible, + IsConfigured = defaultPdokMapData.IsConfigured, + BackgroundMapDataType = BackgroundMapDataType.Wmts, + Parameters = + { + { "SourceCapabilitiesUrl", defaultPdokMapData.SourceCapabilitiesUrl }, + { "SelectedCapabilityIdentifier", defaultPdokMapData.SelectedCapabilityIdentifier }, + { "PreferredFormat", defaultPdokMapData.PreferredFormat } + } + }; + + // Call + var properties = new BackgroundMapDataProperties(backgroundMapData); + + // Assert + PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); + Assert.AreEqual(6, dynamicProperties.Count); + + PropertyDescriptor nameProperty = dynamicProperties[requiredNamePropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty, + "Algemeen", + "Omschrijving", + "Omschrijving van de achtergrond kaartlaag.", + true); + + PropertyDescriptor transparencyPropertyIndex = dynamicProperties[requiredTransparencyPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(transparencyPropertyIndex, + "Algemeen", + "Transparantie", + "Transparantie waarmee de achtergrond kaartlaag wordt weergegeven."); + + PropertyDescriptor visibilityProperty = dynamicProperties[requiredVisibilityPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(visibilityProperty, + "Algemeen", + "Weergeven", + "Geeft aan of de geselecteerde achtergrond kaartlaag in alle kaarten van dit traject wordt weergegeven."); + + const string wmtsCategory = "WMTS"; + PropertyDescriptor urlProperty = dynamicProperties[wmtsUrlPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(urlProperty, + wmtsCategory, + "URL", + "Volledige URL naar de Web Map Tile Service (WMTS) die als achtergrond kaartlaag gebruikt wordt.", + true); + + PropertyDescriptor selectedCapabilityProperty = dynamicProperties[wmtsSelectedCapabilityPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(selectedCapabilityProperty, + wmtsCategory, + "Kaartlaag", + "De naam van de geselecteerde kaartlaag.", + true); + + PropertyDescriptor preferredFormatProperty = dynamicProperties[wmtsPreferredFormatPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(preferredFormatProperty, + wmtsCategory, + "Formaat", + "Het type afbeelding die door de geselecteerde kaartlaag aangeleverd wordt.", + true); + } + } +} \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Ringtoets.Integration.Forms.Test.csproj =================================================================== diff -u -r99f9004206bfb9de084275d749b7aeccafd6da18 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Ringtoets.Integration.Forms.Test.csproj (.../Ringtoets.Integration.Forms.Test.csproj) (revision 99f9004206bfb9de084275d749b7aeccafd6da18) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Ringtoets.Integration.Forms.Test.csproj (.../Ringtoets.Integration.Forms.Test.csproj) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -71,7 +71,7 @@ - + @@ -173,6 +173,10 @@ {f0fb401a-3494-4237-9e6d-02cdf77912a8} Core.Components.Gis.TestUtils + + {D24FA2F7-28A7-413B-AFD3-EE10E985630B} + Ringtoets.Common.Forms.TestUtil + {BF753DB5-973B-4ADF-B0F6-9437325C3466} Ringtoets.GrassCoverErosionInwards.Data.TestUtil Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs (.../AssessmentSectionViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs (.../AssessmentSectionViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -29,6 +29,8 @@ using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; +using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.Integration.Forms.Views; namespace Ringtoets.Integration.Forms.Test.Views @@ -111,7 +113,8 @@ view.Data = assessmentSection; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -151,6 +154,9 @@ // Assert Assert.AreSame(assessmentSection, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -255,6 +261,32 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + var assessmentSection = new ObservableTestAssessmentSectionStub(); + using (var view = new AssessmentSectionView()) + { + view.Data = assessmentSection; + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup Fisheye: Tag b519fc798c63691f04bb8008b562a94ed9232d51 refers to a dead (removed) revision in file `Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/PropertyInfos/BackgroundMapDataContainerPropertyInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/PropertyInfos/BackgroundMapDataPropertyInfoTest .cs =================================================================== diff -u --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/PropertyInfos/BackgroundMapDataPropertyInfoTest .cs (revision 0) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/PropertyInfos/BackgroundMapDataPropertyInfoTest .cs (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -0,0 +1,95 @@ +// 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 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.Collections.Generic; +using System.Linq; +using Core.Common.Gui.Plugin; +using Core.Common.Gui.PropertyBag; +using Core.Components.Gis.Data; +using NUnit.Framework; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Integration.Forms.PropertyClasses; + +namespace Ringtoets.Integration.Plugin.Test.PropertyInfos +{ + [TestFixture] + public class BackgroundMapDataPropertyInfoTest + { + private RingtoetsPlugin plugin; + private PropertyInfo info; + + private static readonly WellKnownTileSourceMapData wellKnownMapData = new WellKnownTileSourceMapData(WellKnownTileSource.BingRoads); + private static readonly WmtsMapData wmtsMapData = WmtsMapData.CreateDefaultPdokMapData(); + + private static IEnumerable ValidBackgroundMapDatas + { + get + { + yield return new TestCaseData(new BackgroundMapData()); + yield return new TestCaseData(new BackgroundMapData + { + Name = wellKnownMapData.Name, + BackgroundMapDataType = BackgroundMapDataType.WellKnown, + IsConfigured = wellKnownMapData.IsConfigured + }); + yield return new TestCaseData(new BackgroundMapData + { + Name = wmtsMapData.Name, + BackgroundMapDataType = BackgroundMapDataType.Wmts, + IsConfigured = wmtsMapData.IsConfigured + }); + } + } + + [SetUp] + public void SetUp() + { + plugin = new RingtoetsPlugin(); + info = plugin.GetPropertyInfos().First(tni => tni.PropertyObjectType == typeof(BackgroundMapDataProperties)); + } + + [TearDown] + public void TearDown() + { + plugin.Dispose(); + } + + [Test] + public void Initialized_Always_ExpectedPropertiesSet() + { + // Assert + Assert.AreEqual(typeof(BackgroundMapData), info.DataType); + Assert.AreEqual(typeof(BackgroundMapDataProperties), info.PropertyObjectType); + } + + [Test] + [TestCaseSource(nameof(ValidBackgroundMapDatas))] + public void CreateInstance_ValidBackgroundMapData_ReturnBackgroundMapDataProperties(BackgroundMapData backgroundMapData) + { + // Call + IObjectProperties objectProperties = info.CreateInstance(backgroundMapData); + + // Assert + Assert.IsInstanceOf(objectProperties); + Assert.AreSame(backgroundMapData, objectProperties.Data); + } + } +} \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Ringtoets.Integration.Plugin.Test.csproj =================================================================== diff -u -rae74507edbfc4fe632ba5f964a147aff630dfe6e -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Ringtoets.Integration.Plugin.Test.csproj (.../Ringtoets.Integration.Plugin.Test.csproj) (revision ae74507edbfc4fe632ba5f964a147aff630dfe6e) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Ringtoets.Integration.Plugin.Test.csproj (.../Ringtoets.Integration.Plugin.Test.csproj) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -87,14 +87,14 @@ - + - + Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs =================================================================== diff -u -r7963bd77ea5540754906c7e994f2687e33a89dde -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs (.../RingtoetsPluginTest.cs) (revision 7963bd77ea5540754906c7e994f2687e33a89dde) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs (.../RingtoetsPluginTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -217,8 +217,8 @@ PluginTestHelper.AssertPropertyInfoDefined( propertyInfos, - typeof(BackgroundMapDataContainer), - typeof(BackgroundMapDataContainerProperties)); + typeof(BackgroundMapData), + typeof(BackgroundMapDataProperties)); PluginTestHelper.AssertPropertyInfoDefined( propertyInfos, @@ -406,7 +406,7 @@ // Assert Assert.AreEqual(26, treeNodeInfos.Length); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(AssessmentSection))); - Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(BackgroundMapDataContainer))); + Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(BackgroundMapData))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(ReferenceLineContext))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(FailureMechanismContext))); Assert.IsTrue(treeNodeInfos.Any(tni => tni.TagType == typeof(CategoryTreeFolder))); Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/AssessmentSectionTreeNodeInfoTest.cs =================================================================== diff -u -r9c1789fd6fa33b6ea18339bf2474102471ef4510 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/AssessmentSectionTreeNodeInfoTest.cs (.../AssessmentSectionTreeNodeInfoTest.cs) (revision 9c1789fd6fa33b6ea18339bf2474102471ef4510) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/AssessmentSectionTreeNodeInfoTest.cs (.../AssessmentSectionTreeNodeInfoTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -182,8 +182,8 @@ // Assert Assert.AreEqual(23, objects.Length); - var backgroundMapData = (BackgroundMapDataContainer) objects[0]; - Assert.AreSame(assessmentSection.BackgroundMapData, backgroundMapData); + var backgroundMapData = (BackgroundMapData) objects[0]; + Assert.AreSame(assessmentSection.BackgroundMapData2, backgroundMapData); var referenceLineContext = (ReferenceLineContext) objects[1]; Assert.AreSame(assessmentSection, referenceLineContext.WrappedData); Fisheye: Tag b519fc798c63691f04bb8008b562a94ed9232d51 refers to a dead (removed) revision in file `Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/BackgroundMapDataContainerTreeNodeInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/BackgroundMapDataTreeNodeInfoTest.cs =================================================================== diff -u --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/BackgroundMapDataTreeNodeInfoTest.cs (revision 0) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/BackgroundMapDataTreeNodeInfoTest.cs (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -0,0 +1,497 @@ +// 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 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.Drawing; +using System.Linq; +using System.Windows.Forms; +using Core.Common.Base; +using Core.Common.Controls.TreeView; +using Core.Common.Gui; +using Core.Common.Gui.Commands; +using Core.Common.Gui.ContextMenu; +using Core.Common.Gui.Forms.MainWindow; +using Core.Common.Gui.TestUtil.ContextMenu; +using Core.Common.TestUtil; +using Core.Components.Gis.Data; +using NUnit.Extensions.Forms; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.TestUtil; +using Ringtoets.Integration.Forms; +using Ringtoets.Integration.Forms.Properties; +using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; + +namespace Ringtoets.Integration.Plugin.Test.TreeNodeInfos +{ + [TestFixture] + public class BackgroundMapDataTreeNodeInfoTest : NUnitFormTest + { + private const int selectContextMenuIndex = 0; + + [Test] + public void Initialized_Always_ExpectedPropertiesSet() + { + // Setup + using (var plugin = new RingtoetsPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + // Assert + Assert.IsNotNull(info.Text); + Assert.IsNotNull(info.ForeColor); + Assert.IsNotNull(info.Image); + Assert.IsNotNull(info.ContextMenuStrip); + Assert.IsNull(info.EnsureVisibleOnCreate); + Assert.IsNull(info.ExpandOnCreate); + Assert.IsNull(info.ChildNodeObjects); + Assert.IsNull(info.CanRename); + Assert.IsNull(info.OnNodeRenamed); + Assert.IsNull(info.CanRemove); + Assert.IsNull(info.OnNodeRemoved); + Assert.IsNull(info.CanCheck); + Assert.IsNull(info.IsChecked); + Assert.IsNull(info.OnNodeChecked); + Assert.IsNull(info.CanDrag); + Assert.IsNull(info.CanDrop); + Assert.IsNull(info.CanInsert); + Assert.IsNull(info.OnDrop); + } + } + + [Test] + public void Text_Always_ReturnsName() + { + // Setup + var backgroundMapData = new BackgroundMapData(); + + using (var plugin = new RingtoetsPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + // Call + string text = info.Text(backgroundMapData); + + // Assert + Assert.AreEqual("Achtergrondkaart", text); + } + } + + [Test] + public void Image_Always_ReturnsSetImage() + { + // Setup + var backgroundMapData = new BackgroundMapData(); + + using (var plugin = new RingtoetsPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + // Call + Image image = info.Image(backgroundMapData); + + // Assert + TestHelper.AssertImagesAreEqual(Resources.Map, image); + } + } + + [Test] + public void ForeColor_ConnectedMapData_ReturnControlText() + { + WmtsMapData mapData = WmtsMapData.CreateDefaultPdokMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(mapData); + + using (var plugin = new RingtoetsPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + // Call + Color image = info.ForeColor(backgroundMapData); + + // Assert + Assert.AreEqual(Color.FromKnownColor(KnownColor.ControlText), image); + } + } + + [Test] + public void ForeColor_UnconnectedMapData_ReturnGrayText() + { + WmtsMapData mapData = WmtsMapData.CreateUnconnectedMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(mapData); + + using (var plugin = new RingtoetsPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + // Call + Color image = info.ForeColor(backgroundMapData); + + // Assert + Assert.AreEqual(Color.FromKnownColor(KnownColor.GrayText), image); + } + } + + [Test] + public void ForeColor_MapDataNull_ReturnGrayText() + { + var backgroundMapData = new BackgroundMapData(); + + using (var plugin = new RingtoetsPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + // Call + Color image = info.ForeColor(backgroundMapData); + + // Assert + Assert.AreEqual(Color.FromKnownColor(KnownColor.GrayText), image); + } + } + + [Test] + public void ContextMenuStrip_Always_CallsBuilder() + { + // Setup + var mockRepository = new MockRepository(); + + var menuBuilderMock = mockRepository.StrictMock(); + using (mockRepository.Ordered()) + { + menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddPropertiesItem()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.Build()).Return(null); + } + + using (var treeViewControl = new TreeViewControl()) + { + var gui = mockRepository.Stub(); + gui.Stub(g => g.Get(null, treeViewControl)).Return(menuBuilderMock); + gui.Stub(g => g.ProjectOpened += null).IgnoreArguments(); + gui.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); + mockRepository.ReplayAll(); + + using (var plugin = new RingtoetsPlugin()) + { + var info = GetInfo(plugin); + plugin.Gui = gui; + + // Call + info.ContextMenuStrip(null, null, treeViewControl); + } + } + // Assert + mockRepository.VerifyAll(); + } + + [Test] + public void ContextMenuStrip_Always_ContextMenuItemSelectMapLayerEnabled() + { + // Setup + var mockRepository = new MockRepository(); + var backgroundMapData = new BackgroundMapData(); + + var assessmentSection = mockRepository.Stub(); + using (var treeViewControl = new TreeViewControl()) + { + var gui = mockRepository.Stub(); + gui.Stub(g => g.Get(backgroundMapData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.ProjectOpened += null).IgnoreArguments(); + gui.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); + mockRepository.ReplayAll(); + + using (var plugin = new RingtoetsPlugin()) + { + var info = GetInfo(plugin); + plugin.Gui = gui; + + // Call + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(backgroundMapData, assessmentSection, treeViewControl)) + { + const string expectedItemText = "Selecteren..."; + const string expectedItemTooltip = "Selecteer een achtergrondkaart."; + TestHelper.AssertContextMenuStripContainsItem(contextMenu, selectContextMenuIndex, + expectedItemText, expectedItemTooltip, + RingtoetsCommonFormsResources.MapsIcon); + } + } + } + // Assert + mockRepository.VerifyAll(); + } + + [Test] + public void GivenNoMapDataSet_WhenSelectingValidMapDataFromContextMenu_ThenMapDataSetAndNotifiesObserver() + { + // Given + var mockRepository = new MockRepository(); + var assessmentSectionObserver = mockRepository.StrictMock(); + assessmentSectionObserver.Expect(o => o.UpdateObserver()); + + var backgroundMapDataObserver = mockRepository.StrictMock(); + backgroundMapDataObserver.Expect(o => o.UpdateObserver()); + + WmtsMapData mapData = WmtsMapData.CreateUnconnectedMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(mapData); + + using (var treeViewControl = new TreeViewControl()) + using (var plugin = new RingtoetsPlugin()) + { + var viewCommands = mockRepository.Stub(); + var mainWindow = mockRepository.Stub(); + + var gui = mockRepository.Stub(); + gui.Stub(g => g.MainWindow).Return(mainWindow); + gui.Stub(g => g.ProjectOpened += null).IgnoreArguments(); + gui.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); + gui.Stub(g => g.ViewCommands).Return(viewCommands); + gui.Stub(cmp => cmp.Get(backgroundMapData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + mockRepository.ReplayAll(); + + var assessmentSection = new ObservableTestAssessmentSectionStub(); + assessmentSection.Attach(assessmentSectionObserver); + assessmentSection.BackgroundMapData2.Attach(backgroundMapDataObserver); + + DialogBoxHandler = (name, wnd) => + { + var tester = (BackgroundMapDataSelectionDialog) new FormTester(name).TheObject; + tester.DialogResult = DialogResult.OK; + tester.Close(); + }; + + TreeNodeInfo info = GetInfo(plugin); + plugin.Gui = gui; + + using (ContextMenuStrip contextMenuStrip = info.ContextMenuStrip(backgroundMapData, assessmentSection, treeViewControl)) + { + // When + contextMenuStrip.Items[selectContextMenuIndex].PerformClick(); + + // Then + AssertBackgroundMapDataProperties(mapData, assessmentSection.BackgroundMapData2); + } + } + mockRepository.VerifyAll(); + } + + [Test] + public void GivenNoMapDataSet_WhenSelectingMapDataFromContextMenuCancelled_ThenNoObserversNotified() + { + // Given + var mockRepository = new MockRepository(); + var assessmentSectionObserver = mockRepository.StrictMock(); + var backgroundMapDataObserver = mockRepository.StrictMock(); + + var backgroundMapData = new BackgroundMapData + { + Name = "background map data" + }; + + using (var treeViewControl = new TreeViewControl()) + using (var plugin = new RingtoetsPlugin()) + { + var viewCommands = mockRepository.Stub(); + var mainWindow = mockRepository.Stub(); + + var gui = mockRepository.Stub(); + gui.Stub(g => g.MainWindow).Return(mainWindow); + gui.Stub(g => g.ProjectOpened += null).IgnoreArguments(); + gui.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); + gui.Stub(g => g.ViewCommands).Return(viewCommands); + gui.Stub(cmp => cmp.Get(backgroundMapData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + mockRepository.ReplayAll(); + + var assessmentSection = new ObservableTestAssessmentSectionStub(); + assessmentSection.Attach(assessmentSectionObserver); + assessmentSection.BackgroundMapData2.Attach(backgroundMapDataObserver); + + BackgroundMapData oldBackgroundMapData = assessmentSection.BackgroundMapData2; + + DialogBoxHandler = (name, wnd) => + { + var tester = (BackgroundMapDataSelectionDialog) new FormTester(name).TheObject; + tester.DialogResult = DialogResult.Cancel; + tester.Close(); + }; + + TreeNodeInfo info = GetInfo(plugin); + plugin.Gui = gui; + + using (ContextMenuStrip contextMenuStrip = info.ContextMenuStrip(backgroundMapData, assessmentSection, treeViewControl)) + { + // When + contextMenuStrip.Items[selectContextMenuIndex].PerformClick(); + + // Then + AssertBackgroundMapDataProperties(oldBackgroundMapData, assessmentSection.BackgroundMapData2); + } + } + mockRepository.VerifyAll(); + } + + [Test] + public void GivenMapDataSet_WhenSelectingValidMapDataFromContextMenu_ThenMapDataSetAndNotifiesObserver() + { + // Given + var mockRepository = new MockRepository(); + var assessmentSectionObserver = mockRepository.StrictMock(); + assessmentSectionObserver.Expect(o => o.UpdateObserver()); + + var backgroundMapDataObserver = mockRepository.StrictMock(); + backgroundMapDataObserver.Expect(o => o.UpdateObserver()); + + WmtsMapData mapData = WmtsMapData.CreateUnconnectedMapData(); + + WmtsMapData newMapData = WmtsMapData.CreateDefaultPdokMapData(); + var newBackgroundMapdata = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(newMapData); + + var assessmentSection = new ObservableTestAssessmentSectionStub(); + + using (var treeViewControl = new TreeViewControl()) + using (var plugin = new RingtoetsPlugin()) + { + var viewCommands = mockRepository.Stub(); + var mainWindow = mockRepository.Stub(); + + var gui = mockRepository.Stub(); + gui.Stub(g => g.MainWindow).Return(mainWindow); + gui.Stub(g => g.ProjectOpened += null).IgnoreArguments(); + gui.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); + gui.Stub(g => g.ViewCommands).Return(viewCommands); + gui.Stub(cmp => cmp.Get(newBackgroundMapdata, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + mockRepository.ReplayAll(); + + assessmentSection.Attach(assessmentSectionObserver); + assessmentSection.BackgroundMapData2.Attach(backgroundMapDataObserver); + assessmentSection.BackgroundMapData2.Name = mapData.Name; + assessmentSection.BackgroundMapData2.IsVisible = mapData.IsVisible; + assessmentSection.BackgroundMapData2.IsConfigured = mapData.IsConfigured; + assessmentSection.BackgroundMapData2.Transparency = mapData.Transparency; + assessmentSection.BackgroundMapData2.BackgroundMapDataType = BackgroundMapDataType.Wmts; + assessmentSection.BackgroundMapData2.Parameters["SourceCapabilitiesUrl"] = mapData.SourceCapabilitiesUrl; + assessmentSection.BackgroundMapData2.Parameters["SelectedCapabilityIdentifier"] = mapData.SelectedCapabilityIdentifier; + assessmentSection.BackgroundMapData2.Parameters["PreferredFormat"] = mapData.PreferredFormat; + + DialogBoxHandler = (name, wnd) => + { + var tester = (BackgroundMapDataSelectionDialog) new FormTester(name).TheObject; + tester.DialogResult = DialogResult.OK; + tester.Close(); + }; + + TreeNodeInfo info = GetInfo(plugin); + plugin.Gui = gui; + + using (ContextMenuStrip contextMenuStrip = info.ContextMenuStrip(newBackgroundMapdata, assessmentSection, treeViewControl)) + { + // When + contextMenuStrip.Items[selectContextMenuIndex].PerformClick(); + + // Then + AssertBackgroundMapDataProperties(newMapData, assessmentSection.BackgroundMapData2); + } + } + mockRepository.VerifyAll(); + } + + [Test] + public void GivenMapDataSet_WhenSelectingMapDataFromContextMenuCancelled_ThenNoObserversNotified() + { + // Given + var mockRepository = new MockRepository(); + var assessmentSectionObserver = mockRepository.StrictMock(); + var backgroundMapDataObserver = mockRepository.StrictMock(); + + WmtsMapData mapData = WmtsMapData.CreateUnconnectedMapData(); + BackgroundMapData backgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(mapData); + BackgroundMapData newBackgroundMapData = BackgroundMapDataTestDataGenerator.GetWmtsBackgroundMapData(WmtsMapData.CreateDefaultPdokMapData()); + + using (var treeViewControl = new TreeViewControl()) + using (var plugin = new RingtoetsPlugin()) + { + var viewCommands = mockRepository.Stub(); + var mainWindow = mockRepository.Stub(); + + var gui = mockRepository.Stub(); + gui.Stub(g => g.MainWindow).Return(mainWindow); + gui.Stub(g => g.ProjectOpened += null).IgnoreArguments(); + gui.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); + gui.Stub(g => g.ViewCommands).Return(viewCommands); + gui.Stub(cmp => cmp.Get(newBackgroundMapData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + mockRepository.ReplayAll(); + + var assessmentSection = new ObservableTestAssessmentSectionStub(); + assessmentSection.Attach(assessmentSectionObserver); + assessmentSection.BackgroundMapData2.Attach(backgroundMapDataObserver); + + assessmentSection.BackgroundMapData2.Name = backgroundMapData.Name; + assessmentSection.BackgroundMapData2.IsVisible = backgroundMapData.IsVisible; + assessmentSection.BackgroundMapData2.IsConfigured = backgroundMapData.IsConfigured; + assessmentSection.BackgroundMapData2.Transparency = backgroundMapData.Transparency; + assessmentSection.BackgroundMapData2.BackgroundMapDataType = backgroundMapData.BackgroundMapDataType; + + DialogBoxHandler = (name, wnd) => + { + var tester = (BackgroundMapDataSelectionDialog) new FormTester(name).TheObject; + tester.DialogResult = DialogResult.Cancel; + tester.Close(); + }; + + TreeNodeInfo info = GetInfo(plugin); + plugin.Gui = gui; + + using (ContextMenuStrip contextMenuStrip = info.ContextMenuStrip(newBackgroundMapData, assessmentSection, treeViewControl)) + { + // When + contextMenuStrip.Items[selectContextMenuIndex].PerformClick(); + + // Then + AssertBackgroundMapDataProperties(backgroundMapData, assessmentSection.BackgroundMapData2); + } + } + mockRepository.VerifyAll(); + } + + private static void AssertBackgroundMapDataProperties(WmtsMapData mapData, BackgroundMapData backgroundMapData) + { + Assert.AreEqual(mapData.Name, backgroundMapData.Name); + Assert.IsTrue(backgroundMapData.IsVisible); + Assert.AreEqual(mapData.IsConfigured, backgroundMapData.IsConfigured); + Assert.AreEqual(mapData.Transparency, backgroundMapData.Transparency); + Assert.AreEqual(mapData.SourceCapabilitiesUrl, backgroundMapData.Parameters["SourceCapabilitiesUrl"]); + Assert.AreEqual(mapData.SelectedCapabilityIdentifier, backgroundMapData.Parameters["SelectedCapabilityIdentifier"]); + Assert.AreEqual(mapData.PreferredFormat, backgroundMapData.Parameters["PreferredFormat"]); + } + + private static void AssertBackgroundMapDataProperties(BackgroundMapData expectedBackgroundMapData, BackgroundMapData actualBackgroundMapData) + { + Assert.AreEqual(expectedBackgroundMapData.Name, actualBackgroundMapData.Name); + Assert.AreEqual(expectedBackgroundMapData.IsVisible, actualBackgroundMapData.IsVisible); + Assert.AreEqual(expectedBackgroundMapData.IsConfigured, actualBackgroundMapData.IsConfigured); + Assert.AreEqual(expectedBackgroundMapData.Transparency, actualBackgroundMapData.Transparency); + CollectionAssert.AreEquivalent(expectedBackgroundMapData.Parameters, actualBackgroundMapData.Parameters); + } + + private static TreeNodeInfo GetInfo(RingtoetsPlugin plugin) + { + return plugin.GetTreeNodeInfos().First(tni => tni.TagType == typeof(BackgroundMapData)); + } + } +} \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismView.cs =================================================================== diff -u -rc0f10b1f5b785709615b03e442128e351fe54a30 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismView.cs (.../PipingFailureMechanismView.cs) (revision c0f10b1f5b785709615b03e442128e351fe54a30) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismView.cs (.../PipingFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -46,6 +46,7 @@ private readonly Observer assessmentSectionObserver; private readonly Observer surfaceLinesObserver; private readonly Observer stochasticSoilModelsObserver; + private readonly Observer backgroundMapDataObserver; private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; @@ -61,6 +62,8 @@ private readonly MapPointData hydraulicBoundaryLocationsMapData; private readonly MapLineData calculationsMapData; + private WmtsMapData backgroundMapData; + private PipingFailureMechanismContext data; /// @@ -83,6 +86,7 @@ hydraulicBoundaryDatabaseObserver = new Observer(UpdateMapData); surfaceLinesObserver = new Observer(UpdateMapData); stochasticSoilModelsObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); calculationInputObserver = new RecursiveObserver( UpdateMapData, pcg => pcg.Children.Concat(pcg.Children.OfType().Select(pc => pc.InputParameters))); @@ -130,6 +134,8 @@ calculationGroupObserver.Observable = null; calculationObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -144,10 +150,14 @@ calculationGroupObserver.Observable = data.WrappedData.CalculationsGroup; calculationObserver.Observable = data.WrappedData.CalculationsGroup; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -178,6 +188,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismViewTest.cs =================================================================== diff -u -r99f9004206bfb9de084275d749b7aeccafd6da18 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismViewTest.cs (.../PipingFailureMechanismViewTest.cs) (revision 99f9004206bfb9de084275d749b7aeccafd6da18) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismViewTest.cs (.../PipingFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -26,16 +26,15 @@ using Core.Common.Base.Geometry; using Core.Components.BruTile.TestUtil; using Core.Components.DotSpatial.Forms; -using Core.Components.DotSpatial.TestUtil; using Core.Components.Gis.Data; using Core.Components.Gis.Forms; using NUnit.Framework; -using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.Piping.Data; using Ringtoets.Piping.Data.TestUtil; using Ringtoets.Piping.Forms.PresentationObjects; @@ -161,17 +160,18 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } [Test] public void Data_AssessmentSectionWithBackgroundMapData_BackgroundMapDataSet() { - var mocks = new MockRepository(); - var assessmentSection = new ObservableTestAssessmentSectionStub(); - // Setup + IAssessmentSection assessmentSection = new ObservableTestAssessmentSectionStub(); + using (var view = new PipingFailureMechanismView()) { var failureMechanismContext = new PipingFailureMechanismContext(new PipingFailureMechanism(), assessmentSection); @@ -180,9 +180,10 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } - mocks.VerifyAll(); } [Test] @@ -470,6 +471,32 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new PipingFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new PipingFailureMechanismContext(new PipingFailureMechanism(), assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Views/StabilityPointStructuresFailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Views/StabilityPointStructuresFailureMechanismView.cs (.../StabilityPointStructuresFailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Views/StabilityPointStructuresFailureMechanismView.cs (.../StabilityPointStructuresFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -48,6 +48,7 @@ private readonly Observer hydraulicBoundaryDatabaseObserver; private readonly Observer foreshoreProfilesObserver; private readonly Observer structuresObserver; + private readonly Observer backgroundMapDataObserver; private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; @@ -63,6 +64,8 @@ private readonly MapPointData structuresMapData; private readonly MapLineData calculationsMapData; + private WmtsMapData backgroundMapData; + private StabilityPointStructuresFailureMechanismContext data; /// @@ -90,6 +93,7 @@ UpdateMapData, pcg => pcg.Children.Concat(pcg.Children.OfType>().Select(pc => pc.InputParameters))); calculationGroupObserver = new RecursiveObserver(UpdateMapData, pcg => pcg.Children); calculationObserver = new RecursiveObserver>(UpdateMapData, pcg => pcg.Children); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); mapDataCollection = new MapDataCollection(StabilityPointStructuresDataResources.StabilityPointStructuresFailureMechanism_DisplayName); referenceLineMapData = RingtoetsMapDataFactory.CreateReferenceLineMapData(); @@ -132,6 +136,8 @@ calculationGroupObserver.Observable = null; calculationObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -146,10 +152,14 @@ calculationGroupObserver.Observable = data.WrappedData.CalculationsGroup; calculationObserver.Observable = data.WrappedData.CalculationsGroup; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -180,6 +190,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresFailureMechanismViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresFailureMechanismViewTest.cs (.../StabilityPointStructuresFailureMechanismViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresFailureMechanismViewTest.cs (.../StabilityPointStructuresFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -34,6 +34,7 @@ using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityPointStructures.Data.TestUtil; using Ringtoets.StabilityPointStructures.Forms.PresentationObjects; @@ -131,7 +132,9 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -178,6 +181,9 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -418,6 +424,33 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new StabilityPointStructuresFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new StabilityPointStructuresFailureMechanismContext(new StabilityPointStructuresFailureMechanism(), + assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup Index: Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/Views/StabilityStoneCoverFailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/Views/StabilityStoneCoverFailureMechanismView.cs (.../StabilityStoneCoverFailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/Views/StabilityStoneCoverFailureMechanismView.cs (.../StabilityStoneCoverFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -47,6 +47,7 @@ private readonly Observer assessmentSectionObserver; private readonly Observer hydraulicBoundaryDatabaseObserver; private readonly Observer foreshoreProfilesObserver; + private readonly Observer backgroundMapDataObserver; private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; @@ -61,6 +62,8 @@ private readonly MapLineData foreshoreProfilesMapData; private readonly MapLineData calculationsMapData; + private WmtsMapData backgroundMapData; + private StabilityStoneCoverFailureMechanismContext data; /// @@ -87,6 +90,7 @@ UpdateMapData, pcg => pcg.Children.Concat(pcg.Children.OfType().Select(pc => pc.InputParameters))); calculationGroupObserver = new RecursiveObserver(UpdateMapData, pcg => pcg.Children); calculationObserver = new RecursiveObserver(UpdateMapData, pcg => pcg.Children); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); mapDataCollection = new MapDataCollection(StabilityStoneCoverDataResources.StabilityStoneCoverFailureMechanism_DisplayName); referenceLineMapData = RingtoetsMapDataFactory.CreateReferenceLineMapData(); @@ -126,6 +130,8 @@ calculationGroupObserver.Observable = null; calculationObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -139,10 +145,14 @@ calculationGroupObserver.Observable = data.WrappedData.WaveConditionsCalculationGroup; calculationObserver.Observable = data.WrappedData.WaveConditionsCalculationGroup; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -172,6 +182,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/Views/StabilityStoneCoverFailureMechanismViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/Views/StabilityStoneCoverFailureMechanismViewTest.cs (.../StabilityStoneCoverFailureMechanismViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/Views/StabilityStoneCoverFailureMechanismViewTest.cs (.../StabilityStoneCoverFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -32,6 +32,7 @@ using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.StabilityStoneCover.Data; using Ringtoets.StabilityStoneCover.Forms.PresentationObjects; using Ringtoets.StabilityStoneCover.Forms.Views; @@ -127,7 +128,9 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -174,6 +177,9 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -276,6 +282,34 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new StabilityStoneCoverFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new StabilityStoneCoverFailureMechanismContext(new StabilityStoneCoverFailureMechanism(), + assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_AssessmentSectionUpdated_MapDataUpdated() { // Setup Index: Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Forms/Views/WaveImpactAsphaltCoverFailureMechanismView.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Forms/Views/WaveImpactAsphaltCoverFailureMechanismView.cs (.../WaveImpactAsphaltCoverFailureMechanismView.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Forms/Views/WaveImpactAsphaltCoverFailureMechanismView.cs (.../WaveImpactAsphaltCoverFailureMechanismView.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -47,6 +47,7 @@ private readonly Observer assessmentSectionObserver; private readonly Observer hydraulicBoundaryDatabaseObserver; private readonly Observer foreshoreProfilesObserver; + private readonly Observer backgroundMapDataObserver; private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; @@ -61,6 +62,8 @@ private readonly MapLineData foreshoreProfilesMapData; private readonly MapLineData calculationsMapData; + private WmtsMapData backgroundMapData; + private WaveImpactAsphaltCoverFailureMechanismContext data; /// @@ -82,6 +85,7 @@ }); hydraulicBoundaryDatabaseObserver = new Observer(UpdateMapData); foreshoreProfilesObserver = new Observer(UpdateMapData); + backgroundMapDataObserver = new Observer(UpdateBackgroundMapData); calculationInputObserver = new RecursiveObserver( UpdateMapData, pcg => pcg.Children.Concat(pcg.Children.OfType().Select(pc => pc.InputParameters))); @@ -126,6 +130,8 @@ calculationGroupObserver.Observable = null; calculationObserver.Observable = null; + backgroundMapDataObserver.Observable = null; + Map.Data = null; Map.BackgroundMapData = null; } @@ -139,10 +145,14 @@ calculationGroupObserver.Observable = data.WrappedData.WaveConditionsCalculationGroup; calculationObserver.Observable = data.WrappedData.WaveConditionsCalculationGroup; + backgroundMapDataObserver.Observable = data.Parent.BackgroundMapData2; + SetMapDataFeatures(); + backgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData(data.Parent.BackgroundMapData2); + Map.Data = mapDataCollection; - Map.BackgroundMapData = data.Parent.BackgroundMapData; + Map.BackgroundMapData = backgroundMapData; } } } @@ -172,6 +182,12 @@ base.Dispose(disposing); } + private void UpdateBackgroundMapData() + { + RingtoetsBackgroundMapDataFactory.UpdateBackgroundMapData(backgroundMapData, data.Parent.BackgroundMapData2); + backgroundMapData.NotifyObservers(); + } + private void UpdateMapData() { SetMapDataFeatures(); Index: Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Forms.Test/Views/WaveImpactAsphaltCoverFailureMechanismViewTest.cs =================================================================== diff -u -r31012b85637f7fcf6b28f498fc996edcda2eb505 -rb519fc798c63691f04bb8008b562a94ed9232d51 --- Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Forms.Test/Views/WaveImpactAsphaltCoverFailureMechanismViewTest.cs (.../WaveImpactAsphaltCoverFailureMechanismViewTest.cs) (revision 31012b85637f7fcf6b28f498fc996edcda2eb505) +++ Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Forms.Test/Views/WaveImpactAsphaltCoverFailureMechanismViewTest.cs (.../WaveImpactAsphaltCoverFailureMechanismViewTest.cs) (revision b519fc798c63691f04bb8008b562a94ed9232d51) @@ -32,6 +32,7 @@ using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Common.Forms.Views; using Ringtoets.WaveImpactAsphaltCover.Data; using Ringtoets.WaveImpactAsphaltCover.Forms.PresentationObjects; using Ringtoets.WaveImpactAsphaltCover.Forms.Views; @@ -127,7 +128,9 @@ view.Data = failureMechanismContext; // Assert - Assert.AreSame(assessmentSection.BackgroundMapData, view.Map.BackgroundMapData); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -174,6 +177,9 @@ // Assert Assert.AreSame(failureMechanismContext, view.Data); AssertEmptyMapData(view.Map.Data); + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + assessmentSection.BackgroundMapData2); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); } } @@ -277,6 +283,34 @@ } [Test] + public void GivenChangedBackgroundMapData_WhenBackgroundMapDataObserversNotified_MapDataUpdated() + { + // Given + using (var view = new WaveImpactAsphaltCoverFailureMechanismView()) + { + var assessmentSection = new ObservableTestAssessmentSectionStub(); + view.Data = new WaveImpactAsphaltCoverFailureMechanismContext(new WaveImpactAsphaltCoverFailureMechanism(), + assessmentSection); + + BackgroundMapData backgroundMapData = assessmentSection.BackgroundMapData2; + + backgroundMapData.Name = "some Name"; + backgroundMapData.Parameters["SourceCapabilitiesUrl"] = "some URL"; + backgroundMapData.Parameters["SelectedCapabilityIdentifier"] = "some Identifier"; + backgroundMapData.Parameters["PreferredFormat"] = "image/some Format"; + backgroundMapData.IsConfigured = true; + + // When + backgroundMapData.NotifyObservers(); + + // Then + WmtsMapData expectedWmtsBackgroundMapData = RingtoetsBackgroundMapDataFactory.CreateBackgroundMapData( + backgroundMapData); + MapDataTestHelper.AssertWmtsMapData(expectedWmtsBackgroundMapData, view.Map.BackgroundMapData); + } + } + + [Test] public void UpdateObserver_AssessmentSectionUpdated_MapDataUpdated() { // Setup