///
/// 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 ProcedureParamsBase : Generic.IProcedureParams
{
protected ComponentProcedure procedureParamsEntity;
protected virtual XmlSerializer GetSerializer() { return new XmlSerializer(GetType()); }
public string ComponentName { get { return componentName; } }
protected string componentName;
public Procedure Procedure { get { return procedure; } }
protected Procedure procedure;
///
/// Parameterless constructor required for serialization
///
public ProcedureParamsBase()
{
InitializeAll();
}
/// To be overridden
public virtual void InitializeAll()
{
}
/// To be overridden
public virtual void UpdateProcedureParams(ComponentProcedure dbEntity)
{
}
public void UpdateProcedureParams(string cmpntName, Procedure procedure)
{
/// Search for an existing matching entity
foreach (var procPrms in procedure.MoreParams)
{
if (procPrms.CmpntName.Equals(cmpntName))
{
UpdateProcedureParams(procPrms);
return;
}
}
/// Create a new entity and add it to the list test.MoreParams
this.procedureParamsEntity = this.ToDbEntity(cmpntName, procedure);
this.procedure = procedure;
this.componentName = cmpntName;
procedure.MoreParams.Add(procedureParamsEntity);
}
public ComponentProcedure ToDbEntity(string componentName, Procedure procedure)
{
using (var writer = new StringWriter())
{
/// Serialize this class with parameters
GetSerializer().Serialize(writer, this);
/// Create and return the ComponentProcedure entity
ComponentProcedure entity = new ComponentProcedure();
entity.CmpntName = componentName;
entity.Parameters = writer.ToString();
entity.Procedure = procedure;
return entity;
}
}
public void UpdateDbEntity()
{
using (var writer = new StringWriter())
{
/// Serialize this class and update the entity
GetSerializer().Serialize(writer, this);
procedureParamsEntity.Parameters = writer.ToString();
procedureParamsEntity.CmpntName = componentName;
procedureParamsEntity.Procedure = procedure;
}
}
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();
}
}
}