using Microsoft.Win32.SafeHandles; using SewerStammGen.Shared.Contracts; using SewerStammGen.Shared.Domain; using SewerStammGen.Shared.Enum; using Shared.Contracts; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace WWTech_KanalSchnittstelle.Exporter.XML { public class XML2006 : IExport { private XmlDocument _file; private List _schaechte; private List _haltungen; public async Task Export(string projektname, EKodierungssystem kodierungssystem, List haltungen, List schaechte) { _schaechte = schaechte; _haltungen = haltungen; _file = new XmlDocument(); XmlDeclaration newChild = _file.CreateXmlDeclaration("1.0", "ISO-8859-1", "yes"); _file.AppendChild(newChild); XmlElement xmlElement = CreateElementFor("Identifikation", _file); xmlElement.SetAttribute("xmlns", "http://www.ofd-hannover.la/Identifikation"); XmlElement xmlElement2 = CreateElementFor("Version", xmlElement); xmlElement2.InnerText = "2-3"; DoAdmindata(xmlElement); DoCollectives(xmlElement); _file.Save("test.xml"); return true; } private XmlElement CreateElementFor(string name, XmlNode parentElement) { XmlElement xmlElement = _file.CreateElement(name); parentElement.AppendChild(xmlElement); return xmlElement; } private void DoAdmindata(XmlElement idElement) { XmlElement parentElement = CreateElementFor("Admindaten", idElement); } private void DoCollectives(XmlElement idElement) { XmlElement dataCollectiveElement = DoRow(idElement, "Datenkollektive"); DoCollectives1Labels(dataCollectiveElement); DoCollectives2Base(dataCollectiveElement); } private void DoCollectives2Base(XmlElement dataCollectiveElement) { XmlElement parentElement = DoRow(dataCollectiveElement, "Stammdatenkollektiv"); foreach(Schacht schacht in _schaechte) { XmlElement xmlElement = DoSchachtRow(schacht,parentElement, "AbwassertechnischeAnlage"); } } private XmlElement DoSchachtRow(Schacht schacht, XmlElement parentElement, string originTableName) { XmlElement xmlElement = null; xmlElement = _file.CreateElement(originTableName); parentElement.AppendChild(xmlElement); DoRowValue(xmlElement, "Objektbezeichnung", schacht.Objektbezeichnung); DoRowValue(xmlElement, "Objektart", "2"); DoRowValue(xmlElement, "Entwaesserungsart", schacht.Entwaesserung == EEntwaeserung.Regenwasser ? "KR" : schacht.Entwaesserung == EEntwaeserung.Schmutzwasser ? "KS" : "KM"); XmlElement xmlElement1 = CreateElementFor("Knoten", xmlElement); DoRowValue(xmlElement1, "KnotenTyp", "0"); XmlElement xmlElement2 = CreateElementFor("Schacht", xmlElement1); DoRowValue(xmlElement2, "SchachtFunktion", "1"); XmlElement GeometrieElement = CreateElementFor("Geometrie", xmlElement); XmlElement KnotenElement = CreateElementFor("Knoten", GeometrieElement); XmlElement PunktElement = CreateElementFor("Punkt", KnotenElement); DoRowValue(PunktElement, "Rechtswert", schacht.SohlRechtsWert.ToString()); DoRowValue(PunktElement, "Hochwert", schacht.SohlHochWert.ToString()); DoRowValue(PunktElement, "Punkthoehe", schacht.SohlHoehe.ToString()); DoRowValue(PunktElement, "PunktattributAbwasser", "SMP"); PunktElement = CreateElementFor("Punkt", KnotenElement); DoRowValue(PunktElement, "Rechtswert", schacht.DeckelRechtsWert.ToString()); DoRowValue(PunktElement, "Hochwert", schacht.DeckelHochWert.ToString()); DoRowValue(PunktElement, "Punkthoehe", schacht.DeckelHoehe.ToString()); DoRowValue(PunktElement, "PunktattributAbwasser", "DMP"); return xmlElement; } private XmlElement DoHaltungRow(Kanal haltung, XmlElement parentElement, string orginalTableName) { XmlElement xmlElement = null; xmlElement = _file.CreateElement(orginalTableName); parentElement.AppendChild(xmlElement); return xmlElement; } private XmlElement DoRow(XmlElement parentElement, string originTableName) { XmlElement xmlElement = null; xmlElement = _file.CreateElement(originTableName); parentElement.AppendChild(xmlElement); return xmlElement; } private void DoCollectives1Labels(XmlElement dataCollectiveElement) { XmlElement parentElement = CreateElementFor("Kennungen", dataCollectiveElement); XmlElement xmlElement = CreateElementFor("Kollektiv", parentElement); DoRowValue(xmlElement, "Kennung", "STA01"); DoRowValue(xmlElement, "Kollektivart", "1"); XmlElement parentElement2 = CreateElementFor("Kollektiveigenschaft", xmlElement); DoRow(parentElement2, "Stammdaten"); DoRow(parentElement2, "Zustandsdaten"); DoRow(parentElement2, "Hydraulikdaten"); DoRow(parentElement2, "Betriebsdaten"); DoRowValue(xmlElement, "Regelwerk", "2"); DoRowValue(xmlElement, "Bearbeitungsstand", "2"); DoRowValue(xmlElement, "Kommentar", "test"); } private XmlElement DoRowValue(XmlElement rowElement, string originColName, string value) { XmlElement xmlElement = CreateElementFor(originColName, rowElement); if(value != "") { xmlElement.InnerText = value; } return xmlElement; } } }