This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
namespace DatabaseImport
{
/// <summary>
/// GUI wrapper for template channels ... it contains a testobjecttemplatechannel
/// </summary>
public class TemplateChannelUI //: BasePropertyChanged
{
private TestObjectTemplateChannel _channel;
public TemplateChannelUI(TestObjectTemplateChannel channel)
{
_channel = channel;
}
}
}

View File

@@ -0,0 +1,626 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Windows;
namespace DatabaseImport
{
public class TestObject : DbTimeStampBase, IComparable<TestObject>
{
public void RefreshHardware()
{
SetHardwareFromISO();
}
public enum Tags
{
SerialNumber,
SerialNumberConverted,
TestObjectType,
ParentObject,
SysBuilt,
Channels,
Hardware,
LastModifiedBy,
LastModifiedText,
AllTemplates,
Template,
TemplateIndex,
ChannelsDescription,
TemplateDescription,
TemplateImage,
Zones,
SelectedGlobalRangeCACOption,
ZoneNames,
CurrentZone,
CurrentZoneIndex,
ChannelVisibility,
ChannelTypesIndex
}
private bool? _isComplete = null;
public void MarkIsCompleteUnchecked()
{
_isComplete = null;
}
public int CompareTo(TestObject rhs)
{
if (null == rhs) { return 1; }
return rhs == this ? 0 : string.Compare(SerialNumber, rhs.SerialNumber, StringComparison.Ordinal);
}
/// <summary>
/// returns the iso support level of the group
/// </summary>
/// <returns></returns>
public SerializedSettings.ISOSupportLevels GetObjectISOLevel()
{
if (TemplateType.Contains(Constants.NON_ISO_TESTOBJECT_CHANNEL_TYPE) || TemplateType.Contains(TestObjectTemplateChannel.NONISOCHANNELTYPE))
{
return SerializedSettings.ISOSupportLevels.NO_ISO;
}
return SerializedSettings.ISOSupportLevels.ISO_ONLY;
}
//http://fogbugz/fogbugz/default.asp?11910,
//I noticed channel name and channel id were alternatively being used to lookup sensors
//rather than trying to force them all to use channel name, I merely allowed it to pass in channel id as well.
public SensorData GetSensor(string channelId, string serialNumber, string alternateChannelId = null)
{
var sd = SensorsCollection.SensorsList.GetSensorBySerialNumber(serialNumber);
if (null == sd) { return null; }
sd = new SensorData(sd);
var settings = GetISOTestObject().GetSensorSettings(channelId, sd.SerialNumber);
if (null == settings || !settings.Any() && !string.IsNullOrWhiteSpace(alternateChannelId))
{
settings = GetISOTestObject().GetSensorSettings(alternateChannelId, sd.SerialNumber);
}
var isoTo = GetISOTestObject();
var channel = isoTo.GetChannel(channelId);
if (null != channel)
{
//preset the channel iso fields, these can be filter can be overwritten by to settings below
sd.TestObject = channel.Channel.Test_Object;
sd.Position = channel.Channel.Position;
sd.OriginalPosition = channel.Channel.Position;
if (channel.Channel.Default_Filter_Class != "?")
{
//If ISO says "?", then use the sensor's filter class (but still overwrite with any settings below)
sd.FilterClassIso = channel.Channel.Default_Filter_Class;
}
sd.FineLocation1 = channel.Channel.Fine_Loc_1;
sd.FineLocation2 = channel.Channel.Fine_Loc_2;
sd.FineLocation3 = channel.Channel.Fine_Loc_3;
sd.MainLocation = channel.Channel.Trans_Main_Loc;
sd.PhysicalDimension = channel.Channel.Physical_Dimension;
sd.Direction = channel.Channel.Direction;
}
if (null != settings)
{
foreach (var setting in settings)
{
switch (setting.Setting)
{
case ISO.TestObject.SensorSettings.CFC:
sd.FilterClassIso = setting.Value;
switch (sd.FilterClassIso)
{
case "A":
sd.Filter = new FilterClass(FilterClass.FilterClassType.CFC1000);
break;
case "B":
sd.Filter = new FilterClass(FilterClass.FilterClassType.CFC600);
break;
case "C":
sd.Filter = new FilterClass(FilterClass.FilterClassType.CFC180);
break;
case "D":
sd.Filter = new FilterClass(FilterClass.FilterClassType.CFC60);
break;
case "P":
sd.Filter = new FilterClass(FilterClass.FilterClassType.None);
break;
}
break;
case ISO.TestObject.SensorSettings.Position:
sd.Position = setting.Value;
break;
case ISO.TestObject.SensorSettings.Polarity:
sd.Invert = setting.Value == "-";
break;
case ISO.TestObject.SensorSettings.Range:
sd.Capacity = double.Parse(setting.Value, CultureInfo.InvariantCulture);
break;
case ISO.TestObject.SensorSettings.LimitDuration:
if (!string.IsNullOrWhiteSpace(setting.Value))
{
sd.DigitalOutputLimitDuration = bool.Parse(setting.Value);
sd.LimitDuration = bool.Parse(setting.Value);
sd.LimitSquibFireDuration = bool.Parse(setting.Value);
}
break;
case ISO.TestObject.SensorSettings.Delay:
if (!string.IsNullOrWhiteSpace(setting.Value))
{
sd.DigitalOutputDelayMS = double.Parse(setting.Value, CultureInfo.InvariantCulture);
sd.DelayMS = double.Parse(setting.Value, CultureInfo.InvariantCulture);
sd.SquibFireDelayMS = double.Parse(setting.Value, CultureInfo.InvariantCulture);
}
break;
case ISO.TestObject.SensorSettings.Duration:
if (!string.IsNullOrWhiteSpace(setting.Value))
{
sd.DigitalOutputDurationMS = double.Parse(setting.Value, CultureInfo.InvariantCulture);
sd.DurationMS = double.Parse(setting.Value, CultureInfo.InvariantCulture);
sd.SquibFireDurationMS = double.Parse(setting.Value, CultureInfo.InvariantCulture);
}
break;
case ISO.TestObject.SensorSettings.OutputMode:
if (!string.IsNullOrWhiteSpace(setting.Value))
{
if (int.TryParse(setting.Value, NumberStyles.Any, CultureInfo.InvariantCulture,
out int iValue))
{
sd.DigitalOutputMode = (DigitalOutputModes)iValue;
}
}
break;
case ISO.TestObject.SensorSettings.SQMode:
if (!string.IsNullOrWhiteSpace(setting.Value))
{
if (int.TryParse(setting.Value, NumberStyles.Any, CultureInfo.InvariantCulture,
out int iValue))
{
sd.SquibFireMode = (SquibFireMode)iValue;
}
}
break;
case ISO.TestObject.SensorSettings.DIMode:
if (!string.IsNullOrWhiteSpace(setting.Value))
{
if (int.TryParse(setting.Value, NumberStyles.Any, CultureInfo.InvariantCulture,
out var iValue))
{
sd.InputMode = (DigitalInputModes)iValue;
}
}
break;
case ISO.TestObject.SensorSettings.DefaultValue:
if (!string.IsNullOrWhiteSpace(setting.Value))
{
if (double.TryParse(setting.Value, out var defaultValue))
{
sd.ScaleMultiplier.DefaultValue = defaultValue;
}
}
break;
case ISO.TestObject.SensorSettings.ActiveValue:
if (!string.IsNullOrWhiteSpace(setting.Value))
{
if (double.TryParse(setting.Value, out var activeValue))
{
sd.ScaleMultiplier.ActiveValue = activeValue;
}
}
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}
if (sd.FilterClassIso == "?")
{
sd.FilterClassIso = "P"; // "Prefiltered > CFC 1000" (Unfiltered)
}
return sd;
}
public void SetSensor(string channelName, SensorData sensor)
{
var settings = new List<ISO.TestObject.SensorSetting>();
var fields = Enum.GetValues(typeof(ISO.TestObject.SensorSettings)).Cast<ISO.TestObject.SensorSettings>().ToArray();
foreach (var field in fields)
{
var value = "";
switch (field)
{
case ISO.TestObject.SensorSettings.CFC: value = sensor.FilterClassIso; break;
case ISO.TestObject.SensorSettings.Position: value = sensor.Position; break;
case ISO.TestObject.SensorSettings.Polarity: value = sensor.Invert ? "-" : "+"; break;
case ISO.TestObject.SensorSettings.Range: value = sensor.Capacity.ToString(CultureInfo.InvariantCulture); break;
case ISO.TestObject.SensorSettings.Duration:
value = sensor.DurationMS.ToString(CultureInfo.InvariantCulture);
if (sensor.IsSquib())
{
value = sensor.SquibFireDurationMS.ToString(CultureInfo.InvariantCulture);
}
else if (sensor.IsDigitalOutput())
{
value = sensor.DigitalOutputDurationMS.ToString(CultureInfo.InvariantCulture);
}
break;
case ISO.TestObject.SensorSettings.Delay:
value = sensor.DelayMS.ToString(CultureInfo.InvariantCulture);
if (sensor.IsSquib())
{
value = sensor.SquibFireDelayMS.ToString(CultureInfo.InvariantCulture);
}
else if (sensor.IsDigitalOutput())
{
value = sensor.DigitalOutputDelayMS.ToString(CultureInfo.InvariantCulture);
}
break;
case ISO.TestObject.SensorSettings.LimitDuration:
value = sensor.LimitDuration.ToString(CultureInfo.InvariantCulture);
if (sensor.IsSquib())
{
value = sensor.LimitSquibFireDuration.ToString(CultureInfo.InvariantCulture);
}
else if (sensor.IsDigitalOutput())
{
value = sensor.DigitalOutputLimitDuration.ToString(CultureInfo.InvariantCulture);
}
break;
case ISO.TestObject.SensorSettings.OutputMode: value = ((int)sensor.DigitalOutputMode).ToString(CultureInfo.InvariantCulture); break;
case ISO.TestObject.SensorSettings.SQMode: value = ((int)sensor.SquibFireMode).ToString(CultureInfo.InvariantCulture); break;
case ISO.TestObject.SensorSettings.DIMode: value = ((int)sensor.InputMode).ToString(CultureInfo.InvariantCulture); break;
case ISO.TestObject.SensorSettings.DefaultValue: value = sensor.ScaleMultiplier.DefaultValue.ToString(CultureInfo.InvariantCulture); break;
case ISO.TestObject.SensorSettings.ActiveValue: value = sensor.ScaleMultiplier.ActiveValue.ToString(CultureInfo.InvariantCulture); break;
default: continue; // If we don't know about a setting we shouldn't overwrite it with blank.
}
settings.Add(new ISO.TestObject.SensorSetting(field, value, channelName, sensor.SerialNumber));
}
foreach (var setting in settings)
{
GetISOTestObject().SetSensorSetting(channelName, sensor.SerialNumber, setting);
}
}
public TestObject()
{
//PopulateTemplates();
_isoTestObject = new ISO.TestObject();
Template = new TestObjectTemplate();
ParentObject = "";
SysBuilt = false;
}
public DASHardware[] Hardware
{
get
{
var hardware = new List<DASHardware>(_hardware.Values.ToArray());
hardware.Sort();
return hardware.ToArray();
}
}
public void Initialize(TestObject copy)
{
//PopulateTemplates();
if (!(Application.Current is App app)) return;
var db = app.IsoDb;
_isoTestObject = new ISO.TestObject(copy.GetISOTestObject(), ref db);
SerialNumber = copy.SerialNumber;
if (null != copy.Template)
{
SetTemplateDontResetISOObject(new TestObjectTemplate(copy.Template, ref db));
}
var copyIsoto = copy.GetISOTestObject();
var isoto = GetISOTestObject();
var hardware = copy.Hardware.Select(das => new DASHardware(das, null)).ToList();
foreach (var h in hardware)
{
_hardware.Add(h.SerialNumber, h);
}
ParentObject = copy.ParentObject;
SysBuilt = copy.SysBuilt;
if (SysBuilt)
{
_isoTestObject.SerialNumberConverted = copy.SerialNumberConverted;
}
}
public TestObject(TestObject copy)
{
Initialize(copy);
DbTimeStamp = copy.DbTimeStamp;
}
private string _serialNumber = string.Empty;
public string SerialNumber
{
get => _serialNumber;
set
{
SetProperty(ref _serialNumber, value, Tags.SerialNumber.ToString());
GetISOTestObject().SerialNumber = value;
}
}
public string SerialNumberOrOriginalSerialNumber
{
get
{
if (GetISOTestObject().Embedded)
{
return GetISOTestObject().OriginalSerialNumber;
}
return string.IsNullOrWhiteSpace(SerialNumberConverted) ? SerialNumber : SerialNumberConverted;
}
}
private string _serialNumberConverted = string.Empty;
public string SerialNumberConverted
{
get => _serialNumberConverted;
set => SetProperty(ref _serialNumberConverted, value, Tags.SerialNumberConverted.ToString());
}
public string DisplaySerialNumber
{
get
{
if (string.IsNullOrWhiteSpace(SerialNumberConverted) && !SysBuilt)
{
return SerialNumberOrOriginalSerialNumber;
}
return SerialNumberConverted;
}
set
{
//We assume that this is an Added Group being renamed
SerialNumber = TestSetupName + "_" + value;
SerialNumberConverted = value;
GetISOTestObject().OriginalSerialNumber = SerialNumber;
Template.OriginalTemplateName = SerialNumber + "_Template";
GetISOTestObject().OriginalTemplate = Template.OriginalTemplateName;
}
}
private string _testSetupName = string.Empty;
public string TestSetupName
{
get => _testSetupName;
set => _testSetupName = value;
}
private string _testObjectType = "?";
public string TestObjectType
{
get => _testObjectType;
set => SetProperty(ref _testObjectType, value, Tags.TestObjectType.ToString());
}
private string _parentObject = "";
public string ParentObject
{
get => _parentObject;
set
{
MarkIsCompleteUnchecked();
SetProperty(ref _parentObject, value, Tags.ParentObject.ToString());
GetISOTestObject().ParentObject = value;
}
}
private bool _sysBuilt;
public bool SysBuilt
{
get => _sysBuilt;
set => SetProperty(ref _sysBuilt, value, Tags.SysBuilt.ToString());
}
private Dictionary<string, DASHardware> _hardware = new Dictionary<string, DASHardware>();
public bool ContainsHardware(DASHardware h)
{
return _hardware.ContainsKey(h.SerialNumber);
}
public void SetHardwareFromISO()
{
_hardware.Clear();
var isoTo = GetISOTestObject();
foreach (var hid in isoTo.HardwareIds)
{
var h = DASHardwareList.GetList().GetHardware(hid);
if (null == h)
{
continue;
}
//just making sure we have a copy and not the original hardware record.
h = new DASHardware(h.GetHardware());
h.SetTimeStampMemory(h.GetTimeStampMemory());
if (!_hardware.ContainsKey(h.SerialNumber))
{
_hardware[h.SerialNumber] = h;
}
}
}
/// <summary>
/// this call is intended to be available to test template to update the hardware for the group in memory
/// it is not intended to have that hardware stored in the db currently
/// </summary>
/// <param name="hardware"></param>
public void SetHardware(DASHardware[] hardware)
{
_hardware.Clear();
var hids = new List<string>();
foreach (var h in hardware)
{
_hardware[h.SerialNumber] = h;
if (!hids.Contains(h.SerialNumber))
{
hids.Add(h.SerialNumber);
}
}
GetISOTestObject().HardwareIds = hids.ToArray();
}
public void AddHardware(DASHardware hardware)
{
var stamp = hardware.GetTimeStampMemory();
//just making sure we have a copy and not the original hardware record
hardware = new DASHardware(hardware.GetHardware());
hardware.SetTimeStampMemory(stamp);
MarkIsCompleteUnchecked();
var toAdd = hardware;
if (hardware.IsDummy())
{
var key = hardware.SerialNumber;
if (_hardware.ContainsKey(key))
{
var current = 1;
while (_hardware.ContainsKey(key))
{
current++;
key = $"{hardware.SerialNumber}({current:00})";
}
toAdd = new DASHardware(hardware.GetHardware());
toAdd.SetTimeStampMemory(hardware.GetTimeStampMemory());
toAdd.SerialNumber = key;
}
else
{
toAdd = new DASHardware(hardware.GetHardware());
toAdd.SetTimeStampMemory(hardware.GetTimeStampMemory());
}
}
else
{
toAdd = new DASHardware(hardware.GetHardware());
toAdd.SetTimeStampMemory(hardware.GetTimeStampMemory());
}
if (_hardware.ContainsKey(toAdd.SerialNumber))
{
return;
}
_hardware.Add(toAdd.SerialNumber, toAdd);
OnPropertyChanged(Tags.Hardware.ToString());
_isoTestObject.HardwareIds = Hardware.Select(h => h.GetHardware().GetId()).ToArray();
}
public ISO.TestObject GetISOTestObject()
{
return _isoTestObject;
}
private string _lastModifiedBy = "N/A";
private DateTime _lastModified = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
private TestObjectTemplate _template = null;
public TestObjectTemplate Template
{
get => _template;
set
{
if (value == _template)
{
return;
}
if (null == value)
{
_template = null;
return;
}
if (GetISOTestObject().Template != value.TemplateName)
{
var db = ((App)Application.Current).IsoDb;
GetISOTestObject().SetTemplate(value.TemplateName, ref db);
}
SetProperty(ref _template, value, Tags.Template.ToString());
OnPropertyChanged(Tags.TemplateIndex.ToString());
OnPropertyChanged(Tags.ChannelsDescription.ToString());
OnPropertyChanged(Tags.LastModifiedText.ToString());
OnPropertyChanged(Tags.TemplateDescription.ToString());
OnPropertyChanged(Tags.TemplateImage.ToString());
OnPropertyChanged(Tags.Zones.ToString());
OnPropertyChanged(Tags.SelectedGlobalRangeCACOption.ToString());
ZoneNames = Template.TemplateZones.Select(z => z.Name).ToArray();
}
}
public void SetTemplateDontResetISOObject(TestObjectTemplate value)
{
if (value == _template)
{
return;
}
if (null == value)
{
_template = null;
return;
}
try
{
_isoTestObject?.SetTemplateOnly(value.TemplateName);
}
catch (Exception)
{
//APILogger.Log(ex);
}
var db = ((App)Application.Current).IsoDb;
SetProperty(ref _template, new TestObjectTemplate(value, ref db), Tags.Template.ToString());
OnPropertyChanged(Tags.TemplateIndex.ToString());
OnPropertyChanged(Tags.ChannelsDescription.ToString());
OnPropertyChanged(Tags.LastModifiedText.ToString());
OnPropertyChanged(Tags.TemplateDescription.ToString());
OnPropertyChanged(Tags.TemplateImage.ToString());
OnPropertyChanged(Tags.Zones.ToString());
OnPropertyChanged(Tags.SelectedGlobalRangeCACOption.ToString());
ZoneNames = value.TemplateZones.Select(z => z.Name).ToArray();
}
private List<string> _zoneNames = new List<string>();
public string[] ZoneNames
{
get => _zoneNames.ToArray();
set => SetProperty(ref _zoneNames, new List<string>(value), Tags.ZoneNames.ToString());
}
public string TemplateType => null == Template ? "" : Template.TestObjectType;
private readonly bool _localOnly = false;
private ISO.TestObject _isoTestObject = null;
public TestObject(ISO.TestObject to, bool sysBuilt)
{
_isoTestObject = to;
SerialNumber = to.SerialNumber;
if (sysBuilt)
{
SerialNumberConverted = to.SerialNumber.Remove(0, SerialNumber.LastIndexOf('_') + 1);
Template = to.Template == "SysBuilt_(no channels)" ? TestObjectTemplateCollection.TemplateCollection.SysBuiltTestObjectTemplate : TestObjectTemplateCollection.TemplateCollection.GetTemplate(to.Template);
TestObjectType = to.TestObjectType;
SysBuilt = true;
}
else
{
Template = TestObjectTemplateCollection.TemplateCollection.GetTemplate(to.Template);
}
_localOnly = to.LocalOnly;
_lastModifiedBy = to.LastModifiedBy;
_lastModified = to.LastModified;
foreach (var id in to.HardwareIds)
{
DASHardware da = null;
try
{
da = DASHardwareList.GetList().GetHardware(id);
}
catch (Exception)
{
//APILogger.Log(ex);
}
if (null != da && !ContainsHardware(da))
{
AddHardware(da);
}
}
}
}
}

View File

@@ -0,0 +1,95 @@
using System;
using System.Windows;
namespace DatabaseImport
{
/// <summary>
/// list that holds groups
/// </summary>
public class TestObjectList //: BasePropertyChanged
{
private static readonly object MyLock = new object();
private static TestObjectList _testObjectList;
private static TestObjectList _addedGroupList;
public static TestObjectList TestObjectsList
{
get
{
lock (MyLock)
{
if (null == _testObjectList)
{
_testObjectList = new TestObjectList();
}
}
return _testObjectList;
}
}
public static TestObjectList AddedGroupsList
{
get
{
lock (MyLock)
{
if (null == _addedGroupList)
{
_addedGroupList = new TestObjectList();
}
}
return _addedGroupList;
}
}
/// <summary>
/// reloads all components and subcomponents
/// </summary>
/// <param name="bLoadSubComponents"></param>
public void ReloadAll(bool bLoadSubComponents)
{
}
/// <summary>
/// returns a given test object if it is in the list,
/// returns null otherwise
/// </summary>
/// <param name="serialNumber">serialnumber of group to look for</param>
/// <returns></returns>
public TestObject GetTestObject(string serialNumber, bool bSysBuilt)
{
var db = (Application.Current as App).IsoDb;
var isoTestObject = ISO.TestObject.GetTestObject(serialNumber, ref db, bSysBuilt);
if (null == isoTestObject) { return null; }
return new TestObject(isoTestObject, bSysBuilt);
}
public TestObject GetTestObject(string serialNumber)
{
var a = GetTestObject(serialNumber, false);
if (null != a) { return a; }
return GetTestObject(serialNumber, true);
}
public TestObject GetAddedGroup(string serialNumber)
{
return GetTestObject(serialNumber, true);
}
/// <summary>
/// deletes all test objects
/// originally created so TDM imports could clear all tables except DAS
/// </summary>
public void DeleteAll()
{
//if (_bUnloaded)
//{
// Reload();
//}
try
{
ISO.TestObject.DeleteAllTestObjects();
}
catch (Exception)
{
//APILogger.Log("Failed to delete all test objects, ", ex);
}
//Reload();
}
}
}

View File

@@ -0,0 +1,340 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
namespace DatabaseImport
{
public class TestObjectTemplate //: BasePropertyChanged, IComparable<TestObjectTemplate>
{
// #region enums and constants
public enum Tags
{
ChannelCountText,
PossibleChannelCountText,
TemplateName,
TemplateDescription,
TestObject,
TestObjectType,
TemplateAllUIChannels,
TemplateZones,
AvailableTestObjectTypes,
TestObjectIndex,
TestObjectTypeIndex,
CurrentZone,
CurrentZoneIndex,
AreZoneControlsEnabled,
TemplateAllChannels,
RequiredChannels
}
public string LastModifiedBy { get; set; } = "N/A";
public DateTime LastModified { get; set; } = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
private int _currentZoneIndex = -1;
public int CurrentZoneIndex
{
get => _currentZoneIndex;
set
{
CurrentZone = value >= 0 ? TemplateZones[value] : null;
_currentZoneIndex = value;
}
}
private Zone _currentZone;
public Zone CurrentZone
{
get => _currentZone;
set
{
//if (null != _currentZone && _currentZone != value) { _currentZone.PropertyChanged -= CurrentZone_PropertyChanged; }
_currentZone = value;
//if (null != _currentZone) { _currentZone.PropertyChanged += CurrentZone_PropertyChanged; }
AreZoneControlsEnabled = null != value;
}
}
public bool AreZoneControlsEnabled { get; set; }
private ISO.TestObjectTemplate _template;
public List<TestObjectTemplateChannel> RequiredChannels { get; set; } = new List<TestObjectTemplateChannel>();
public string TemplateParent { get; set; } = "";
public bool SysBuilt { get; set; }
private bool _embedded;
public bool Embedded
{
get => _embedded;
set
{
_embedded = value;
if (null != _template) { _template.Embedded = value; }
}
}
private string _originalTemplateName = "";
public string OriginalTemplateName
{
get => _originalTemplateName;
set
{
_originalTemplateName = value;
if (null != _template) { _template.OriginalTemplateName = value; }
}
}
public string TemplateName { get; set; }
public string TemplateDescription { get; set; }
public bool IsLocalOnly { get; set; }
private MMETestObjects _testObject;
public MMETestObjects TestObject
{
get => _testObject;
set
{
_testObject = value;
if (null == _testObject) return;
var app = Application.Current as App;
if (app == null) return;
AvailableTestObjectTypes = app.IsoDb.GetUniquePossibleChannelTypes(TestObjectTemplateChannel.NONISOCHANNELTYPE);
if (AvailableTestObjectTypes.Length > 0) { TestObjectTypeIndex = 0; }
else { TestObjectTypeIndex = -1; }
}
}
private string _testObjectType;
public string TestObjectType
{
get => _testObjectType;
set
{
_testObjectType = value;
_channels = new List<MMEPossibleChannels>(((App)Application.Current).IsoDb.GetPossibleChannelsForType(_testObjectType));
TemplateAllChannels = _channels.Select(pc => new TestObjectTemplateChannel(new TestObjectTemplateChannel(pc), /*ref db,*/ _template)).ToArray();
}
}
private List<MMEPossibleChannels> _channels = new List<MMEPossibleChannels>();
private List<TestObjectTemplateChannel> _allChannels = new List<TestObjectTemplateChannel>();
public TestObjectTemplateChannel[] TemplateAllChannels
{
get { _allChannels.Sort(CompareChannels); return _allChannels.ToArray(); }
set
{
_allChannels = new List<TestObjectTemplateChannel>(value);
TemplateAllUIChannels = value.Select(c => new TemplateChannelUI(c)).ToArray();
}
}
private List<TemplateChannelUI> _allUIChannels = new List<TemplateChannelUI>();
public TemplateChannelUI[] TemplateAllUIChannels
{
get => _allUIChannels.ToArray();
set => _allUIChannels = new List<TemplateChannelUI>(value);
}
private List<Zone> _zones = new List<Zone>();
public Zone[] TemplateZones
{
get => _zones.ToArray();
set { _zones = new List<Zone>(value); var j = CurrentZoneIndex; }
}
private List<string> _availableTestObjectTypes = null;
public string[] AvailableTestObjectTypes
{
get
{
if (null != _availableTestObjectTypes) return _availableTestObjectTypes.ToArray();
if (null == TestObject) { return new string[0]; }
_availableTestObjectTypes = new List<string>(((App)Application.Current).IsoDb.GetTestObjectTypeForTestObject(TestObject.Test_Object));
return _availableTestObjectTypes.ToArray();
}
set => _availableTestObjectTypes = new List<string>(value);
}
private int _testObjectTypeIndex = -1;
public int TestObjectTypeIndex
{
get
{
if (string.IsNullOrEmpty(TestObjectType)) { return -1; }
return _availableTestObjectTypes.IndexOf(TestObjectType);
}
set
{
TestObjectType = value >= 0 ? _availableTestObjectTypes[value] : null;
_testObjectTypeIndex = value;
TemplateAllChannels = _channels.Select(pc => new TestObjectTemplateChannel(new TestObjectTemplateChannel(pc), /*ref db,*/ _template)).ToArray();
}
}
public static MMETestObjects GetNonISOTestObject()
{
var existingobjects = ((App)Application.Current).IsoDb.GetTestObjects(false);
var codes = new List<string>();
foreach (var existingobject in existingobjects)
{
if (existingobject.Text_L1 == Constants.NON_ISO_TESTOBJECT_NAME)
{
return existingobject;
}
codes.Add(existingobject.Test_Object);
}
//first try to find a suitable alpha character that isn't in use
for (var i = (int)'A'; i <= 'Z'; i++)
{
var s = new string(new[] { (char)i });
if (!codes.Contains(s))
{
var to = new MMETestObjects(Guid.NewGuid().ToString(), s, Constants.NON_ISO_TESTOBJECT_NAME, Constants.NON_ISO_TESTOBJECT_NAME, 1,
DateTime.Now, "SYSTEM", false, "", DateTime.Now, "created", "", MMEPossibleChannels.MMEChannelTypes.SQL);
((App)Application.Current).IsoDb.Commit(to);
return to;
}
}
//didn't find one, now try for a suitable numeric character
for (var i = (int)'0'; i <= '9'; i++)
{
var s = new string(new[] { (char)i });
if (codes.Contains(s)) continue;
var to = new MMETestObjects(Guid.NewGuid().ToString(), s, Constants.NON_ISO_TESTOBJECT_NAME, Constants.NON_ISO_TESTOBJECT_NAME, 1,
DateTime.Now, "SYSTEM", false, "", DateTime.Now, "created", "", MMEPossibleChannels.MMEChannelTypes.SQL);
((App)Application.Current).IsoDb.Commit(to);
return to;
}
throw new NotSupportedException("TestObjectTemplate_CouldNotCreateNONISOTESTOBJECT");
}
public ISO.TestObjectTemplate ToISOTestObjectTemplate()
{
var template = new ISO.TestObjectTemplate(TemplateName, IsLocalOnly)
{
Description = TemplateDescription,
OriginalTemplateName = OriginalTemplateName,
Embedded = Embedded,
Icon = "",
LocalOnly = IsLocalOnly,
TestObject = TestObject.Test_Object,
TestObjectType = TestObjectType
};
var zones = new List<TemplateZone>();
foreach (var zone in TemplateZones)
{
var isoZone = new TemplateZone(TemplateName, zone.Name, zone.GetPictureName(), zone.Description);
var i = 0;
isoZone.TemplateRegions = zone.Regions.Select(region => region.ToISORegion(this, zone, i++)).ToArray();
zones.Add(isoZone);
}
template.TemplateParent = TemplateParent;
template.Channels = TemplateAllChannels;
template.Zones = zones.ToArray();
template.SysBuilt = SysBuilt;
return template;
}
private int CompareChannels(TestObjectTemplateChannel left, TestObjectTemplateChannel right)
{
if (left == right) { return 0; }
if (null == left) { return -1; }
return null == right ? 1 : left.DisplayOrder.CompareTo(right.DisplayOrder);
}
public TestObjectTemplate(TestObjectTemplate copy, ref ISO13499FileDb db)
{
if (null != copy._template) { _template = new ISO.TestObjectTemplate(copy._template, ref db); }
TemplateDescription = copy.TemplateDescription;
TemplateParent = copy.TemplateParent;
TemplateName = copy.TemplateName;
LastModified = copy.LastModified;
LastModifiedBy = copy.LastModifiedBy;
TestObject = copy.TestObject;
TestObjectType = copy.TestObjectType;
foreach (var c in copy.RequiredChannels)
{
RequiredChannels.Add(new TestObjectTemplateChannel(c, /*ref db,*/ _template));
}
TemplateAllChannels = copy.TemplateAllChannels.Select(c => new TestObjectTemplateChannel(c, /*ref db,*/ _template)).ToArray();
TemplateZones = copy.TemplateZones.Select(z => new Zone(z, this)).ToArray();
SysBuilt = copy.SysBuilt;
Embedded = copy.Embedded;
OriginalTemplateName = copy.OriginalTemplateName;
}
public TestObjectTemplate(ISO.TestObjectTemplate template, ref ISO13499FileDb db)
{
Initialize(template, ref db, null);
}
private void Initialize(ISO.TestObjectTemplate template, ref ISO13499FileDb db, List<MMETestObjects> testObjects)
{
_template = template;
TemplateDescription = template.Description;
TemplateName = template.TemplateName;
LastModified = template.LastModified;
LastModifiedBy = template.LastModifiedBy;
//if a list of test objects is provided, check if the test object we wish is in the list, if so use it
var bFoundTestObject = false;
if (null != testObjects)
{
var matches = from to in testObjects where to.Test_Object == template.TestObject select to;
var mmeTestObjectses = matches as MMETestObjects[] ?? matches.ToArray();
if (mmeTestObjectses.Any())
{
TestObject = mmeTestObjectses[0];
bFoundTestObject = true;
}
}
if (!bFoundTestObject)
{
TestObject = (Application.Current as App).IsoDb.GetTestObjectByIso(template.TestObject);
}
TestObjectType = template.TestObjectType;
OriginalTemplateName = template.OriginalTemplateName;
Embedded = template.Embedded;
TemplateAllChannels = template.Channels.Select(c => new TestObjectTemplateChannel(c, /*ref db,*/ _template)).ToArray();
TemplateZones = template.Zones.Select(z => new Zone(z, this)).ToArray();
TemplateParent = template.TemplateParent;
SysBuilt = template.SysBuilt;
}
public TestObjectTemplate()
{
TemplateName = string.Empty;
TemplateDescription = string.Empty;
TemplateParent = string.Empty;
switch (SerializedSettings.ISOSupportLevel)
{
case SerializedSettings.ISOSupportLevels.ISO_ONLY:
TestObject = ((App)Application.Current).IsoDb.GetTestObjects(false).FirstOrDefault();
break;
case SerializedSettings.ISOSupportLevels.NO_ISO:
//need to create a template just for this object!
InitializeNonISO();
break;
case SerializedSettings.ISOSupportLevels.TRANSITORY:
TestObject = ((App)Application.Current).IsoDb.GetTestObjects(false).FirstOrDefault();
break;
}
}
private void InitializeNonISO()
{
//create template, set template channel type to NONISOTYPE
TemplateName = Guid.NewGuid().ToString();
TestObject = GetNonISOTestObject();
TestObjectType = Constants.NON_ISO_TESTOBJECT_CHANNEL_TYPE;
}
}
}

View File

@@ -0,0 +1,62 @@
using System;
using System.Windows;
namespace DatabaseImport
{
public class TestObjectTemplateCollection //: BasePropertyChanged
{
private static volatile TestObjectTemplateCollection _testObjectCollection;
public static TestObjectTemplateCollection TemplateCollection
{
get
{
if (null == _testObjectCollection)
{
_testObjectCollection = new TestObjectTemplateCollection();
}
return _testObjectCollection;
}
}
public void ReloadAll(bool loadSubComponents)
{
//UnloadAll();
//if (loadSubComponents)
//{
// (App.Current as App).IsoDb.RefreshAllData();
// DataModel.CustomChannelList.List.ReloadAll();
//}
//Reload();
}
private static volatile TestObjectTemplate _sysBuiltTestObjectTemplate;
public TestObjectTemplate SysBuiltTestObjectTemplate => _sysBuiltTestObjectTemplate;
public TestObjectTemplate GetTemplate(string templateId)
{
var db = ((App)Application.Current).IsoDb;
var isoTemplate = ISO.TestObjectTemplate.GetTemplate(ref db, templateId);
return null != isoTemplate ? new TestObjectTemplate(isoTemplate, ref db) : null;
}
/// <summary>
/// deletes all test objects
/// originally created so TDM imports could clear all tables
/// </summary>
public static void DeleteAll()
{
//if (TemplateCollection._bUnloaded) { Reload(); }
_testObjectCollection.DeleteAllTemplates();
_testObjectCollection = new TestObjectTemplateCollection();
TemplateCollection.DeleteAllTemplates();
//TemplateCollection._templates.Clear();
}
private void DeleteAllTemplates()
{
try
{
//if (_bUnloaded) { Reload(); }
ISO.TestObjectTemplate.DeleteAllTemplates();
}
catch (Exception) { /*APILogger.Log("failed to delete all templates"); */}
}
}
}

View File

@@ -0,0 +1,208 @@
using System;
using System.Collections.Generic;
using System.Windows;
namespace DatabaseImport
{
/// <summary>
/// this is a test object that belongs to a test, it's different in that it can have test specific settings ...
/// </summary>
public class TestTestObject : TestObject
{
public TestTestObject(TestObject obj)
: base(obj)
{
}
private string _position = ChannelDefaultsKey;
public MMEPositions Position
{
get => GetGroupPosition(_position);
set
{
SetProperty(ref _position, value.Position, "Position");
if (_position == UserSetKey)
{
GroupPositionComboBoxVisible = Visibility.Hidden;
GroupPositionButtonVisible = Visibility.Visible;
}
else
{
GroupPositionComboBoxVisible = Visibility.Visible;
GroupPositionButtonVisible = Visibility.Hidden;
//set the position for every sensor in the test object using this position
var isoTestObject = GetISOTestObject();
foreach (var ch in isoTestObject.AllChannels)
{
if (!ch.Required) { continue; }
if (string.IsNullOrWhiteSpace(ch.SensorSerialNumber)) { continue; }
var sd = GetSensor(ch.Name, ch.SensorSerialNumber, ch.GetId()); // now using ch.Name instead of ch.GetID(); FB 7391 - Group sensor settings not in test when you set the test obj. and position.
if (null == sd) { continue; }
sd.Position = value.Position;
SetSensor(ch.GetId(), sd);
}
}
}
}
public const string ChannelDefaultsKey = "#";
public const string UserSetKey = "@";
private MMEPositions GetGroupPosition(string groupPositionKey)
{
foreach (var position in AvailableGroupPositions)
{
if (position.Position == groupPositionKey)
{
return position;
}
}
return _userSetGUID;
}
private Visibility _groupPositionComboBoxVisible = Visibility.Visible;
public Visibility GroupPositionComboBoxVisible
{
get
{
if (_groupPositionComboBoxVisible == Visibility.Visible)
{
return SerializedSettings.ISOSupportLevel == SerializedSettings.ISOSupportLevels.NO_ISO ? Visibility.Collapsed : _groupPositionComboBoxVisible;
}
return _groupPositionComboBoxVisible;
}
set => SetProperty(ref _groupPositionComboBoxVisible, value, "GroupPositionComboBoxVisible");
}
private Visibility _groupPositionButtonVisible = Visibility.Hidden;
public Visibility GroupPositionButtonVisible
{
get
{
if (_groupPositionButtonVisible == Visibility.Visible)
{
return SerializedSettings.ISOSupportLevel == SerializedSettings.ISOSupportLevels.NO_ISO ? Visibility.Collapsed : _groupPositionButtonVisible;
}
return _groupPositionButtonVisible;
}
set => SetProperty(ref _groupPositionButtonVisible, value, "GroupPositionButtonVisible");
}
private string _testObject = "?";
public MMETestObjects TestObject
{
get => ((App)Application.Current).IsoDb.GetTestObjectByIso(_testObject);
set
{
if (value == null) return;
SetProperty(ref _testObject, value.Test_Object, "TestObject");
//also set the test object for all sensors!
var isoTestObject = GetISOTestObject();
foreach (var ch in isoTestObject.AllChannels)
{
if (!ch.Required) { continue; }
if (string.IsNullOrWhiteSpace(ch.SensorSerialNumber)) { continue; }
var sd = GetSensor(ch.GetId(), ch.SensorSerialNumber, ch.GetId());
if (null == sd) { continue; }
sd.TestObject = value.Test_Object;
SetSensor(ch.GetId(), sd);
}
}
}
private int _channelTypesIndex = -1;
public int ChannelTypesIndex
{
get => _channelTypesIndex;
set => SetProperty(ref _channelTypesIndex, value, Tags.ChannelTypesIndex.ToString());
}
public void SetTestObject(string s)
{
_testObject = s;
OnPropertyChanged("TestObject");
}
public void SetPosition(string s)
{
_position = s;
OnPropertyChanged("Position");
if (s == UserSetKey)
{
GroupPositionComboBoxVisible = Visibility.Hidden;
GroupPositionButtonVisible = Visibility.Visible;
}
else
{
GroupPositionComboBoxVisible = Visibility.Visible;
GroupPositionButtonVisible = Visibility.Hidden;
}
}
public MMEPositions[] AvailablePositions => ((App)Application.Current).IsoDb.GetPositions();
private const string DATAPRO_DEFINED = "DataPRO-defined";
public static MMEPositions _channelDefaultsGUID = new MMEPositions(Guid.NewGuid().ToString(), ChannelDefaultsKey, "(channel defaults)", "(channel defaults)", 1, DateTime.Now, DATAPRO_DEFINED, false, "", DateTime.Now,
DATAPRO_DEFINED, "", MMEPossibleChannels.MMEChannelTypes.ISO13499_106);
private MMEPositions _userSetGUID = new MMEPositions(Guid.NewGuid().ToString(), UserSetKey, "(multiple)", "(multiple)", 1, DateTime.Now, DATAPRO_DEFINED, false, "", DateTime.Now,
DATAPRO_DEFINED, "", MMEPossibleChannels.MMEChannelTypes.ISO13499_106);
public MMEPositions[] AvailableGroupPositions
{
get
{
var availableGroupPositions = new List<MMEPositions>();
availableGroupPositions.Add(_channelDefaultsGUID);
availableGroupPositions.AddRange(AvailablePositions);
return availableGroupPositions.ToArray();
}
}
public TestTestObject(TestTestObject to)
: base(to)
{
MetaCommonConstructor(to);
}
/// <summary>
/// takes care of the meta data copy constructor items
/// </summary>
/// <param name="to"></param>
private void MetaCommonConstructor(TestTestObject to)
{
ExcitationWarmupTimeMS = to.ExcitationWarmupTimeMS;
TargetSampleRate = to.TargetSampleRate;
PreTriggerSeconds = to.PreTriggerSeconds;
PostTriggerSeconds = to.PostTriggerSeconds;
_position = to._position;
Position = to.Position;
_testObject = to._testObject;
SerialNumberConverted = to.SerialNumberConverted;
SysBuilt = to.SysBuilt; //executed?
ChannelTypesIndex = to.ChannelTypesIndex;
}
private int _excitationWarmupTime;
public int ExcitationWarmupTimeMS
{
get => _excitationWarmupTime;
set => SetProperty(ref _excitationWarmupTime, value, "ExcitationWarmupTimeMS");
}
private double _targetSampleRate;
public double TargetSampleRate
{
get => _targetSampleRate;
set => SetProperty(ref _targetSampleRate, value, "TargetSampleRate");
}
private double _preTriggerSeconds;
public double PreTriggerSeconds
{
get => _preTriggerSeconds;
set => SetProperty(ref _preTriggerSeconds, value, "PreTriggerSeconds");
}
private double _postTriggerSeconds;
public double PostTriggerSeconds
{
get => _postTriggerSeconds;
set => SetProperty(ref _postTriggerSeconds, value, "PostTriggerSeconds");
}
}
}