118 lines
4.8 KiB
VB.net
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 |