/// /// Copyright (c) 2020 Sensus Slovensko a.s. /// using System; using System.Xml.Serialization; using Config.Entities; using TBF.BenchControl.Generic; using TBF.Resources; using System.Collections.Generic; namespace TBF.BenchControl.Output.EventTriggers.Standard { /// /// Serializable configuration of Output.EventTriggers.Standard component. /// public class TriggerCfg : ComponentCfgBase, Generic.IComponentCfg, Config.Entities.IParamsProvider { public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(TriggerCfg) })[0]; public override XmlSerializer GetSerializer() { return Serializer; } public IComponentCfgCtrl GetControl() { return new Configs.ParamsProvider.ComponentCfgCtrl(this, null); } /// /// Serialized parameters /// public string EventSource; public int FailedWMsPct; /// 0 = off, 1..100% event is triggered when percentage reaches this level public string Mid1Name; public double Mid1ErrAfterCorr; /// [%] Event triggered when rel. error of MID1 against a scale after a correction reached this level public double Mid1Err; /// [%] Event triggered when rel. error of MID1 against a scale reached this level public string Mid2Name; public double Mid2ErrAfterCorr; /// [%] Event triggered when rel. error of MID2 against a scale after a correction reached this level public double Mid2Err; /// [%] Event triggered when rel. error of MID2 against a scale reached this level public string Mid3Name; public double Mid3ErrAfterCorr; /// [%] Event triggered when rel. error of MID3 against a scale after a correction reached this level public double Mid3Err; /// [%] Event triggered when rel. error of MID3 against a scale reached this level public string Mid4Name; public double Mid4ErrAfterCorr; /// [%] Event triggered when rel. error of MID4 against a scale after a correction reached this level public double Mid4Err; /// [%] Event triggered when rel. error of MID4 against a scale reached this level public string Mid5Name; public double Mid5ErrAfterCorr; /// [%] Event triggered when rel. error of MID5 against a scale after a correction reached this level public double Mid5Err; /// [%] Event triggered when rel. error of MID5 against a scale reached this level public bool E1; public bool E2; public bool E3; public bool E4; public bool E5; public bool E6; public bool E7; public bool E8; public bool E9; public bool E10; public bool E11; public bool E12; public bool E13; public bool E14; public bool E15; public bool E16; public bool E21; #if TURA_IPERL || TURA_SPECIAL public bool E26; public bool E27; public bool E28; #endif public bool E36; /// Private parameterless constructor invoked by all other (public) constructors TriggerCfg() {} public TriggerCfg(string name, IComponentFactory factory) : this() { Name = name; Factory = factory; ParentName = string.Empty; InitializeAll(); } public string ComponentName { get { return Name; } } public void InitializeAll() { EventSource = "Výsledky"; /// 0 FailedWMsPct = 20; /// 1 Mid1Name = "I1"; /// 2 Mid1ErrAfterCorr = 0.3; /// 3 Mid1Err = 0.6; /// 4 Mid2Name = "I2"; /// 5 Mid2ErrAfterCorr = 0.3; /// 6 Mid2Err = 0.6; /// 7 Mid3Name = "I3"; /// 8 Mid3ErrAfterCorr = 0.3; /// 9 Mid3Err = 0.6; /// 10 Mid4Name = ""; /// 11 Mid4ErrAfterCorr = 0.3; /// 12 Mid4Err = 0.6; /// 13 Mid5Name = ""; /// 14 Mid5ErrAfterCorr = 0.3; /// 15 Mid5Err = 0.6; /// 16 E1 = false; /// 17 E2 = false; /// 18 E3 = false; /// 19 E4 = false; /// 20 E5 = false; /// 21 E6 = false; /// 22 E7 = false; /// 23 E8 = false; /// 24 E9 = false; /// 25 E10 = false; /// 26 E11 = false; /// 27 E12 = false; /// 28 E13 = false; /// 29 E14 = false; /// 30 E15 = false; /// 31 E16 = false; /// 32 E21 = false; /// 33 #if TURA_IPERL || TURA_SPECIAL E26 = false; /// 34 E27 = false; /// 35 E28 = false; /// 36 #endif E36 = true; /// 34 or 37 } string[] paramNames = new string[] { "Event source", /// 0 "Percentage of failed meters", /// 1 "MID 1 name", /// 2 "MID 1 rel.err.after corr.", /// 3 "MID 1 rel.error", /// 4 "MID 2 name", /// 5 "MID 2 rel.err.after corr.", /// 6 "MID 2 rel.error", /// 7 "MID 3 name", /// 8 "MID 3 rel.err.after corr.", /// 9 "MID 3 rel.error", /// 10 "MID 4 name", /// 11 "MID 4 rel.err.after corr.", /// 12 "MID 4 rel.error", /// 13 "MID 5 name", /// 14 "MID 5 rel.err.after corr.", /// 15 "MID 5 rel.error", /// 16 "E1", /// 17 "E2", /// 18 "E3", /// 19 "E4", /// 20 "E5", /// 21 "E6", /// 22 "E7", /// 23 "E8", /// 24 "E9", /// 25 "E10", /// 26 "E11", /// 27 "E12", /// 28 "E13", /// 29 "E14", /// 30 "E15", /// 31 "E16", /// 32 "E21", /// 33 #if TURA_IPERL || TURA_SPECIAL "E26", /// 34 "E27", /// 35 "E28", /// 36 #endif "E36", /// 34 or 37 }; public string ParamName(int i) { return paramNames[i]; } public int ParamsCount() { return paramNames.Length; } public IList ParamValues(int i) { IList listOfValues = new List(); if (i >= 12) { listOfValues.Add(Strings.yes); listOfValues.Add(Strings.no); return listOfValues; } else { return null; } } public string ToString(int i) { switch (i) { case -1: return string.Format("Name={0}, EventSource={1}, FailedWMsPct={2}, ...", Name, EventSource, FailedWMsPct); case 0: return EventSource; case 1: return FailedWMsPct.ToString(); case 2: return Mid1Name; case 3: return Mid1ErrAfterCorr.ToString(); case 4: return Mid1Err.ToString(); case 5: return Mid2Name; case 6: return Mid2ErrAfterCorr.ToString(); case 7: return Mid2Err.ToString(); case 8: return Mid3Name; case 9: return Mid3ErrAfterCorr.ToString(); case 10: return Mid3Err.ToString(); case 11: return Mid4Name; case 12: return Mid4ErrAfterCorr.ToString(); case 13: return Mid4Err.ToString(); case 14: return Mid5Name; case 15: return Mid5ErrAfterCorr.ToString(); case 16: return Mid5Err.ToString(); case 17: return E1 ? Strings.yes : Strings.no; case 18: return E2 ? Strings.yes : Strings.no; case 19: return E3 ? Strings.yes : Strings.no; case 20: return E4 ? Strings.yes : Strings.no; case 21: return E5 ? Strings.yes : Strings.no; case 22: return E6 ? Strings.yes : Strings.no; case 23: return E7 ? Strings.yes : Strings.no; case 24: return E8 ? Strings.yes : Strings.no; case 25: return E9 ? Strings.yes : Strings.no; case 26: return E10 ? Strings.yes : Strings.no; case 27: return E11 ? Strings.yes : Strings.no; case 28: return E12 ? Strings.yes : Strings.no; case 29: return E13 ? Strings.yes : Strings.no; case 30: return E14 ? Strings.yes : Strings.no; case 31: return E15 ? Strings.yes : Strings.no; case 32: return E16 ? Strings.yes : Strings.no; case 33: return E21 ? Strings.yes : Strings.no; #if TURA_IPERL || TURA_SPECIAL case 34: return E26 ? Strings.yes : Strings.no; case 35: return E27 ? Strings.yes : Strings.no; case 36: return E28 ? Strings.yes : Strings.no; case 37: return E36 ? Strings.yes : Strings.no; #else case 34: return E36 ? Strings.yes : Strings.no; #endif default: return string.Empty; } } public CfgUpdateFlags UpdateParam(int i, string strValue) { switch (i) { case 0: EventSource = strValue; return CfgUpdateFlags.AnyChange; case 1: FailedWMsPct = int.Parse(strValue); return CfgUpdateFlags.AnyChange; case 2: Mid1Name = strValue; return CfgUpdateFlags.AnyChange; case 3: Mid1ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 4: Mid1Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 5: Mid2Name = strValue; return CfgUpdateFlags.AnyChange; case 6: Mid2ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 7: Mid2Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 8: Mid3Name = strValue; return CfgUpdateFlags.AnyChange; case 9: Mid3ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 10: Mid3Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 11: Mid4Name = strValue; return CfgUpdateFlags.AnyChange; case 12: Mid4ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 13: Mid4Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 14: Mid5Name = strValue; return CfgUpdateFlags.AnyChange; case 15: Mid5ErrAfterCorr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 16: Mid5Err = Utils.ParseUDouble(strValue); return CfgUpdateFlags.AnyChange; case 17: E1 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 18: E2 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 19: E3 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 20: E4 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 21: E5 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 22: E6 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 23: E7 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 24: E8 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 25: E9 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 26: E10 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 27: E11 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 28: E12 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 29: E12 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 30: E14 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 31: E15 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 32: E16 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 33: E21 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; #if TURA_IPERL || TURA_SPECIAL case 34: E26 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 35: E27 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 36: E28 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; case 37: E36 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; #else case 34: E36 = (strValue == Strings.yes); return CfgUpdateFlags.AnyChange; #endif default: return CfgUpdateFlags.None; } } /// /// Validate string form of a parameter value /// /// Parameter index /// String form of a parameter /// Message in case value is not valid /// true when string form of a parameter is OK public bool ValidateParam(int i, string strValue, out string message) { message = string.Empty; int percentage; double relError; switch (i) { case 0: case 2: case 5: case 8: case 11: case 14: return true; case 1: if (int.TryParse(strValue, out percentage) && (0 <= percentage) && (percentage <= 100)) return true; message = "Percentage of failed meters is invalid, should be 1..100, 0 = off"; return false; case 3: case 4: case 6: case 7: case 9: case 10: case 12: case 13: case 15: case 16: if (Utils.TryParseUDouble(strValue, out relError)) return true; message = "relative error of MID is invalid or less then 0"; return false; case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: #if TURA_IPERL || TURA_SPECIAL case 35: case 36: case 37: #endif if (strValue == Strings.yes || strValue == Strings.no) return true; break; default: message = "Invalid index"; return false; } message = ParamName(i) + " is invalid"; return false; } void CopyContentTo(TriggerCfg prms) { prms.EventSource = this.EventSource; /// 0 prms.FailedWMsPct = this.FailedWMsPct; /// 1 prms.Mid1Name = this.Mid1Name; /// 2 prms.Mid1ErrAfterCorr = this.Mid1ErrAfterCorr; /// 3 prms.Mid1Err = this.Mid1Err; /// 4 prms.Mid2Name = this.Mid2Name; /// 5 prms.Mid2ErrAfterCorr = this.Mid2ErrAfterCorr; /// 6 prms.Mid2Err = this.Mid2Err; /// 7 prms.Mid3Name = this.Mid3Name; /// 8 prms.Mid3ErrAfterCorr = this.Mid3ErrAfterCorr; /// 9 prms.Mid3Err = this.Mid3Err; /// 10 prms.Mid4Name = this.Mid4Name; /// 11 prms.Mid4ErrAfterCorr = this.Mid4ErrAfterCorr; /// 12 prms.Mid4Err = this.Mid4Err; /// 13 prms.Mid5Name = this.Mid5Name; /// 14 prms.Mid5ErrAfterCorr = this.Mid5ErrAfterCorr; /// 15 prms.Mid5Err = this.Mid5Err; /// 16 prms.E1 = this.E1; /// 17 prms.E2 = this.E2; /// 18 prms.E3 = this.E3; /// 19 prms.E4 = this.E4; /// 20 prms.E5 = this.E5; /// 21 prms.E6 = this.E6; /// 22 prms.E7 = this.E7; /// 23 prms.E8 = this.E8; /// 24 prms.E9 = this.E9; /// 25 prms.E10 = this.E10; /// 26 prms.E11 = this.E11; /// 27 prms.E12 = this.E12; /// 28 prms.E13 = this.E13; /// 29 prms.E14 = this.E14; /// 30 prms.E15 = this.E15; /// 31 prms.E16 = this.E16; /// 32 prms.E21 = this.E21; /// 33 #if TURA_IPERL || TURA_SPECIAL prms.E26 = this.E26; /// 34 prms.E27 = this.E27; /// 35 prms.E28 = this.E28; /// 36 #endif prms.E36 = this.E36; /// 34 or 37 } public Config.Entities.IParamsProvider Clone() { TriggerCfg pars = new TriggerCfg(); CopyContentTo(pars); return pars; } public bool UpdateEmbeddedDbEntity() { return true; /// =OK, do nothing } } }