101 lines
3.6 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|