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,22 @@
using DTS.Common.Base;
namespace DataPROWin7.DataModel
{
/// <summary>
/// GUI wrapper for template channels ... it contains a testobjecttemplatechannel
/// </summary>
public class TemplateChannelUI : BasePropertyChanged
{
private DTS.Common.ISO.TestObjectTemplateChannel _channel;
public DTS.Common.ISO.TestObjectTemplateChannel Channel
{
get => _channel;
set => SetProperty(ref _channel, value, "Channel");
}
public TemplateChannelUI(DTS.Common.ISO.TestObjectTemplateChannel channel)
{
_channel = channel;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using DataPROWin7.Common;
using DTS.Common.Base;
using DTS.Common.Utilities.Logging;
using DTS.Common.ISO;
using DTS.Common.DataModel;
// ReSharper disable once CheckNamespace
namespace DataPROWin7.DataModel
{
/// <summary>
/// list that holds groups
/// </summary>
public class TestObjectList : BasePropertyChanged
{
#region Tags and Constants
public enum Tags
{
TestObjects
}
#endregion
#region Properties
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;
}
}
#endregion
#region Methods
/// <summary>
/// adds a group
/// will notify listeners if bNotify is true
/// you would not want to notify listeners if you are in a bulk
/// operation and intend to refresh everyone when done
/// </summary>
/// <param name="to"></param>
/// <param name="bNotify"></param>
public void Add(TestObject to, bool bNotify)
{
to.LastModifiedBy = ApplicationProperties.CurrentUser.UserName;
to.SetLastModified(DateTime.Now);
to.Commit();
if (bNotify)
{
OnPropertyChanged("TestObjects");
}
}
public void UpdateAll()
{
OnPropertyChanged("TestObjects");
}
#endregion
protected TestObjectList()
{
}
}
}

View File

@@ -0,0 +1,544 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using DTS.Common.Base;
using DTS.Common.DataModel;
using DTS.Common.ISO;
namespace DataPROWin7.DataModel
{
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
}
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
};
#endregion
#region properties
private string _lastModifiedBy = "N/A";
public string LastModifiedBy
{
get => _lastModifiedBy;
set => SetProperty(ref _lastModifiedBy, value, "LastModifiedBy");
}
private DateTime _lastModified = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
public DateTime LastModified
{
get => _lastModified;
set => SetProperty(ref _lastModified, value, "LastModified");
}
private DTS.Common.ISO.TestObjectTemplate _template;
private List<TestObjectTemplateChannel> _requiredChannels = new List<TestObjectTemplateChannel>();
public List<TestObjectTemplateChannel> RequiredChannels
{
get => _requiredChannels;
set { _requiredChannels = value; OnPropertyChanged("RequiredChannels"); }
}
private string _templateParent = "";
public string TemplateParent
{
get => _templateParent;
set => SetProperty(ref _templateParent, value, "TemplateParent");
}
private bool _sysBuilt;
public bool SysBuilt
{
get => _sysBuilt;
set => SetProperty(ref _sysBuilt, value, "SysBuilt");
}
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; }
}
}
private string _name;
public string TemplateName
{
get => _name;
set => SetProperty(ref _name, value, Tags.TemplateName.ToString());
}
private string _desc;
public string TemplateDescription
{
get => _desc;
set => SetProperty(ref _desc, value, Tags.TemplateDescription.ToString());
}
private bool _bLocalOnly;
public bool IsLocalOnly
{
get => _bLocalOnly;
set => SetProperty(ref _bLocalOnly, value, "IsLocalOnly");
}
private MMETestObjects _testObject;
public MMETestObjects TestObject
{
get => _testObject;
set
{
SetProperty(ref _testObject, value, Tags.TestObject.ToString());
if (null == _testObject) return;
AvailableTestObjectTypes = ApplicationProperties.IsoDb.GetUniquePossibleChannelTypes(TestObjectTemplateChannel.NONISOCHANNELTYPE);
if (AvailableTestObjectTypes.Length > 0) { TestObjectTypeIndex = 0; }
else { TestObjectTypeIndex = -1; }
}
}
private string _testObjectType;
public string TestObjectType
{
get => _testObjectType;
set
{
SetProperty(ref _testObjectType, value, Tags.TestObjectType.ToString());
_channels = new List<MMEPossibleChannels>(ApplicationProperties.IsoDb.GetPossibleChannelsForType(_testObjectType));
TemplateAllChannels = _channels.Select(pc => new TestObjectTemplateChannel(new TestObjectTemplateChannel(pc), /*ref db,*/ _template)).ToArray();
AssignOrders();
OnPropertyChanged(Tags.PossibleChannelCountText.ToString());
OnPropertyChanged(Tags.ChannelCountText.ToString());
OnPropertyChanged(Tags.TestObjectTypeIndex.ToString());
}
}
public void AssignOrders()
{
var allChannels = TemplateAllChannels.ToList();
if (!allChannels.Any()) { return; }
allChannels.Sort();
var maxDisplayOrder = (from ch in allChannels select ch.DisplayOrder).Max();
foreach (var ch in allChannels)
{
if (-1 == ch.DisplayOrder)
{
ch.DisplayOrder = ++maxDisplayOrder;
}
}
}
private List<MMEPossibleChannels> _channels = new List<MMEPossibleChannels>();
//11287 Out of memory exception when importing large CSV Test Setup files
//reduced one collection of channels to refer to channel super class members
public TestObjectTemplateChannel[] TemplateAllChannels
{
get
{
var channels = (from ch in _allUIChannels select ch.Channel).ToArray();
return channels;
}
set
{
TemplateAllUIChannels = value.Select(c => new TemplateChannelUI(c)).ToArray();
}
}
private List<TemplateChannelUI> _allUIChannels = new List<TemplateChannelUI>();
public TemplateChannelUI[] TemplateAllUIChannels
{
get => _allUIChannels.ToArray();
set => SetProperty(ref _allUIChannels, new List<TemplateChannelUI>(value), Tags.TemplateAllUIChannels.ToString());
}
private List<MMETestObjects> _testObjects = new List<MMETestObjects>();
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>(ApplicationProperties.IsoDb.GetTestObjectTypeForTestObject(TestObject.Test_Object));
return _availableTestObjectTypes.ToArray();
}
set => SetProperty(ref _availableTestObjectTypes, new List<string>(value), Tags.AvailableTestObjectTypes.ToString());
}
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;
SetProperty(ref _testObjectTypeIndex, value, Tags.TestObjectTypeIndex.ToString());
TemplateAllChannels = _channels.Select(pc => new TestObjectTemplateChannel(new TestObjectTemplateChannel(pc), /*ref db,*/ _template)).ToArray();
AssignOrders();
}
}
#endregion
#region methods
public void MarkChanged(string tag)
{
OnPropertyChanged(tag);
}
public int CompareTo(TestObjectTemplate rhs)
{
if (null == rhs) { return 1; }
return this == rhs ? 0 : string.Compare(TemplateName, rhs.TemplateName, StringComparison.Ordinal);
}
public override string ToString()
{
return Embedded ? OriginalTemplateName : TemplateName;
}
public DTS.Common.ISO.TestObjectTemplate ToISOTestObjectTemplate()
{
var template = new DTS.Common.ISO.TestObjectTemplate(TemplateName, IsLocalOnly)
{
Description = TemplateDescription,
OriginalTemplateName = OriginalTemplateName,
Embedded = Embedded,
Icon = "",
LocalOnly = IsLocalOnly,
TestObject = TestObject.Test_Object,
TestObjectType = TestObjectType
};
template.TemplateParent = TemplateParent;
template.Channels = TemplateAllChannels;
template.SysBuilt = SysBuilt;
return template;
}
#endregion
#region constructors and initialization
public TestObjectTemplate(TestObjectTemplate copy, ref ISO13499FileDb db)
{
if (null != copy._template) { _template = new DTS.Common.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();
SysBuilt = copy.SysBuilt;
Embedded = copy.Embedded;
OriginalTemplateName = copy.OriginalTemplateName;
}
public TestObjectTemplate(DTS.Common.ISO.TestObjectTemplate template, ref ISO13499FileDb db)
{
Initialize(template, ref db, null);
}
public TestObjectTemplate(DTS.Common.ISO.TestObjectTemplate template, ref ISO13499FileDb db, List<MMETestObjects> testObjects)
{
Initialize(template, ref db, testObjects);
}
private void Initialize(DTS.Common.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 = ApplicationProperties.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();
TemplateParent = template.TemplateParent;
SysBuilt = template.SysBuilt;
}
public TestObjectTemplate()
{
TemplateName = string.Empty;
TemplateDescription = string.Empty;
TemplateParent = string.Empty;
TestObject = ApplicationProperties.IsoDb.GetTestObjects(false).FirstOrDefault();
}
#endregion
#region XML Serialization
public static DTS.Common.ISO.TestObjectTemplate ReadXML(System.Xml.XmlElement root, Dictionary<long, MMEPossibleChannels> importChannels)
{
var template = new DTS.Common.ISO.TestObjectTemplate("", false);
foreach (var node in root.ChildNodes)
{
if (node is System.Xml.XmlElement) { ProcessXMLElement(node as System.Xml.XmlElement, ref template, importChannels); }
}
return template;
}
private static void ProcessXMLElement(System.Xml.XmlElement node, ref DTS.Common.ISO.TestObjectTemplate template, Dictionary<long, MMEPossibleChannels> importChannels)
{
if (Enum.TryParse(node.Name, out GroupTemplateFields field))
{
switch (field)
{
case GroupTemplateFields.CRC32: template.CRC32 = Convert.ToInt32(node.InnerText, System.Globalization.CultureInfo.InvariantCulture); break;
case GroupTemplateFields.Description: template.Description = node.InnerText; break;
case GroupTemplateFields.Icon: template.Icon = node.InnerText; break;
case GroupTemplateFields.LastModified: template.LastModified = DateTime.Parse(node.InnerText, System.Globalization.CultureInfo.InvariantCulture); break;
case GroupTemplateFields.LastModifiedBy: template.LastModifiedBy = node.InnerText; break;
case GroupTemplateFields.LocalOnly: template.LocalOnly = Convert.ToBoolean(node.InnerText); break;
case GroupTemplateFields.ParentTemplate: template.TemplateParent = node.InnerText; break;
case GroupTemplateFields.SysBuilt: template.SysBuilt = Convert.ToBoolean(node.InnerText); break;
case GroupTemplateFields.TemplateName: template.TemplateName = node.InnerText.Trim(); break;
case GroupTemplateFields.TestObject: template.TestObject = node.InnerText; break;
case GroupTemplateFields.TestObjectType: template.TestObjectType = node.InnerText; break;
case GroupTemplateFields.Version: template.Version = Convert.ToInt32(node.InnerText, System.Globalization.CultureInfo.InvariantCulture); break;
case GroupTemplateFields.OriginalTemplateName: template.OriginalTemplateName = node.InnerText; break;
case GroupTemplateFields.Embedded: template.Embedded = Convert.ToBoolean(node.InnerText); break;
default: throw new NotSupportedException("TestObjectTemplate::ProcessXMLElement unknown field: " + field.ToString());
}
}
else if (node.Name == "TemplateChannels")
{
foreach (var child in node.ChildNodes)
{
ProcessChannelXMLNode(child as System.Xml.XmlElement, ref template, importChannels);
}
var channels = new List<TestObjectTemplateChannel>(template.Channels);
channels.Sort();
template.Channels = channels.ToArray();
}
}
private static void ProcessChannelXMLNode(System.Xml.XmlElement root, ref DTS.Common.ISO.TestObjectTemplate template, Dictionary<long, MMEPossibleChannels> importChannels)
{
var existingChannels = new List<TestObjectTemplateChannel>(template.Channels);
var values = new Dictionary<GroupTemplateChannelFields, string>();
foreach (var child in root.ChildNodes)
{
var node = child as System.Xml.XmlElement;
if (null == node) { continue; }
if (Enum.TryParse(node.Name, out GroupTemplateChannelFields field)) { values[field] = node.InnerText; }
}
if (!values.ContainsKey(GroupTemplateChannelFields.MMEChannelId) || !values.ContainsKey(GroupTemplateChannelFields.MMEChannelType)) { return; }
if (!long.TryParse(values[GroupTemplateChannelFields.MMEChannelId], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out long id))
{
return;
}
if (!int.TryParse(values[GroupTemplateChannelFields.MMEChannelType], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out int cType))
{
return;
}
MMEPossibleChannels mChannel;
if (cType == (int)MMEPossibleChannels.MMEChannelTypes.SQL && importChannels.ContainsKey(id))
{
mChannel = importChannels[id];
}
else { mChannel = ApplicationProperties.IsoDb.GetPossibleChannel(id, cType); }
if (null == mChannel) { return; }
var channel = new TestObjectTemplateChannel(mChannel);
using (var enumeratorGroupChannelFieldSettings = values.GetEnumerator())
{
while (enumeratorGroupChannelFieldSettings.MoveNext())
{
switch (enumeratorGroupChannelFieldSettings.Current.Key)
{
case GroupTemplateChannelFields.BitResolution: break;
case GroupTemplateChannelFields.ChannelAmplitudeClass: break;
case GroupTemplateChannelFields.ChannelFrequencyClass: break;
case GroupTemplateChannelFields.Comments: break;
case GroupTemplateChannelFields.Comments1: break;
case GroupTemplateChannelFields.CustomerChannelCode: break;
case GroupTemplateChannelFields.CutOffFrequency: break;
case GroupTemplateChannelFields.DataSource: break;
case GroupTemplateChannelFields.DataStatus: break;
case GroupTemplateChannelFields.Dimension: break;
case GroupTemplateChannelFields.Direction: break;
case GroupTemplateChannelFields.DisplayOrder:
channel.DisplayOrder = Convert.ToInt32(enumeratorGroupChannelFieldSettings.Current.Value,
System.Globalization.CultureInfo.InvariantCulture);
break;
case GroupTemplateChannelFields.EndOffsetInterval: break;
case GroupTemplateChannelFields.FirstGlobalMaximumValue: break;
case GroupTemplateChannelFields.FirstGlobalMinimumValue: break;
case GroupTemplateChannelFields.LaboratoryChannelCode: break;
case GroupTemplateChannelFields.LocalOnly:
channel.LocalOnly = Convert.ToBoolean(enumeratorGroupChannelFieldSettings.Current.Value);
break;
case GroupTemplateChannelFields.Location: break;
case GroupTemplateChannelFields.MMEChannelId: break;
case GroupTemplateChannelFields.MMEChannelType: break;
case GroupTemplateChannelFields.NameOfTheChannel:
channel.NameOfTheChannel = enumeratorGroupChannelFieldSettings.Current.Value;
break;
case GroupTemplateChannelFields.NumberOfSamples: break;
case GroupTemplateChannelFields.OffsetPostTest: break;
case GroupTemplateChannelFields.PreFilterType: break;
case GroupTemplateChannelFields.ReferenceChannel: break;
case GroupTemplateChannelFields.ReferenceChannelName: break;
case GroupTemplateChannelFields.ReferenceSystem: break;
case GroupTemplateChannelFields.Required:
channel.Required = Convert.ToBoolean(enumeratorGroupChannelFieldSettings.Current.Value);
break;
case GroupTemplateChannelFields.SamplingInterval: break;
case GroupTemplateChannelFields.StartOffsetInterval: break;
case GroupTemplateChannelFields.TestObjectNumber: break;
case GroupTemplateChannelFields.TimeOfFirstSample: break;
case GroupTemplateChannelFields.TimeOfMaximumValue: break;
case GroupTemplateChannelFields.TimeOfMinimumValue: break;
case GroupTemplateChannelFields.TransducerDampingRatio: break;
case GroupTemplateChannelFields.TransducerId: break;
case GroupTemplateChannelFields.TransducerNaturalFrequency: break;
case GroupTemplateChannelFields.TransducerType: break;
case GroupTemplateChannelFields.Unit: break;
default:
throw new NotSupportedException(
"TestObjectTemplate::ProcessChannelXMLNode unsupported field: " + enumeratorGroupChannelFieldSettings.Current.Key);
}
}
}
existingChannels.Add(channel);
var maxDisplayOrder = (from ch in existingChannels select ch.DisplayOrder).Max();
foreach (var ch in existingChannels)
{
if (-1 == ch.DisplayOrder)
{
ch.DisplayOrder = ++maxDisplayOrder;
}
}
template.Channels = existingChannels.ToArray();
}
#endregion
}
}

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using DTS.Common.Base;
using DTS.Common.Utilities.Logging;
using DTS.Common.ISO;
using DTS.Common.DataModel;
namespace DataPROWin7.DataModel
{
public class TestObjectTemplateCollection : BasePropertyChanged
{
private static volatile TestObjectTemplateCollection _testObjectCollection;
public static TestObjectTemplateCollection TemplateCollection
{
get
{
if (null == _testObjectCollection)
{
_testObjectCollection = new TestObjectTemplateCollection();
}
return _testObjectCollection;
}
}
private static readonly TestObjectTemplate _sysBuiltTestObjectTemplate;
public TestObjectTemplate SysBuiltTestObjectTemplate => _sysBuiltTestObjectTemplate;
public TestObjectTemplate GetTemplate(string templateId)
{
var db = ApplicationProperties.IsoDb;
var isoTemplate = DTS.Common.ISO.TestObjectTemplate.GetTemplate(ref db, templateId);
if (null != isoTemplate)
{
return new TestObjectTemplate(isoTemplate, ref db);
}
return null;
}
public TestObjectTemplateCollection()
{
}
}
}

View File

@@ -0,0 +1,315 @@
using DTS.Common.DataModel;
using System;
using System.Collections.Generic;
using System.Windows;
namespace DataPROWin7.DataModel
{
/// <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, IComparable<TestTestObject>
{
public TestTestObject(TestObject obj)
: base(obj)
{
}
/// <summary>
/// added a new constructor for
/// 9570 Test object and position defaulted (traditional groups) when you rename or copy a test setup
/// as old constructor missed the meta data copy
/// </summary>
/// <param name="obj"></param>
/// <param name="convertToEmbedded"></param>
public TestTestObject(TestTestObject obj, bool convertToEmbedded)
{
CommonCustructorItems(obj, convertToEmbedded);
MetaCommonConstructor(obj);
}
public TestTestObject(TestObject obj, bool convertToEmbedded)
{
CommonCustructorItems(obj, convertToEmbedded);
}
/// <summary>
/// takes care of all the non meta constructor information
/// </summary>
/// <param name="obj"></param>
/// <param name="convertToEmbedded"></param>
private void CommonCustructorItems(TestObject obj, bool convertToEmbedded)
{
var bAlreadyConverted = obj.GetISOTestObject().Embedded;
if (convertToEmbedded)
{
var guid = Guid.NewGuid();
//first grab a copy of the template and convert it
var isoTemplate = obj.Template.ToISOTestObjectTemplate();
isoTemplate.Embedded = true;
isoTemplate.OriginalTemplateName = bAlreadyConverted ? isoTemplate.OriginalTemplateName : isoTemplate.TemplateName;
isoTemplate.TemplateName = guid.ToString();
var db = ApplicationProperties.IsoDb;
var template = new TestObjectTemplate(isoTemplate, ref db);
var isoTestObject = new DTS.Common.ISO.TestObject(obj.GetISOTestObject(), isoTemplate, db);
isoTestObject.OriginalSerialNumber = obj.SerialNumber;
if (bAlreadyConverted) { isoTestObject.OriginalSerialNumber = obj.SerialNumberOrOriginalSerialNumber; }
isoTestObject.SerialNumber = guid.ToString();
isoTestObject.Embedded = true;
isoTestObject.OriginalTemplate = obj.Template.TemplateName;
if (bAlreadyConverted) { isoTestObject.OriginalTemplate = obj.Template.OriginalTemplateName; }
isoTestObject.SetTemplateOnly(guid.ToString());
var includedHardware = new Dictionary<string, DASHardware>();
foreach (var h in obj.Hardware)
{
includedHardware[h.GetHardware().GetId()] = h;
}
var to = new TestObject(isoTestObject, false, template, includedHardware);
Initialize(to);
//UGH, something resets the template properties.
//just change them back for now to the right values :/
Template.Embedded = true;
Template.OriginalTemplateName = template.OriginalTemplateName;
Template.TemplateName = template.TemplateName;
}
else
{
Initialize(obj);
}
}
private string _position = ChannelDefaultsKey;
public DTS.Common.ISO.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 DTS.Common.ISO.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
{
//TODO Remove Non-ISO Mode code
if (_groupPositionComboBoxVisible == Visibility.Visible)
{
return /*Common.SerializedSettings.ISOSupportLevel == Common.SerializedSettings.ISOSupportLevels.NO_ISO ? Visibility.Collapsed :*/ _groupPositionComboBoxVisible;
}
return _groupPositionComboBoxVisible;
}
set => SetProperty(ref _groupPositionComboBoxVisible, value, "GroupPositionComboBoxVisible");
}
private Visibility _groupPositionButtonVisible = Visibility.Hidden;
public Visibility GroupPositionButtonVisible
{
get
{
//TODO Remove Non-ISO Mode code
if (_groupPositionButtonVisible == Visibility.Visible)
{
return /*Common.SerializedSettings.ISOSupportLevel == Common.SerializedSettings.ISOSupportLevels.NO_ISO ? Visibility.Collapsed :*/ _groupPositionButtonVisible;
}
return _groupPositionButtonVisible;
}
set => SetProperty(ref _groupPositionButtonVisible, value, "GroupPositionButtonVisible");
}
private string _testObject = "?";
public DTS.Common.ISO.MMETestObjects TestObject
{
get => ApplicationProperties.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);
}
}
}
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 DTS.Common.ISO.MMEPositions[] AvailablePositions => ApplicationProperties.IsoDb.GetPositions();
private const string DATAPRO_DEFINED = "DataPRO-defined";
public static DTS.Common.ISO.MMEPositions _channelDefaultsGUID = new DTS.Common.ISO.MMEPositions(Guid.NewGuid().ToString(), ChannelDefaultsKey, "(channel defaults)", "(channel defaults)", 1, DateTime.Now, DATAPRO_DEFINED, false, "", DateTime.Now,
DATAPRO_DEFINED, "", DTS.Common.ISO.MMEPossibleChannels.MMEChannelTypes.ISO13499_106);
private DTS.Common.ISO.MMEPositions _userSetGUID = new DTS.Common.ISO.MMEPositions(Guid.NewGuid().ToString(), UserSetKey, "(multiple)", "(multiple)", 1, DateTime.Now, DATAPRO_DEFINED, false, "", DateTime.Now,
DATAPRO_DEFINED, "", DTS.Common.ISO.MMEPossibleChannels.MMEChannelTypes.ISO13499_106);
public DTS.Common.ISO.MMEPositions[] AvailableGroupPositions
{
get
{
var availableGroupPositions = new List<DTS.Common.ISO.MMEPositions>();
availableGroupPositions.Add(_channelDefaultsGUID);
availableGroupPositions.AddRange(AvailablePositions);
return availableGroupPositions.ToArray();
}
}
private List<TestObject> _addedGroups = new List<TestObject>();
public TestObject[] AddedGroups
{
get => _addedGroups.ToArray();
set
{
SetProperty(ref _addedGroups, new List<TestObject>(value), "AddedSysBuiltTestObjects");
OnPropertyChanged("AddedSysBuiltTestObjectsMME");
}
}
public string[] ChannelTypes
{
get
{
var typeList = new List<string>();
typeList.Add("(no channels)"); //temp
typeList.AddRange(ApplicationProperties.IsoDb.GetUniquePossibleChannelTypes(DTS.Common.ISO.TestObjectTemplateChannel.NONISOCHANNELTYPE));
return typeList.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?
IsAdd = to.IsAdd;
DisplayOrder = to.DisplayOrder;
}
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");
}
public void Rename(string oldName, string newName)
{
SerialNumber = SerialNumber.Replace(oldName, newName);
GetISOTestObject().OriginalSerialNumber = GetISOTestObject().OriginalSerialNumber.Replace(oldName, newName);
GetISOTestObject().OriginalTemplate = GetISOTestObject().OriginalTemplate.Replace(oldName, newName);
TestSetupName = newName;
var templateGUIDString = Guid.NewGuid().ToString();
Template.TemplateName = templateGUIDString;
Template.OriginalTemplateName = templateGUIDString;
}
public int DisplayOrder { get; set; } = -1;
public bool IsAdd { get; set; }
public int CompareTo(TestTestObject other)
{
var ret = DisplayOrder.CompareTo(other.DisplayOrder);
if (0 == ret)
{
ret = base.CompareTo(other);
}
return ret;
}
}
}