/// /// Copyright (c) 2013-2017 Sensus Metering Systems /// using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml.Serialization; using Config.Entities; namespace TBF.BenchControl { public class TestParamsBase : Generic.ITestParams { protected ComponentTest testParamsEntity; public virtual XmlSerializer GetSerializer() { return new XmlSerializer(GetType()); } public string ComponentName { get { return componentName; } } protected string componentName; public Test Test { get { return test; } } protected Test test; /// /// Parameterless constructor required for serialization /// public TestParamsBase() { InitializeAll(); } /// To be overridden public virtual void InitializeAll() { } /// To be overridden public virtual ICollection ParamValues(int ix) { return null; } /// To be overridden public virtual void UpdateFromDbEntity(ComponentTest dbEntity) { } public void FromDbEntity(string cmpntName, Test test) { ComponentTest componentTest = test.GetTestParamsEntity(cmpntName); if (componentTest != null) { UpdateFromDbEntity(componentTest); return; } /// Create a new entity and add it to the list test.MoreParams InitializeAll(); this.testParamsEntity = this.ToDbEntity(cmpntName, test); this.testParamsEntity.SetParamsProvider(this as IParamsProvider); this.test = test; this.componentName = cmpntName; test.MoreParams.Add(testParamsEntity); } public ComponentTest ToDbEntity(string cmpntName, Test test) { using (var writer = new StringWriter()) { GetSerializer().Serialize(writer, this); /// Serialize this class with parameters return new ComponentTest(cmpntName, writer.ToString(), test); /// Return new ComponentTest entity } } /// /// Updates DB entities for test parameters /// /// true when successful public bool UpdateEmbeddedDbEntity() { if (testParamsEntity == null) return false; using (var writer = new StringWriter()) { /// Serialize this class and update the entity GetSerializer().Serialize(writer, this); testParamsEntity.Parameters = writer.ToString(); testParamsEntity.CmpntName = componentName; testParamsEntity.Test = test; } return true; } public virtual string ParamName(int i) { return string.Empty; } public virtual int ParamsCount() { return 0; } public virtual string ToString(int i) { return string.Empty; } 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(); } } }