using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace DTS.Common.Controls { public class TestIDViewModel : INotifyPropertyChanged { #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected bool SetProperty(ref T storage, T value, string propertyName = null) { if (Equals(storage, value)) return false; storage = value; OnPropertyChanged(propertyName); return true; } protected void OnPropertyChanged(string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } #endregion private static readonly TestIdPreFixSuffixHelper TEST_ID_SUFFIX_VALUE_NONE_ITEM = new TestIdPreFixSuffixHelper(TestIdFixedPrefixSuffixValues.None); private static readonly TestIdPreFixSuffixHelper TEST_ID_SUFFIX_VALUE_TIME_STAMP_ITEM = new TestIdPreFixSuffixHelper(TestIdFixedPrefixSuffixValues.TimeStamp); private static readonly TestIdPreFixSuffixHelper TEST_ID_SUFFIX_VALUE_TEST_SETUP_ITEM = new TestIdPreFixSuffixHelper(TestIdFixedPrefixSuffixValues.TestSetupName); private string _testSetupLabel = string.Empty; public string TestSetupLabel { get => _testSetupLabel; set { _testSetupLabel = value; OnPropertyChanged("TestSetupLabel"); OnPropertyChanged("TestSetupLabelVisibility"); } } public Visibility TestSetupLabelVisibility => string.IsNullOrEmpty(TestSetupLabel) ? Visibility.Collapsed : Visibility.Visible; public string TestIdEditableText { get; set; } = string.Empty; public void PopulateAllTestIdPrefixSuffixValues(string[] serializedValues) { _allTestIdPrefixSuffixValues = new List { TEST_ID_SUFFIX_VALUE_NONE_ITEM, TEST_ID_SUFFIX_VALUE_TIME_STAMP_ITEM, TEST_ID_SUFFIX_VALUE_TEST_SETUP_ITEM }; // Second, populate all values from the db var dbList = new List(); dbList.AddRange(serializedValues); foreach (var s in dbList) { _allTestIdPrefixSuffixValues.Add(new TestIdPreFixSuffixHelper(s)); } OnPropertyChanged("AllTestIDPrefixSuffixValues"); } private List _allTestIdPrefixSuffixValues; public TestIdPreFixSuffixHelper[] AllTestIdPrefixSuffixValues => _allTestIdPrefixSuffixValues?.ToArray() ?? new TestIdPreFixSuffixHelper[0]; public TestIdPreFixSuffixHelper SelectedTestIdPrefixValueItem { get; set; } = TEST_ID_SUFFIX_VALUE_NONE_ITEM; public TestIdPreFixSuffixHelper SelectedTestIdSuffixValueItem { get; set; } = TEST_ID_SUFFIX_VALUE_TIME_STAMP_ITEM; public string TestName { get; set; } public string GetTestId() { var testIdList = new List(); var prefix = GetRunTimeTestIdPrefixOrSuffix(SelectedTestIdPrefixValueItem); if (prefix != string.Empty) { testIdList.Add(prefix); } if (!string.IsNullOrEmpty(TestSetupLabel)) { testIdList.Add(TestSetupLabel); } if (TestIdEditableText != string.Empty) { testIdList.Add(TestIdEditableText); } var suffix = GetRunTimeTestIdPrefixOrSuffix(SelectedTestIdSuffixValueItem); if (suffix != string.Empty) { testIdList.Add(suffix); } return string.Join("_", testIdList); } private string GetRunTimeTestIdPrefixOrSuffix(TestIdPreFixSuffixHelper prefixOrSuffix) { var rv = string.Empty; if (prefixOrSuffix == null) { return rv; } switch (prefixOrSuffix.TestIdPreFixSuffix.FixedValue) { case TestIdFixedPrefixSuffixValues.TestSetupName: rv = TestName; break; case TestIdFixedPrefixSuffixValues.TimeStamp: rv = GetTestIdTimestamp(); break; case TestIdFixedPrefixSuffixValues.NotFixed: rv = prefixOrSuffix.TestIdPreFixSuffix.ToString(); break; case TestIdFixedPrefixSuffixValues.None: default: // do nothing break; } return rv; } public string GetTestIdTimestamp() { return $"{DateTime.Now.Year:0000}_{DateTime.Now.Month:00}_{DateTime.Now.Day:00} {DateTime.Now.Hour:00}_{DateTime.Now.Minute:00}"; } } }