flatten grouped results, add try..catch blocks at crititcal places
This commit is contained in:
parent
8127760eff
commit
617315667c
@ -301,7 +301,6 @@ Public Class ImportZUGFeRDFiles
|
|||||||
Function(Item) Item)
|
Function(Item) Item)
|
||||||
|
|
||||||
_logger.Debug("Found {0} properties grouped in {1} group(s)", args.PropertyMap.Count - oDefaultProperties.Count, oGroupedProperties.Count)
|
_logger.Debug("Found {0} properties grouped in {1} group(s)", args.PropertyMap.Count - oDefaultProperties.Count, oGroupedProperties.Count)
|
||||||
|
|
||||||
' Iterate through groups to get group scope and group items
|
' Iterate through groups to get group scope and group items
|
||||||
For Each oGroup In oGroupedProperties
|
For Each oGroup In oGroupedProperties
|
||||||
Dim oGroupScope As String = oGroup.Key
|
Dim oGroupScope As String = oGroup.Key
|
||||||
@ -312,8 +311,20 @@ Public Class ImportZUGFeRDFiles
|
|||||||
|
|
||||||
' get properties as a nested object, see `oPropertyList`
|
' get properties as a nested object, see `oPropertyList`
|
||||||
For Each oProperty As KeyValuePair(Of String, XmlItemProperty) In oGroup
|
For Each oProperty As KeyValuePair(Of String, XmlItemProperty) In oGroup
|
||||||
Dim oPropertyValues As List(Of Object) = oPropertyExtractor.GetPropValue(oDocument, oProperty.Key)
|
Dim oPropertyValues As List(Of Object)
|
||||||
|
|
||||||
|
Try
|
||||||
|
oPropertyValues = oPropertyExtractor.GetPropValue(oDocument, oProperty.Key)
|
||||||
|
Catch ex As Exception
|
||||||
|
_logger.Warn("Unknown error occurred while fetching property {0} in group {1}:", oProperty.Value.Description, oGroupScope)
|
||||||
|
_logger.Error(ex)
|
||||||
|
oPropertyValues = New List(Of Object)
|
||||||
|
End Try
|
||||||
|
|
||||||
|
' Flatten result value
|
||||||
|
oPropertyValues = oPropertyExtractor.GetFinalPropValue(oPropertyValues)
|
||||||
|
|
||||||
|
' Add to list
|
||||||
oPropertyList.Add(oProperty.Value, oPropertyValues)
|
oPropertyList.Add(oProperty.Value, oPropertyValues)
|
||||||
|
|
||||||
' check the first batch of values to determine the row count
|
' check the first batch of values to determine the row count
|
||||||
@ -379,16 +390,6 @@ Public Class ImportZUGFeRDFiles
|
|||||||
|
|
||||||
_logger.Debug("Processing property {0}.", oPropertyDescription)
|
_logger.Debug("Processing property {0}.", oPropertyDescription)
|
||||||
|
|
||||||
If TypeOf oPropertyValue Is List(Of Object) Then
|
|
||||||
Select Case oPropertyValue.Count
|
|
||||||
Case 0
|
|
||||||
oPropertyValue = String.Empty
|
|
||||||
Case Else
|
|
||||||
Dim oList As List(Of Object) = DirectCast(oPropertyValue, List(Of Object))
|
|
||||||
oPropertyValue = oList.Item(0)
|
|
||||||
End Select
|
|
||||||
End If
|
|
||||||
|
|
||||||
If IsNothing(oPropertyValue) OrElse String.IsNullOrEmpty(oPropertyValue) Then
|
If IsNothing(oPropertyValue) OrElse String.IsNullOrEmpty(oPropertyValue) Then
|
||||||
If oColumn.Key.IsRequired Then
|
If oColumn.Key.IsRequired Then
|
||||||
_logger.Warn("Property {0} is empty or not found but was required. Continuing with Empty String.", oPropertyDescription)
|
_logger.Warn("Property {0} is empty or not found but was required. Continuing with Empty String.", oPropertyDescription)
|
||||||
@ -423,26 +424,41 @@ Public Class ImportZUGFeRDFiles
|
|||||||
|
|
||||||
' Iterate through default properties
|
' Iterate through default properties
|
||||||
For Each Item As KeyValuePair(Of String, XmlItemProperty) In oDefaultProperties
|
For Each Item As KeyValuePair(Of String, XmlItemProperty) In oDefaultProperties
|
||||||
Dim oPropertyValueList As List(Of Object) = oPropertyExtractor.GetPropValue(oDocument, Item.Key)
|
Dim oPropertyValueList As List(Of Object)
|
||||||
Dim oPropertyDescription As String = Item.Value.Description
|
Dim oPropertyDescription As String = Item.Value.Description
|
||||||
Dim oPropertyValue As Object = Nothing
|
Dim oPropertyValue As Object = Nothing
|
||||||
|
|
||||||
If IsNothing(oPropertyValueList) Then
|
Try
|
||||||
oPropertyValue = Nothing
|
oPropertyValueList = oPropertyExtractor.GetPropValue(oDocument, Item.Key)
|
||||||
ElseIf TypeOf oPropertyValueList Is List(Of Object) Then
|
Catch ex As Exception
|
||||||
Select Case oPropertyValueList.Count
|
_logger.Warn("Unknown error occurred while fetching property {0} in group {1}:", oPropertyDescription, Item.Value.GroupScope)
|
||||||
Case 0
|
_logger.Error(ex)
|
||||||
oPropertyValue = Nothing
|
oPropertyValueList = New List(Of Object)
|
||||||
Case Else
|
End Try
|
||||||
oPropertyValue = oPropertyValueList.First()
|
|
||||||
|
|
||||||
' This should hopefully show config errors
|
Try
|
||||||
If TypeOf oPropertyValue Is List(Of Object) Then
|
If IsNothing(oPropertyValueList) Then
|
||||||
_logger.Warn("Property with Description {0} may be configured incorrectly", oPropertyDescription)
|
oPropertyValue = Nothing
|
||||||
|
ElseIf TypeOf oPropertyValueList Is List(Of Object) Then
|
||||||
|
Select Case oPropertyValueList.Count
|
||||||
|
Case 0
|
||||||
oPropertyValue = Nothing
|
oPropertyValue = Nothing
|
||||||
End If
|
Case Else
|
||||||
End Select
|
Dim oList As List(Of Object) = DirectCast(oPropertyValueList, List(Of Object))
|
||||||
End If
|
oPropertyValue = oList.Item(0)
|
||||||
|
|
||||||
|
' This should hopefully show config errors
|
||||||
|
If TypeOf oPropertyValue Is List(Of Object) Then
|
||||||
|
_logger.Warn("Property with Description {0} may be configured incorrectly", oPropertyDescription)
|
||||||
|
oPropertyValue = Nothing
|
||||||
|
End If
|
||||||
|
End Select
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
_logger.Warn("Unknown error occurred while processing property {0}:", oPropertyDescription)
|
||||||
|
_logger.Error(ex)
|
||||||
|
oPropertyValue = Nothing
|
||||||
|
End Try
|
||||||
|
|
||||||
If IsNothing(oPropertyValue) OrElse String.IsNullOrEmpty(oPropertyValue) Then
|
If IsNothing(oPropertyValue) OrElse String.IsNullOrEmpty(oPropertyValue) Then
|
||||||
If Item.Value.IsRequired Then
|
If Item.Value.IsRequired Then
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
Imports System.Collections.Generic
|
Imports System.Collections.Generic
|
||||||
|
Imports System.Linq
|
||||||
Imports System.Reflection
|
Imports System.Reflection
|
||||||
Imports System.Text.RegularExpressions
|
Imports System.Text.RegularExpressions
|
||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
@ -87,6 +88,38 @@ Public Class PropertyValues
|
|||||||
Return New List(Of Object) From {Obj}
|
Return New List(Of Object) From {Obj}
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Public Function GetFinalPropValue(List As List(Of Object)) As List(Of Object)
|
||||||
|
Dim oResult As New List(Of Object)
|
||||||
|
|
||||||
|
For Each Item In List
|
||||||
|
Dim oItemValue = DoGetFinalPropValue(Item)
|
||||||
|
|
||||||
|
If Not IsNothing(oItemValue) Then
|
||||||
|
oResult.Add(oItemValue)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return oResult
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function DoGetFinalPropValue(Value As Object) As String
|
||||||
|
If TypeOf Value Is List(Of Object) Then
|
||||||
|
Dim oList = DirectCast(Value, List(Of Object))
|
||||||
|
Dim oCount = oList.Count
|
||||||
|
|
||||||
|
Select Case oCount
|
||||||
|
Case 0
|
||||||
|
Return Nothing
|
||||||
|
Case Else
|
||||||
|
Return DoGetFinalPropValue(oList.First())
|
||||||
|
End Select
|
||||||
|
|
||||||
|
Return DoGetFinalPropValue(Value)
|
||||||
|
Else
|
||||||
|
Return Value.ToString
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
|
||||||
Private Function GetIndex(Prop As String) As Integer
|
Private Function GetIndex(Prop As String) As Integer
|
||||||
If Regex.IsMatch(Prop, _indexPattern) Then
|
If Regex.IsMatch(Prop, _indexPattern) Then
|
||||||
Dim oMatch = _indexRegex.Match(Prop)
|
Dim oMatch = _indexRegex.Match(Prop)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user