Jonathan Jenne bcbfba37b2 EDMI: Add 3-tier database access in DatabaseWithFallback, add client config,
EDMI Service: Version 2.4.0.0
EDMI: API: Version 1.4.0.0
2022-01-14 11:49:47 +01:00

118 lines
4.8 KiB
VB.net

Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Language
Imports DigitalData.Services.EDMIService.Methods.IDB
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 List(Of PostProcessingStep)
Public Sub New(pLogConfig As LogConfig, pPostProcessingSteps As List(Of PostProcessingStep))
MyBase.New(pLogConfig)
PostprocessingSteps = pPostProcessingSteps
Logger.Info("Initializing Postprocessing of Manual Indexes")
End Sub
Public Function ApplyManualPostprocessing(pManualAttributes As List(Of UserAttributeValue)) As List(Of UserAttributeValue)
Logger.Debug("Start of Method [ApplyManualPostprocessing]")
Dim oAttributes = pManualAttributes
Try
If PostprocessingSteps Is Nothing Then
Logger.Debug("No Postprocessing steps found. Exiting.")
Return oAttributes
End If
For Each oStep As PostProcessingStep In PostprocessingSteps
Dim oIndexId = oStep.IndexId
Dim oIndex As UserAttributeValue = pManualAttributes.
Where(Function(attr) attr.Id = oStep.IndexId).
FirstOrDefault()
Dim oIndexPosition = pManualAttributes.IndexOf(oIndex)
Logger.Info("Postprocessing Index [{0}]", oIndex.Name)
Dim oValues = GetPostprocessingValue(oIndex.Values, oStep)
Logger.Info("New Value for Index [{0}] is [{1}]", oIndex.Name, String.Join(",", oValues))
' Replace the old AttributeValue with the new one
oAttributes.Item(oIndexPosition) = New UserAttributeValue With {
.Id = oIndexId,
.Name = oIndex.Name,
.Values = oValues,
.ControlName = oIndex.ControlName
}
Next
Return oAttributes
Catch ex As Exception
Logger.Warn("Postprocessing failed. Returning incomplete Attributes.")
Logger.Error(ex)
Return oAttributes
End Try
End Function
Public Function GetPostprocessingValue(pValues As List(Of String), pStep As PostProcessingStep) As List(Of String)
Logger.Debug("Start of Method [GetPostprocessingValue]")
Dim oResult As New List(Of String)
Logger.Debug("Type of Postprocessing is [{0}]", pStep.Type)
Select Case pStep.Type
Case TYPE_VBREPLACE
Dim oFindString = pStep.Text1
Dim oReplaceString = pStep.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 = pStep.Text1
Dim oSplitIndex As Integer = 0
Integer.TryParse(pStep.Text1, 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
Logger.Warn("Postprocessing type [{0}] is not supported!", pStep.Type)
End Select
Return oResult
End Function
End Class
End Namespace