init
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
|
||||
namespace DatabaseExport
|
||||
{
|
||||
public class GroupTemplateTableInfo
|
||||
{
|
||||
public GroupTemplateTableInfo(string templateName, SerializedSettings.ISOSupportLevels isoSupportLevel, bool sysBuilt, string templateDescription, DateTime lastModified, string lastModifiedBy, bool embedded)
|
||||
{
|
||||
TemplateName = templateName;
|
||||
ISOSupportLevel = isoSupportLevel;
|
||||
SysBuilt = sysBuilt;
|
||||
TemplateDescription = templateDescription;
|
||||
LastModified = lastModified;
|
||||
LastModifiedBy = lastModifiedBy;
|
||||
Embedded = embedded;
|
||||
}
|
||||
|
||||
public string TemplateName { get; private set; }
|
||||
public SerializedSettings.ISOSupportLevels ISOSupportLevel { get; private set; }
|
||||
public bool SysBuilt { get; private set; }
|
||||
public string TemplateDescription { get; private set; }
|
||||
public DateTime LastModified { get; private set; }
|
||||
public string LastModifiedBy { get; private set; }
|
||||
public bool Embedded { get; private set; }
|
||||
public override string ToString()
|
||||
{
|
||||
return TemplateName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
namespace DatabaseExport
|
||||
{
|
||||
/// <summary>
|
||||
/// GUI wrapper for template channels ... it contains a testobjecttemplatechannel
|
||||
/// </summary>
|
||||
public class TemplateChannelUI
|
||||
{
|
||||
private TestObjectTemplateChannel _channel;
|
||||
public TemplateChannelUI(TestObjectTemplateChannel channel)
|
||||
{
|
||||
_channel = channel;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,685 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
|
||||
namespace DatabaseExport
|
||||
{
|
||||
public class TestObject : DbTimeStampBase, IComparable<TestObject>
|
||||
{
|
||||
public override string LookupTable => DbOperations.TestSetups.TestObjectsTable;
|
||||
|
||||
public override ConstraintHelper[] GetConstraints()
|
||||
{
|
||||
return new[]
|
||||
{
|
||||
new ConstraintHelper
|
||||
{
|
||||
ColumnName = DbOperations.TestSetups.TestObjectsFields.SerialNumber.ToString(),
|
||||
DbType = System.Data.SqlDbType.NVarChar,
|
||||
DbValue = SerialNumber
|
||||
}
|
||||
};
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// dirty controls whether _isComplete is valid or not
|
||||
/// if Dirty is true then _isComplete is not valid
|
||||
/// IsComplete will actually calculate this value
|
||||
/// </summary>
|
||||
public bool IsDirty { get; set; } = true;
|
||||
|
||||
public int CompareTo(TestObject rhs)
|
||||
{
|
||||
if (null == rhs) { return 1; }
|
||||
return rhs == this ? 0 : SerialNumber.CompareTo(rhs.SerialNumber);
|
||||
}
|
||||
/// <summary>
|
||||
/// returns the iso support level of the group
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public SerializedSettings.ISOSupportLevels GetObjectISOLevel()
|
||||
{
|
||||
if (TemplateType.Contains(TestObjectTemplate.NON_ISO_TESTOBJECT_CHANNEL_TYPE) || TemplateType.Contains(TestObjectTemplateChannel.NONISOCHANNELTYPE))
|
||||
{
|
||||
return SerializedSettings.ISOSupportLevels.NO_ISO;
|
||||
}
|
||||
return SerializedSettings.ISOSupportLevels.ISO_ONLY;
|
||||
}
|
||||
public SensorData GetSensor(string ChannelId, string serialNumber)
|
||||
{
|
||||
var sd = SensorsCollection.SensorsList.GetSensorBySerialNumber(serialNumber);
|
||||
|
||||
if (null == sd) { return null; }
|
||||
sd = new SensorData(sd);
|
||||
var settings = GetISOTestObject().GetSensorSettings(ChannelId, 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;
|
||||
case "S":
|
||||
//FB 13120 Adhoc filter class
|
||||
sd.Filter = new FilterClass(FilterClass.FilterClassType.AdHoc);
|
||||
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))
|
||||
{
|
||||
int iValue;
|
||||
if (int.TryParse(setting.Value, NumberStyles.Any, CultureInfo.InvariantCulture,
|
||||
out iValue))
|
||||
{
|
||||
sd.DigitalOutputMode = (OutputTOMDigitalChannel.DigitalOutputMode)iValue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ISO.TestObject.SensorSettings.SQMode:
|
||||
if (!string.IsNullOrWhiteSpace(setting.Value))
|
||||
{
|
||||
int iValue;
|
||||
if (int.TryParse(setting.Value, NumberStyles.Any, CultureInfo.InvariantCulture,
|
||||
out iValue))
|
||||
{
|
||||
sd.SquibFireMode = (OutputSquibChannel.SquibFireMode)iValue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ISO.TestObject.SensorSettings.DIMode:
|
||||
if (!string.IsNullOrWhiteSpace(setting.Value))
|
||||
{
|
||||
int iValue;
|
||||
if (int.TryParse(setting.Value, NumberStyles.Any, CultureInfo.InvariantCulture,
|
||||
out iValue))
|
||||
{
|
||||
sd.InputMode = (DigitalInputScaleMultiplier.InputModes)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();
|
||||
var db = ISO13499FileDb.IsoDb;
|
||||
_isoTestObject = new ISO.TestObject(copy.GetISOTestObject(), ref db);
|
||||
SerialNumber = copy.SerialNumber;
|
||||
if (null != copy.Template)
|
||||
{
|
||||
var tot = new TestObjectTemplate(copy.Template, ref db);
|
||||
SetTemplateDontResetISOObject(tot);
|
||||
}
|
||||
var copyISOTO = copy.GetISOTestObject();
|
||||
var ISOTO = GetISOTestObject();
|
||||
|
||||
var hardware = new List<DASHardware>();
|
||||
foreach (var das in copy.Hardware)
|
||||
{
|
||||
hardware.Add(new DASHardware(das, null));
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
public string TestSetupName { get; set; } = string.Empty;
|
||||
|
||||
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
|
||||
{
|
||||
IsDirty = true;
|
||||
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);
|
||||
IsDirty = true;
|
||||
var toAdd = hardware;
|
||||
if (hardware.IsDummy())
|
||||
{
|
||||
var key = hardware.SerialNumber;
|
||||
if (_hardware.ContainsKey(key))
|
||||
{
|
||||
var current = 1;
|
||||
while (_hardware.ContainsKey(key))
|
||||
{
|
||||
current++;
|
||||
key = string.Format("{0}({1:00})", hardware.SerialNumber, current);
|
||||
}
|
||||
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);
|
||||
//toAdd.PropertyChanged += addedHardware_PropertyChanged;
|
||||
OnPropertyChanged(Tags.Hardware.ToString());
|
||||
var hids = new List<string>();
|
||||
foreach (var h in Hardware)
|
||||
{
|
||||
hids.Add(h.GetHardware().GetId());
|
||||
}
|
||||
_isoTestObject.HardwareIds = hids.ToArray();
|
||||
}
|
||||
public ISO.TestObject GetISOTestObject()
|
||||
{
|
||||
return _isoTestObject;
|
||||
}
|
||||
|
||||
private TestObjectTemplate _template = null;
|
||||
public TestObjectTemplate Template
|
||||
{
|
||||
get => _template;
|
||||
set
|
||||
{
|
||||
if (value == _template)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (null == value)
|
||||
{
|
||||
_template = value;
|
||||
return;
|
||||
}
|
||||
if (GetISOTestObject().Template != value.TemplateName)
|
||||
{
|
||||
var db = ISO13499FileDb.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());
|
||||
var zoneNames = new List<string>();
|
||||
foreach (var z in Template.TemplateZones)
|
||||
{
|
||||
zoneNames.Add(z.Name);
|
||||
}
|
||||
ZoneNames = zoneNames.ToArray();
|
||||
}
|
||||
}
|
||||
public void SetTemplateDontResetISOObject(TestObjectTemplate value)
|
||||
{
|
||||
if (value == _template)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (null == value)
|
||||
{
|
||||
_template = value;
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
_isoTestObject?.SetTemplateOnly(value.TemplateName);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
|
||||
var db = ISO13499FileDb.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());
|
||||
var zoneNames = new List<string>();
|
||||
foreach (var z in value.TemplateZones)
|
||||
{
|
||||
zoneNames.Add(z.Name);
|
||||
}
|
||||
ZoneNames = zoneNames.ToArray();
|
||||
}
|
||||
public Dictionary<string, string> GetValues()
|
||||
{
|
||||
var elementNameValuePairs = new Dictionary<string, string>();
|
||||
var isoTestObject = GetISOTestObject();
|
||||
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.SerialNumber.ToString()] = SerialNumber;
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.LastModifiedBy.ToString()] = isoTestObject.LastModifiedBy;
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.LastModified.ToString()] = isoTestObject.LastModified.ToString(CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.Template.ToString()] = (null != Template) ? Template.TemplateName : "";
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.LocalOnly.ToString()] = isoTestObject.LocalOnly.ToString();
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.ParentObject.ToString()] = ParentObject ?? "";
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.SysBuilt.ToString()] = SysBuilt.ToString();
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.Embedded.ToString()] = isoTestObject.Embedded.ToString(CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.OriginalTemplate.ToString()] = isoTestObject.OriginalTemplate;
|
||||
elementNameValuePairs[DbOperations.TestSetups.TestObjectsFields.OriginalSerialNumber.ToString()] = isoTestObject.OriginalSerialNumber;
|
||||
|
||||
return elementNameValuePairs;
|
||||
}
|
||||
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;
|
||||
|
||||
public bool LocalOnly { get; } = false;
|
||||
|
||||
private ISO.TestObject _isoTestObject = null;
|
||||
public TestObject(ISO.TestObject to, bool sysBuilt)
|
||||
{
|
||||
//PopulateTemplates();
|
||||
_isoTestObject = to;
|
||||
SerialNumber = to.SerialNumber;
|
||||
if (sysBuilt)
|
||||
{
|
||||
SerialNumberConverted = to.SerialNumber.Remove(0, SerialNumber.LastIndexOf('_') + 1);
|
||||
if (to.Template == "SysBuilt_(no channels)") // add to string resources this whole thing not needed anymore?
|
||||
{
|
||||
Template = TestObjectTemplateCollection.TemplateCollection.SysBuiltTestObjectTemplate;
|
||||
}
|
||||
else
|
||||
{
|
||||
Template = TestObjectTemplateCollection.TemplateCollection.GetTemplate(to.Template);
|
||||
}
|
||||
TestObjectType = to.TestObjectType;
|
||||
SysBuilt = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Template = TestObjectTemplateCollection.TemplateCollection.GetTemplate(to.Template);
|
||||
}
|
||||
LocalOnly = to.LocalOnly;
|
||||
foreach (var id in to.HardwareIds)
|
||||
{
|
||||
DASHardware da = null;
|
||||
try
|
||||
{
|
||||
da = DASHardwareList.GetList().GetHardware(id);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//DTS.Utilities.Logging.APILogger.Log(ex);
|
||||
}
|
||||
if (null != da && !ContainsHardware(da))
|
||||
{
|
||||
AddHardware(da);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
|
||||
namespace DatabaseExport
|
||||
{
|
||||
/// <summary>
|
||||
/// list that holds groups
|
||||
/// </summary>
|
||||
public class TestObjectList
|
||||
{
|
||||
private static readonly object MyLock = new object();
|
||||
|
||||
private static TestObjectList _testObjectList;
|
||||
|
||||
public static TestObjectList TestObjectsList
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (MyLock)
|
||||
{
|
||||
if (null == _testObjectList)
|
||||
{
|
||||
_testObjectList = new TestObjectList();
|
||||
}
|
||||
}
|
||||
return _testObjectList;
|
||||
}
|
||||
}
|
||||
public List<string> GetAllGroupSerialNumbers()
|
||||
{
|
||||
var serialNumbers = new List<string>();
|
||||
using (var sql = DbOperations.GetCommand())
|
||||
{
|
||||
sql.CommandText = "SELECT A.SerialNumber from tblTestObjects as A";
|
||||
using (var ds = DbOperations.Connection.QueryDataSet(sql))
|
||||
{
|
||||
foreach (DataRow dr in ds.Tables[0].Rows)
|
||||
{
|
||||
var groupSerialNumber = (string)dr["SerialNumber"];
|
||||
if (!serialNumbers.Contains(groupSerialNumber))
|
||||
{
|
||||
serialNumbers.Add(groupSerialNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return serialNumbers;
|
||||
}
|
||||
/// <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)
|
||||
{
|
||||
var db = ISO13499FileDb.IsoDb;
|
||||
var testObject = ISO.TestObject.GetTestObject(serialNumber, ref db);
|
||||
if (null == testObject) { return null; }
|
||||
return new TestObject(testObject, testObject.SysBuilt);
|
||||
}
|
||||
|
||||
public TestObject GetAddedGroup(string serialNumber)
|
||||
{
|
||||
return GetTestObject(serialNumber);
|
||||
}
|
||||
protected TestObjectList()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,514 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace DatabaseExport
|
||||
{
|
||||
public class TestObjectTemplate
|
||||
{
|
||||
private enum GroupTemplateChannelFields
|
||||
{
|
||||
TestObjectNumber,
|
||||
NameOfTheChannel,
|
||||
LaboratoryChannelCode,
|
||||
CustomerChannelCode,
|
||||
Comments1,
|
||||
Location,
|
||||
Dimension,
|
||||
Direction,
|
||||
ChannelFrequencyClass,
|
||||
Unit,
|
||||
ReferenceSystem,
|
||||
TransducerType,
|
||||
TransducerId,
|
||||
PreFilterType,
|
||||
CutOffFrequency,
|
||||
ChannelAmplitudeClass,
|
||||
ReferenceChannel,
|
||||
ReferenceChannelName,
|
||||
DataSource,
|
||||
DataStatus,
|
||||
SamplingInterval,
|
||||
BitResolution,
|
||||
TimeOfFirstSample,
|
||||
NumberOfSamples,
|
||||
OffsetPostTest,
|
||||
TransducerNaturalFrequency,
|
||||
TransducerDampingRatio,
|
||||
Comments,
|
||||
FirstGlobalMaximumValue,
|
||||
TimeOfMaximumValue,
|
||||
FirstGlobalMinimumValue,
|
||||
TimeOfMinimumValue,
|
||||
StartOffsetInterval,
|
||||
EndOffsetInterval,
|
||||
MMEChannelId,
|
||||
MMEChannelType,
|
||||
Required,
|
||||
DisplayOrder,
|
||||
LocalOnly
|
||||
}
|
||||
private enum GroupTemplateFields
|
||||
{
|
||||
TemplateName,
|
||||
Icon,
|
||||
Description,
|
||||
LocalOnly,
|
||||
Version,
|
||||
LastModifiedBy,
|
||||
LastModified,
|
||||
CRC32,
|
||||
TestObjectType,
|
||||
TestObject,
|
||||
ParentTemplate,
|
||||
SysBuilt,
|
||||
OriginalTemplateName,
|
||||
Embedded
|
||||
};
|
||||
public const string NON_ISO_TESTOBJECT_CHANNEL_TYPE = "x_NonISOTestObjectType_x";
|
||||
public const string NON_ISO_TESTOBJECT_NAME = "x_NonISOTestObjectName_x";
|
||||
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
|
||||
{
|
||||
if (value >= 0)
|
||||
{
|
||||
CurrentZone = TemplateZones[value];
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentZone = null;
|
||||
}
|
||||
_currentZoneIndex = value;
|
||||
}
|
||||
}
|
||||
|
||||
private Zone _currentZone = null;//Zone.DummyZone;
|
||||
public Zone CurrentZone
|
||||
{
|
||||
get => _currentZone;
|
||||
set
|
||||
{
|
||||
//if (null != _currentZone && _currentZone != value) { _currentZone.PropertyChanged -= CurrentZone_PropertyChanged; }
|
||||
_currentZone = value;
|
||||
|
||||
//if (null != _currentZone) { _currentZone.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(CurrentZone_PropertyChanged); }
|
||||
if (null == value) { AreZoneControlsEnabled = false; }
|
||||
else { AreZoneControlsEnabled = true; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public bool AreZoneControlsEnabled { get; set; } = false;
|
||||
|
||||
private ISO.TestObjectTemplate _template = null;
|
||||
public List<TestObjectTemplateChannel> RequiredChannels { get; set; } = new List<TestObjectTemplateChannel>();
|
||||
|
||||
public string TemplateParent { get; set; } = "";
|
||||
|
||||
public bool SysBuilt { get; set; } = false;
|
||||
|
||||
private bool _embedded = false;
|
||||
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)
|
||||
{
|
||||
AvailableTestObjectTypes = ISO13499FileDb.IsoDb.GetUniquePossibleChannelTypes(TestObjectTemplateChannel.NONISOCHANNELTYPE);
|
||||
if (AvailableTestObjectTypes.Length > 0) { TestObjectTypeIndex = 0; }
|
||||
else { TestObjectTypeIndex = -1; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string _testObjectType;
|
||||
public string TestObjectType
|
||||
{
|
||||
get => _testObjectType;
|
||||
set
|
||||
{
|
||||
_testObjectType = value;
|
||||
//if (null != _template) { _template.TestObjectType = value; }//we did this so that _template.TestObjectType gets set, however during initialization _template can be null
|
||||
_channels = new List<MMEPossibleChannels>(ISO13499FileDb.IsoDb.GetPossibleChannelsForType(_testObjectType));
|
||||
var all = new List<TestObjectTemplateChannel>();
|
||||
var db = ISO13499FileDb.IsoDb;
|
||||
foreach (var pc in _channels) { all.Add(new TestObjectTemplateChannel(new TestObjectTemplateChannel(pc), /*ref db,*/ _template)); }
|
||||
TemplateAllChannels = all.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
private List<MMEPossibleChannels> _channels = new List<MMEPossibleChannels>();
|
||||
|
||||
private List<TestObjectTemplateChannel> _allChannels = new List<TestObjectTemplateChannel>();
|
||||
public TestObjectTemplateChannel[] TemplateAllChannels
|
||||
{
|
||||
get { _allChannels.Sort(new Comparison<TestObjectTemplateChannel>(CompareChannels)); return _allChannels.ToArray(); }
|
||||
set
|
||||
{
|
||||
_allChannels = new List<TestObjectTemplateChannel>(value);
|
||||
|
||||
var channels = new List<TemplateChannelUI>();
|
||||
foreach (var c in value)
|
||||
{
|
||||
var channel = new TemplateChannelUI(c);
|
||||
channels.Add(channel);
|
||||
}
|
||||
TemplateAllUIChannels = channels.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)
|
||||
{
|
||||
if (null == TestObject) { return new string[0]; }
|
||||
_availableTestObjectTypes = new List<string>(ISO13499FileDb.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
|
||||
{
|
||||
if (value >= 0) { TestObjectType = _availableTestObjectTypes[value]; }
|
||||
else { TestObjectType = null; }
|
||||
_testObjectTypeIndex = value;
|
||||
|
||||
var all = new List<TestObjectTemplateChannel>();
|
||||
var db = ISO13499FileDb.IsoDb;
|
||||
foreach (var pc in _channels) { all.Add(new TestObjectTemplateChannel(new TestObjectTemplateChannel(pc), /*ref db,*/ _template)); }
|
||||
TemplateAllChannels = all.ToArray();
|
||||
}
|
||||
}
|
||||
public static MMETestObjects GetNonISOTestObject()
|
||||
{
|
||||
var existingobjects = ISO13499FileDb.IsoDb.GetTestObjects(false);
|
||||
|
||||
var codes = new List<string>();
|
||||
|
||||
foreach (var existingobject in existingobjects)
|
||||
{
|
||||
if (existingobject.Text_L1 == NON_ISO_TESTOBJECT_NAME)
|
||||
{
|
||||
return existingobject;
|
||||
}
|
||||
else { 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[] { (char)i });
|
||||
if (!codes.Contains(s))
|
||||
{
|
||||
var to = new MMETestObjects(Guid.NewGuid().ToString(), s, NON_ISO_TESTOBJECT_NAME, NON_ISO_TESTOBJECT_NAME, 1,
|
||||
DateTime.Now, "SYSTEM", false, "", DateTime.Now, "created", "", MMEPossibleChannels.MMEChannelTypes.SQL);
|
||||
//ISO13499FileDb.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[] { (char)i });
|
||||
if (!codes.Contains(s))
|
||||
{
|
||||
var to = new MMETestObjects(Guid.NewGuid().ToString(), s, NON_ISO_TESTOBJECT_NAME, NON_ISO_TESTOBJECT_NAME, 1,
|
||||
DateTime.Now, "SYSTEM", false, "", DateTime.Now, "created", "", MMEPossibleChannels.MMEChannelTypes.SQL);
|
||||
//(App.Current as App).IsoDb.Commit(to);
|
||||
return to;
|
||||
}
|
||||
}
|
||||
throw new NotSupportedException("Could not create system Non-ISO Group" /*Strings.StringResources.TestObjectTemplate_CouldNotCreateNONISOTESTOBJECT*/);
|
||||
}
|
||||
public ISO.TestObjectTemplate ToISOTestObjectTemplate()
|
||||
{
|
||||
var log = new System.Diagnostics.EventLog();
|
||||
log.Source = "DataPROInstaller";
|
||||
|
||||
log.WriteEntry("Getting a new ISO.TestObjectTemplate using " + TemplateName);
|
||||
var template = new ISO.TestObjectTemplate(TemplateName, IsLocalOnly);
|
||||
log.WriteEntry("Got a new ISO.TestObjectTemplate");
|
||||
template.Description = TemplateDescription;
|
||||
log.WriteEntry("Set template.Description to " + TemplateDescription);
|
||||
template.OriginalTemplateName = OriginalTemplateName;
|
||||
log.WriteEntry("Set template.OriginalTemplateName to " + OriginalTemplateName);
|
||||
template.Embedded = Embedded;
|
||||
log.WriteEntry("Set template.Embedded to " + Embedded);
|
||||
template.Icon = "";
|
||||
log.WriteEntry("Set template.Icon to " + "");
|
||||
template.LocalOnly = IsLocalOnly;
|
||||
log.WriteEntry("Set LocalOnly to " + IsLocalOnly);
|
||||
if (TestObject == null)
|
||||
{
|
||||
log.WriteEntry("TestObject is null");
|
||||
}
|
||||
else if (TestObject.Test_Object == null)
|
||||
{
|
||||
log.WriteEntry("TestObject.Test_Object is null");
|
||||
}
|
||||
log.WriteEntry("Setting template.TestObject to " + TestObject.Test_Object);
|
||||
template.TestObject = TestObject.Test_Object;
|
||||
log.WriteEntry("Set template.TestObject successfully");
|
||||
template.TestObjectType = TestObjectType;
|
||||
var zones = new List<TemplateZone>();
|
||||
foreach (var zone in TemplateZones)
|
||||
{
|
||||
var isoZone = new TemplateZone(TemplateName, zone.Name, zone.GetPictureName(), zone.Description);
|
||||
|
||||
var zoneRegions = new List<TemplateRegion>();
|
||||
var i = 0;
|
||||
foreach (var region in zone.Regions)
|
||||
{
|
||||
var isoRegion = region.ToISORegion(this, zone, i++);
|
||||
zoneRegions.Add(isoRegion);
|
||||
}
|
||||
isoZone.TemplateRegions = zoneRegions.ToArray();
|
||||
zones.Add(isoZone);
|
||||
}
|
||||
template.TemplateParent = TemplateParent;
|
||||
log.WriteEntry("Setting template.Channels to TemplateAllChannels");
|
||||
template.Channels = TemplateAllChannels;
|
||||
log.WriteEntry("Set template.Channels successfully");
|
||||
template.Zones = zones.ToArray();
|
||||
template.SysBuilt = SysBuilt;
|
||||
log.WriteEntry("Returning");
|
||||
return template;
|
||||
}
|
||||
private int CompareChannels(TestObjectTemplateChannel left, TestObjectTemplateChannel right)
|
||||
{
|
||||
if (left == right) { return 0; }
|
||||
if (null == left) { return -1; }
|
||||
if (null == right) { return 1; }
|
||||
return 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;
|
||||
var channels = new List<TestObjectTemplateChannel>();
|
||||
foreach (var c in copy.TemplateAllChannels)
|
||||
{
|
||||
channels.Add(new TestObjectTemplateChannel(c, /*ref db,*/ _template));
|
||||
}
|
||||
foreach (var c in copy.RequiredChannels)
|
||||
{
|
||||
RequiredChannels.Add(new TestObjectTemplateChannel(c, /*ref db,*/ _template));
|
||||
}
|
||||
TemplateAllChannels = channels.ToArray();
|
||||
|
||||
var zones = new List<Zone>();
|
||||
foreach (var z in copy.TemplateZones)
|
||||
{
|
||||
zones.Add(new Zone(z.ISODllZone, this));
|
||||
}
|
||||
TemplateZones = zones.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;
|
||||
if (matches.Count() > 0)
|
||||
{
|
||||
TestObject = matches.First();
|
||||
bFoundTestObject = true;
|
||||
}
|
||||
}
|
||||
if (!bFoundTestObject)
|
||||
{
|
||||
TestObject = (ISO13499FileDb.IsoDb.GetTestObjectByIso(template.TestObject));
|
||||
}
|
||||
TestObjectType = template.TestObjectType;
|
||||
OriginalTemplateName = template.OriginalTemplateName;
|
||||
Embedded = template.Embedded;
|
||||
|
||||
var channels = new List<TestObjectTemplateChannel>();
|
||||
foreach (var c in template.Channels)
|
||||
{
|
||||
channels.Add(new TestObjectTemplateChannel(c, /*ref db,*/ _template));
|
||||
}
|
||||
TemplateAllChannels = channels.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 = ISO13499FileDb.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 = ISO13499FileDb.IsoDb.GetTestObjects(false).FirstOrDefault();
|
||||
break;
|
||||
}
|
||||
}
|
||||
private void InitializeNonISO()
|
||||
{
|
||||
//create template, set template channel type to NONISOTYPE
|
||||
TemplateName = (Guid.NewGuid()).ToString();
|
||||
|
||||
TestObject = GetNonISOTestObject();
|
||||
TestObjectType = NON_ISO_TESTOBJECT_CHANNEL_TYPE;
|
||||
}
|
||||
public Dictionary<string, string> GetValues()
|
||||
{
|
||||
var elementNameValuePairs = new Dictionary<string, string>();
|
||||
var isoTemplate = ToISOTestObjectTemplate();
|
||||
|
||||
elementNameValuePairs[GroupTemplateFields.TemplateName.ToString()] = isoTemplate.TemplateName;
|
||||
elementNameValuePairs[GroupTemplateFields.Icon.ToString()] = isoTemplate.Icon;
|
||||
elementNameValuePairs[GroupTemplateFields.Description.ToString()] = isoTemplate.Description;
|
||||
elementNameValuePairs[GroupTemplateFields.LocalOnly.ToString()] = isoTemplate.LocalOnly.ToString();
|
||||
elementNameValuePairs[GroupTemplateFields.Version.ToString()] = isoTemplate.Version.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[GroupTemplateFields.LastModifiedBy.ToString()] = /*isoTemplate.*/LastModifiedBy;
|
||||
elementNameValuePairs[GroupTemplateFields.LastModified.ToString()] = /*isoTemplate.*/LastModified.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[GroupTemplateFields.CRC32.ToString()] = isoTemplate.CRC32.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[GroupTemplateFields.TestObjectType.ToString()] = isoTemplate.TestObjectType;
|
||||
elementNameValuePairs[GroupTemplateFields.TestObject.ToString()] = isoTemplate.TestObject;
|
||||
elementNameValuePairs[GroupTemplateFields.ParentTemplate.ToString()] = isoTemplate.TemplateParent;
|
||||
elementNameValuePairs[GroupTemplateFields.SysBuilt.ToString()] = isoTemplate.SysBuilt.ToString();
|
||||
elementNameValuePairs[GroupTemplateFields.OriginalTemplateName.ToString()] = isoTemplate.OriginalTemplateName;
|
||||
elementNameValuePairs[GroupTemplateFields.Embedded.ToString()] = isoTemplate.Embedded.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
|
||||
return elementNameValuePairs;
|
||||
}
|
||||
public Dictionary<string, string> GetTemplateChannelValues(TestObjectTemplateChannel channel)
|
||||
{
|
||||
var elementNameValuePairs = new Dictionary<string, string>();
|
||||
|
||||
elementNameValuePairs[GroupTemplateChannelFields.TestObjectNumber.ToString()] = channel.TestObjectNumber;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.NameOfTheChannel.ToString()] = channel.NameOfTheChannel;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.LaboratoryChannelCode.ToString()] = channel.LaboratoryCode;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.CustomerChannelCode.ToString()] = channel.CustomerChannelCode;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.Comments1.ToString()] = channel.Comments2;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.Location.ToString()] = channel.Location;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.Dimension.ToString()] = channel.Dimension;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.Direction.ToString()] = channel.Direction;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.ChannelFrequencyClass.ToString()] = channel.ChannelFrequencyClass;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.Unit.ToString()] = channel.Unit;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.ReferenceSystem.ToString()] = channel.ReferenceSystem;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.TransducerType.ToString()] = channel.TransducerType;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.TransducerId.ToString()] = channel.TransducerId;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.PreFilterType.ToString()] = channel.PreFilterType;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.CutOffFrequency.ToString()] = channel.CutOffFrequency;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.ChannelAmplitudeClass.ToString()] = channel.ChannelAmplitudeClass;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.ReferenceChannel.ToString()] = channel.ReferenceChannel.ToString();
|
||||
elementNameValuePairs[GroupTemplateChannelFields.ReferenceChannelName.ToString()] = channel.ReferenceChannelName;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.DataSource.ToString()] = channel.DataSource.ToString();
|
||||
elementNameValuePairs[GroupTemplateChannelFields.DataStatus.ToString()] = channel.DataStatus.ToString();
|
||||
elementNameValuePairs[GroupTemplateChannelFields.SamplingInterval.ToString()] = channel.SamplingInterval;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.BitResolution.ToString()] = channel.BitResolution;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.TimeOfFirstSample.ToString()] = channel.TimeOfFirstSample;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.NumberOfSamples.ToString()] = channel.NumberOfSamples;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.OffsetPostTest.ToString()] = channel.OffsetPostTest;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.TransducerNaturalFrequency.ToString()] = channel.TransducerNaturalFrequency;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.TransducerDampingRatio.ToString()] = channel.TransducerDampingRatio;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.Comments.ToString()] = channel.Comments1;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.FirstGlobalMaximumValue.ToString()] = channel.FirstGlobalMaximumValue;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.TimeOfMaximumValue.ToString()] = channel.TimeOfMaximumValue;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.FirstGlobalMinimumValue.ToString()] = channel.FirstGlobalMinimumValue;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.TimeOfMinimumValue.ToString()] = channel.TimeOfMinimumValue;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.StartOffsetInterval.ToString()] = channel.StartOffsetInterval;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.EndOffsetInterval.ToString()] = channel.EndOffsetInterval;
|
||||
elementNameValuePairs[GroupTemplateChannelFields.MMEChannelId.ToString()] = channel.Channel.Id.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[GroupTemplateChannelFields.MMEChannelType.ToString()] = channel.Channel.MMEChannelType.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[GroupTemplateChannelFields.Required.ToString()] = channel.Required.ToString();
|
||||
elementNameValuePairs[GroupTemplateChannelFields.DisplayOrder.ToString()] = channel.DisplayOrder.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[GroupTemplateChannelFields.LocalOnly.ToString()] = channel.LocalOnly.ToString();
|
||||
|
||||
return elementNameValuePairs;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
|
||||
namespace DatabaseExport
|
||||
{
|
||||
public class TestObjectTemplateCollection
|
||||
{
|
||||
|
||||
private static volatile TestObjectTemplateCollection _testObjectCollection;
|
||||
public static TestObjectTemplateCollection TemplateCollection => _testObjectCollection ?? (_testObjectCollection = new TestObjectTemplateCollection());
|
||||
|
||||
public GroupTemplateTableInfo[] GetAllTemplates(bool bIncludeEmbeddedAndSysBuilt = true)
|
||||
{
|
||||
var templates = new List<GroupTemplateTableInfo>();
|
||||
|
||||
using (var sql = DbOperations.GetCommand())
|
||||
{
|
||||
if (bIncludeEmbeddedAndSysBuilt)
|
||||
{
|
||||
sql.CommandText =
|
||||
"SELECT TemplateName, Description, LastModifiedBy, TestObjectType, LastModified, SysBuilt, Embedded from tblTestObjectTemplates";
|
||||
}
|
||||
else
|
||||
{
|
||||
sql.CommandText = "SELECT TemplateName, Description, LastModifiedBy, TestObjectType, LastModified, SysBuilt, Embedded from tblTestObjectTemplates WHERE (Embedded=0 OR Embedded is NULL) AND SysBuilt=0";
|
||||
}
|
||||
|
||||
using (var ds = DbOperations.Connection.QueryDataSet(sql))
|
||||
{
|
||||
foreach (DataRow dr in ds.Tables[0].Rows)
|
||||
{
|
||||
var templateName = (string)dr["TemplateName"];
|
||||
var templateDescription = (string)dr["Description"];
|
||||
var lastModifiedBy = (string)dr["LastModifiedBy"];
|
||||
var testObjectType = (string)dr["TestObjectType"];
|
||||
var lastModified = Convert.ToDateTime(dr["LastModified"]);
|
||||
var sysBuilt = Convert.ToBoolean(dr["SysBuilt"]);
|
||||
var embeddedValue = dr["Embedded"];
|
||||
var embedded = false;
|
||||
if (!DBNull.Value.Equals(embeddedValue))
|
||||
{
|
||||
embedded = Convert.ToBoolean(dr["Embedded"]);
|
||||
}
|
||||
|
||||
var isoSupportLevel =
|
||||
(testObjectType.Contains(TestObjectTemplate.NON_ISO_TESTOBJECT_CHANNEL_TYPE) ||
|
||||
testObjectType.Contains(TestObjectTemplateChannel.NONISOCHANNELTYPE))
|
||||
? SerializedSettings.ISOSupportLevels.NO_ISO
|
||||
: SerializedSettings.ISOSupportLevels.ISO_ONLY;
|
||||
|
||||
templates.Add(new GroupTemplateTableInfo(templateName, isoSupportLevel, sysBuilt,
|
||||
templateDescription, lastModified, lastModifiedBy, embedded));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return templates.ToArray();
|
||||
}
|
||||
private static volatile TestObjectTemplate _sysBuiltTestObjectTemplate;
|
||||
public TestObjectTemplate SysBuiltTestObjectTemplate => _sysBuiltTestObjectTemplate;
|
||||
|
||||
public TestObjectTemplate GetTemplate(string templateId)
|
||||
{
|
||||
//if (null == Application.Current) { return null; }
|
||||
var db = ISO13499FileDb.IsoDb;
|
||||
var template = ISO.TestObjectTemplate.GetTemplate(ref db, templateId);
|
||||
if (null == template)
|
||||
{
|
||||
return new TestObjectTemplate();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new TestObjectTemplate(template, ref db);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace DatabaseExport
|
||||
{
|
||||
/// <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 = System.Windows.Visibility.Hidden;
|
||||
GroupPositionButtonVisible = System.Windows.Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
GroupPositionComboBoxVisible = System.Windows.Visibility.Visible;
|
||||
GroupPositionButtonVisible = System.Windows.Visibility.Hidden;
|
||||
//set the position for every sensor in the test object using this position
|
||||
var isoTO = GetISOTestObject();
|
||||
foreach (var ch in isoTO.AllChannels)
|
||||
{
|
||||
if (!ch.Required) { continue; }
|
||||
if (string.IsNullOrWhiteSpace(ch.SensorSerialNumber)) { continue; }
|
||||
var sd = GetSensor(ch.Name, ch.SensorSerialNumber); // 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 System.Windows.Visibility _groupPositionComboBoxVisible = System.Windows.Visibility.Visible;
|
||||
public System.Windows.Visibility GroupPositionComboBoxVisible
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_groupPositionComboBoxVisible == System.Windows.Visibility.Visible)
|
||||
{
|
||||
if (SerializedSettings.ISOSupportLevel == SerializedSettings.ISOSupportLevels.NO_ISO) { return System.Windows.Visibility.Collapsed; }
|
||||
return _groupPositionComboBoxVisible;
|
||||
}
|
||||
return _groupPositionComboBoxVisible;
|
||||
}
|
||||
set => _groupPositionComboBoxVisible = value;
|
||||
}
|
||||
|
||||
private System.Windows.Visibility _groupPositionButtonVisible = System.Windows.Visibility.Hidden;
|
||||
public System.Windows.Visibility GroupPositionButtonVisible
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_groupPositionButtonVisible == System.Windows.Visibility.Visible)
|
||||
{
|
||||
if (SerializedSettings.ISOSupportLevel == SerializedSettings.ISOSupportLevels.NO_ISO) { return System.Windows.Visibility.Collapsed; }
|
||||
return _groupPositionButtonVisible;
|
||||
}
|
||||
return _groupPositionButtonVisible;
|
||||
}
|
||||
set => _groupPositionButtonVisible = value;
|
||||
}
|
||||
|
||||
private string _testObject = "?";
|
||||
public MMETestObjects TestObject
|
||||
{
|
||||
get => ISO13499FileDb.IsoDb.GetTestObjectByIso(_testObject);
|
||||
set
|
||||
{
|
||||
if (value == null) return;
|
||||
SetProperty(ref _testObject, value.Test_Object, "TestObject");
|
||||
//also set the test object for all sensors!
|
||||
|
||||
var isoTO = GetISOTestObject();
|
||||
foreach (var ch in isoTO.AllChannels)
|
||||
{
|
||||
if (!ch.Required) { continue; }
|
||||
if (string.IsNullOrWhiteSpace(ch.SensorSerialNumber)) { continue; }
|
||||
var sd = GetSensor(ch.GetID(), ch.SensorSerialNumber);
|
||||
if (null == sd) { continue; }
|
||||
sd.TestObject = value.Test_Object;
|
||||
SetSensor(ch.GetID(), sd);
|
||||
}
|
||||
}
|
||||
}
|
||||
public void SetTestObject(string s)
|
||||
{
|
||||
_testObject = s;
|
||||
OnPropertyChanged("TestObject");
|
||||
}
|
||||
public void SetPosition(string s)
|
||||
{
|
||||
_position = s;
|
||||
OnPropertyChanged("Position");
|
||||
if (s == UserSetKey)
|
||||
{
|
||||
GroupPositionComboBoxVisible = System.Windows.Visibility.Hidden;
|
||||
GroupPositionButtonVisible = System.Windows.Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
GroupPositionComboBoxVisible = System.Windows.Visibility.Visible;
|
||||
GroupPositionButtonVisible = System.Windows.Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
public MMEPositions[] AvailablePositions => ISO13499FileDb.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);
|
||||
foreach (var position in AvailablePositions)
|
||||
{
|
||||
availableGroupPositions.Add(position);
|
||||
}
|
||||
|
||||
return availableGroupPositions.ToArray();
|
||||
}
|
||||
}
|
||||
private int _excitationWarmupTime = Properties.Settings.Default.DefaultTestExcitationWarmupMS;
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user