Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionLocationsMapLayer.cs =================================================================== diff -u -r53eba129a427d153e4dd31047e6566513bc04892 -r10f91cb2c0ea3bddf1aa853417a7ac264d0894be --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionLocationsMapLayer.cs (.../DuneErosionLocationsMapLayer.cs) (revision 53eba129a427d153e4dd31047e6566513bc04892) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionLocationsMapLayer.cs (.../DuneErosionLocationsMapLayer.cs) (revision 10f91cb2c0ea3bddf1aa853417a7ac264d0894be) @@ -45,7 +45,7 @@ private List, DuneLocationCalculation>> calculationsForTargetProbabilityObservers; - private ISet currentMetaDataItems; + private IReadOnlyDictionary, MetaDataItemsLookup> currentMetaDataItemsLookups; /// /// Creates a new instance of . @@ -66,7 +66,7 @@ CreateObservers(); MapData = RiskeerMapDataFactory.CreateHydraulicBoundaryLocationsMapData(); - currentMetaDataItems = new HashSet(); + currentMetaDataItemsLookups = new Dictionary, MetaDataItemsLookup>(); SetFeatures(); } @@ -174,7 +174,7 @@ private void UpdateMetaData(IReadOnlyDictionary, double> calculationsForTargetProbabilities) { - var newMetaDataItems = new HashSet(); + var newMetaDataItemsLookups = new Dictionary, MetaDataItemsLookup>(); var waterLevelMetaDataItemsCounter = 0; var waveHeightMetaDataItemsCounter = 0; @@ -183,63 +183,59 @@ { if (metaData.Contains(string.Format(Resources.MetaData_WaterLevel_TargetProbability_0, string.Empty))) { - AddMetaDataItemToLookup(newMetaDataItems, calculationsForTargetProbabilities.ElementAt(waterLevelMetaDataItemsCounter).Key, + AddMetaDataItemToLookup(newMetaDataItemsLookups, calculationsForTargetProbabilities.ElementAt(waterLevelMetaDataItemsCounter).Key, lookupItem => lookupItem.WaterLevelMetaDataItem = metaData); waterLevelMetaDataItemsCounter++; } else if (metaData.Contains(string.Format(Resources.MetaData_WaveHeight_TargetProbability_0, string.Empty))) { - AddMetaDataItemToLookup(newMetaDataItems, calculationsForTargetProbabilities.ElementAt(waveHeightMetaDataItemsCounter).Key, + AddMetaDataItemToLookup(newMetaDataItemsLookups, calculationsForTargetProbabilities.ElementAt(waveHeightMetaDataItemsCounter).Key, lookupItem => lookupItem.WaveHeightMetaDataItem = metaData); waveHeightMetaDataItemsCounter++; } else if (metaData.Contains(string.Format(Resources.MetaData_WavePeriod_TargetProbability_0, string.Empty))) { - AddMetaDataItemToLookup(newMetaDataItems, calculationsForTargetProbabilities.ElementAt(wavePeriodMetaDataItemsCounter).Key, + AddMetaDataItemToLookup(newMetaDataItemsLookups, calculationsForTargetProbabilities.ElementAt(wavePeriodMetaDataItemsCounter).Key, lookupItem => lookupItem.WavePeriodMetaDataItem = metaData); wavePeriodMetaDataItemsCounter++; } } - foreach (MetaDataItemsLookup currentMetaDataItem in currentMetaDataItems) + foreach (KeyValuePair, MetaDataItemsLookup> currentMetaDataItemLookup in currentMetaDataItemsLookups) { + MetaDataItemsLookup currentMetaDataItem = currentMetaDataItemLookup.Value; if (MapData.SelectedMetaDataAttribute == currentMetaDataItem.WaterLevelMetaDataItem || MapData.SelectedMetaDataAttribute == currentMetaDataItem.WaveHeightMetaDataItem || MapData.SelectedMetaDataAttribute == currentMetaDataItem.WavePeriodMetaDataItem) { - MetaDataItemsLookup newMetaDataItem = newMetaDataItems.FirstOrDefault(i => i.Calculations.Equals(currentMetaDataItem.Calculations)); - - if (newMetaDataItem == null) + IObservableEnumerable calculations = currentMetaDataItemLookup.Key; + if (!newMetaDataItemsLookups.ContainsKey(calculations)) { MapData.SelectedMetaDataAttribute = RiskeerCommonUtilResources.MetaData_Name; } else { + MetaDataItemsLookup newMetaDataItem = newMetaDataItemsLookups[calculations]; SetSelectedMetaDataAttribute(currentMetaDataItem.WaterLevelMetaDataItem, newMetaDataItem.WaterLevelMetaDataItem); SetSelectedMetaDataAttribute(currentMetaDataItem.WaveHeightMetaDataItem, newMetaDataItem.WaveHeightMetaDataItem); SetSelectedMetaDataAttribute(currentMetaDataItem.WavePeriodMetaDataItem, newMetaDataItem.WavePeriodMetaDataItem); } } } - currentMetaDataItems = newMetaDataItems; + currentMetaDataItemsLookups = newMetaDataItemsLookups; } - private static void AddMetaDataItemToLookup(ISet lookup, IObservableEnumerable calculations, + private static void AddMetaDataItemToLookup(IDictionary, MetaDataItemsLookup> lookup, + IObservableEnumerable calculations, Action setMetaDataAction) { - MetaDataItemsLookup lookupItem = lookup.FirstOrDefault(i => i.Calculations.Equals(calculations)); - - if (lookupItem == null) + if (!lookup.ContainsKey(calculations)) { - lookupItem = new MetaDataItemsLookup - { - Calculations = calculations - }; - lookup.Add(lookupItem); + lookup.Add(calculations, new MetaDataItemsLookup()); } - setMetaDataAction(lookupItem); + setMetaDataAction(lookup[calculations]); } private void SetSelectedMetaDataAttribute(string metaDataItem, string newMetaDataItem) @@ -252,8 +248,6 @@ private class MetaDataItemsLookup { - public IObservableEnumerable Calculations { get; set; } - public string WaterLevelMetaDataItem { get; set; } public string WaveHeightMetaDataItem { get; set; }