Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneErosionDataSynchronizationService.cs =================================================================== diff -u -r065e69bc53f774402432c426ed86b449748ca3a4 -r94e3c04f5ad350646ddfcf6720527ecd50fbcfc2 --- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneErosionDataSynchronizationService.cs (.../DuneErosionDataSynchronizationService.cs) (revision 065e69bc53f774402432c426ed86b449748ca3a4) +++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneErosionDataSynchronizationService.cs (.../DuneErosionDataSynchronizationService.cs) (revision 94e3c04f5ad350646ddfcf6720527ecd50fbcfc2) @@ -51,8 +51,8 @@ /// The dune locations to use. /// Thrown when any parameter is null. public static void SetDuneLocations(DuneErosionFailureMechanism failureMechanism, - HydraulicBoundaryLocation[] hydraulicBoundaryLocations, - ReadDuneLocation[] duneLocations) + ICollection hydraulicBoundaryLocations, + ICollection duneLocations) { if (failureMechanism == null) { @@ -69,48 +69,28 @@ failureMechanism.DuneLocations.Clear(); - if (!hydraulicBoundaryLocations.Any() || !duneLocations.Any()) + if (hydraulicBoundaryLocations.Count == 0 || duneLocations.Count == 0) { return; } - foreach (ReadDuneLocation duneLocation in duneLocations) + foreach (ReadDuneLocation readDuneLocation in duneLocations) { - string duneLocationOffset = duneLocation.Offset.ToString(DuneErosionDataResources.DuneLocation_Offset_format, CultureInfo.InvariantCulture); - - foreach (var hydraulicBoundaryLocation in hydraulicBoundaryLocations) + HydraulicBoundaryLocation correspondingHydraulicBoundaryLocation = hydraulicBoundaryLocations + .FirstOrDefault(hbl => DoesHydraulicBoundaryLocationMatchWithDuneLocation(hbl, readDuneLocation)); + if (correspondingHydraulicBoundaryLocation != null) { - if (Math2D.AreEqualPoints(hydraulicBoundaryLocation.Location, duneLocation.Location)) - { - // Regex to search for a pattern like "schiermonnikoog_21_100.1" - // Only the last number is captured in a group called "Offset" - // The last number can also contain decimals. - var regex = new Regex(@"^(?:\S+)_(?:\d+)_(?(?:\d+\.)?\d+$)"); - Match match = regex.Match(hydraulicBoundaryLocation.Name); - - if (match.Success) - { - if (match.Groups["Offset"].Value == duneLocationOffset) - { - failureMechanism.DuneLocations.Add(new DuneLocation(hydraulicBoundaryLocation.Id, - duneLocation.Name, - duneLocation.Location, - new DuneLocation.ConstructionProperties - { - CoastalAreaId = duneLocation.CoastalAreaId, - Offset = duneLocation.Offset, - Orientation = duneLocation.Orientation, - D50 = duneLocation.D50 - })); - break; - } - } - else - { - log.ErrorFormat(Resources.DuneErosionDataSynchronizationService_SetDuneLocations_Location_0_is_dune_location_but_name_is_not_according_format, - hydraulicBoundaryLocation.Name); - } - } + var duneLocation = new DuneLocation(correspondingHydraulicBoundaryLocation.Id, + readDuneLocation.Name, + readDuneLocation.Location, + new DuneLocation.ConstructionProperties + { + CoastalAreaId = readDuneLocation.CoastalAreaId, + Offset = readDuneLocation.Offset, + Orientation = readDuneLocation.Orientation, + D50 = readDuneLocation.D50 + }); + failureMechanism.DuneLocations.Add(duneLocation); } } } @@ -132,6 +112,33 @@ .ToArray(); } + private static bool DoesHydraulicBoundaryLocationMatchWithDuneLocation(HydraulicBoundaryLocation hydraulicBoundaryLocation, + ReadDuneLocation readDuneLocation) + { + if (!Math2D.AreEqualPoints(hydraulicBoundaryLocation.Location, readDuneLocation.Location)) + { + return false; + } + + // Regex to search for a pattern like "__" + // Only the last number is captured in a group called "Offset" + // The last number can also contain decimals. + var regex = new Regex(@"^(?:\S+)_(?:\d+)_(?(?:\d+\.)?\d+$)"); + Match match = regex.Match(hydraulicBoundaryLocation.Name); + + if (!match.Success) + { + log.ErrorFormat(Resources.DuneErosionDataSynchronizationService_SetDuneLocations_Location_0_is_dune_location_but_name_is_not_according_format, + hydraulicBoundaryLocation.Name); + return false; + } + + string duneLocationOffset = readDuneLocation.Offset.ToString(DuneErosionDataResources.DuneLocation_Offset_format, + CultureInfo.InvariantCulture); + + return match.Groups["Offset"].Value == duneLocationOffset; + } + private static IEnumerable ClearDuneLocationOutput(DuneLocation location) { if (location.Output != null)