tbf/TestBenchFramework/BenchControl/WaterMeter/ProcParams.cs

171 lines
4.1 KiB
C#

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
}
}