using DTS.Common.Enums.DBExport; using DTS.SensorDB; using System; using System.Collections.Generic; using System.Xml; namespace DTS.Common.Import.XML { public class XMLParseSensors : XMLParseBase { public XMLParseSensors(XmlElement root, double importedVersion, Func isCancelled = null,bool skipNormalizing=false) : base(root, importedVersion, isCancelled, skipNormalizing) { } public IImportNotification ImportNotification { get; set; } public override void Parse(ref ImportObject importObject) { ImportNotification?.SetStatus(new ImportStatus { PossibleStatus = Enums.PossibleStatus.Reading, ExtraStatus = Enums.ImportExtraStatus.ReadingSensors }); var sensors = ParseSensors(_root); if (!_skipNormalizing) { var newRoot = ConvertSensors(sensors); sensors = ParseSensors(newRoot); } importObject.AddSensors(sensors); } public XmlElement ConvertSensors(IEnumerable sensors) { _writer.WriteStartElement(TopLevelFields.Sensors.ToString()); //normalize to -2 ... -n (preserve -1 for invalid) var count = -2; foreach (var sd in sensors) { _sensorIdMapping[sd.DatabaseId] = count; sd.DatabaseId = count; count--; _writer.Flush(); sd.WriteXML(ref _writer); _writer.Flush(); } _writer.WriteEndElement(); return GetXmlElement(); } public IEnumerable ParseSensors(XmlElement root) { List sensors = new List(); foreach (var node in root.ChildNodes) { if (IsCancelled()) { return sensors; } if (!(node is XmlElement)) continue; var sd = new SensorData(); sd.ReadXML(node as XmlElement); sensors.Add(sd); } return sensors; } } }