using System; using System.Collections.Generic; using System.Windows; namespace DatabaseImport { /// /// a custom channel is a wrapper for MMEPossibleChannels that are defined by the user rather than ISO13499 /// they have mirror tables to the actual db and let us define new channels without disrupting the existing 1so13499 db /// public class CustomChannel : /*BasePropertyChanged,*/ IComparable { // #region Properties public MMEPossibleChannels Channel { get; private set; } private MMETestObjects _testObject; private MMEPositions _position; private MMETransducerMainLocation _mainLocation; private MMEFineLocations1 _finLoc1; private MMEFineLocations2 _finLoc2; private MMEFineLocations3 _finLoc3; private MMEPhysicalDimensions _physicalDimension; private MMEDirections _direction; private MMEFilterClasses _filterClass; public string Text1 { get => Channel.Text_L1; set => Channel.SetText1(value); } private readonly List _expiredErrors = new List(); public CustomChannel(MMEPossibleChannels channel, bool newChannel = true) { Channel = newChannel ? new MMEPossibleChannels(channel) : channel; _direction = ((App)Application.Current).IsoDb.GetDirectionByIso(channel.Direction); _filterClass = ((App)Application.Current).IsoDb.GetFilterClassByIso(channel.Default_Filter_Class); _finLoc1 = ((App)Application.Current).IsoDb.GetFineLocation1ByIso(channel.Fine_Loc_1); _finLoc2 = ((App)Application.Current).IsoDb.GetFineLocation2ByIso(channel.Fine_Loc_2); _finLoc3 = ((App)Application.Current).IsoDb.GetFineLocation3ByIso(channel.Fine_Loc_3); try { _mainLocation = ((App)Application.Current).IsoDb.GetMainLocationByIso(channel.Trans_Main_Loc); } catch (ISO13499FileDb.ExpiredISOFieldException ex) { _expiredErrors.Add(ex); } _physicalDimension = ((App)Application.Current).IsoDb.GetPhysicalDimensionByIso(channel.Physical_Dimension); _position = ((App)Application.Current).IsoDb.GetPositionByISO(channel.Position); _testObject = ((App)Application.Current).IsoDb.GetTestObjectByIso(channel.Test_Object); } public int CompareTo(CustomChannel other) { return Equals(this, other) ? 0 : string.Compare(Text1, other.Text1, StringComparison.Ordinal); } } public class CustomChannelList //: BasePropertyChanged { private static readonly object LockObject = new object(); private static CustomChannelList _list; public static CustomChannelList List { get { lock (LockObject) { if (null == _list) { _list = new CustomChannelList(); } } return _list; } } public void ReloadAll() { lock (LockObject) { List._listChannels = null; var app = Application.Current as App; if (app == null) { return; } app.IsoDb.RefreshAllData(); List.PopulateChannelsIfNecessary(); } } private Dictionary _dictChannels; private List _listChannels; private void PopulateChannelsIfNecessary() { lock (LockObject) { if (null != _listChannels) return; _listChannels = new List(); _dictChannels = new Dictionary(); foreach (var channel in ((App)Application.Current).IsoDb.GetSQLPossibleChannels()) { var ch = new CustomChannel(channel); var iso = ISO.IsoCode.GetString(ch.Channel, false); if (_dictChannels.ContainsKey(iso)) continue; _listChannels.Add(ch); _dictChannels[iso] = ch; } _listChannels.Sort(); } } private static ISO13499FileDb _isoDb; public ISO13499FileDb IsoDb { get { if (null != _isoDb) return _isoDb; _isoDb = new ISO13499FileDb(); _isoDb.RefreshAllData(); return _isoDb; } } /// /// deletes all customchannels /// originally created so TDM imports could clear all tables except DAS tables /// public void DeleteAll() { lock (LockObject) { _listChannels = null; _dictChannels = null; //((App)Application.Current).IsoDb.DeleteSQL(); IsoDb.DeleteSQL(); //OnPropertyChanged("AllChannels"); } } } }