using Microsoft.AnalysisServices.Tabular; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Dynamic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Metadata_Translator { public static class ObservableCollectionExtensions { public static string GetValueAt(this ObservableCollection collection, int index, string columnName) { if (collection == null) return string.Empty; ExpandoObject row = collection[index]; return ((IDictionary)row)[columnName]?.ToString(); } public static void SetValueAt(this ObservableCollection collection, int index, string columnName, string value) { if (collection == null) return; ExpandoObject row = collection[index]; ((IDictionary)row)[columnName] = value; } public static void UpdateDataValues(this ObservableCollection collection, List sourcePhrases, string sourceLanguage, List targetPhrases, string targetLanguage) { if (collection == null) return; int rowOffset = 0; for (int i = 0; i < collection.Count; i++) { string columnValue = collection.GetValueAt(i, sourceLanguage); if (!string.IsNullOrEmpty(columnValue) && columnValue.Equals(sourcePhrases[i - rowOffset])) { collection.SetValueAt(i, targetLanguage, targetPhrases[i - rowOffset]); } else { rowOffset++; } } } public static List GetValues(this ObservableCollection collection, string columnName) { if (collection == null) return new List(); List values = new List(); foreach (ExpandoObject row in collection) { string value = ((IDictionary)row)[columnName]?.ToString(); if (!string.IsNullOrEmpty(value)) values.Add(value); } return values; } public static void AddDisplayFolder(this ObservableCollection collection, NamedMetadataObject metadataObject, string displayString, string defaultCulture, CultureCollection cultures) { if (collection == null) return; if (!string.IsNullOrEmpty(displayString)) { foreach (ExpandoObject item in collection) { if (((IDictionary)item)[defaultCulture] is string displayName && displayName.Equals(displayString)) { var existingDisplayFolderContainer = ((IDictionary)item)["Object"] as DisplayFolderContainer; existingDisplayFolderContainer.TabularObjects.Add(metadataObject); return; } } } dynamic row = new ExpandoObject(); var displayFolderContainer = new DisplayFolderContainer(metadataObject, TranslatedProperty.DisplayFolder); ((IDictionary)row)["Object"] = displayFolderContainer; foreach (var culture in cultures) { ((IDictionary)row)[culture.Name] = culture.Name.Equals(defaultCulture) ? displayString : culture.ObjectTranslations[displayFolderContainer.TabularObject, displayFolderContainer.TranslatedProperty]?.Value; } collection.Add(row); } } }