Index: Core/Common/src/Core.Common.Utils/Extensions/EnumerableExtensions.cs =================================================================== diff -u -r2e944cbf52d124fd501ed4ed8e991aa50299cc69 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Core/Common/src/Core.Common.Utils/Extensions/EnumerableExtensions.cs (.../EnumerableExtensions.cs) (revision 2e944cbf52d124fd501ed4ed8e991aa50299cc69) +++ Core/Common/src/Core.Common.Utils/Extensions/EnumerableExtensions.cs (.../EnumerableExtensions.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -77,5 +77,28 @@ } return source.Select(keySelector).Count() != source.Select(keySelector).Distinct().Count(); } + + /// + /// Checks whether the elements from have more than one unique + /// value using the . + /// + /// The element type of the sequence. + /// The type for the key. + /// A sequence that contains elements to be acted upon. + /// The key selector to validate uniqueness. + /// true when there is more than one unique value in ; false otherwise. + /// Thrown when any input argument is null. + public static bool HasMultipleUniqueValues(this IEnumerable source, Func keySelector) + { + if (source == null) + { + throw new ArgumentNullException(nameof(source)); + } + if (keySelector == null) + { + throw new ArgumentNullException(nameof(keySelector)); + } + return source.Select(keySelector).Distinct().Count() > 1; + } } } \ No newline at end of file Index: Core/Common/test/Core.Common.Utils.Test/Extensions/EnumerableExtensionsTest.cs =================================================================== diff -u -r2e944cbf52d124fd501ed4ed8e991aa50299cc69 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Core/Common/test/Core.Common.Utils.Test/Extensions/EnumerableExtensionsTest.cs (.../EnumerableExtensionsTest.cs) (revision 2e944cbf52d124fd501ed4ed8e991aa50299cc69) +++ Core/Common/test/Core.Common.Utils.Test/Extensions/EnumerableExtensionsTest.cs (.../EnumerableExtensionsTest.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -142,5 +142,69 @@ // Assert Assert.IsTrue(hasNonDistinct); } + + [Test] + public void HasMultipleUniqueValues_IteratorNull_ThrowArgumentNullException() + { + // Setup + IEnumerable enumerable = null; + + // Call + TestDelegate call = () => enumerable.HasMultipleUniqueValues(e => null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("source", exception.ParamName); + } + + [Test] + public void HasMultipleUniqueValues_ActionNull_ThrowArgumentNullException() + { + // Setup + IEnumerable enumerable = Enumerable.Empty(); + + // Call + TestDelegate call = () => enumerable.HasMultipleUniqueValues(null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("keySelector", exception.ParamName); + } + + [Test] + public void HasMultipleUniqueValues_WithUniqueItems_ReturnsFalse() + { + // Setup + var items = new List + { + 1, + 1, + 1 + }; + + // Call + bool hasNonDistinct = items.HasMultipleUniqueValues(t => t); + + // Assert + Assert.IsFalse(hasNonDistinct); + } + + [Test] + public void HasMultipleUniqueValues_WithMultipleUniqueItems_ReturnsTrue() + { + // Setup + var items = new List + { + 1, + 2, + 3 + }; + + // Call + bool hasNonDistinct = items.HasMultipleUniqueValues(t => t); + + // Assert + Assert.IsTrue(hasNonDistinct); + } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Factories/RingtoetsStackChartDataFactory.cs =================================================================== diff -u -r2e944cbf52d124fd501ed4ed8e991aa50299cc69 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Factories/RingtoetsStackChartDataFactory.cs (.../RingtoetsStackChartDataFactory.cs) (revision 2e944cbf52d124fd501ed4ed8e991aa50299cc69) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Factories/RingtoetsStackChartDataFactory.cs (.../RingtoetsStackChartDataFactory.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -26,7 +26,6 @@ using Core.Common.Base.Data; using Core.Common.Utils.Extensions; using Core.Components.Stack.Data; -using Ringtoets.Common.Forms.Helpers; using Ringtoets.Common.Forms.Properties; using Ringtoets.Common.Forms.Views; @@ -70,7 +69,7 @@ illustrationPointControlItems.Select(controlItem => Tuple.Create(controlItem.WindDirectionName, controlItem.ClosingSituation)); - bool showClosingSituation = !illustrationPointControlItems.HasDuplicates(item => item.ClosingSituation); + bool showClosingSituation = illustrationPointControlItems.HasMultipleUniqueValues(item => item.ClosingSituation); foreach (Tuple label in labels) { Index: Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/StructuresOutputProperties.cs =================================================================== diff -u -r2e944cbf52d124fd501ed4ed8e991aa50299cc69 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/StructuresOutputProperties.cs (.../StructuresOutputProperties.cs) (revision 2e944cbf52d124fd501ed4ed8e991aa50299cc69) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/StructuresOutputProperties.cs (.../StructuresOutputProperties.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -109,9 +109,9 @@ return new TopLevelFaultTreeIllustrationPointProperties[0]; } - bool areClosingSituationsSame = data.GeneralResult - .TopLevelIllustrationPoints - .HasDuplicates(p => p.ClosingSituation); + bool areClosingSituationsSame = !data.GeneralResult + .TopLevelIllustrationPoints + .HasMultipleUniqueValues(p => p.ClosingSituation); return data.GeneralResult .TopLevelIllustrationPoints Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/GeneralResultFaultTreeIllustrationPointView.cs =================================================================== diff -u -r68ad4c0477e2ae7f325fef005b88d5be5c563840 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/GeneralResultFaultTreeIllustrationPointView.cs (.../GeneralResultFaultTreeIllustrationPointView.cs) (revision 68ad4c0477e2ae7f325fef005b88d5be5c563840) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/GeneralResultFaultTreeIllustrationPointView.cs (.../GeneralResultFaultTreeIllustrationPointView.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -127,9 +127,9 @@ return; } - string closingSituation = generalResult.TopLevelIllustrationPoints.HasDuplicates(p => p.ClosingSituation) - ? string.Empty - : topLevelFaultTreeIllustrationPoint.ClosingSituation; + string closingSituation = generalResult.TopLevelIllustrationPoints.HasMultipleUniqueValues(p => p.ClosingSituation) + ? topLevelFaultTreeIllustrationPoint.ClosingSituation + : string.Empty; var faultTreeIllustrationPoint = selection.Data as FaultTreeIllustrationPoint; if (faultTreeIllustrationPoint != null) Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointsTableControl.cs =================================================================== diff -u -r2e944cbf52d124fd501ed4ed8e991aa50299cc69 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointsTableControl.cs (.../IllustrationPointsTableControl.cs) (revision 2e944cbf52d124fd501ed4ed8e991aa50299cc69) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointsTableControl.cs (.../IllustrationPointsTableControl.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -94,7 +94,7 @@ { if (data != null) { - if (!data.HasDuplicates(item => item.ClosingSituation)) + if (data.HasMultipleUniqueValues(item => item.ClosingSituation)) { illustrationPointsDataGridViewControl.SetColumnVisibility(closingSituationColumnIndex, true); return; Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/DikeHeightOutputProperties.cs =================================================================== diff -u -r2e944cbf52d124fd501ed4ed8e991aa50299cc69 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/DikeHeightOutputProperties.cs (.../DikeHeightOutputProperties.cs) (revision 2e944cbf52d124fd501ed4ed8e991aa50299cc69) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/DikeHeightOutputProperties.cs (.../DikeHeightOutputProperties.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -189,9 +189,9 @@ return new TopLevelFaultTreeIllustrationPointProperties[0]; } - bool areClosingSituationsSame = data.GeneralResult - .TopLevelIllustrationPoints - .HasDuplicates(p => p.ClosingSituation); + bool areClosingSituationsSame = !data.GeneralResult + .TopLevelIllustrationPoints + .HasMultipleUniqueValues(p => p.ClosingSituation); return data.GeneralResult .TopLevelIllustrationPoints Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/OvertoppingOutputProperties.cs =================================================================== diff -u -r2e944cbf52d124fd501ed4ed8e991aa50299cc69 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/OvertoppingOutputProperties.cs (.../OvertoppingOutputProperties.cs) (revision 2e944cbf52d124fd501ed4ed8e991aa50299cc69) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/OvertoppingOutputProperties.cs (.../OvertoppingOutputProperties.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -196,9 +196,9 @@ return new TopLevelFaultTreeIllustrationPointProperties[0]; } - bool areClosingSituationsSame = data.GeneralResult - .TopLevelIllustrationPoints - .HasDuplicates(p => p.ClosingSituation); + bool areClosingSituationsSame = !data.GeneralResult + .TopLevelIllustrationPoints + .HasMultipleUniqueValues(p => p.ClosingSituation); return data.GeneralResult .TopLevelIllustrationPoints Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/OvertoppingRateOutputProperties.cs =================================================================== diff -u -r2e944cbf52d124fd501ed4ed8e991aa50299cc69 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/OvertoppingRateOutputProperties.cs (.../OvertoppingRateOutputProperties.cs) (revision 2e944cbf52d124fd501ed4ed8e991aa50299cc69) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/OvertoppingRateOutputProperties.cs (.../OvertoppingRateOutputProperties.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -189,9 +189,9 @@ return new TopLevelFaultTreeIllustrationPointProperties[0]; } - bool areClosingSituationsSame = data.GeneralResult - .TopLevelIllustrationPoints - .HasDuplicates(p => p.ClosingSituation); + bool areClosingSituationsSame = !data.GeneralResult + .TopLevelIllustrationPoints + .HasMultipleUniqueValues(p => p.ClosingSituation); return data.GeneralResult .TopLevelIllustrationPoints Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs =================================================================== diff -u -ra49798da6ac2176d2e8b28ec6fec8a2494d8ee91 -ra163c5f082694baf5cd491ea36baf6fb040fe868 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision a49798da6ac2176d2e8b28ec6fec8a2494d8ee91) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision a163c5f082694baf5cd491ea36baf6fb040fe868) @@ -48,6 +48,7 @@ using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; +using Ringtoets.Common.Data.IllustrationPoints; using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Forms.ChangeHandlers; using Ringtoets.Common.Forms.GuiServices; @@ -110,7 +111,6 @@ using RingtoetsIntegrationPluginResources = Ringtoets.Integration.Plugin.Properties.Resources; using BaseResources = Core.Common.Base.Properties.Resources; using GuiResources = Core.Common.Gui.Properties.Resources; -using Ringtoets.Common.Data.IllustrationPoints; namespace Ringtoets.Integration.Plugin { @@ -844,6 +844,16 @@ } } + #region PropertyInfos + + private static TopLevelFaultTreeIllustrationPointProperties CreateTopLevelFaultTreeIllustrationPointProperties(SelectedTopLevelFaultTreeIllustrationPoint point) + { + return new TopLevelFaultTreeIllustrationPointProperties(point.TopLevelFaultTreeIllustrationPoint, + !point.ClosingSituations.HasMultipleUniqueValues(cs => cs)); + } + + #endregion + private class FailureMechanismContextAssociation { private readonly Func createFailureMechanismContext; @@ -866,16 +876,6 @@ } } - #region PropertyInfos - - private static TopLevelFaultTreeIllustrationPointProperties CreateTopLevelFaultTreeIllustrationPointProperties(SelectedTopLevelFaultTreeIllustrationPoint point) - { - return new TopLevelFaultTreeIllustrationPointProperties(point.TopLevelFaultTreeIllustrationPoint, - point.ClosingSituations.HasDuplicates(cs => cs)); - } - - #endregion - #region ViewInfos #region FailureMechanismView ViewInfo