First Working Version with New parser

This commit is contained in:
Jonathan Jenne
2021-10-15 14:56:46 +02:00
parent 3596786137
commit 12aa22ebdf
33 changed files with 3066 additions and 2533 deletions

View File

@@ -0,0 +1,8 @@
Namespace Schemas
Public Class BaseSchema
Public Property Template As String
Public Property TemplateType As Integer
Public Property [Option] As Integer
Public Property PrintVoucher As Integer
End Class
End Namespace

View File

@@ -1,6 +0,0 @@
Namespace Schemas
Public Interface IMesoWebservice
Property Items As Object()
End Interface
End Namespace

View File

@@ -1,28 +1,28 @@
Namespace Schemas.Orders
Public Class Helpers
Public Shared Function GetOrderHead(Of T)(pData As IMesoWebservice) As T
Dim oHead As T = pData.Items.
Where(Function(i) TypeOf i Is T).
FirstOrDefault()
Return oHead
End Function
'Public Class Helpers
' Public Shared Function GetOrderHead(Of T)(pData As IMesoWebservice) As T
' Dim oHead As T = pData.Items.
' Where(Function(i) TypeOf i Is T).
' FirstOrDefault()
' Return oHead
' End Function
Public Shared Sub SetOrderHead(Of T)(pData As IMesoWebservice, pUpdateFunction As Action(Of T))
Dim oHead As T = pData.Items.
Where(Function(i) TypeOf i Is T).
SetValue(Sub(pObject As T)
pUpdateFunction(pObject)
End Sub).
FirstOrDefault()
' Public Shared Sub SetOrderHead(Of T)(pData As IMesoWebservice, pUpdateFunction As Action(Of T))
' Dim oHead As T = pData.Items.
' Where(Function(i) TypeOf i Is T).
' SetValue(Sub(pObject As T)
' pUpdateFunction(pObject)
' End Sub).
' FirstOrDefault()
End Sub
' End Sub
Public Shared Function GetOrderPositions(Of T)(pData As IMesoWebservice) As List(Of T)
Dim oPositions As List(Of T) = pData.Items.
Where(Function(i) TypeOf i Is T).
Select(Of T)(Function(i) i).
ToList()
Return oPositions
End Function
End Class
' Public Shared Function GetOrderPositions(Of T)(pData As IMesoWebservice) As List(Of T)
' Dim oPositions As List(Of T) = pData.Items.
' Where(Function(i) TypeOf i Is T).
' Select(Of T)(Function(i) i).
' ToList()
' Return oPositions
' End Function
'End Class
End Namespace

View File

@@ -27,8 +27,6 @@ Namespace Schemas.Orders.Input
System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=False)>
Partial Public Class MESOWebService
Implements Schemas.IMesoWebservice
Private itemsField() As Object
Private templateTypeField As String
@@ -50,7 +48,7 @@ Namespace Schemas.Orders.Input
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("EXIM-VRG_ordersT025", GetType(MESOWebServiceEXIMVRG_ordersT025), Form:=System.Xml.Schema.XmlSchemaForm.Unqualified),
System.Xml.Serialization.XmlElementAttribute("EXIM-VRG_ordersT026", GetType(MESOWebServiceEXIMVRG_ordersT026), Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)>
Public Property Items() As Object() Implements Schemas.IMesoWebservice.Items
Public Property Items() As Object()
Get
Return Me.itemsField
End Get

View File

@@ -0,0 +1,55 @@
Imports System.ComponentModel
Namespace Schemas
''' <summary>
''' XML Schema to import the Data-Files
''' </summary>
Public Class OrderSchema
Inherits BaseSchema
<Description("EXIM-VRG_ordersT025")>
Public Property Head As New OrderHead
<Description("EXIM-VRG_ordersT026")>
Public Property Positions As New List(Of OrderPosition)
Public Class OrderHead
<Description("BELEGKEY")>
Public Property DocumentKey As String
<Description("Fakt_Kontonummer")>
Public Property AccountNumber As String
<Description("Laufnummer")>
Public Property RunningNumber As String
<Description("Bestellt_von")>
Public Property OrderedBy As String
<Description("Lief_Kontonummer")>
Public Property AccountNumber2 As String
<Description("Belegart")>
Public Property DocumentType As Integer
<Description("Datum_Auftrag-Bestellung")>
Public Property OrderDate As Date
<Description("Auftrags-Bestellnummer")>
Public Property OrderNumber As String
<Description("Infotext")>
Public Property InfoText As String
End Class
Public Class OrderPosition
<Description("BELEGKEY")>
Public Property DocumentKey As String
<Description("Zeilennummer")>
Public Property LineNumber As String
<Description("Artikelnummer")>
Public Property ArticleNumber As String
<Description("Bezeichnung")>
Public Property ArticleDescription As String
<Description("Lieferantenartikelnummer")>
Public Property VendorNumber As String
End Class
End Class
End Namespace

View File

@@ -1,712 +0,0 @@
'------------------------------------------------------------------------------
' <auto-generated>
' Dieser Code wurde von einem Tool generiert.
' Laufzeitversion:4.0.30319.42000
'
' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
' der Code erneut generiert wird.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict Off
Option Explicit On
Imports System.Xml.Serialization
'
'This source code was auto-generated by xsd, Version=4.8.3928.0.
'
Namespace Schemas.Orders.Output
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true), _
System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=false)> _
Partial Public Class MESOWebService
Private itemsField() As Object
Private templateTypeField As String
Private templateField As String
Private optionField As String
Private amountField As String
Private extEntryField As String
Private printVoucherField As String
Private extInsertField As String
Private changeLotSizeField As String
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("EXIM-VRG_ordersT025", GetType(MESOWebServiceEXIMVRG_ordersT025), Form:=System.Xml.Schema.XmlSchemaForm.Unqualified), _
System.Xml.Serialization.XmlElementAttribute("EXIM-VRG_ordersT026", GetType(MESOWebServiceEXIMVRG_ordersT026), Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Items() As Object()
Get
Return Me.itemsField
End Get
Set
Me.itemsField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="integer")> _
Public Property TemplateType() As String
Get
Return Me.templateTypeField
End Get
Set
Me.templateTypeField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Template() As String
Get
Return Me.templateField
End Get
Set
Me.templateField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="integer")> _
Public Property [option]() As String
Get
Return Me.optionField
End Get
Set
Me.optionField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="integer")> _
Public Property amount() As String
Get
Return Me.amountField
End Get
Set
Me.amountField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="integer")> _
Public Property extEntry() As String
Get
Return Me.extEntryField
End Get
Set
Me.extEntryField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="integer")> _
Public Property printVoucher() As String
Get
Return Me.printVoucherField
End Get
Set
Me.printVoucherField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="integer")> _
Public Property extInsert() As String
Get
Return Me.extInsertField
End Get
Set
Me.extInsertField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute(DataType:="integer")> _
Public Property ChangeLotSize() As String
Get
Return Me.changeLotSizeField
End Get
Set
Me.changeLotSizeField = value
End Set
End Property
End Class
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true)> _
Partial Public Class MESOWebServiceEXIMVRG_ordersT025
Private bELEGKEYField As String
Private fakt_KontonummerField As String
Private laufnummerField As String
Private fakt_NameField As String
Private fakt_StrasseField As String
Private fakt_PLZField As String
Private fakt_OrtField As String
Private fakt_AnsprechpartnerField As String
Private lief_KontonummerField As String
Private lief_NameField As String
Private lief_StrasseField As String
Private lief_PLZField As String
Private lief_OrtField As String
Private belegartField As String
Private datum_AuftragBestellungField As Date
Private datum_AuftragBestellungFieldSpecified As Boolean
Private auftragsBestellnummerField As String
Private leistungsdatumField As Date
Private leistungsdatumFieldSpecified As Boolean
Private auftragsreferenzField As String
Private infotextField As String
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType:="integer")> _
Public Property BELEGKEY() As String
Get
Return Me.bELEGKEYField
End Get
Set
Me.bELEGKEYField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Fakt_Kontonummer() As String
Get
Return Me.fakt_KontonummerField
End Get
Set
Me.fakt_KontonummerField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Laufnummer() As String
Get
Return Me.laufnummerField
End Get
Set
Me.laufnummerField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Fakt_Name() As String
Get
Return Me.fakt_NameField
End Get
Set
Me.fakt_NameField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Fakt_Strasse() As String
Get
Return Me.fakt_StrasseField
End Get
Set
Me.fakt_StrasseField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Fakt_PLZ() As String
Get
Return Me.fakt_PLZField
End Get
Set
Me.fakt_PLZField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Fakt_Ort() As String
Get
Return Me.fakt_OrtField
End Get
Set
Me.fakt_OrtField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Fakt_Ansprechpartner() As String
Get
Return Me.fakt_AnsprechpartnerField
End Get
Set
Me.fakt_AnsprechpartnerField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Lief_Kontonummer() As String
Get
Return Me.lief_KontonummerField
End Get
Set
Me.lief_KontonummerField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Lief_Name() As String
Get
Return Me.lief_NameField
End Get
Set
Me.lief_NameField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Lief_Strasse() As String
Get
Return Me.lief_StrasseField
End Get
Set
Me.lief_StrasseField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Lief_PLZ() As String
Get
Return Me.lief_PLZField
End Get
Set
Me.lief_PLZField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Lief_Ort() As String
Get
Return Me.lief_OrtField
End Get
Set
Me.lief_OrtField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Belegart() As String
Get
Return Me.belegartField
End Get
Set
Me.belegartField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("Datum_Auftrag-Bestellung", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType:="date")> _
Public Property Datum_AuftragBestellung() As Date
Get
Return Me.datum_AuftragBestellungField
End Get
Set
Me.datum_AuftragBestellungField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public Property Datum_AuftragBestellungSpecified() As Boolean
Get
Return Me.datum_AuftragBestellungFieldSpecified
End Get
Set
Me.datum_AuftragBestellungFieldSpecified = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("Auftrags-Bestellnummer", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property AuftragsBestellnummer() As String
Get
Return Me.auftragsBestellnummerField
End Get
Set
Me.auftragsBestellnummerField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType:="date")> _
Public Property Leistungsdatum() As Date
Get
Return Me.leistungsdatumField
End Get
Set
Me.leistungsdatumField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public Property LeistungsdatumSpecified() As Boolean
Get
Return Me.leistungsdatumFieldSpecified
End Get
Set
Me.leistungsdatumFieldSpecified = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Auftragsreferenz() As String
Get
Return Me.auftragsreferenzField
End Get
Set
Me.auftragsreferenzField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Infotext() As String
Get
Return Me.infotextField
End Get
Set
Me.infotextField = value
End Set
End Property
End Class
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true)> _
Partial Public Class MESOWebServiceEXIMVRG_ordersT026
Private bELEGKEYField As String
Private zeilennummerField As String
Private datentypField As String
Private artikelnummerField As String
Private bezeichnungField As String
Private notizblockField As String
Private lieferantenartikelnummerField As String
Private menge_bestelltField As Decimal
Private menge_bestelltFieldSpecified As Boolean
Private menge_geliefertField As Decimal
Private colliField As String
Private einzelpreisField As Decimal
Private einzelpreisFieldSpecified As Boolean
Private zeilenrabatt1Field As Decimal
Private zeilenrabatt1FieldSpecified As Boolean
Private zeilenrabatt2Field As Decimal
Private zeilenrabatt2FieldSpecified As Boolean
Private zeilenrabatt3Field As Decimal
Private zeilenrabatt3FieldSpecified As Boolean
Private zeilenrabatt4Field As Decimal
Private zeilenrabatt4FieldSpecified As Boolean
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType:="integer")> _
Public Property BELEGKEY() As String
Get
Return Me.bELEGKEYField
End Get
Set
Me.bELEGKEYField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType:="integer")> _
Public Property Zeilennummer() As String
Get
Return Me.zeilennummerField
End Get
Set
Me.zeilennummerField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Datentyp() As String
Get
Return Me.datentypField
End Get
Set
Me.datentypField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Artikelnummer() As String
Get
Return Me.artikelnummerField
End Get
Set
Me.artikelnummerField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Bezeichnung() As String
Get
Return Me.bezeichnungField
End Get
Set
Me.bezeichnungField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Notizblock() As String
Get
Return Me.notizblockField
End Get
Set
Me.notizblockField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Lieferantenartikelnummer() As String
Get
Return Me.lieferantenartikelnummerField
End Get
Set
Me.lieferantenartikelnummerField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Menge_bestellt() As Decimal
Get
Return Me.menge_bestelltField
End Get
Set
Me.menge_bestelltField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public Property Menge_bestelltSpecified() As Boolean
Get
Return Me.menge_bestelltFieldSpecified
End Get
Set
Me.menge_bestelltFieldSpecified = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Menge_geliefert() As Decimal
Get
Return Me.menge_geliefertField
End Get
Set
Me.menge_geliefertField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Colli() As String
Get
Return Me.colliField
End Get
Set
Me.colliField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Einzelpreis() As Decimal
Get
Return Me.einzelpreisField
End Get
Set
Me.einzelpreisField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public Property EinzelpreisSpecified() As Boolean
Get
Return Me.einzelpreisFieldSpecified
End Get
Set
Me.einzelpreisFieldSpecified = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Zeilenrabatt1() As Decimal
Get
Return Me.zeilenrabatt1Field
End Get
Set
Me.zeilenrabatt1Field = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public Property Zeilenrabatt1Specified() As Boolean
Get
Return Me.zeilenrabatt1FieldSpecified
End Get
Set
Me.zeilenrabatt1FieldSpecified = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Zeilenrabatt2() As Decimal
Get
Return Me.zeilenrabatt2Field
End Get
Set
Me.zeilenrabatt2Field = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public Property Zeilenrabatt2Specified() As Boolean
Get
Return Me.zeilenrabatt2FieldSpecified
End Get
Set
Me.zeilenrabatt2FieldSpecified = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Zeilenrabatt3() As Decimal
Get
Return Me.zeilenrabatt3Field
End Get
Set
Me.zeilenrabatt3Field = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public Property Zeilenrabatt3Specified() As Boolean
Get
Return Me.zeilenrabatt3FieldSpecified
End Get
Set
Me.zeilenrabatt3FieldSpecified = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Zeilenrabatt4() As Decimal
Get
Return Me.zeilenrabatt4Field
End Get
Set
Me.zeilenrabatt4Field = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public Property Zeilenrabatt4Specified() As Boolean
Get
Return Me.zeilenrabatt4FieldSpecified
End Get
Set
Me.zeilenrabatt4FieldSpecified = value
End Set
End Property
End Class
End Namespace

View File

@@ -0,0 +1,28 @@
Namespace Schemas
Public Class Schema
Public Enum ColumnType As Integer
[String]
[Integer]
[Date]
[Boolean]
[Decimal]
End Enum
Public Property Tables As New List(Of Table)
Public Property Name As String
Class Table
Public Property Name As String
Public Property Columns As New List(Of Column)
End Class
Class Column
Public Property Name As String
Public Property Required As String
Public Property DataType As ColumnType
End Class
End Class
End Namespace

View File

@@ -0,0 +1,116 @@
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Imports DigitalData.Modules.Logging
Namespace Schemas
Public Class SchemaLoader
Inherits BaseClass
Private ns As XNamespace = "http://www.w3.org/2001/XMLSchema"
Public SchemaList As List(Of FileInfo)
Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig, pLogConfig.GetLogger)
End Sub
Public Function LoadFiles(pSchemaDirectory) As Boolean
If pSchemaDirectory = String.Empty Then
Throw New ArgumentNullException("SchemaDirectory")
End If
Logger.Info("Loading files from directory [{0}]", pSchemaDirectory)
Try
Dim oDirectory As New DirectoryInfo(pSchemaDirectory)
Dim oFiles = oDirectory.GetFiles()
Logger.Debug("Found [{0}] files in directory [{1}]", oFiles.Count, oDirectory)
SchemaList = oFiles.ToList()
Return True
Catch ex As Exception
Logger.Error(ex)
Throw New IO.IOException($"Could not load files from directory {pSchemaDirectory}", ex)
End Try
End Function
Public Function GetSchemaFromFile(pSchemaFilePath As String) As Schema
Dim oSchema As New Schema
Dim oElements = GetSchemaElements(pSchemaFilePath)
For Each oElement In oElements
Dim oColumns = GetElementColumns(oElement)
Dim oSchemaColumns As New List(Of Schema.Column)
For Each oColumn As XElement In oColumns
Dim oName = XmlData.GetElementAttribute(oColumn, "name")
Dim oMinOccurs = XmlData.GetElementAttribute(oColumn, "minOccurs")
Dim oMaxOccurs = XmlData.GetElementAttribute(oColumn, "maxOccurs")
Dim oType = GetElementType(oColumn)
Dim oRequired = False
If oMinOccurs = 1 And oMaxOccurs = 1 Then
oRequired = True
End If
Dim oSchemaColumn As New Schema.Column With {
.Name = oName,
.Required = oRequired,
.DataType = oType
}
oSchemaColumns.Add(oSchemaColumn)
Next
oSchema.Tables.Add(New Schema.Table With {
.Name = XmlData.GetElementAttribute(oElement, "name"),
.Columns = oSchemaColumns
})
Next
Return oSchema
End Function
Public Function GetElementType(pElement As XElement) As Schema.ColumnType
Dim oTypeString = XmlData.GetElementAttribute(pElement, "type")
If oTypeString Is Nothing Then
Dim oRestrictionElement As XElement = pElement.
Descendants(ns + "restriction").
FirstOrDefault()
oTypeString = XmlData.GetElementAttribute(oRestrictionElement, "base")
End If
Select Case oTypeString
Case "xs:date"
Return Schema.ColumnType.Date
Case "xs:integer"
Return Schema.ColumnType.Integer
Case "xs:decimal"
Return Schema.ColumnType.Decimal
Case "xs:boolean"
Return Schema.ColumnType.Boolean
Case Else
Return Schema.ColumnType.String
End Select
End Function
Public Function GetSchemaElements(pSchemaFilePath As String) As List(Of XElement)
Dim oText As String = IO.File.ReadAllText(pSchemaFilePath)
Dim oDoc = XDocument.Parse(oText)
Return XmlData.GetElementsFromElement(oDoc, "choice", ns)
End Function
Public Function GetElementColumns(pElement As XElement) As List(Of XElement)
Return XmlData.GetElementsFromElement(pElement, "sequence", ns)
End Function
End Class
End Namespace