Files
DP44/Common/DTS.Common.ISO/MMETestObjects.cs
2026-04-17 14:55:32 -04:00

283 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Data.SqlClient;
using System.Xml;
using DTS.Common.Enums.DBExport;
using DTS.Common.Storage;
using DTS.Common.Utilities.Logging;
namespace DTS.Common.ISO
{
/// <summary>
/// a test object is a top level object in the ISO database
/// given a test object, it is possible to find all possible channels as defined in ISO
/// note there is a ? test object ...
/// I'll use these to build templates
/// </summary>
public class MMETestObjects : AbstractOLEDbWrapper
{
public string S_GUID { get; }
public string Test_Object { get; }
public string Text_L1 { get; }
public string Text_L2 { get; }
public long Version { get; }
public DateTime Date { get; }
public string Remarks { get; }
public bool Expired { get; }
public string SortKey { get; }
public DateTime Last_Change { get; }
public string Last_Change_Text { get; }
public string History { get; }
public MMEPossibleChannels.MMEChannelTypes RecordType { get; } = MMEPossibleChannels.MMEChannelTypes.ISO13499_106;
public static void WriteXML(ref XmlWriter writer, MMETestObjects[] testObjects)
{
writer.WriteStartElement(TopLevelFields.CustomTestObjects.ToString());
foreach (var to in testObjects)
{
writer.Flush();
to.WriteXML(ref writer);
writer.Flush();
}
writer.WriteEndElement();
}
/// <summary>
/// imports a singular transducer main location
/// </summary>
/// <param name="node"></param>
/// <param name="setStatus"></param>
/// <param name="page"></param>
public static MMETestObjects ReadXML(XmlElement node)
{
var fields = Enum.GetValues(typeof(TestObjectFields)).Cast<TestObjectFields>().ToArray();
string sGuid = "", sTestObject = "", textL1 = "", textL2 = "", remarks = "", sortkey = "", lastChangeText = "", history = "";
long version = 0;
var expired = false;
DateTime date = DateTime.Now, lastChange = DateTime.Now;
foreach (var field in fields)
{
switch (field)
{
case TestObjectFields.DATE:
date = DateTime.Parse(node.GetAttribute(field.ToString()), System.Globalization.CultureInfo.InvariantCulture);
break;
case TestObjectFields.EXPIRED:
expired = Convert.ToBoolean(node.GetAttribute(field.ToString()));
break;
case TestObjectFields.HISTORY:
history = node.GetAttribute(field.ToString());
break;
case TestObjectFields.LAST_CHANGE:
lastChange = DateTime.Parse(node.GetAttribute(field.ToString()), System.Globalization.CultureInfo.InvariantCulture);
break;
case TestObjectFields.LAST_CHANGE_TEXT:
lastChangeText = node.GetAttribute(field.ToString());
break;
case TestObjectFields.REMARKS:
remarks = node.GetAttribute(field.ToString());
break;
case TestObjectFields.s_GUID:
sGuid = node.GetAttribute(field.ToString());
break;
case TestObjectFields.SORTKEY:
sortkey = node.GetAttribute(field.ToString());
break;
case TestObjectFields.TEST_OBJECT:
sTestObject = node.GetAttribute(field.ToString());
break;
case TestObjectFields.TEXT_L1:
textL1 = node.GetAttribute(field.ToString());
break;
case TestObjectFields.TEXT_L2:
textL2 = node.GetAttribute(field.ToString());
break;
case TestObjectFields.VERSION:
version = long.Parse(node.GetAttribute(field.ToString()), System.Globalization.CultureInfo.InvariantCulture);
break;
default:
throw new NotSupportedException("ImportTestSetup::ImportTestObject unsupported field: " + field.ToString());
}
}
return new MMETestObjects(sGuid, sTestObject, textL1, textL2, version, date, remarks, expired, sortkey, lastChange, lastChangeText, history, MMEPossibleChannels.MMEChannelTypes.SQL);
}
/// <summary>
/// writes an ISODll.MMETransducerMainLocation to xml
/// </summary>
/// <param name="m"></param>
/// <param name="writer"></param>
public void WriteXML(ref XmlWriter writer)
{
writer.WriteStartElement("TestObject");
var fields = Enum.GetValues(typeof(TestObjectFields)).Cast<TestObjectFields>().ToArray();
foreach (var field in fields)
{
var sVal = "";
switch (field)
{
case TestObjectFields.DATE: sVal = Date.ToString(System.Globalization.CultureInfo.InvariantCulture); break;
case TestObjectFields.EXPIRED: sVal = Expired.ToString(); break;
case TestObjectFields.HISTORY: sVal = History; break;
case TestObjectFields.LAST_CHANGE: sVal = Last_Change.ToString(System.Globalization.CultureInfo.InvariantCulture); break;
case TestObjectFields.LAST_CHANGE_TEXT: sVal = Last_Change_Text; break;
case TestObjectFields.REMARKS: sVal = Remarks; break;
case TestObjectFields.s_GUID: sVal = S_GUID; break;
case TestObjectFields.SORTKEY: sVal = SortKey; break;
case TestObjectFields.TEST_OBJECT: sVal = Test_Object; break;
case TestObjectFields.TEXT_L1: sVal = Text_L1; break;
case TestObjectFields.TEXT_L2: sVal = Text_L2; break;
case TestObjectFields.VERSION: sVal = Version.ToString(System.Globalization.CultureInfo.InvariantCulture); break;
default: throw new NotSupportedException("ExportTestSetup::WriteTestObject unsupported field: " + field);
}
writer.WriteAttributeString(field.ToString(), sVal);
}
writer.WriteEndElement();
}
public MMETestObjects(string textL1)
{
Text_L1 = textL1;
}
public MMETestObjects(string sGuid, string testObject, string textL1, string textL2, long version,
DateTime date, string remarks, bool expired, string sortkey, DateTime lastChange, string lastChangeText,
string history, MMEPossibleChannels.MMEChannelTypes type)
{
RecordType = type;
S_GUID = sGuid;
Test_Object = testObject;
Text_L1 = textL1;
Text_L2 = textL2;
Version = version;
Date = date;
Remarks = remarks;
Expired = expired;
SortKey = sortkey;
Last_Change = lastChange;
Last_Change_Text = lastChangeText;
History = history;
}
public void Commit()
{
using (var cmd = DbOperations.GetSQLCommand(true))
{
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = DbOperationsEnum.StoredProcedure.sp_MMETestObjectsUpdateInsert.ToString();
#region params
cmd.Parameters.Add(
new SqlParameter("@s_GUID", SqlDbType.UniqueIdentifier) { Value = Guid.Parse(S_GUID) });
cmd.Parameters.Add(new SqlParameter("@TEST_OBJECT", SqlDbType.NVarChar, 50) { Value = Test_Object });
cmd.Parameters.Add(new SqlParameter("@TEXT_L1", SqlDbType.NVarChar, 50) { Value = Text_L1 });
cmd.Parameters.Add(new SqlParameter("@TEXT_L2", SqlDbType.NVarChar, 50) { Value = Text_L2 });
cmd.Parameters.Add(new SqlParameter("@VERSION", SqlDbType.Int) { Value = Version });
cmd.Parameters.Add(new SqlParameter("@DATE", SqlDbType.DateTime) { Value = Date });
cmd.Parameters.Add(new SqlParameter("@REMARKS", SqlDbType.NVarChar, 50) { Value = Remarks });
cmd.Parameters.Add(new SqlParameter("@EXPIRED", SqlDbType.Bit) { Value = Expired });
cmd.Parameters.Add(new SqlParameter("@SORTKEY", SqlDbType.NVarChar, 50) { Value = SortKey });
cmd.Parameters.Add(new SqlParameter("@LAST_CHANGE", SqlDbType.DateTime) { Value = Last_Change });
cmd.Parameters.Add(
new SqlParameter("@LAST_CHANGE_TEXT", SqlDbType.NVarChar, 50) { Value = Last_Change_Text });
cmd.Parameters.Add(new SqlParameter("@HISTORY", SqlDbType.NVarChar, 50) { Value = History });
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
#endregion params
cmd.ExecuteNonQuery();
if (int.Parse(errorNumberParam.Value.ToString()) != 0)
{
//errorMessageParam.Value
}
}
finally
{
cmd.Connection.Dispose();
}
}
}
public static MMETestObjects[] GetTestObjects()
{
var testObjects = new List<MMETestObjects>();
using (var cmd = DbOperations.GetISOCommand())
{
cmd.CommandText = "SELECT * FROM MMETestObjects";
cmd.CommandType = CommandType.Text;
try
{
using (var ISOReader = cmd.ExecuteReader())
{
while (ISOReader.Read())
{
try
{
string sGuid = ISOReader["s_GUID"].ToString();
string testObject = ISOReader["TEST_OBJECT"].ToString();
string textL1 = ISOReader["TEXT_L1"].ToString();
string textL2 = ISOReader["TEXT_L2"].ToString();
long version = GetLong(ISOReader, "VERSION");
DateTime date = (DateTime)ISOReader["DATE"];
string remarks = ISOReader["REMARKS"].ToString();
bool expired = (bool)ISOReader["EXPIRED"];
string sortkey = ISOReader["SORTKEY"].ToString();
DateTime lastChange = GetDate(ISOReader, "LAST_CHANGE");
string lastChangeText = ISOReader["LAST_CHANGE_TEXT"].ToString();
string history = ISOReader["HISTORY"].ToString();
testObjects.Add(new MMETestObjects(sGuid, testObject, textL1, textL2, version, date,
remarks, expired,
sortkey, lastChange, lastChangeText, history,
MMEPossibleChannels.MMEChannelTypes.ISO13499_106));
}
catch (Exception ex)
{
APILogger.Log("Failed to process test objects", ex);
}
}
}
}
finally
{
cmd.Connection.Dispose();
}
}
return testObjects.ToArray();
}
}
}