Index: Core/Plugins/src/Core.Plugins.Map/Core.Plugins.Map.csproj =================================================================== diff -u -r955a6dc2ceaeb8923ea7459e3d9630282439c277 -r758b0db0a58b0fecd5e3d7d8b5f22d162778ee04 --- Core/Plugins/src/Core.Plugins.Map/Core.Plugins.Map.csproj (.../Core.Plugins.Map.csproj) (revision 955a6dc2ceaeb8923ea7459e3d9630282439c277) +++ Core/Plugins/src/Core.Plugins.Map/Core.Plugins.Map.csproj (.../Core.Plugins.Map.csproj) (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -87,6 +87,7 @@ + Index: Core/Plugins/src/Core.Plugins.Map/PropertyClasses/FeatureBasedMapDataProperties.cs =================================================================== diff -u -r73a045414bb5159fa5dc09c6b15c89fda0eb9cd0 -r758b0db0a58b0fecd5e3d7d8b5f22d162778ee04 --- Core/Plugins/src/Core.Plugins.Map/PropertyClasses/FeatureBasedMapDataProperties.cs (.../FeatureBasedMapDataProperties.cs) (revision 73a045414bb5159fa5dc09c6b15c89fda0eb9cd0) +++ Core/Plugins/src/Core.Plugins.Map/PropertyClasses/FeatureBasedMapDataProperties.cs (.../FeatureBasedMapDataProperties.cs) (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -102,22 +102,22 @@ [ResourcesCategory(typeof(Resources), "Categories_Label")] [ResourcesDisplayName(typeof(Resources), "Mapdata_SelectedMetaDataAttribute_DisplayName")] [ResourcesDescription(typeof(Resources), "Mapdata_SelectedMetaDataAttribute_Description")] - public string SelectedMetaDataAttribute + public SelectableMetaDataAttribute SelectedMetaDataAttribute { get { - return data.SelectedMetaDataAttribute; + return new SelectableMetaDataAttribute(data.SelectedMetaDataAttribute); } set { - data.SelectedMetaDataAttribute = value; + data.SelectedMetaDataAttribute = value.MetaDataAttribute; data.NotifyObservers(); } } - public IEnumerable GetAvailableMetaDataAttributes() + public IEnumerable GetAvailableMetaDataAttributes() { - return data.MetaData; + return data.MetaData.Select(md => new SelectableMetaDataAttribute(md)); } [DynamicReadOnlyValidationMethod] Index: Core/Plugins/src/Core.Plugins.Map/PropertyClasses/IHasMetaData.cs =================================================================== diff -u -r955a6dc2ceaeb8923ea7459e3d9630282439c277 -r758b0db0a58b0fecd5e3d7d8b5f22d162778ee04 --- Core/Plugins/src/Core.Plugins.Map/PropertyClasses/IHasMetaData.cs (.../IHasMetaData.cs) (revision 955a6dc2ceaeb8923ea7459e3d9630282439c277) +++ Core/Plugins/src/Core.Plugins.Map/PropertyClasses/IHasMetaData.cs (.../IHasMetaData.cs) (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -21,6 +21,7 @@ using System.Collections.Generic; using Core.Common.Gui.PropertyBag; +using Core.Plugins.Map.UITypeEditors; namespace Core.Plugins.Map.PropertyClasses { @@ -30,14 +31,14 @@ public interface IHasMetaData : IObjectProperties { /// - /// Gets the selected meta data attribute. + /// Gets the selectable meta data attribute that is selected. /// - string SelectedMetaDataAttribute { get; } + SelectableMetaDataAttribute SelectedMetaDataAttribute { get; } /// - /// Return the collection of available meta data attributes. + /// Return the collection of available selectable meta data attributes. /// - /// The collection of available meta data attributes. - IEnumerable GetAvailableMetaDataAttributes(); + /// The collection of available selectable meta data attributes. + IEnumerable GetAvailableMetaDataAttributes(); } } \ No newline at end of file Index: Core/Plugins/src/Core.Plugins.Map/UITypeEditors/MetaDataAttributeEditor.cs =================================================================== diff -u -r955a6dc2ceaeb8923ea7459e3d9630282439c277 -r758b0db0a58b0fecd5e3d7d8b5f22d162778ee04 --- Core/Plugins/src/Core.Plugins.Map/UITypeEditors/MetaDataAttributeEditor.cs (.../MetaDataAttributeEditor.cs) (revision 955a6dc2ceaeb8923ea7459e3d9630282439c277) +++ Core/Plugins/src/Core.Plugins.Map/UITypeEditors/MetaDataAttributeEditor.cs (.../MetaDataAttributeEditor.cs) (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -30,14 +30,14 @@ /// This class defines a drop down list edit-control from which the user can select a /// meta data attribute from a collection. /// - public class MetaDataAttributeEditor : SelectionEditor + public class MetaDataAttributeEditor : SelectionEditor { - protected override IEnumerable GetAvailableOptions(ITypeDescriptorContext context) + protected override IEnumerable GetAvailableOptions(ITypeDescriptorContext context) { return GetPropertiesObject(context).GetAvailableMetaDataAttributes(); } - protected override string GetCurrentOption(ITypeDescriptorContext context) + protected override SelectableMetaDataAttribute GetCurrentOption(ITypeDescriptorContext context) { return GetPropertiesObject(context).SelectedMetaDataAttribute; } Index: Core/Plugins/src/Core.Plugins.Map/UITypeEditors/SelectableMetaDataAttribute.cs =================================================================== diff -u --- Core/Plugins/src/Core.Plugins.Map/UITypeEditors/SelectableMetaDataAttribute.cs (revision 0) +++ Core/Plugins/src/Core.Plugins.Map/UITypeEditors/SelectableMetaDataAttribute.cs (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -0,0 +1,93 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using Core.Components.Gis.Data; + +namespace Core.Plugins.Map.UITypeEditors +{ + /// + /// Class that represents a attribute in the drop down list edit control + /// for the . + /// + public class SelectableMetaDataAttribute + { + private readonly string metaDataAttribute; + + /// + /// Creates a new instance of . + /// + /// The meta data attribute. + /// Thrown when is null. + public SelectableMetaDataAttribute(string metaDataAttribute) + { + if (metaDataAttribute == null) + { + throw new ArgumentNullException("metaDataAttribute"); + } + + this.metaDataAttribute = metaDataAttribute; + } + + /// + /// Gets the meta data attribute. + /// + public string MetaDataAttribute + { + get + { + return metaDataAttribute; + } + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + if (ReferenceEquals(this, obj)) + { + return true; + } + if (obj.GetType() != GetType()) + { + return false; + } + return Equals((SelectableMetaDataAttribute)obj); + } + + public override int GetHashCode() + { + return metaDataAttribute.GetHashCode(); + } + + private bool Equals(SelectableMetaDataAttribute other) + { + return Equals(metaDataAttribute, other.MetaDataAttribute); + } + + public override string ToString() + { + return metaDataAttribute; + } + } +} \ No newline at end of file Index: Core/Plugins/test/Core.Plugins.Map.Test/Core.Plugins.Map.Test.csproj =================================================================== diff -u -r0d83632a0219af77be977b8dfaed374a0b00998e -r758b0db0a58b0fecd5e3d7d8b5f22d162778ee04 --- Core/Plugins/test/Core.Plugins.Map.Test/Core.Plugins.Map.Test.csproj (.../Core.Plugins.Map.Test.csproj) (revision 0d83632a0219af77be977b8dfaed374a0b00998e) +++ Core/Plugins/test/Core.Plugins.Map.Test/Core.Plugins.Map.Test.csproj (.../Core.Plugins.Map.Test.csproj) (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -92,6 +92,7 @@ TestView.cs + Index: Core/Plugins/test/Core.Plugins.Map.Test/PropertyClasses/FeatureBasedMapDataPropertiesTest.cs =================================================================== diff -u -r74d2d2f32c99bdd4332710e211a717c9e33cf89e -r758b0db0a58b0fecd5e3d7d8b5f22d162778ee04 --- Core/Plugins/test/Core.Plugins.Map.Test/PropertyClasses/FeatureBasedMapDataPropertiesTest.cs (.../FeatureBasedMapDataPropertiesTest.cs) (revision 74d2d2f32c99bdd4332710e211a717c9e33cf89e) +++ Core/Plugins/test/Core.Plugins.Map.Test/PropertyClasses/FeatureBasedMapDataPropertiesTest.cs (.../FeatureBasedMapDataPropertiesTest.cs) (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -28,6 +28,7 @@ using Core.Components.Gis.Features; using Core.Components.Gis.Geometries; using Core.Plugins.Map.PropertyClasses; +using Core.Plugins.Map.UITypeEditors; using NUnit.Framework; using Rhino.Mocks; @@ -58,7 +59,10 @@ public void Data_SetNewMapPointDataInstance_ReturnCorrectPropertyValues() { // Setup - var mapPointData = new MapPointData("Test"); + var mapPointData = new MapPointData("Test") + { + SelectedMetaDataAttribute = string.Empty + }; var properties = new TestFeatureBasedMapDataProperties(); // Call @@ -69,7 +73,7 @@ Assert.AreEqual("Test feature based map data", properties.Type); Assert.AreEqual(mapPointData.IsVisible, properties.IsVisible); Assert.AreEqual(mapPointData.ShowLabels, properties.ShowLabels); - Assert.AreEqual(mapPointData.SelectedMetaDataAttribute, properties.SelectedMetaDataAttribute); + Assert.AreEqual(mapPointData.SelectedMetaDataAttribute, properties.SelectedMetaDataAttribute.MetaDataAttribute); Assert.AreEqual(mapPointData.MetaData, properties.GetAvailableMetaDataAttributes()); } @@ -160,7 +164,7 @@ // Call properties.IsVisible = false; properties.ShowLabels = false; - properties.SelectedMetaDataAttribute = "ID"; + properties.SelectedMetaDataAttribute = new SelectableMetaDataAttribute("ID"); // Assert Assert.IsFalse(mapPointData.IsVisible); Index: Core/Plugins/test/Core.Plugins.Map.Test/UITypeEditors/MetaDataAttributeEditorTest.cs =================================================================== diff -u -r955a6dc2ceaeb8923ea7459e3d9630282439c277 -r758b0db0a58b0fecd5e3d7d8b5f22d162778ee04 --- Core/Plugins/test/Core.Plugins.Map.Test/UITypeEditors/MetaDataAttributeEditorTest.cs (.../MetaDataAttributeEditorTest.cs) (revision 955a6dc2ceaeb8923ea7459e3d9630282439c277) +++ Core/Plugins/test/Core.Plugins.Map.Test/UITypeEditors/MetaDataAttributeEditorTest.cs (.../MetaDataAttributeEditorTest.cs) (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows.Forms.Design; @@ -45,19 +46,14 @@ var editor = new MetaDataAttributeEditor(); // Assert - Assert.IsInstanceOf>(editor); + Assert.IsInstanceOf>(editor); } [Test] public void EditValue_WithCurrentItemNotInAvailableItems_ReturnsOriginalValue() { // Setup - var mapData = new MapPointData("Name"); - - var properties = new MapPointDataProperties - { - Data = mapData - }; + var properties = new ObjectPropertiesWithSelectableMetaDataAttribute(CreateSelectableMetaDataAttribute(), new SelectableMetaDataAttribute[0]); var propertyBag = new DynamicPropertyBag(properties); var editor = new MetaDataAttributeEditor(); var someValue = new object(); @@ -82,27 +78,14 @@ public void EditValue_WithCurrentItemInAvailableItems_ReturnsCurrentItem() { // Setup - const string newValue = "Test 2"; - - var feature = new MapFeature(Enumerable.Empty()); - feature.MetaData["Test"] = "test"; - feature.MetaData[newValue] = "test 2"; - - var mapData = new MapPointData("Name") + SelectableMetaDataAttribute selectableMetaDataAttribute = CreateSelectableMetaDataAttribute(); + var properties = new ObjectPropertiesWithSelectableMetaDataAttribute(selectableMetaDataAttribute, new[] { - Features = new[] - { - feature - } - }; - - var properties = new MapPointDataProperties - { - Data = mapData - }; + selectableMetaDataAttribute + }); var propertyBag = new DynamicPropertyBag(properties); var editor = new MetaDataAttributeEditor(); - + var someValue = new object(); var mockRepository = new MockRepository(); var serviceProviderStub = mockRepository.Stub(); var serviceStub = mockRepository.Stub(); @@ -112,11 +95,44 @@ mockRepository.ReplayAll(); // Call - var result = editor.EditValue(descriptorContextStub, serviceProviderStub, newValue); + var result = editor.EditValue(descriptorContextStub, serviceProviderStub, someValue); // Assert - Assert.AreSame(newValue, result); + Assert.AreSame(selectableMetaDataAttribute, result); mockRepository.VerifyAll(); } + + private static SelectableMetaDataAttribute CreateSelectableMetaDataAttribute() + { + return new SelectableMetaDataAttribute(string.Empty); + } + + private class ObjectPropertiesWithSelectableMetaDataAttribute : IHasMetaData + { + private readonly SelectableMetaDataAttribute selectableMetaDataAttribute; + private readonly IEnumerable selectableMetaDataAttributes; + + public ObjectPropertiesWithSelectableMetaDataAttribute(SelectableMetaDataAttribute selectableMetaDataAttribute, + IEnumerable selectableMetaDataAttributes) + { + this.selectableMetaDataAttribute = selectableMetaDataAttribute; + this.selectableMetaDataAttributes = selectableMetaDataAttributes; + } + + public object Data { get; set; } + + public SelectableMetaDataAttribute SelectedMetaDataAttribute + { + get + { + return selectableMetaDataAttribute; + } + } + + public IEnumerable GetAvailableMetaDataAttributes() + { + return selectableMetaDataAttributes; + } + } } } \ No newline at end of file Index: Core/Plugins/test/Core.Plugins.Map.Test/UITypeEditors/SelectableMetaDataAttributeTest.cs =================================================================== diff -u --- Core/Plugins/test/Core.Plugins.Map.Test/UITypeEditors/SelectableMetaDataAttributeTest.cs (revision 0) +++ Core/Plugins/test/Core.Plugins.Map.Test/UITypeEditors/SelectableMetaDataAttributeTest.cs (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -0,0 +1,181 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using Core.Plugins.Map.UITypeEditors; +using NUnit.Framework; + +namespace Core.Plugins.Map.Test.UITypeEditors +{ + [TestFixture] + public class SelectableMetaDataAttributeTest + { + [Test] + public void Constructor_MetaDataAttributeNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => new SelectableMetaDataAttribute(null); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("metaDataAttribute", exception.ParamName); + } + + [Test] + public void Constructor_Expectedvalues() + { + // Setup + var attribute = "Test"; + + // Call + var selectableAttribute = new SelectableMetaDataAttribute(attribute); + + // Assert + Assert.AreEqual(attribute, selectableAttribute.MetaDataAttribute); + } + + [Test] + public void Equals_ToItself_ReturnTrue() + { + // Setup + var attribute = "Test"; + var selectableAttribute = new SelectableMetaDataAttribute(attribute); + + // Call + bool areEqual = selectableAttribute.Equals(selectableAttribute); + + // Assert + Assert.IsTrue(areEqual); + } + + [Test] + public void Equals_Null_ReturnFalse() + { + // Setup + var attribute = new SelectableMetaDataAttribute(string.Empty); + + // Call + bool equals = attribute.Equals(null); + + // Assert + Assert.IsFalse(equals); + } + + [Test] + public void Equals_ToOtherWithSameAttribute_ReturnTrue() + { + // Setup + var attribute = "Test"; + var selectableAttribute1 = new SelectableMetaDataAttribute(attribute); + var selectableAttribute2 = new SelectableMetaDataAttribute(attribute); + + // Call + bool equals1 = selectableAttribute1.Equals(selectableAttribute2); + bool equals2 = selectableAttribute2.Equals(selectableAttribute1); + + // Assert + Assert.IsTrue(equals1); + Assert.IsTrue(equals2); + } + + [Test] + public void Equals_ToOtherWithOtherAttribute_ReturnFalse() + { + // Setup + var selectableAttribute1 = new SelectableMetaDataAttribute("Test"); + var selectableAttribute2 = new SelectableMetaDataAttribute("Test2"); + + // Call + bool equals1 = selectableAttribute1.Equals(selectableAttribute2); + bool equals2 = selectableAttribute2.Equals(selectableAttribute1); + + // Assert + Assert.IsFalse(equals1); + Assert.IsFalse(equals2); + } + + [Test] + public void Equals_OtherObject_ReturnFalse() + { + // Setup + var attribute = new SelectableMetaDataAttribute(string.Empty); + + var otherObject = new object(); + + // Call + bool equals = attribute.Equals(otherObject); + + // Assert + Assert.IsFalse(equals); + } + + [Test] + public void GetHashCode_EqualObjects_ReturnSameHashCode() + { + // Setup + var attribute = "Test"; + var selectableAttribute1 = new SelectableMetaDataAttribute(attribute); + var selectableAttribute2 = new SelectableMetaDataAttribute(attribute); + + // Pre-condition + Assert.IsTrue(selectableAttribute1.Equals(selectableAttribute2)); + + // Call + int hashCode1 = selectableAttribute1.GetHashCode(); + int hashCode2 = selectableAttribute2.GetHashCode(); + + // Assert + Assert.AreEqual(hashCode1, hashCode2); + } + + [Test] + public void GetHashCode_NotEqualObjects_ReturnDifferentHashCode() + { + // Setup + var selectableAttribute1 = new SelectableMetaDataAttribute("Test"); + var selectableAttribute2 = new SelectableMetaDataAttribute("Test2"); + + // Pre-condition + Assert.IsFalse(selectableAttribute1.Equals(selectableAttribute2)); + + // Call + int hashCode1 = selectableAttribute1.GetHashCode(); + int hashCode2 = selectableAttribute2.GetHashCode(); + + // Assert + Assert.AreNotEqual(hashCode1, hashCode2); + } + + [Test] + public void ToString_Always_ReturnMetaDataAttribute() + { + // Setup + string metaDataAttribute = "Test"; + var selectableAttribute = new SelectableMetaDataAttribute(metaDataAttribute); + + // Call + string toString = selectableAttribute.ToString(); + + // Assert + Assert.AreEqual(metaDataAttribute, toString); + } + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Forms/UITypeEditors/SelectableHydraulicBoundaryLocation.cs =================================================================== diff -u -rcc2b4067500d40bf504c7c4b3b076061cc390af4 -r758b0db0a58b0fecd5e3d7d8b5f22d162778ee04 --- Ringtoets/Common/src/Ringtoets.Common.Forms/UITypeEditors/SelectableHydraulicBoundaryLocation.cs (.../SelectableHydraulicBoundaryLocation.cs) (revision cc2b4067500d40bf504c7c4b3b076061cc390af4) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/UITypeEditors/SelectableHydraulicBoundaryLocation.cs (.../SelectableHydraulicBoundaryLocation.cs) (revision 758b0db0a58b0fecd5e3d7d8b5f22d162778ee04) @@ -118,7 +118,7 @@ private bool Equals(SelectableHydraulicBoundaryLocation other) { - return Equals(hydraulicBoundaryLocation, other.hydraulicBoundaryLocation); + return Equals(hydraulicBoundaryLocation, other.HydraulicBoundaryLocation); } } } \ No newline at end of file