Files
DP44/DataPRO/SensorDB/SensorRange.cs
2026-04-17 14:55:32 -04:00

101 lines
3.6 KiB
C#

using System;
using System.Xml.Linq;
using System.ComponentModel;
namespace DTS.SensorDB
{
public class SensorRange : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T storage, T value, String propertyName = null)
{
if (Equals(storage, value)) return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public double Low { get; set; }
public double Medium { get; set; }
public double High { get; set; }
#region Tags
internal const string SensorRangeTag = "SensorRange";
internal const string LowTag = "Low";
internal const string MediumTag = "Medium";
internal const string HighTag = "High";
#endregion
public SensorRange(string value)
{
var values = value.Split(',');
if (3 != values.Length) { throw new System.IO.InvalidDataException("bad SensorRange, " + value); }
Low = double.Parse(values[0]);
Medium = double.Parse(values[1]);
High = double.Parse(values[2]);
}
public string ToSerializeString()
{
return $"{Low.ToString(System.Globalization.CultureInfo.InvariantCulture)},{Medium.ToString(System.Globalization.CultureInfo.InvariantCulture)},{High.ToString(System.Globalization.CultureInfo.InvariantCulture)}";
}
private string TableName;
internal SensorRange(XElement elem, string prefix, string tblName, string id)
{
TableName = tblName;
XElement inner = null;
try
{
inner = elem.Element(mkTag(prefix));
}
catch (ArgumentNullException)
{
if (!string.IsNullOrEmpty(id))
throw new Exception($"{TableName}: Can't find tag {prefix + "-" + SensorRangeTag} for entry {id}");
throw new Exception($"{TableName}: Can't find tag {prefix + "-" + SensorRangeTag} in file");
}
Low = Double.Parse(inner.Attribute(LowTag).Value, System.Globalization.CultureInfo.InvariantCulture);
Medium = Double.Parse(inner.Attribute(MediumTag).Value, System.Globalization.CultureInfo.InvariantCulture);
High = Double.Parse(inner.Attribute(HighTag).Value, System.Globalization.CultureInfo.InvariantCulture);
}
public SensorRange(double low, double medium, double high)
{
Low = low;
Medium = medium;
High = high;
}
internal XElement ToXElement(string prefix)
{
var element = new XElement(mkTag(prefix));
element.SetAttributeValue(LowTag, Low);
element.SetAttributeValue(MediumTag, Medium);
element.SetAttributeValue(HighTag, High);
return element;
}
internal void Update(XElement elem, string prefix)
{
var element = elem.Element(mkTag(prefix));
if (element == null) return;
element.SetAttributeValue(LowTag, Low);
element.SetAttributeValue(MediumTag, Medium);
element.SetAttributeValue(HighTag, High);
}
internal static string mkTag(string prefix)
{
return prefix + "-" + SensorRangeTag;
}
}
}