using ServerManagerTool.Common.Attibutes; using ServerManagerTool.Common.Model; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Windows; namespace ServerManagerTool.Lib { [DataContract] public class EngramEntryList : AggregateIniValueList { public EngramEntryList(string aggregateValueName) : base(aggregateValueName, null) { } public override void FromIniValues(IEnumerable iniValues) { var items = iniValues?.Select(AggregateIniValue.FromINIValue).ToArray(); Clear(); var itemsToAdd = items.Where(i => !this.Any(e => e.IsEquivalent(i))).ToArray(); AddRange(itemsToAdd); var itemsToUpdate = items.Where(i => this.Any(e => e.IsEquivalent(i))).ToArray(); foreach (var item in itemsToUpdate) { var e = this.FirstOrDefault(r => r.IsEquivalent(item)); e.EngramLevelRequirement = item.EngramLevelRequirement; e.EngramPointsCost = item.EngramPointsCost; e.EngramHidden = item.EngramHidden; e.RemoveEngramPreReq = item.RemoveEngramPreReq; } IsEnabled = (Count != 0); Sort(AggregateIniValue.SortKeySelector); } public override IEnumerable ToIniValues() { if (string.IsNullOrWhiteSpace(IniCollectionKey)) return this.Where(d => d.ShouldSave()).Select(d => d.ToINIValue()); return this.Where(d => d.ShouldSave()).Select(d => $"{this.IniCollectionKey}={d.ToINIValue()}"); } } [DataContract] public class EngramEntry : AggregateIniValue { public static readonly DependencyProperty EngramClassNameProperty = DependencyProperty.Register(nameof(EngramClassName), typeof(string), typeof(EngramEntry), new PropertyMetadata(String.Empty)); public static readonly DependencyProperty EngramLevelRequirementProperty = DependencyProperty.Register(nameof(EngramLevelRequirement), typeof(int), typeof(EngramEntry), new PropertyMetadata(0)); public static readonly DependencyProperty EngramPointsCostProperty = DependencyProperty.Register(nameof(EngramPointsCost), typeof(int), typeof(EngramEntry), new PropertyMetadata(0)); public static readonly DependencyProperty EngramHiddenProperty = DependencyProperty.Register(nameof(EngramHidden), typeof(bool), typeof(EngramEntry), new PropertyMetadata(false)); public static readonly DependencyProperty RemoveEngramPreReqProperty = DependencyProperty.Register(nameof(RemoveEngramPreReq), typeof(bool), typeof(EngramEntry), new PropertyMetadata(false)); [DataMember] [AggregateIniValueEntry] public string EngramClassName { get { return (string)GetValue(EngramClassNameProperty); } set { SetValue(EngramClassNameProperty, value); } } [DataMember] [AggregateIniValueEntry] public int EngramLevelRequirement { get { return (int)GetValue(EngramLevelRequirementProperty); } set { SetValue(EngramLevelRequirementProperty, value); } } [DataMember] [AggregateIniValueEntry] public int EngramPointsCost { get { return (int)GetValue(EngramPointsCostProperty); } set { SetValue(EngramPointsCostProperty, value); } } [DataMember] [AggregateIniValueEntry] public bool EngramHidden { get { return (bool)GetValue(EngramHiddenProperty); } set { SetValue(EngramHiddenProperty, value); } } [DataMember] [AggregateIniValueEntry] public bool RemoveEngramPreReq { get { return (bool)GetValue(RemoveEngramPreReqProperty); } set { SetValue(RemoveEngramPreReqProperty, value); } } public static EngramEntry FromINIValue(string iniValue) { var engramEntry = new EngramEntry(); engramEntry.InitializeFromINIValue(iniValue); return engramEntry; } public override string GetSortKey() { return null; } public override void InitializeFromINIValue(string value) { base.InitializeFromINIValue(value); } public override bool IsEquivalent(AggregateIniValue other) { return String.Equals(this.EngramClassName, ((EngramEntry)other).EngramClassName, StringComparison.OrdinalIgnoreCase); } public override string ToINIValue() { return base.ToINIValue(); } } }