/// /// Copyright (c) 2016-2022 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Linq; using System.IO; using Common; using Config.Entities; namespace Results.Entities { /// /// Test, consisting of one or more repetitions of the test 'SingleTest'. /// public class TestData { public virtual int Id { get; protected set; } public virtual string Name { get; set; } public virtual int Repeats { get; set; } public virtual double Qtg { get; set; } /// [m3/h] flow range low limit public virtual double Qfrom { get; set; } /// [m3/h] flow range low limit public virtual double Qto { get; set; } /// [m3/h] flow range high limit public virtual double TargetVolume { get; set; } /// [l] target test volume public virtual double TargetTime { get; set; } /// [s] target test time public virtual string Method { get; set; } public virtual double ErrLimLo { get; set; } /// [%] usually < 0, in case of heat meters: 1=class1, 2=class2, 3=class3 public virtual double ErrLimHi { get; set; } /// [%] usually > 0, in case of heat meters: -Qn in m3/h public virtual double ErrLimMargin { get; set; } /// [%] makes error limits tighter: 0 <= ErrLimMargin <= abs(ErrLimXx) public virtual float TempLimLo { get; set; } public virtual float TempLimHi { get; set; } public virtual string TempControl { get; set; } public virtual sbyte Publish { get; set; } /// 0=no, 1=in all protocols, 2=on screen, 3=internal public virtual bool Evaluate { get; set; } #if ORACLE_DB public virtual int OraId { get; set; } public virtual int OraIdRepetMulti { get; set; } public virtual string OraDesignation { get; set; } public virtual int RawDataId { get; set; } public virtual int RawDataIdRepetMulti { get; set; } public virtual string RawDataDesignation { get; set; } #endif /// /// Default constructor, safe values /// public TestData() { Name = string.Empty; Method = string.Empty; } public TestData(Test test) : this() { Name = test.Name; Repeats = test.Repeats; Qtg = test.Qtg; Qfrom = test.Qfrom; Qto = test.Qto; TargetVolume = test.Volume; TargetTime = test.TestTime; Method = test.Method; ErrLimLo = test.ErrLimLo; ErrLimHi = test.ErrLimHi; ErrLimMargin = test.Uncertainty; TempLimLo = test.TempLimLo; TempLimHi = test.TempLimHi; TempControl = test.TempControl; Publish = test.Publish; Evaluate = test.DoEvaluate; #if ORACLE_DB OraId = test.OraId; OraIdRepetMulti = test.OraIdRepetMulti; OraDesignation = test.OraDesignation; RawDataId = test.RawDataId; RawDataIdRepetMulti = test.RawDataIdRepetMulti; RawDataDesignation = test.RawDataDesignation; #endif } /// /// Copy constructor, copies all except of Id /// public TestData(TestData oriTestData) { Name = oriTestData.Name; Repeats = oriTestData.Repeats; Qtg = oriTestData.Qtg; Qfrom = oriTestData.Qfrom; Qto = oriTestData.Qto; TargetVolume = oriTestData.TargetVolume; TargetTime = oriTestData.TargetTime; Method = oriTestData.Method; ErrLimLo = oriTestData.ErrLimLo; ErrLimHi = oriTestData.ErrLimHi; ErrLimMargin = oriTestData.ErrLimMargin; TempLimLo = oriTestData.TempLimLo; TempLimHi = oriTestData.TempLimHi; TempControl = oriTestData.TempControl; Publish = oriTestData.Publish; Evaluate = oriTestData.Evaluate; #if ORACLE_DB OraId = oriTestData.OraId; OraIdRepetMulti = oriTestData.OraIdRepetMulti; OraDesignation = oriTestData.OraDesignation; RawDataId = oriTestData.RawDataId; RawDataIdRepetMulti = oriTestData.RawDataIdRepetMulti; RawDataDesignation = oriTestData.RawDataDesignation; #endif } /// /// Method to compare the content of two entities /// /// Second entity to compare with /// first = two entities are equal (except of Id) public virtual bool Equals(TestData td) { if (Name != td.Name) return false; if (Repeats != td.Repeats) return false; if (Qtg != td.Qtg) return false; if (Qfrom != td.Qfrom) return false; if (Qto != td.Qto) return false; if (TargetVolume != td.TargetVolume) return false; if (TargetTime != td.TargetTime) return false; if (Method != td.Method) return false; if (ErrLimLo != td.ErrLimLo) return false; if (ErrLimHi != td.ErrLimHi) return false; if (ErrLimMargin != td.ErrLimMargin) return false; if (TempLimLo != td.TempLimLo) return false; if (TempLimHi != td.TempLimHi) return false; if (TempControl != td.TempControl) return false; if (Publish != td.Publish) return false; if (Evaluate != td.Evaluate) return false; #if ORACLE_DB if (OraId != td.OraId) return false; if (OraIdRepetMulti != td.OraIdRepetMulti) return false; if (OraDesignation != td.OraDesignation) return false; if (RawDataId != td.RawDataId) return false; if (RawDataIdRepetMulti != td.RawDataIdRepetMulti) return false; if (RawDataDesignation != td.RawDataDesignation) return false; #endif return true; } /// /// Adds an item to the list if it does not occur there /// /// List of items /// Item to add to the list or find there /// Item from the list (existing or added) public static TestData UpdateList(IList list, TestData item) { if (item == null) return null; /// Null item is not stored in the list TestData found = list.FirstOrDefault(x => x.Equals(item)); if (found != null) return found; /// The same item found in the list, The found item returned list.Add(item); /// Item not fund in the list, it is added to the list return item; } public virtual void WriteBinary(BinaryWriter writer) { writer.Write(Id); writer.Write((Name != null) ? Name : string.Empty); writer.Write(Repeats); writer.Write(Qtg); writer.Write(Qfrom); writer.Write(Qto); writer.Write(TargetVolume); writer.Write(TargetTime); writer.Write((Method != null) ? Method : string.Empty); writer.Write(ErrLimLo); writer.Write(ErrLimHi); writer.Write(ErrLimMargin); writer.Write(TempLimLo); writer.Write(TempLimHi); writer.Write((TempControl != null) ? TempControl : string.Empty); writer.Write(Publish); writer.Write(Evaluate); #if ORACLE_DB writer.Write(OraId); writer.Write(OraIdRepetMulti); writer.Write((OraDesignation != null) ? OraDesignation : string.Empty); writer.Write(RawDataId); writer.Write(RawDataIdRepetMulti); writer.Write((RawDataDesignation != null) ? RawDataDesignation : string.Empty); #endif } public virtual void ReadBinary(BinaryReader reader) { Id = reader.ReadInt32(); Name = reader.ReadString(); Repeats = reader.ReadInt32(); Qtg = reader.ReadDouble(); Qfrom = reader.ReadDouble(); Qto = reader.ReadDouble(); TargetVolume = reader.ReadDouble(); TargetTime = reader.ReadDouble(); Method = reader.ReadString(); ErrLimLo = reader.ReadDouble(); ErrLimHi = reader.ReadDouble(); ErrLimMargin = reader.ReadDouble(); TempLimLo = reader.ReadSingle(); TempLimHi = reader.ReadSingle(); TempControl = reader.ReadString(); Publish = reader.ReadSByte(); Evaluate = reader.ReadBoolean(); #if ORACLE_DB OraId = reader.ReadInt32(); OraIdRepetMulti = reader.ReadInt32(); OraDesignation = reader.ReadString(); RawDataId = reader.ReadInt32(); RawDataIdRepetMulti = reader.ReadInt32(); RawDataDesignation = reader.ReadString(); #endif } public override string ToString() { return string.Format("{0} (P.{1},{2})", Name, ((Publish)Publish).ToString(), Evaluate ? "E" : "-"); } } }