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 { /// /// 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 /// 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(); } /// /// imports a singular transducer main location /// /// /// /// public static MMETestObjects ReadXML(XmlElement node) { var fields = Enum.GetValues(typeof(TestObjectFields)).Cast().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); } /// /// writes an ISODll.MMETransducerMainLocation to xml /// /// /// public void WriteXML(ref XmlWriter writer) { writer.WriteStartElement("TestObject"); var fields = Enum.GetValues(typeof(TestObjectFields)).Cast().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(); 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(); } } }