Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Language Namespace Methods.GlobalIndexer.ImportFile.Steps Public Class PostProcessing Inherits BaseClass Public Const TYPE_VBSPLIT = "VBSPLIT" Public Const TYPE_VBREPLACE = "VBREPLACE" Public Const TYPE_REGEXPRESSION = "REG. EXPRESSION" Private PostprocessingSteps As DataTable Public Sub New(pLogConfig As LogConfig, pPostProcessingSteps As DataTable) MyBase.New(pLogConfig) PostprocessingSteps = pPostProcessingSteps End Sub Public Function ApplyManualPostprocessing(pManualAttributes As List(Of UserAttributeValue)) As List(Of UserAttributeValue) Logger.Debug("Start of Method [ApplyManualPostprocessing]") Dim oAttributes = pManualAttributes For Each oProcessingRow As DataRow In PostprocessingSteps.Rows Dim oIndexId = oProcessingRow.ItemEx(Of Integer)("IDXMAN_ID") Dim oIndex As UserAttributeValue = pManualAttributes. Where(Function(attr) attr.AttributeId = oProcessingRow.ItemEx(Of Integer)("IDXMAN_ID")). FirstOrDefault() Dim oValue = GetPostprocessingValue(oIndex.AttributeValues, oProcessingRow) oAttributes.Add(New UserAttributeValue With { .AttributeId = oIndexId, .AttributeName = oIndex.AttributeName, .AttributeValues = oIndex.AttributeValues, .ControlName = oIndex.ControlName }) Next Return oAttributes End Function Public Function GetPostprocessingValue(pValues As List(Of String), pRow As DataRow) Logger.Debug("Start of Method [GetPostprocessingValue]") Dim oType = pRow.Item("TYPE") Dim oResult As New List(Of String) Logger.Debug("Type of Postprocessing is [{0}]", oType) Select Case oType Case TYPE_VBREPLACE Dim oFindString = pRow.Item("TEXT1") Dim oReplaceString = pRow.Item("TEXT2") Logger.Debug("Replacing [{0}] with [{1}]", oFindString, oReplaceString) For Each oIndexValue In pValues Dim oReplaceResult = oIndexValue.Replace(oFindString, oReplaceString) If oReplaceResult.Equals(oIndexValue) Then Logger.Debug("Replace did not succeed, ReplaceString was not found.") Else Logger.Debug("Replace successful for [{0}].", oIndexValue) End If oResult.Add(oReplaceResult) Next Case TYPE_VBSPLIT Dim oSeparator As String = pRow.Item("TEXT1") Dim oSplitIndex As Integer = 0 Integer.TryParse(pRow.Item("TEXT2"), oSplitIndex) Logger.Debug("Splitting String at Separator [{0}] and Index [{1}]", oSeparator, oSplitIndex) For Each oIndexValue In pValues Dim oSplitted As List(Of String) = oIndexValue.Split(oSeparator).ToList() Logger.Debug("Split succeeded, resulting list has [{0}] items.", oSplitted.Count) If oSplitIndex < oSplitted.Count Then Dim oValue = oSplitted.Item(oSplitIndex) Logger.Debug("Saving value [{0}] from Index [{1}]", oValue, oSplitIndex) oResult.Add(oValue) Else Logger.Debug("SplitIndex(TEXT2) was out of array bounds. Skipping.") End If Next Case Else LogAndThrow($"Postprocessing type [{oType}] is not supported!") End Select Return oResult End Function End Class End Namespace