using System; using System.Collections.Generic; using System.Linq; namespace DatabaseExport { public class TestEngineerDetails { private readonly ISO.TestEngineerDetails _testEngineerDetails; public string Name { get => _testEngineerDetails.Name; set => _testEngineerDetails.Name = value; } public TestEngineerDetails() { _testEngineerDetails = new ISO.TestEngineerDetails(); _testEngineerDetails.Name = "(none)"; // Strings.StringResources.TestTemplate_EmptyListName; } public TestEngineerDetails(ISO.TestEngineerDetails testEngineerDetails) { _testEngineerDetails = new ISO.TestEngineerDetails(testEngineerDetails); } public ISO.TestEngineerDetails GetISOTestEngineer() { return _testEngineerDetails; } public override string ToString() { return Name; } } public class TestEngineerDetailsList { private static TestEngineerDetailsList _testEngineerList = new TestEngineerDetailsList(); public static TestEngineerDetailsList TestEngineerList => _testEngineerList; private static object _testEngineerLock = new object(); private Dictionary _testEngineers = null; public TestEngineerDetails[] TestEngineers { get { lock (_testEngineerLock) { if (null == _testEngineers) { PopulateEngineers(); } } var testEngineers = new List(_testEngineers.Values); testEngineers.Sort(CompareTestEngineers); return testEngineers.ToArray(); } } private void PopulateEngineers() { _testEngineers = new Dictionary(); foreach (var t in _testEngineerList.GetAllTestEngineers()) { if (!_testEngineers.ContainsKey(t.Name)) { _testEngineers.Add(t.Name, t); } } } private static int CompareTestEngineers(TestEngineerDetails a, TestEngineerDetails b) { if (a == b) { return 0; } if (null == a) { return -1; } if (null == b) { return 1; } return a.Name.CompareTo(b.Name); } private TestEngineerDetails[] GetAllTestEngineers() { var list = new List(); list.Add(new TestEngineerDetails()); //This is the "(none)" entry foreach (var ts in ISO.TestEngineerDetails.GetAllTestEngineerDetails()) { list.Add(new TestEngineerDetails(ts)); } return list.ToArray(); } public TestEngineerDetails GetTestEngineerDetail(string name) { var testEngineers = from t in TestEngineers.AsParallel() where t.Name == name select t; if (null != testEngineers && testEngineers.Count() > 0) { return testEngineers.First(); } return null; } } }