using System; using System.IO; using System.Text; using System.Xml.Serialization; using TBF.BenchControl.Generic; using TBF.Resources; namespace TBF.BenchControl.WaterMeter { public class ProcParams : IParamsProvider, IProcedureParams { public string Producer; /// Hersteller public float Qn; public string ApprovalInfo; /// Zulassungszeichen public string MetrologicalClass; /// Metr. Klasse string[] paramNames = new string[] { Strings.Producer, Strings.Qn, Strings.Approval_info, Strings.Metrological_class, }; public string ParamName(int i) { return paramNames[i]; } public string ToString(int i) { switch (i) { case 0: return Producer; case 1: return Qn.ToString(); case 2: return ApprovalInfo; case 3: return MetrologicalClass; default: return string.Empty; } } public void UpdateParam(int i, string strValue) { switch (i) { case 0: Producer = strValue; return; case 1: Qn = Utils.ParseUFloat(strValue); return; case 2: ApprovalInfo = strValue; return; case 3: MetrologicalClass = strValue; return; default: return; } } public bool ValidateParam(int i, string strValue, out string message) { message = string.Empty; float dummy; switch (i) { case 1: if (Utils.TryParseUFloat(strValue, out dummy)) return true; break; case 0: case 2: case 3: return true; default: message = "Invalid index"; return false; } message = ParamName(i) + " is invalid"; return false; } #region Boilerplate code public int ParamsCount() { return paramNames.Length; } public override string ToString() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < ParamsCount(); i++) { if (i != 0) sb.Append("; "); sb.Append(ParamName(i)); sb.Append("="); sb.Append(ToString(i)); } return sb.ToString(); } [XmlIgnore] public Entities.ComponentProcedure ProcedureParamsEntity { get { return procParamsEntity; } } Entities.ComponentProcedure procParamsEntity; [XmlIgnore] public string ComponentName { get { return componentName; } } string componentName; [XmlIgnore] public Entities.Procedure Test { get { return test; } } Entities.Procedure test; /// Parameterless constructor public ProcParams() { Producer = ""; Qn = 2.5f; ApprovalInfo = ""; MetrologicalClass = "A"; } public ProcParams(Entities.ComponentProcedure procParamsEntity, string componentName, Entities.Procedure test) : this() { this.procParamsEntity = procParamsEntity; this.componentName = componentName; this.test = test; } public TBF.Entities.ComponentProcedure ToDbEntity(IComponent component, Entities.Procedure procedure) { using (var writer = new StringWriter()) { /// Serialize this class with parameters (new XmlSerializer(GetType())).Serialize(writer, this); /// Create and return the ComponentProcedure entity TBF.Entities.ComponentProcedure entity = new TBF.Entities.ComponentProcedure(); entity.CmpntName = component.Cfg.Name; entity.Parameters = writer.ToString(); entity.Procedure = procedure; return entity; } } public void UpdateDbEntity() { using (var writer = new StringWriter()) { /// Serialize this class and update the entity (new XmlSerializer(GetType())).Serialize(writer, this); procParamsEntity.Parameters = writer.ToString(); procParamsEntity.CmpntName = componentName; procParamsEntity.Procedure = test; } } public static IParamsProvider GetProcedureParams(Entities.ComponentProcedure procParamsEntity) { if (procParamsEntity == null) return new ProcParams(); ProcParams procParams; try { procParams = (ProcParams)(new XmlSerializer(typeof(ProcParams))) .Deserialize(new StringReader(procParamsEntity.Parameters)); } catch { procParams = new ProcParams(); } procParams.procParamsEntity = procParamsEntity; procParams.componentName = procParamsEntity.CmpntName; procParams.test = procParamsEntity.Procedure; return procParams; } #endregion } }