3 Commits

Author SHA1 Message Date
Jonathan Jenne
3e11385907 Merge branch 'master' of http://dd-vmp07-com04:3000/AppStd/Monorepo 2021-12-08 13:09:43 +01:00
Jonathan Jenne
3e5918297c EDMIService: First working version of ImportFile 2021-12-08 13:09:25 +01:00
Jonathan Jenne
d75272a17f Patterns: Completeley rework Patterns2 structure 2021-12-08 12:51:22 +01:00
21 changed files with 340 additions and 352 deletions

View File

@@ -39,7 +39,12 @@ Public Class frmtest
Dim oObjectId As Long = Await My.Application.Service.Client.ImportFileAsync(
txtFile2Import.Text,
txtProfileId.Text,
New List(Of EDMIServiceReference.UserAttributeValue),
New List(Of EDMIServiceReference.UserAttributeValue) From {
New EDMIServiceReference.UserAttributeValue With {
.AttributeName = "Attribut String1",
.AttributeValues = New List(Of String) From {"SchreiberM"}.ToArray
}
},
"WORK",
"DOC",
"DEFAULT"

View File

@@ -10,10 +10,4 @@
''' </summary>
''' <returns></returns>
Property IsComplex As Boolean
''' <summary>
''' Main Replace Function
''' </summary>
''' <returns>The replaced string</returns>
Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String
End Interface

View File

@@ -17,24 +17,23 @@ Namespace Modules
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String Implements IModule.Replace
Public Function Replace(pInput As String, pClipboardContents As String) As String
Dim oResult = pInput
Dim oCounter = 0
Dim oClipboardContents = pReplaceMap.Item(CLIP_VALUE_BOARD)
Try
' LEGACY: Replace Clipboard Contents
oResult = oResult.Replace(CLIPBOARD_VALUE_DE.ToLower, oClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_DE.ToUpper, oClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_DE, oClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_DE.ToLower, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_DE.ToUpper, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_DE, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN.ToLower, oClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN.ToUpper, oClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN, oClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN.ToLower, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN.ToUpper, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN, pClipboardContents)
' Replace Clipboard Contents
While ContainsPatternAndValue(oResult, PatternIdentifier, CLIP_VALUE_BOARD)
oResult = ReplacePattern(oResult, PatternIdentifier, oClipboardContents)
oResult = ReplacePattern(oResult, PatternIdentifier, pClipboardContents)
IncrementCounterOrThrow(oCounter)
End While

View File

@@ -19,15 +19,14 @@ Namespace Modules
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String Implements IModule.Replace
Public Function Replace(pInput As String, pPanel As Panel) As String
Dim oResult = pInput
Dim oCounter = 0
Dim oPanel As Panel = pReplaceMap.Item(CTRL_VALUE_PANEL)
While ContainsPattern(oResult, PatternIdentifier)
Try
Dim oControlName As String = GetNextPattern(oResult, PatternIdentifier).Value
Dim oControl As Control = oPanel.Controls.Find(oControlName, False).FirstOrDefault()
Dim oControl As Control = pPanel.Controls.Find(oControlName, False).FirstOrDefault()
If oControl IsNot Nothing Then
Dim oReplaceValue As String

View File

@@ -20,42 +20,41 @@ Namespace Modules
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String Implements IModule.Replace
Public Function Replace(pInput As String, pFileInfo As FileInfo) As String
Dim oResult = pInput
Dim oCounter = 0
Dim oFileInfo As FileInfo = pReplaceMap.Item(FILE_VALUE_FILEINFO)
' Replace Filename without extension
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_FILENAME)
Dim oFilenameWithoutExtension = Path.GetFileNameWithoutExtension(oFileInfo.Name)
Dim oFilenameWithoutExtension = Path.GetFileNameWithoutExtension(pFileInfo.Name)
oResult = ReplacePattern(oResult, PatternIdentifier, oFilenameWithoutExtension)
IncrementCounterOrThrow(oCounter)
End While
' Replace Filename with extension
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_FILENAME_EXT)
Dim oFilename As String = oFileInfo.Name
Dim oFilename As String = pFileInfo.Name
oResult = ReplacePattern(oResult, PatternIdentifier, oFilename)
IncrementCounterOrThrow(oCounter)
End While
' Replace Extension
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_FILENAME_EXT)
Dim oExtension As String = oFileInfo.Extension.Substring(1)
Dim oExtension As String = pFileInfo.Extension.Substring(1)
oResult = ReplacePattern(oResult, PatternIdentifier, oExtension)
IncrementCounterOrThrow(oCounter)
End While
' Replace creation date
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_DATE_CREATED)
Dim oDateCreated = oFileInfo.CreationTime.ToString("yyyy-MM-dd")
Dim oDateCreated = pFileInfo.CreationTime.ToString("yyyy-MM-dd")
oResult = ReplacePattern(oResult, PatternIdentifier, oDateCreated)
IncrementCounterOrThrow(oCounter)
End While
' Replace last modification date
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_DATE_CREATED)
Dim oDateModified = oFileInfo.LastWriteTime.ToString("yyyy-MM-dd")
Dim oDateModified = pFileInfo.LastWriteTime.ToString("yyyy-MM-dd")
oResult = ReplacePattern(oResult, PatternIdentifier, oDateModified)
IncrementCounterOrThrow(oCounter)
End While

View File

@@ -1,26 +1,29 @@
Imports DigitalData.Modules.Logging
Namespace Modules
Namespace Modules.Globix
''' <summary>
''' Patterns for Generating a Filename in Global Indexer
''' </summary>
Public Class Globix
Public Class GlobixAutomatic
Inherits BaseModule
Implements IModule
Public Const GBX_VALUE_INDICIES = "GLOBIX_INDICIES"
Public Property PatternIdentifier As String = "GBX" Implements IModule.PatternIdentifier
Public Property PatternIdentifier As String = "ATTR_A" Implements IModule.PatternIdentifier
Public Property IsComplex As Boolean = True Implements IModule.IsComplex
Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String Implements IModule.Replace
Public Function Replace(pInput As String, pIndexes As Dictionary(Of String, List(Of String))) As String
Dim oResult = pInput
Dim oCounter = 0
Dim pIndexes As Dictionary(Of String, List(Of String)) = pReplaceMap.Item(GBX_VALUE_INDICIES)
If pIndexes Is Nothing Then
Throw New ArgumentNullException("pIndexes")
End If
Logger.Debug("Replacing Automatic Indexes. [{0}] Indexes loaded.", pIndexes?.Count)
While ContainsPattern(oResult, PatternIdentifier)
Try

View File

@@ -0,0 +1,59 @@
Imports DigitalData.Modules.Logging
Namespace Modules.Globix
''' <summary>
''' Patterns for Generating a Filename in Global Indexer
''' </summary>
Public Class GlobixManual
Inherits BaseModule
Implements IModule
Public Property PatternIdentifier As String = "ATTR_M" Implements IModule.PatternIdentifier
Public Property IsComplex As Boolean = True Implements IModule.IsComplex
Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pIndexes As Dictionary(Of String, List(Of String))) As String
Dim oResult = pInput
Dim oCounter = 0
If pIndexes Is Nothing Then
Throw New ArgumentNullException("pIndexes")
End If
Logger.Debug("Replacing Manual Indexes. [{0}] Indexes loaded.", pIndexes?.Count)
While ContainsPattern(oResult, PatternIdentifier)
Try
Dim oIndexName As String = GetNextPattern(oResult, PatternIdentifier).Value
If pIndexes.ContainsKey(oIndexName) = False Then
Logger.Warn("Value for Index [{0}] does not exist and will not be used for replacing. Exiting.", oIndexName)
Return oResult
End If
' TODO: If Index contains multiple values, only the first value will be used as value
Dim oIndexValues As List(Of String) = pIndexes.Item(oIndexName)
Dim oFirstValue As String = oIndexValues.FirstOrDefault()
If oFirstValue Is Nothing Then
Logger.Warn("Value for Index [{0}] is empty and will not be used for replacing. Exiting.")
Return oResult
End If
oResult = ReplacePattern(oResult, PatternIdentifier, oFirstValue)
Catch ex As Exception
Logger.Error(ex)
Return oResult
Finally
IncrementCounterOrThrow(oCounter)
End Try
End While
Return oResult
End Function
End Class
End Namespace

View File

@@ -4,7 +4,7 @@ Imports DigitalData.Modules.Logging
Namespace Modules
''' <summary>
''' Patterns for Windream Indicies
''' Patterns for IDB Attributes
''' </summary>
Public Class IDB
Inherits BaseModule
@@ -12,14 +12,14 @@ Namespace Modules
Public Const IDB_OBJECT_ID = "IDB_OBJECT_ID"
Public Property PatternIdentifier As String = "IDB" Implements IModule.PatternIdentifier
Public Property PatternIdentifier As String = "ATTR" Implements IModule.PatternIdentifier
Public Property IsComplex As Boolean = True Implements IModule.IsComplex
Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String Implements IModule.Replace
Public Function Replace(pInput As String) As String
'TODO: Implement, depends on IDB Data, which is not in monorepo yet
Return pInput

View File

@@ -23,7 +23,7 @@ Namespace Modules
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String Implements IModule.Replace
Public Function Replace(pInput As String) As String
Dim oResult = pInput
Dim oCounter = 0
Dim oNow As Date = Now

View File

@@ -1,4 +1,5 @@
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow
Namespace Modules
Public Class User
@@ -20,37 +21,37 @@ Namespace Modules
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String Implements IModule.Replace
Public Function Replace(pInput As String, pUser As State.UserState) As String
Dim oResult = pInput
Dim oCounter = 0
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_PRENAME)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_PRENAME))
oResult = ReplacePattern(oResult, PatternIdentifier, pUser.GivenName)
IncrementCounterOrThrow(oCounter)
End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_SURNAME)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_SURNAME))
oResult = ReplacePattern(oResult, PatternIdentifier, pUser.Surname)
IncrementCounterOrThrow(oCounter)
End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_EMAIL)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_EMAIL))
oResult = ReplacePattern(oResult, PatternIdentifier, pUser.Email)
IncrementCounterOrThrow(oCounter)
End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_SHORTNAME)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_SHORTNAME))
oResult = ReplacePattern(oResult, PatternIdentifier, pUser.ShortName)
IncrementCounterOrThrow(oCounter)
End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_LANGUAGE)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_LANGUAGE))
oResult = ReplacePattern(oResult, PatternIdentifier, pUser.Language)
IncrementCounterOrThrow(oCounter)
End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_USER_ID)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_USER_ID))
oResult = ReplacePattern(oResult, PatternIdentifier, pUser.UserId)
IncrementCounterOrThrow(oCounter)
End While

View File

@@ -19,10 +19,9 @@ Namespace Modules
MyBase.New(pLogConfig)
End Sub
Public Function Replace(pInput As String, pReplaceMap As Dictionary(Of String, Object)) As String Implements IModule.Replace
Public Function Replace(pInput As String, pWMObject As WINDREAMLib.WMObject) As String
Dim oResult = pInput
Dim oCounter = 0
Dim pWMObject As WINDREAMLib.WMObject = pReplaceMap.Item(WM_VALUE_DOCUMENT)
While ContainsPattern(oResult, PatternIdentifier)
Try

View File

@@ -82,8 +82,9 @@
<ItemGroup>
<Compile Include="Constants.vb" />
<Compile Include="Modules\FileInformation.vb" />
<Compile Include="Modules\Globix\GlobixAutomatic.vb" />
<Compile Include="Modules\IDB.vb" />
<Compile Include="Modules\Globix.vb" />
<Compile Include="Modules\Globix\GlobixManual.vb" />
<Compile Include="Modules\Windream.vb" />
<Compile Include="Modules\User.vb" />
<Compile Include="IModule.vb" />

View File

@@ -19,42 +19,9 @@ Imports WINDREAMLib
''' {#WMI#String 39}
''' </summary>
Public Class Patterns2
''' <summary>
''' Complex patterns that rely on Windream
''' </summary>
Public Const PATTERN_WMI = "WMI"
''' <summary>
''' Complex patterns that rely on IDB Attribute values
''' </summary>
Public Const PATTERN_IDBA = "IDBA"
''' <summary>
''' Complex patterns that rely on Control Values
''' </summary>
Public Const PATTERN_CTRL = "CTRL"
''' <summary>
''' Simple patterns that rely on Data from the TBDD_USER table
''' </summary>
Public Const PATTERN_USER = "USER"
Public Const USER_VALUE_PRENAME = "PRENAME"
Public Const USER_VALUE_SURNAME = "SURNAME"
Public Const USER_VALUE_EMAIL = "EMAIL"
Public Const USER_VALUE_SHORTNAME = "SHORTNAME"
Public Const USER_VALUE_LANGUAGE = "LANGUAGE"
Public Const USER_VALUE_USER_ID = "USER_ID"
Public Const VALUE_PROFILE_ID = "PROFILE_ID"
Public Const VALUE_PROFILE_TITLE = "PROFILE_TITLE"
Private ReadOnly LogConfig As LogConfig
Private ReadOnly Logger As Logger
Private ReadOnly Base As Modules.BaseModule
Private ReadOnly ControlPanel As Panel
Private ReadOnly IDBActive As Boolean
Private ReadOnly Modules As New List(Of IModule)
Public Sub New(pLogConfig As LogConfig)
@@ -67,192 +34,97 @@ Public Class Patterns2
New Modules.Clipboard(LogConfig),
New Modules.Controls(LogConfig),
New Modules.User(LogConfig),
New Modules.FileInformation(LogConfig)
New Modules.FileInformation(LogConfig),
New Modules.IDB(LogConfig),
New Modules.Globix.GlobixAutomatic(LogConfig),
New Modules.Globix.GlobixManual(LogConfig)
})
End Sub
Public Sub New(pLogConfig As LogConfig, pControlPanel As Panel, pIDBActive As Boolean)
MyClass.New(pLogConfig)
ControlPanel = pControlPanel
IDBActive = pIDBActive
End Sub
Public Function ReplaceAllValues(pInput As String, pPanel As Panel, pUser As State.UserState, pFIleinfo As FileInfo) As String
Dim oResult = pInput
For Each oModule In Modules
Try
Dim oArgs = GetReplaceMapForModule(oModule, pPanel:=pPanel, pUser:=pUser, pFileInfo:=pFIleinfo)
oResult = oModule.Replace(oResult, oArgs)
Catch ex As Exception
Logger.Warn("Placeholders for String [{0}] could not be replaced completely in Module [{1}]. Skipping.", pInput, oModule.GetType.Name)
Logger.Error(ex)
End Try
Next
Return oResult
End Function
Public Function ReplaceUserValues(pInput As String, pUser As State.UserState) As String
Logger.Debug("Replacing User Values")
Dim oResult = pInput
Dim oModule = GetModule(Of Modules.User)()
Dim oArgs = GetReplaceMapForModule(oModule, pUser:=pUser)
oResult = DoReplaceForModule(oResult, oModule, oArgs)
Return oResult
Try
Logger.Debug("Replacing User Values")
Dim oModule = New Modules.User(LogConfig)
Return oModule.Replace(pInput, pUser)
Catch ex As Exception
Logger.Warn("Error occurred while replacing User Values")
Logger.Error(ex)
Return pInput
End Try
End Function
Public Function ReplaceFileValues(pInput As String, pFileInfo As FileInfo) As String
Logger.Debug("Replacing File Values")
Dim oResult = pInput
Dim oModule = GetModule(Of Modules.FileInformation)()
Dim oArgs = GetReplaceMapForModule(oModule, pFileInfo:=pFileInfo)
oResult = DoReplaceForModule(oResult, oModule, oArgs)
Return oResult
Try
Logger.Debug("Replacing File Values")
Dim oModule = New Modules.FileInformation(LogConfig)
Return oModule.Replace(pInput, pFileInfo)
Catch ex As Exception
Logger.Warn("Error occurred while replacing File Values")
Logger.Error(ex)
Return pInput
End Try
End Function
Public Function ReplaceControlValues(pInput As String, pPanel As Panel) As String
Logger.Debug("Replacing Control Values")
Dim oResult = pInput
Dim oModule = GetModule(Of Modules.Controls)()
Dim oArgs = GetReplaceMapForModule(oModule, pPanel:=pPanel)
oResult = DoReplaceForModule(oResult, oModule, oArgs)
Return oResult
Try
Logger.Debug("Replacing Control Values")
Dim oModule = New Modules.Controls(LogConfig)
Return oModule.Replace(pInput, pPanel)
Catch ex As Exception
Logger.Warn("Error occurred while replacing Control Values")
Logger.Error(ex)
Return pInput
End Try
End Function
Public Function ReplaceWindreamValues(pInput As String, pWMObject As WMObject) As String
Logger.Debug("Replacing Windream Values")
Dim oResult = pInput
Dim oModule = GetModule(Of Modules.Windream)()
Dim oArgs = GetReplaceMapForModule(oModule, pWMObject:=pWMObject)
oResult = DoReplaceForModule(oResult, oModule, oArgs)
Return oResult
Try
Logger.Debug("Replacing Windream Values")
Dim oModule = New Modules.Windream(LogConfig)
Return oModule.Replace(pInput, pWMObject)
Catch ex As Exception
Logger.Warn("Error occurred while replacing Windream Values")
Logger.Error(ex)
Return pInput
End Try
End Function
Public Function ReplaceInternalValues(pInput As String) As String
Public Function ReplaceInternalValues(pInput As String, Optional pClipboardContents As String = "") As String
Logger.Debug("Replacing Internal Values")
Dim oResult = pInput
Dim oInternalModule = GetModule(Of Modules.Internal)()
Dim oInternalArgs = GetReplaceMapForModule(oInternalModule)
oResult = DoReplaceForModule(oResult, oInternalModule, oInternalArgs)
Try
Dim oInternal = New Modules.Internal(LogConfig)
Dim oClipboard = New Modules.Clipboard(LogConfig)
Dim oClipboardModule = GetModule(Of Modules.Clipboard)()
Dim oClipboardArgs = GetReplaceMapForModule(oClipboardModule)
oResult = DoReplaceForModule(oResult, oClipboardModule, oClipboardArgs)
oResult = oInternal.Replace(oResult)
oResult = oClipboard.Replace(oResult, pClipboardContents)
Return oResult
Return oResult
Catch ex As Exception
Logger.Warn("Error occurred while replacing Internal Values")
Logger.Error(ex)
Return oResult
End Try
End Function
Public Function ReplaceGlobixValues(pInput As String, pGlobixIndexes As Dictionary(Of String, List(Of String))) As String
Public Function ReplaceGlobixValues(pInput As String, pAutomaticIndexes As Dictionary(Of String, List(Of String)), pManualIndexes As Dictionary(Of String, List(Of String))) As String
Logger.Debug("Replacing Globix Values")
Dim oResult = pInput
Dim oGlobixModule = GetModule(Of Modules.Globix)()
Dim oGlobixArgs = GetReplaceMapForModule(oGlobixModule, pGlobixIndexes:=pGlobixIndexes)
oResult = DoReplaceForModule(oResult, oGlobixModule, oGlobixArgs)
Return oResult
End Function
Private Function DoReplaceForModule(pInput As String, pModule As IModule, pArgs As Dictionary(Of String, Object)) As String
Try
If pModule IsNot Nothing AndAlso pModule?.GetType?.Name IsNot Nothing Then
Logger.Debug("Calling Replace for Module [{0}]", pModule.GetType.Name)
End If
Dim oAutomatic = New Modules.Globix.GlobixAutomatic(LogConfig)
Dim oManual = New Modules.Globix.GlobixManual(LogConfig)
Logger.Debug("Calling Replace for Input String [{0}]", pInput)
oResult = oAutomatic.Replace(oResult, pAutomaticIndexes)
oResult = oManual.Replace(oResult, pManualIndexes)
pInput = pModule.Replace(pInput, pArgs)
Return oResult
Catch ex As Exception
Logger.Warn("Placeholders for String [{0}] could not be replaced completely in Module [{1}]. Skipping.", pInput, pModule.GetType.Name)
Logger.Warn("Error occurred while replacing Globix Values")
Logger.Error(ex)
Return oResult
End Try
Return pInput
End Function
Private Function GetModule(Of ModuleT)() As IModule
Return Modules.
Where(Function(m) TypeOf m Is ModuleT).
SingleOrDefault()
End Function
Private Function GetReplaceMapForModule(pModule As IModule,
Optional pPanel As Panel = Nothing,
Optional pUser As State.UserState = Nothing,
Optional pWMObject As WMObject = Nothing,
Optional pGlobixIndexes As Dictionary(Of String, List(Of String)) = Nothing,
Optional pFileInfo As FileInfo = Nothing
) As Dictionary(Of String, Object)
Dim oArgs As New Dictionary(Of String, Object)
If TypeOf pModule Is Modules.Clipboard Then
Logger.Debug("Adding Arguments for Clipboard Module")
Try
oArgs.Add(Patterns.Modules.Clipboard.CLIP_VALUE_BOARD, My.Computer.Clipboard.GetText())
Catch ex As Exception
Logger.Error(ex)
End Try
ElseIf TypeOf pModule Is Modules.FileInformation Then
Logger.Debug("Adding Arguments for File Module")
Try
oArgs.Add(Patterns.Modules.FileInformation.FILE_VALUE_FILEINFO, pFileInfo)
Catch ex As Exception
Logger.Error(ex)
End Try
ElseIf TypeOf pModule Is Modules.User Then
Logger.Debug("Adding Arguments for User Module")
Try
oArgs.Add(Patterns.Modules.User.USER_VALUE_EMAIL, pUser.Email)
oArgs.Add(Patterns.Modules.User.USER_VALUE_LANGUAGE, pUser.Language)
oArgs.Add(Patterns.Modules.User.USER_VALUE_PRENAME, pUser.GivenName)
oArgs.Add(Patterns.Modules.User.USER_VALUE_SHORTNAME, pUser.ShortName)
oArgs.Add(Patterns.Modules.User.USER_VALUE_SURNAME, pUser.Surname)
oArgs.Add(Patterns.Modules.User.USER_VALUE_USER_ID, pUser.UserId)
oArgs.Add(Patterns.Modules.User.USER_VALUE_USER_NAME, pUser.UserName)
Catch ex As Exception
Logger.Error(ex)
End Try
ElseIf TypeOf pModule Is Modules.Controls Then
Logger.Debug("Adding Arguments for Controls Module")
Try
oArgs.Add(Patterns.Modules.Controls.CTRL_VALUE_PANEL, pPanel)
Catch ex As Exception
Logger.Error(ex)
End Try
ElseIf TypeOf pModule Is Modules.Windream Then
Logger.Debug("Adding Arguments for Windream Module")
Try
oArgs.Add(Patterns.Modules.Windream.WM_VALUE_DOCUMENT, pWMObject)
Catch ex As Exception
Logger.Error(ex)
End Try
ElseIf TypeOf pModule Is Modules.Globix Then
Logger.Debug("Adding Arguments for Globix Module")
Try
oArgs.Add(Patterns.Modules.Globix.GBX_VALUE_INDICIES, pGlobixIndexes)
Catch ex As Exception
Logger.Error(ex)
End Try
End If
Return oArgs
End Function
#Region "Helper Functions"

View File

@@ -5,8 +5,9 @@ Public Class BaseClass
Friend Logger As Logger
Public Sub New(pLogConfig As LogConfig)
Dim oClassName = [GetType]().Name
LogConfig = pLogConfig
Logger = pLogConfig.GetLogger()
Logger = pLogConfig.GetLogger(oClassName)
End Sub
Public Sub LogAndThrow(pMessage As String)

View File

@@ -39,10 +39,10 @@ Public Class GlobalState
.DataSource = oConnection.Server,
.InitialCatalog = oConnection.Database,
.UserID = oConnection.Username,
.Password = MSSQLServer.DecryptConnectionString(oConnection.Password)
.Password = oConnection.Password
}
Return oBuilder.ToString
Return MSSQLServer.DecryptConnectionString(oBuilder.ToString)
End Function

View File

@@ -10,7 +10,8 @@ Namespace Methods.GlobalIndexer.ImportFile
Private ReadOnly Patterns As Patterns2
Private ReadOnly GetDatatable As GetDatatableFromCacheMethod
Private ReadOnly Connection As SqlClient.SqlConnection
Private ReadOnly Transaction As SqlClient.SqlTransaction
Private Profile As DataRow
Private Const VIEW_PROFILE = "VWGI_DOCTYPE_IDB"
@@ -23,6 +24,8 @@ Namespace Methods.GlobalIndexer.ImportFile
Patterns = New Patterns2(pLogConfig)
GetDatatable = New GetDatatableFromCacheMethod(LogConfig, Database, GlobalState)
Connection = Database.GetConnection()
Transaction = Connection.BeginTransaction()
End Sub
''' <summary>
@@ -67,12 +70,52 @@ Namespace Methods.GlobalIndexer.ImportFile
If oResponse.OK Then
Logger.Info("Import of file [{0}] under ObjectId [{1}] successful!", pData.File.FileName, oResponse.ObjectId)
Return New ImportFileResponse(oResponse.ObjectId)
Else
Throw New ApplicationException(oResponse.ErrorMessage)
End If
Logger.Info("Writing Attributes for ObjectId [{0}]", oResponse.ObjectId)
Dim oAttributes As New Dictionary(Of String, Object)
For Each oFinalAttribute In oFinalAttributes
If oFinalAttribute.AttributeValues Is Nothing OrElse oFinalAttribute.AttributeValues.Count = 0 Then
Logger.Warn("Values for Attribute [{0}] are empty. Skipping.", oFinalAttribute.AttributeName)
Continue For
End If
oAttributes.Add(oFinalAttribute.AttributeName, oFinalAttribute.AttributeValues.First)
Next
For Each oAttribute As KeyValuePair(Of String, Object) In oAttributes
Try
' Dont write empty attributes
If oAttribute.Value Is Nothing Then
Continue For
End If
Dim oSuccess = Helpers.SetAttributeValue(Connection, Transaction, oResponse.ObjectId, oAttribute.Key, oAttribute.Value, pData.User.Language, pData.User.UserName)
If oSuccess Then
Logger.Info("Attribute [{0}] written with value [{1}]", oAttribute.Key, oAttribute.Value)
Else
Logger.Warn("Attribute value could not be written")
End If
Catch ex As Exception
LogAndThrow(ex, $"Attribute [{oAttribute.Key}] could not be written!")
End Try
Next
' Finally, commit the transaction
Transaction?.Commit()
Return New ImportFileResponse(oResponse.ObjectId)
Catch ex As Exception
Logger.Warn("Error occurred while importing file!")
Logger.Error(ex)
Logger.Info("Rolling back transaction.")
Transaction?.Rollback()
Return New ImportFileResponse(ex)
End Try
End Function
@@ -142,7 +185,7 @@ Namespace Methods.GlobalIndexer.ImportFile
oIndexes.Add(oAutomaticIndex)
Next
Logger.Info("[{0}] automatic indexes loaded.", oIndexes)
Logger.Info("Automatic indexes loaded: [{0}]", oIndexes.Count)
Return oIndexes
Catch ex As Exception
@@ -186,6 +229,8 @@ Namespace Methods.GlobalIndexer.ImportFile
oIndexes.Add(oManualIndex)
Next
Logger.Info("Manual indexes loaded: [{0}]", oIndexes.Count)
Return oIndexes
Catch ex As Exception

View File

@@ -33,24 +33,29 @@ Namespace Methods.GlobalIndexer.ImportFile.Steps
End If
Logger.Info("Processing [{0}] automatic indexes", AutomaticIndexes.Count)
Dim oAttributes As List(Of UserAttributeValue) = pUserAttributes
Dim oUserAttributes As List(Of UserAttributeValue) = pUserAttributes
Dim oAutoAttributes As New List(Of UserAttributeValue)
For Each oAutomaticIndex In AutomaticIndexes
' We add oAttributes from the previous run into the current run so it is in theory possible to reference
' automatic attributes which have been set just before.
Dim oAttribute = ApplyAutomaticIndex(oAutomaticIndex, pFileInfo, pUserState, oAttributes)
Dim oAttribute = ApplyAutomaticIndex(oAutomaticIndex, pFileInfo, pUserState, oUserAttributes, oAutoAttributes)
If oAttribute IsNot Nothing Then
Logger.Info("Adding Attribute [{0}]", oAttribute)
oAttributes.Add(oAttribute)
Logger.Debug("Adding Attribute [{0}]", oAttribute)
oAutoAttributes.Add(oAttribute)
End If
Next
Return oAttributes
oUserAttributes.AddRange(oAutoAttributes)
Return oUserAttributes
End Function
Private Function ApplyAutomaticIndex(pAutomaticIndex As AutomaticIndex, pFileInfo As FileInfo, pUserState As UserState, pAttributes As List(Of UserAttributeValue)) As UserAttributeValue
Private Function ApplyAutomaticIndex(pAutomaticIndex As AutomaticIndex,
pFileInfo As FileInfo,
pUserState As UserState,
pAttributes As List(Of UserAttributeValue),
pAutoAttributes As List(Of UserAttributeValue)) As UserAttributeValue
Try
Dim oAttributeDict = pAttributes.ToDictionary(
Function(attr) attr.AttributeName,
@@ -77,6 +82,8 @@ Namespace Methods.GlobalIndexer.ImportFile.Steps
Dim oConnectionString As String = GlobalState.GetConnectionString(pAutomaticIndex.SQLConnectionId)
Dim oFinalSQLCommand = pAutomaticIndex.SQLCommand
' TODO: Dont show the unmasked conn string
Logger.Debug("SQL Connection String is: [{0}]", oConnectionString)
Logger.Debug("SQL Command is: [{0}]", oFinalSQLCommand)
oFinalSQLCommand = GetPlaceholderValue(oFinalSQLCommand, pFileInfo, pUserState, oAttributeDict)
@@ -109,11 +116,12 @@ Namespace Methods.GlobalIndexer.ImportFile.Steps
Private Function GetPlaceholderValue(pValue As String, pFileInfo As FileInfo, pUserState As UserState, pAttributes As Dictionary(Of String, List(Of String))) As String
Dim oResult As String = pValue
oResult = Patterns.ReplaceInternalValues(oResult)
oResult = Patterns.ReplaceFileValues(oResult, pFileInfo)
oResult = Patterns.ReplaceUserValues(oResult, pUserState)
oResult = Patterns.ReplaceGlobixValues(oResult, pAttributes)
' TODO: Get the automatic indexes in here too
oResult = Patterns.ReplaceGlobixValues(oResult, New Dictionary(Of String, List(Of String)), pAttributes)
Return oResult
End Function

View File

@@ -127,13 +127,13 @@ Public Class NewFileMethod
'TODO: File dates in try catch
Dim oDefaultAttributes As New Dictionary(Of String, Object) From {
Dim oSystemAttributes As New Dictionary(Of String, Object) From {
{"OriginFileName", pData.File.FileName},
{"OriginCreationDatetime", pData.File.FileCreatedAt},
{"OriginChangedDatetime", pData.File.FileChangedAt}
}
For Each oAttribute As KeyValuePair(Of String, Object) In oDefaultAttributes
For Each oAttribute As KeyValuePair(Of String, Object) In oSystemAttributes
Try
' Dont write empty attributes
If oAttribute.Value Is Nothing Then
@@ -142,9 +142,9 @@ Public Class NewFileMethod
Dim oSuccess = Helpers.SetAttributeValue(Connection, Transaction, oObjectId, oAttribute.Key, oAttribute.Value, pData.User.Language, pData.User.UserName)
If oSuccess Then
Logger.Debug("Default Attribute [{0}] written with value [{1}]", oAttribute.Key, oAttribute.Value)
Logger.Debug("System Attribute [{0}] written with value [{1}]", oAttribute.Key, oAttribute.Value)
Else
Logger.Warn("Default attribute value could not be written")
Logger.Warn("System attribute value could not be written")
End If
Catch ex As Exception
LogAndThrow(ex, $"System attribute [{oAttribute.Key}] could not be written!")
@@ -158,7 +158,7 @@ Public Class NewFileMethod
Return New NewFile.NewFileResponse(oObjectId)
Catch ex As Exception
Logger.Warn("Error occurred while importing file!")
Logger.Warn("Error occurred while creating file!")
Logger.Error(ex)
Logger.Info("Cleaning up files.")

View File

@@ -18,7 +18,7 @@ Public Class DatatableJob
Dim oLogConfig As LogConfig = oJobData.Item("LogConfig")
Dim oCronJobId As Integer = oJobData.Item("CronJobId")
Dim oCronJobTitle As String = oJobData.Item("CronJobTitle")
Dim oLogger As Logger = oLogConfig.GetLoggerFor("Scheduler")
Dim oLogger As Logger = oLogConfig.GetLogger()
Dim oResult As New JobResult()

View File

@@ -21,7 +21,7 @@ Public Class JobListener
MyBase.New()
_LogConfig = LogConfig
_Logger = LogConfig.GetLoggerFor("Scheduler")
_Logger = LogConfig.GetLogger()
_MSSQL = MSSQL
Dataset = ResultDataSet
End Sub

View File

@@ -10,22 +10,21 @@ Imports System.ServiceModel.Channels
Public Class WindowsService
Inherits ServiceBase
Private _ServiceHost As ServiceHost(Of EDMIService)
Private _LogConfig As LogConfig
Private _LogConfigScheduler As LogConfig
Private _Logger As Logger
Private ServiceHost As ServiceHost(Of EDMIService)
Private LogConfig As LogConfig
Private LogConfigScheduler As LogConfig
Private Logger As Logger
Private _Firebird As Firebird
Private _MSSQL_ECM As MSSQLServer
Private _MSSQL_IDB As MSSQLServer
Private Firebird As Firebird
Private MSSQL_ECM As MSSQLServer
Private MSSQL_IDB As MSSQLServer
Private _ConfigManager As ConfigManager(Of Config)
Private _Config As Config
Private _Path As EDMI.File.Path
Private _Archive As EDMI.File.Archive
Private _Filesystem As Filesystem.File
Private _Global As GlobalState
Private _Scheduler As Scheduler
Private ConfigManager As ConfigManager(Of Config)
Private Config As Config
Private Archive As EDMI.File.Archive
Private Filesystem As Filesystem.File
Private GlobalState As GlobalState
Private Scheduler As Scheduler
Public Sub New()
ServiceName = SERVICE_NAME
@@ -39,123 +38,127 @@ Public Class WindowsService
Try
Dim oServicePath As String = AppDomain.CurrentDomain.BaseDirectory
_LogConfig = New LogConfig(LogConfig.PathType.CustomPath, IO.Path.Combine(oServicePath, "Log"), FileKeepRangeInDays:=3)
_LogConfigScheduler = New LogConfig(LogConfig.PathType.CustomPath, IO.Path.Combine(oServicePath, "Log"), Suffix:="Scheduler", FileKeepRangeInDays:=3)
_Logger = _LogConfig.GetLogger()
LogConfig = New LogConfig(LogConfig.PathType.CustomPath, IO.Path.Combine(oServicePath, "Log"), FileKeepRangeInDays:=3)
LogConfigScheduler = New LogConfig(LogConfig.PathType.CustomPath, IO.Path.Combine(oServicePath, "Log"), Suffix:="Scheduler", FileKeepRangeInDays:=3)
Logger = LogConfig.GetLogger()
_Logger.Info("Service {0} is starting...", SERVICE_DISPLAY_NAME)
_Logger.Info("ServiceDirectory: {0}", oServicePath)
Logger.Info("Service {0} is starting...", SERVICE_DISPLAY_NAME)
Logger.Info("ServiceDirectory: {0}", oServicePath)
_Logger.Info("Loading Config")
_ConfigManager = New ConfigManager(Of Config)(_LogConfig, oServicePath)
_Config = _ConfigManager.Config
_LogConfig.Debug = _ConfigManager.Config.Debug
Logger.Info("Loading Config")
ConfigManager = New ConfigManager(Of Config)(LogConfig, oServicePath)
Config = ConfigManager.Config
LogConfig.Debug = ConfigManager.Config.Debug
Dim oTimer As New Timers.Timer(60000)
AddHandler oTimer.Elapsed, Sub()
_Logger.Debug("Reloading config..")
_ConfigManager.Reload()
_Config = _ConfigManager.Config
_LogConfig.Debug = _ConfigManager.Config.Debug
'UpdateTraceLogging()
End Sub
AddHandler oTimer.Elapsed, AddressOf ReloadTimer_Tick
oTimer.Start()
_Logger.Debug("Connecting to Databases")
Logger.Debug("Connecting to Databases")
_Firebird = StartFirebird()
_MSSQL_ECM = StartMSSQL_ECM()
_MSSQL_IDB = StartMSSQL_IDB()
Firebird = StartFirebird()
MSSQL_ECM = GetMSSQL_ECM(LogConfig)
MSSQL_IDB = GetMSSQL_IDB(LogConfig)
_Logger.Debug("Initializing EDMI Functions")
Logger.Debug("Initializing EDMI Functions")
_Archive = New EDMI.File.Archive(_LogConfig)
_Filesystem = New Filesystem.File(_LogConfig)
_Global = New GlobalState(_LogConfig, _MSSQL_IDB, _MSSQL_ECM)
_Scheduler = New Scheduler(_LogConfigScheduler, _MSSQL_ECM, _Global.TableStore)
Archive = New EDMI.File.Archive(LogConfig)
Filesystem = New Filesystem.File(LogConfig)
GlobalState = New GlobalState(LogConfig, MSSQL_IDB, MSSQL_ECM)
_Logger.Debug("Loading Global Data")
_Global.LoadObjectStores()
_Global.LoadConnections()
Dim oMSSQLServer = GetMSSQL_ECM(LogConfigScheduler)
Scheduler = New Scheduler(LogConfigScheduler, oMSSQLServer, GlobalState.TableStore)
_Logger.Debug("Starting Scheduler")
_Scheduler.Start()
Logger.Debug("Loading Global Data")
GlobalState.LoadObjectStores()
GlobalState.LoadConnections()
_Logger.Debug("Preparing WCF ServiceHost")
EDMIService.MSSQL_ECM = _MSSQL_ECM
EDMIService.MSSQL_IDB = _MSSQL_IDB
EDMIService.Firebird = _Firebird
EDMIService.LogConfig = _LogConfig
EDMIService.AppConfig = _Config
EDMIService.EDMIArchive = _Archive
EDMIService.Filesystem = _Filesystem
EDMIService.GlobalState = _Global
EDMIService.Scheduler = _Scheduler
Logger.Debug("Starting Scheduler")
Scheduler.Start()
_Logger.Debug("Starting WCF ServiceHost")
Logger.Debug("Preparing WCF ServiceHost")
EDMIService.MSSQL_ECM = MSSQL_ECM
EDMIService.MSSQL_IDB = MSSQL_IDB
EDMIService.Firebird = Firebird
EDMIService.LogConfig = LogConfig
EDMIService.AppConfig = Config
EDMIService.EDMIArchive = Archive
EDMIService.Filesystem = Filesystem
EDMIService.GlobalState = GlobalState
EDMIService.Scheduler = Scheduler
Logger.Debug("Starting WCF ServiceHost")
Dim oBaseAddresses() As Uri = {New Uri(SERVICE_BASE_ADDRESS)}
_ServiceHost = New ServiceHost(Of EDMIService)(oBaseAddresses)
_ServiceHost.EnableMetadataExchange(False)
ServiceHost = New ServiceHost(Of EDMIService)(oBaseAddresses)
ServiceHost.EnableMetadataExchange(False)
_Logger.Debug("Listing Endpoints:")
For Each oEndpoint In _ServiceHost.Description.Endpoints
_Logger.Debug("Name: {0}", oEndpoint.Name)
_Logger.Debug("Address: {0}", oEndpoint.Address.ToString)
_Logger.Debug("Listen Uri: {0}", oEndpoint.ListenUri.AbsoluteUri)
_Logger.Debug("Binding: {0}", oEndpoint.Binding.Name)
_Logger.Debug("Contract: {0}", oEndpoint.Contract.Name)
Logger.Debug("Listing Endpoints:")
For Each oEndpoint In ServiceHost.Description.Endpoints
Logger.Debug("Name: {0}", oEndpoint.Name)
Logger.Debug("Address: {0}", oEndpoint.Address.ToString)
Logger.Debug("Listen Uri: {0}", oEndpoint.ListenUri.AbsoluteUri)
Logger.Debug("Binding: {0}", oEndpoint.Binding.Name)
Logger.Debug("Contract: {0}", oEndpoint.Contract.Name)
Next
_ServiceHost.Open()
ServiceHost.Open()
_Logger.Info("WCF ServiceHost started")
_Logger.Info("Service {0} successfully started", SERVICE_DISPLAY_NAME)
Logger.Info("WCF ServiceHost started")
Logger.Info("Service {0} successfully started", SERVICE_DISPLAY_NAME)
Catch ex As Exception
_Logger.Warn("Unexpected Error while starting the service: {0}", ex.Message)
_Logger.Error(ex)
Logger.Warn("Unexpected Error while starting the service: {0}", ex.Message)
Logger.Error(ex)
GracefullyStop()
End Try
End Sub
Private Function StartFirebird() As Firebird
_Logger.Debug("Connecting to Firebird")
Private Sub ReloadTimer_Tick()
If ConfigManager.Reload() = False Then
Logger.Warn("Could not reload config, check the service and config file.")
End If
If _Config.Firebird_Datasource = String.Empty Then
_Logger.Info("Firebird database not configured. Skipping.")
Config = ConfigManager.Config
LogConfig.Debug = ConfigManager.Config.Debug
End Sub
Private Function StartFirebird() As Firebird
Logger.Debug("Connecting to Firebird")
If Config.Firebird_Datasource = String.Empty Then
Logger.Info("Firebird database not configured. Skipping.")
Return Nothing
End If
Try
Dim oFirebird = New Firebird(
_LogConfig,
_Config.Firebird_Datasource,
_Config.Firebird_DatabaseName,
_Config.Firebird_DatabaseUser,
_Config.Firebird_DatabasePassword
LogConfig,
Config.Firebird_Datasource,
Config.Firebird_DatabaseName,
Config.Firebird_DatabaseUser,
Config.Firebird_DatabasePassword
)
_Logger.Info("Database connection established.")
Logger.Info("Database connection established.")
Return oFirebird
Catch ex As Exception
_Logger.Warn("StartFirebird: Could not connect to firebird database.")
_Logger.Error(ex)
Logger.Warn("StartFirebird: Could not connect to firebird database.")
Logger.Error(ex)
Return Nothing
End Try
End Function
Private Function StartMSSQL_ECM() As MSSQLServer
_Logger.Debug("Connecting to ECM MSSQL")
Dim oMSSQL = New MSSQLServer(_LogConfig, _Config.ConnectionString_ECM)
_Logger.Info("Database connection to ECM Database established.")
Private Function GetMSSQL_ECM(pLogConfig As LogConfig) As MSSQLServer
Logger.Debug("Connecting to ECM MSSQL")
Dim oMSSQL = New MSSQLServer(pLogConfig, Config.ConnectionString_ECM)
Logger.Info("Database connection to ECM Database established.")
Return oMSSQL
End Function
Private Function StartMSSQL_IDB() As MSSQLServer
_Logger.Debug("Connecting to IDB MSSQL")
Dim oMSSQL = New MSSQLServer(_LogConfig, _Config.ConnectionString_IDB)
_Logger.Info("Database connection to IDB Database established.")
Private Function GetMSSQL_IDB(pLogConfig As LogConfig) As MSSQLServer
Logger.Debug("Connecting to IDB MSSQL")
Dim oMSSQL = New MSSQLServer(pLogConfig, Config.ConnectionString_IDB)
Logger.Info("Database connection to IDB Database established.")
Return oMSSQL
End Function
@@ -164,13 +167,13 @@ Public Class WindowsService
End Sub
Private Sub GracefullyStop()
_Logger.Info("Service {0} is stopping!", SERVICE_DISPLAY_NAME)
If _ServiceHost IsNot Nothing Then
_ServiceHost.Close()
_ServiceHost = Nothing
Logger.Info("Service {0} is stopping!", SERVICE_DISPLAY_NAME)
If ServiceHost IsNot Nothing Then
ServiceHost.Close()
ServiceHost = Nothing
End If
_Scheduler.Stop()
Scheduler.Stop()
End Sub
End Class