This commit is contained in:
SchreiberM 2021-12-09 11:27:03 +01:00
commit f40eca86c0
25 changed files with 559 additions and 409 deletions

View File

@ -2,6 +2,7 @@
Imports DigitalData.GUIs.ZooFlow.Base Imports DigitalData.GUIs.ZooFlow.Base
Imports DigitalData.GUIs.ZooFlow.frmGlobix_Index Imports DigitalData.GUIs.ZooFlow.frmGlobix_Index
Imports DigitalData.Modules.EDMI.API Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Public Class ClassValidator Public Class ClassValidator
@ -14,30 +15,18 @@ Public Class ClassValidator
Client = pClient Client = pClient
End Sub End Sub
Private Function TestIsIndexOptional(pDocType As DocType, pIndexName As String) As Boolean Function ValidateControls(pPanel As Panel, pDocType As DocType) As Boolean
Dim oIsOptional As Boolean = My.Helpers.GetValueFromDatatable(
My.Application.Globix.CURR_DT_MAN_INDEXE,
$"DOK_ID = {pDocType.Guid} AND INDEXNAME = '{pIndexName}'", "OPTIONAL", "")
Return oIsOptional
End Function
Private Sub ShowValidationMessage()
MsgBox(ClassStrings.TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, ClassStrings.TITLE_MISSING_INPUT)
End Sub
Function ValidateControls(pControls As ControlCollection, pDocType As DocType) As Boolean
Try Try
Logger.Debug("Starting [ValidateControls]") Logger.Debug("Starting [ValidateControls]")
Dim result As Boolean = True Dim result As Boolean = True
For Each oControl As Control In pControls For Each oControl As Control In pPanel.Controls
' ========================= TEXT BOX ========================= ' ========================= TEXT BOX =========================
If oControl.Name.StartsWith("txt") Then If oControl.Name.StartsWith("txt") Then
Dim oTextBox As DevExpress.XtraEditors.TextEdit = oControl Dim oTextBox As DevExpress.XtraEditors.TextEdit = oControl
If oTextBox.Text = "" Then If oTextBox.Text = "" Then
Dim oIndexName = Replace(oTextBox.Name, "txt", "") Dim oIndexName = GetIndexName(oTextBox, "txt")
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName) Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then If oOptional = False Then
@ -54,7 +43,7 @@ Public Class ClassValidator
Dim oValues As List(Of String) = oLookup.Properties.SelectedValues Dim oValues As List(Of String) = oLookup.Properties.SelectedValues
If oValues.Count = 0 Then If oValues.Count = 0 Then
Dim oIndexName = Replace(oLookup.Name, "cmbMulti", "") Dim oIndexName = GetIndexName(oLookup, "cmbMulti")
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName) Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then If oOptional = False Then
@ -70,7 +59,7 @@ Public Class ClassValidator
Dim cmbSingle As TextBox = oControl Dim cmbSingle As TextBox = oControl
If cmbSingle.Text = "" Then If cmbSingle.Text = "" Then
Dim oIndexName = Replace(cmbSingle.Name, "cmbSingle", "") Dim oIndexName = GetIndexName(cmbSingle, "cmbSingle")
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName) Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then If oOptional = False Then
@ -84,7 +73,7 @@ Public Class ClassValidator
If oControl.Name.StartsWith("cmb") Then If oControl.Name.StartsWith("cmb") Then
Dim cmb As ComboBox = oControl Dim cmb As ComboBox = oControl
If cmb.Text = "" Then If cmb.Text = "" Then
Dim oIndexName = Replace(cmb.Name, "cmb", "") Dim oIndexName = GetIndexName(cmb, "cmb")
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName) Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then If oOptional = False Then
@ -98,7 +87,7 @@ Public Class ClassValidator
' ========================= DATE PICKER ========================= ' ========================= DATE PICKER =========================
If oControl.Name.StartsWith("dtp") Then If oControl.Name.StartsWith("dtp") Then
Dim dtp As DevExpress.XtraEditors.DateEdit = oControl Dim dtp As DevExpress.XtraEditors.DateEdit = oControl
Dim oIndexName As String = Replace(dtp.Name, "dtp", "") Dim oIndexName As String = GetIndexName(dtp, "dtp")
If dtp.Text = String.Empty Then If dtp.Text = String.Empty Then
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName) Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
@ -134,4 +123,124 @@ Public Class ClassValidator
Return False Return False
End Try End Try
End Function End Function
Function GetControlValues(pPanel As Panel)
Dim oAttributeValues As New List(Of UserAttributeValue)
For Each oControl As Control In pPanel.Controls
' ========================= TEXTBOX =========================
If oControl.Name.StartsWith("txt") Then
Dim oTextBox As DevExpress.XtraEditors.TextEdit = oControl
Dim oIndexName = GetIndexName(oTextBox, "txt")
' TODO: What to do when value is emmpty? send an empty value or skip the control?
'If oTextBox.Text = "" Then
'End If
oAttributeValues.Add(New UserAttributeValue With {
.AttributeName = oIndexName,
.AttributeValues = WrapIndexValue(oTextBox.Text),
.ControlName = oTextBox.Name
})
End If
' ========================= LOOKUP =========================
If oControl.Name.StartsWith("cmbMulti") Then
Dim oLookup = DirectCast(oControl, LookupControl3)
Dim oValues As List(Of String) = oLookup.Properties.SelectedValues
Dim oIndexName = GetIndexName(oLookup, "cmbMulti")
If oValues.Count = 0 Then
End If
oAttributeValues.Add(New UserAttributeValue With {
.AttributeName = oIndexName,
.AttributeValues = WrapIndexValue(oValues),
.ControlName = oLookup.Name
})
End If
' ========================= COMBO BOX =========================
If oControl.Name.StartsWith("cmbSingle") Then
Dim cmbSingle As TextBox = oControl
Dim oIndexName = GetIndexName(cmbSingle, "cmbSingle")
If cmbSingle.Text = "" Then
End If
oAttributeValues.Add(New UserAttributeValue With {
.AttributeName = oIndexName,
.AttributeValues = WrapIndexValue(cmbSingle.Text),
.ControlName = cmbSingle.Name
})
End If
If oControl.Name.StartsWith("cmb") Then
Dim cmb As ComboBox = oControl
Dim oIndexName = GetIndexName(cmb, "cmb")
If cmb.Text = "" Then
End If
oAttributeValues.Add(New UserAttributeValue With {
.AttributeName = oIndexName,
.AttributeValues = WrapIndexValue(cmb.Text),
.ControlName = cmb.Name
})
End If
' ========================= DATE PICKER =========================
If oControl.Name.StartsWith("dtp") Then
Dim dtp As DevExpress.XtraEditors.DateEdit = oControl
Dim oIndexName As String = GetIndexName(dtp, "dtp")
oAttributeValues.Add(New UserAttributeValue With {
.AttributeName = oIndexName,
.AttributeValues = WrapIndexValue(dtp.EditValue.ToString),
.ControlName = dtp.Name
})
End If
' ========================= CHECK BOX =========================
If oControl.Name.StartsWith("chk") Then
Dim chk As CheckBox = oControl
Dim oIndexName As String = GetIndexName(chk, "chk")
oAttributeValues.Add(New UserAttributeValue With {
.AttributeName = oIndexName,
.AttributeValues = WrapIndexValue(chk.Checked.ToString),
.ControlName = chk.Name
})
End If
Next
Return oAttributeValues
End Function
Private Function GetIndexName(pControl As Control, pPrefix As String) As String
Dim oIndexName = Replace(pControl.Name, pPrefix, "")
Return oIndexName
End Function
Private Function WrapIndexValue(pValue As String) As String()
Return New List(Of String) From {pValue}.ToArray
End Function
Private Function WrapIndexValue(pValues As List(Of String)) As String()
Return pValues.ToArray
End Function
Private Function TestIsIndexOptional(pDocType As DocType, pIndexName As String) As Boolean
Dim oIsOptional As Boolean = My.Helpers.GetValueFromDatatable(
My.Application.Globix.CURR_DT_MAN_INDEXE,
$"DOK_ID = {pDocType.Guid} AND INDEXNAME = '{pIndexName}'", "OPTIONAL", "")
Return oIsOptional
End Function
Private Sub ShowValidationMessage()
MsgBox(ClassStrings.TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, ClassStrings.TITLE_MISSING_INPUT)
End Sub
End Class End Class

View File

@ -305,9 +305,9 @@ Public Class frmGlobix_Index
End Sub End Sub
Sub Refresh_Dokart() Sub Refresh_Dokart()
Try Try
Dim oSql = String.Format("select * from VWGI_DOCTYPE where UPPER(USERNAME) = UPPER('{0}') ORDER BY SEQUENCE", My.Application.User.UserName) Dim oSql = String.Format("select * from VWGI_DOCTYPE_IDB where UPPER(USERNAME) = UPPER('{0}') ORDER BY SEQUENCE", My.Application.User.UserName)
Dim oFilter = $"USERNAME = '{My.Application.User.UserName}'" 'Dim oFilter = $"USERNAME = '{My.Application.User.UserName}'"
DT_VWGI_DOCTYPE = _DataASorDB.GetDatatable("DD_ECM", oSql, "VWGI_DOCTYPE", oFilter, "SEQUENCE") DT_VWGI_DOCTYPE = _DataASorDB.GetDatatable("DD_ECM", oSql, "VWGI_DOCTYPE_IDB", "", "SEQUENCE")
For Each oRow As DataRow In DT_VWGI_DOCTYPE.Rows For Each oRow As DataRow In DT_VWGI_DOCTYPE.Rows
cmbDocType.Properties.Items.Add(New DocType With { cmbDocType.Properties.Items.Add(New DocType With {
@ -2415,7 +2415,11 @@ Public Class frmGlobix_Index
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim oDokart As DocType = cmbDocType.SelectedItem Dim oDokart As DocType = cmbDocType.SelectedItem
Await GlobixFlowNew(oDokart) Dim oResult = Await GlobixFlowNew(oDokart)
If oResult = True Then
CancelAttempts = MaxCancelAttempts
Close()
End If
End Sub End Sub
Private Async Function GlobixFlowNew(pDocType As DocType) As Threading.Tasks.Task(Of Boolean) Private Async Function GlobixFlowNew(pDocType As DocType) As Threading.Tasks.Task(Of Boolean)
@ -2425,26 +2429,29 @@ Public Class frmGlobix_Index
Cursor = Cursors.WaitCursor Cursor = Cursors.WaitCursor
Dim oValidator As New ClassValidator(My.LogConfig, My.Application.Service.Client) Dim oValidator As New ClassValidator(My.LogConfig, My.Application.Service.Client)
If oValidator.ValidateControls(pnlIndex.Controls, pDocType) = False Then If oValidator.ValidateControls(pnlIndex, pDocType) = False Then
Return False Return False
End If End If
'TODO: Globix File Import Dim oValues = oValidator.GetControlValues(pnlIndex)
Dim oFileName As String Dim oFileName As String = My.Application.Globix.CURRENT_WORKFILE
Dim oObjectStore As String Dim oObjectStore As String = "WORK"
Dim oObjectKind As String Dim oObjectKind As String = "DOC"
Dim oBusinessENtity As String Dim oBusinessEntity As String = "DEFAULT"
Dim oProfileId As Integer Dim oProfileId As Integer = My.Application.Globix.CURRENT_DOCTYPE_ID
Dim oAttributes As List(Of UserAttributeValue) Dim oAttributes As List(Of UserAttributeValue) = oValues
Dim oOptions As New Modules.EDMI.API.Options.ImportFileOptions Dim oOptions As New Modules.EDMI.API.Options.ImportFileOptions
Await My.Application.Service.Client.ImportFileAsync(oFileName, oProfileId, oAttributes, oObjectStore, oObjectKind, oBusinessENtity, oOptions) Await My.Application.Service.Client.ImportFileAsync(oFileName, oProfileId, oAttributes, oObjectStore, oObjectKind, oBusinessEntity, oOptions)
MsgBox("Die Datei wurde erfolgreich verarbeitet!", MsgBoxStyle.Information, Text)
Return True Return True
Catch ex As Exception Catch ex As Exception
_Logger.Error(ex) _Logger.Error(ex)
MsgBox("Indexierung fehlgeschlagen!", MsgBoxStyle.Critical, Text) MsgBox("Indexierung fehlgeschlagen!", MsgBoxStyle.Critical, Text)
Return False
Finally Finally
Cursor = Cursors.Default Cursor = Cursors.Default

View File

@ -39,7 +39,12 @@ Public Class frmtest
Dim oObjectId As Long = Await My.Application.Service.Client.ImportFileAsync( Dim oObjectId As Long = Await My.Application.Service.Client.ImportFileAsync(
txtFile2Import.Text, txtFile2Import.Text,
txtProfileId.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", "WORK",
"DOC", "DOC",
"DEFAULT" "DEFAULT"

View File

@ -10,10 +10,4 @@
''' </summary> ''' </summary>
''' <returns></returns> ''' <returns></returns>
Property IsComplex As Boolean 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 End Interface

View File

@ -17,24 +17,23 @@ Namespace Modules
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub 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 oResult = pInput
Dim oCounter = 0 Dim oCounter = 0
Dim oClipboardContents = pReplaceMap.Item(CLIP_VALUE_BOARD)
Try Try
' LEGACY: Replace Clipboard Contents ' LEGACY: Replace Clipboard Contents
oResult = oResult.Replace(CLIPBOARD_VALUE_DE.ToLower, oClipboardContents) oResult = oResult.Replace(CLIPBOARD_VALUE_DE.ToLower, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_DE.ToUpper, oClipboardContents) oResult = oResult.Replace(CLIPBOARD_VALUE_DE.ToUpper, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_DE, oClipboardContents) oResult = oResult.Replace(CLIPBOARD_VALUE_DE, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN.ToLower, oClipboardContents) oResult = oResult.Replace(CLIPBOARD_VALUE_EN.ToLower, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN.ToUpper, oClipboardContents) oResult = oResult.Replace(CLIPBOARD_VALUE_EN.ToUpper, pClipboardContents)
oResult = oResult.Replace(CLIPBOARD_VALUE_EN, oClipboardContents) oResult = oResult.Replace(CLIPBOARD_VALUE_EN, pClipboardContents)
' Replace Clipboard Contents ' Replace Clipboard Contents
While ContainsPatternAndValue(oResult, PatternIdentifier, CLIP_VALUE_BOARD) While ContainsPatternAndValue(oResult, PatternIdentifier, CLIP_VALUE_BOARD)
oResult = ReplacePattern(oResult, PatternIdentifier, oClipboardContents) oResult = ReplacePattern(oResult, PatternIdentifier, pClipboardContents)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While

View File

@ -19,15 +19,14 @@ Namespace Modules
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub 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 oResult = pInput
Dim oCounter = 0 Dim oCounter = 0
Dim oPanel As Panel = pReplaceMap.Item(CTRL_VALUE_PANEL)
While ContainsPattern(oResult, PatternIdentifier) While ContainsPattern(oResult, PatternIdentifier)
Try Try
Dim oControlName As String = GetNextPattern(oResult, PatternIdentifier).Value 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 If oControl IsNot Nothing Then
Dim oReplaceValue As String Dim oReplaceValue As String

View File

@ -20,42 +20,41 @@ Namespace Modules
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub 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 oResult = pInput
Dim oCounter = 0 Dim oCounter = 0
Dim oFileInfo As FileInfo = pReplaceMap.Item(FILE_VALUE_FILEINFO)
' Replace Filename without extension ' Replace Filename without extension
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_FILENAME) While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_FILENAME)
Dim oFilenameWithoutExtension = Path.GetFileNameWithoutExtension(oFileInfo.Name) Dim oFilenameWithoutExtension = Path.GetFileNameWithoutExtension(pFileInfo.Name)
oResult = ReplacePattern(oResult, PatternIdentifier, oFilenameWithoutExtension) oResult = ReplacePattern(oResult, PatternIdentifier, oFilenameWithoutExtension)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
' Replace Filename with extension ' Replace Filename with extension
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_FILENAME_EXT) 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) oResult = ReplacePattern(oResult, PatternIdentifier, oFilename)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
' Replace Extension ' Replace Extension
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_FILENAME_EXT) 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) oResult = ReplacePattern(oResult, PatternIdentifier, oExtension)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
' Replace creation date ' Replace creation date
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_DATE_CREATED) 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) oResult = ReplacePattern(oResult, PatternIdentifier, oDateCreated)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
' Replace last modification date ' Replace last modification date
While ContainsPatternAndValue(oResult, PatternIdentifier, FILE_VALUE_DATE_CREATED) 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) oResult = ReplacePattern(oResult, PatternIdentifier, oDateModified)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While

View File

@ -1,26 +1,29 @@
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Namespace Modules Namespace Modules.Globix
''' <summary> ''' <summary>
''' Patterns for Generating a Filename in Global Indexer ''' Patterns for Generating a Filename in Global Indexer
''' </summary> ''' </summary>
Public Class Globix Public Class GlobixAutomatic
Inherits BaseModule Inherits BaseModule
Implements IModule Implements IModule
Public Const GBX_VALUE_INDICIES = "GLOBIX_INDICIES" Public Property PatternIdentifier As String = "ATTR_A" Implements IModule.PatternIdentifier
Public Property PatternIdentifier As String = "GBX" Implements IModule.PatternIdentifier
Public Property IsComplex As Boolean = True Implements IModule.IsComplex Public Property IsComplex As Boolean = True Implements IModule.IsComplex
Public Sub New(pLogConfig As LogConfig) Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub 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 oResult = pInput
Dim oCounter = 0 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) While ContainsPattern(oResult, PatternIdentifier)
Try 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 Namespace Modules
''' <summary> ''' <summary>
''' Patterns for Windream Indicies ''' Patterns for IDB Attributes
''' </summary> ''' </summary>
Public Class IDB Public Class IDB
Inherits BaseModule Inherits BaseModule
@ -12,14 +12,14 @@ Namespace Modules
Public Const IDB_OBJECT_ID = "IDB_OBJECT_ID" 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 Property IsComplex As Boolean = True Implements IModule.IsComplex
Public Sub New(pLogConfig As LogConfig) Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub 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 'TODO: Implement, depends on IDB Data, which is not in monorepo yet
Return pInput Return pInput

View File

@ -23,7 +23,7 @@ Namespace Modules
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub 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 oResult = pInput
Dim oCounter = 0 Dim oCounter = 0
Dim oNow As Date = Now Dim oNow As Date = Now

View File

@ -1,4 +1,5 @@
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow
Namespace Modules Namespace Modules
Public Class User Public Class User
@ -20,37 +21,37 @@ Namespace Modules
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub 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 oResult = pInput
Dim oCounter = 0 Dim oCounter = 0
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_PRENAME) While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_PRENAME)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_PRENAME)) oResult = ReplacePattern(oResult, PatternIdentifier, pUser.GivenName)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_SURNAME) While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_SURNAME)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_SURNAME)) oResult = ReplacePattern(oResult, PatternIdentifier, pUser.Surname)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_EMAIL) While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_EMAIL)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_EMAIL)) oResult = ReplacePattern(oResult, PatternIdentifier, pUser.Email)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_SHORTNAME) While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_SHORTNAME)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_SHORTNAME)) oResult = ReplacePattern(oResult, PatternIdentifier, pUser.ShortName)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_LANGUAGE) While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_LANGUAGE)
oResult = ReplacePattern(oResult, PatternIdentifier, pReplaceMap.Item(USER_VALUE_LANGUAGE)) oResult = ReplacePattern(oResult, PatternIdentifier, pUser.Language)
IncrementCounterOrThrow(oCounter) IncrementCounterOrThrow(oCounter)
End While End While
While ContainsPatternAndValue(oResult, PatternIdentifier, USER_VALUE_USER_ID) 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) IncrementCounterOrThrow(oCounter)
End While End While

View File

@ -19,10 +19,9 @@ Namespace Modules
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
End Sub 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 oResult = pInput
Dim oCounter = 0 Dim oCounter = 0
Dim pWMObject As WINDREAMLib.WMObject = pReplaceMap.Item(WM_VALUE_DOCUMENT)
While ContainsPattern(oResult, PatternIdentifier) While ContainsPattern(oResult, PatternIdentifier)
Try Try

View File

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

View File

@ -19,42 +19,9 @@ Imports WINDREAMLib
''' {#WMI#String 39} ''' {#WMI#String 39}
''' </summary> ''' </summary>
Public Class Patterns2 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 LogConfig As LogConfig
Private ReadOnly Logger As Logger Private ReadOnly Logger As Logger
Private ReadOnly Base As Modules.BaseModule Private ReadOnly Base As Modules.BaseModule
Private ReadOnly ControlPanel As Panel
Private ReadOnly IDBActive As Boolean
Private ReadOnly Modules As New List(Of IModule) Private ReadOnly Modules As New List(Of IModule)
Public Sub New(pLogConfig As LogConfig) Public Sub New(pLogConfig As LogConfig)
@ -67,192 +34,97 @@ Public Class Patterns2
New Modules.Clipboard(LogConfig), New Modules.Clipboard(LogConfig),
New Modules.Controls(LogConfig), New Modules.Controls(LogConfig),
New Modules.User(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 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 Public Function ReplaceUserValues(pInput As String, pUser As State.UserState) As String
Logger.Debug("Replacing User Values") Try
Dim oResult = pInput Logger.Debug("Replacing User Values")
Dim oModule = New Modules.User(LogConfig)
Dim oModule = GetModule(Of Modules.User)() Return oModule.Replace(pInput, pUser)
Dim oArgs = GetReplaceMapForModule(oModule, pUser:=pUser) Catch ex As Exception
oResult = DoReplaceForModule(oResult, oModule, oArgs) Logger.Warn("Error occurred while replacing User Values")
Logger.Error(ex)
Return oResult Return pInput
End Try
End Function End Function
Public Function ReplaceFileValues(pInput As String, pFileInfo As FileInfo) As String Public Function ReplaceFileValues(pInput As String, pFileInfo As FileInfo) As String
Logger.Debug("Replacing File Values") Try
Dim oResult = pInput Logger.Debug("Replacing File Values")
Dim oModule = New Modules.FileInformation(LogConfig)
Dim oModule = GetModule(Of Modules.FileInformation)() Return oModule.Replace(pInput, pFileInfo)
Dim oArgs = GetReplaceMapForModule(oModule, pFileInfo:=pFileInfo) Catch ex As Exception
oResult = DoReplaceForModule(oResult, oModule, oArgs) Logger.Warn("Error occurred while replacing File Values")
Logger.Error(ex)
Return oResult Return pInput
End Try
End Function End Function
Public Function ReplaceControlValues(pInput As String, pPanel As Panel) As String Public Function ReplaceControlValues(pInput As String, pPanel As Panel) As String
Logger.Debug("Replacing Control Values") Try
Dim oResult = pInput Logger.Debug("Replacing Control Values")
Dim oModule = New Modules.Controls(LogConfig)
Dim oModule = GetModule(Of Modules.Controls)() Return oModule.Replace(pInput, pPanel)
Dim oArgs = GetReplaceMapForModule(oModule, pPanel:=pPanel) Catch ex As Exception
oResult = DoReplaceForModule(oResult, oModule, oArgs) Logger.Warn("Error occurred while replacing Control Values")
Logger.Error(ex)
Return oResult Return pInput
End Try
End Function End Function
Public Function ReplaceWindreamValues(pInput As String, pWMObject As WMObject) As String Public Function ReplaceWindreamValues(pInput As String, pWMObject As WMObject) As String
Logger.Debug("Replacing Windream Values") Try
Dim oResult = pInput Logger.Debug("Replacing Windream Values")
Dim oModule = New Modules.Windream(LogConfig)
Dim oModule = GetModule(Of Modules.Windream)() Return oModule.Replace(pInput, pWMObject)
Dim oArgs = GetReplaceMapForModule(oModule, pWMObject:=pWMObject) Catch ex As Exception
oResult = DoReplaceForModule(oResult, oModule, oArgs) Logger.Warn("Error occurred while replacing Windream Values")
Logger.Error(ex)
Return oResult Return pInput
End Try
End Function 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") Logger.Debug("Replacing Internal Values")
Dim oResult = pInput Dim oResult = pInput
Dim oInternalModule = GetModule(Of Modules.Internal)() Try
Dim oInternalArgs = GetReplaceMapForModule(oInternalModule) Dim oInternal = New Modules.Internal(LogConfig)
oResult = DoReplaceForModule(oResult, oInternalModule, oInternalArgs) Dim oClipboard = New Modules.Clipboard(LogConfig)
Dim oClipboardModule = GetModule(Of Modules.Clipboard)() oResult = oInternal.Replace(oResult)
Dim oClipboardArgs = GetReplaceMapForModule(oClipboardModule) oResult = oClipboard.Replace(oResult, pClipboardContents)
oResult = DoReplaceForModule(oResult, oClipboardModule, oClipboardArgs)
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 End Function
Public Function ReplaceGlobixValues(pInput As String, pGlobixIndexes As Dictionary(Of String, List(Of String))) As String Public Function ReplaceGlobixValues(pInput As String, pManualIndexes As Dictionary(Of String, List(Of String)), pAutomaticIndexes As Dictionary(Of String, List(Of String))) As String
Logger.Debug("Replacing Globix Values") Logger.Debug("Replacing Globix Values")
Dim oResult = pInput 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 Try
If pModule IsNot Nothing AndAlso pModule?.GetType?.Name IsNot Nothing Then Dim oAutomatic = New Modules.Globix.GlobixAutomatic(LogConfig)
Logger.Debug("Calling Replace for Module [{0}]", pModule.GetType.Name) Dim oManual = New Modules.Globix.GlobixManual(LogConfig)
End If
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 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) Logger.Error(ex)
Return oResult
End Try 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 End Function
#Region "Helper Functions" #Region "Helper Functions"

View File

@ -1,12 +1,14 @@
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Services.EDMIService.IDB
Public Class BaseClass Public Class BaseClass
Friend LogConfig As LogConfig Friend LogConfig As LogConfig
Friend Logger As Logger Friend Logger As Logger
Public Sub New(pLogConfig As LogConfig) Public Sub New(pLogConfig As LogConfig)
Dim oClassName = [GetType]().Name
LogConfig = pLogConfig LogConfig = pLogConfig
Logger = pLogConfig.GetLogger() Logger = pLogConfig.GetLogger(oClassName)
End Sub End Sub
Public Sub LogAndThrow(pMessage As String) Public Sub LogAndThrow(pMessage As String)

View File

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

View File

@ -3,18 +3,45 @@ Imports DigitalData.Modules.Language
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.EDMI.API.Client Imports DigitalData.Modules.EDMI.API.Client
Imports System.Data.SqlClient Imports System.Data.SqlClient
Imports System.IO
Imports DigitalData.Modules.ZooFlow.State
Imports DigitalData.Modules.Patterns
Imports DigitalData.Services.EDMIService.Methods
Namespace IDB Namespace IDB
Public Class Helpers Public Class Helpers
Inherits BaseClass Inherits BaseClass
Private Database As MSSQLServer Private ReadOnly Patterns As Patterns2
Private ReadOnly Database As MSSQLServer
Public Sub New(pLogConfig As LogConfig, pMSSQLServer As MSSQLServer) Public Sub New(pLogConfig As LogConfig, pMSSQLServer As MSSQLServer)
MyBase.New(pLogConfig) MyBase.New(pLogConfig)
Patterns = New Patterns2(pLogConfig)
Database = pMSSQLServer Database = pMSSQLServer
End Sub End Sub
Public Function GetPlaceholderValue(pValue As String,
pFileInfo As FileInfo,
pUserState As UserState,
pUserAttributes As Dictionary(Of String, List(Of String)),
pAutoAttributes 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, pUserAttributes, pAutoAttributes)
Return oResult
End Function
Public Function UserAttributesToDictionary(pUserAttributes As List(Of UserAttributeValue)) As Dictionary(Of String, List(Of String))
Return pUserAttributes.ToDictionary(
Function(attr) attr.AttributeName,
Function(attr) attr.AttributeValues)
End Function
Public Function TestObjectIdExists(pObjectId As Long, Optional ByRef IsDeleted As Boolean = False, Optional ByRef IsActive As Boolean = False) As Boolean Public Function TestObjectIdExists(pObjectId As Long, Optional ByRef IsDeleted As Boolean = False, Optional ByRef IsActive As Boolean = False) As Boolean
Try Try
Dim oSQL As String = $"SELECT IDB_OBJ_ID, ACTIVE, DELETED FROM TBIDB_OBJECT WHERE IDB_OBJ_ID = {pObjectId}" Dim oSQL As String = $"SELECT IDB_OBJ_ID, ACTIVE, DELETED FROM TBIDB_OBJECT WHERE IDB_OBJ_ID = {pObjectId}"

View File

@ -3,6 +3,8 @@ Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Patterns Imports DigitalData.Modules.Patterns
Imports DigitalData.Modules.Language Imports DigitalData.Modules.Language
Imports DigitalData.Services.EDMIService.Methods.GetDatatableFromCache Imports DigitalData.Services.EDMIService.Methods.GetDatatableFromCache
Imports System.IO
Imports DigitalData.Modules.ZooFlow.State
Namespace Methods.GlobalIndexer.ImportFile Namespace Methods.GlobalIndexer.ImportFile
Public Class ImportFileMethod Public Class ImportFileMethod
@ -10,7 +12,10 @@ Namespace Methods.GlobalIndexer.ImportFile
Private ReadOnly Patterns As Patterns2 Private ReadOnly Patterns As Patterns2
Private ReadOnly GetDatatable As GetDatatableFromCacheMethod Private ReadOnly GetDatatable As GetDatatableFromCacheMethod
Private ReadOnly Connection As SqlClient.SqlConnection
Private ReadOnly Transaction As SqlClient.SqlTransaction
Private User As UserState
Private Profile As DataRow Private Profile As DataRow
Private Const VIEW_PROFILE = "VWGI_DOCTYPE_IDB" Private Const VIEW_PROFILE = "VWGI_DOCTYPE_IDB"
@ -23,6 +28,8 @@ Namespace Methods.GlobalIndexer.ImportFile
Patterns = New Patterns2(pLogConfig) Patterns = New Patterns2(pLogConfig)
GetDatatable = New GetDatatableFromCacheMethod(LogConfig, Database, GlobalState) GetDatatable = New GetDatatableFromCacheMethod(LogConfig, Database, GlobalState)
Connection = Database.GetConnection()
Transaction = Connection.BeginTransaction()
End Sub End Sub
''' <summary> ''' <summary>
@ -35,6 +42,8 @@ Namespace Methods.GlobalIndexer.ImportFile
''' </remarks> ''' </remarks>
Public Function Run(pData As ImportFileRequest) Public Function Run(pData As ImportFileRequest)
Try Try
User = pData.User
' TODO: Add missing user properties in UserState from TBDD_USER ' TODO: Add missing user properties in UserState from TBDD_USER
'pData.User = ResolveUserFromUserName(pData.User.UserName) 'pData.User = ResolveUserFromUserName(pData.User.UserName)
@ -43,17 +52,16 @@ Namespace Methods.GlobalIndexer.ImportFile
Dim oPostProcessingSteps As DataTable = LoadPostProcessingSteps(oManualIndexes) Dim oPostProcessingSteps As DataTable = LoadPostProcessingSteps(oManualIndexes)
LoadProfile(pData.ProfileId) LoadProfile(pData.ProfileId)
Dim oUserAttributes = pData.AttributeValues
Dim oFinalAttributes = pData.AttributeValues Dim oAutoAttributes As List(Of UserAttributeValue) = Nothing
Dim oFileName As String = GetFilenameByNameconvention(pData.File.FileName, Profile.Item("NAMENKONVENTION"))
' Apply post processing ' Apply post processing
Dim oPostProcessing = New Steps.PostProcessing(LogConfig, oPostProcessingSteps) Dim oPostProcessing = New Steps.PostProcessing(LogConfig, oPostProcessingSteps)
oFinalAttributes = oPostProcessing.ApplyManualPostprocessing(oFinalAttributes) oUserAttributes = oPostProcessing.ApplyManualPostprocessing(oUserAttributes)
' Apply automatic attributes ' Apply automatic attributes
Dim oAutomaticIndexing = New Steps.AutomaticIndexing(LogConfig, Database, oAutomaticIndexes, GlobalState) Dim oAutomaticIndexing = New Steps.AutomaticIndexing(LogConfig, Database, oAutomaticIndexes, GlobalState)
oFinalAttributes = oAutomaticIndexing.ApplyAutomaticeAttributes(oFinalAttributes, pData.File.FileInfoRaw, pData.User) oAutoAttributes = oAutomaticIndexing.ApplyAutomaticeAttributes(oUserAttributes, pData.File.FileInfoRaw, User)
' Import the file ' Import the file
Dim oNewFile As New NewFileMethod(LogConfig, Database, GlobalState) Dim oNewFile As New NewFileMethod(LogConfig, Database, GlobalState)
@ -62,29 +70,87 @@ Namespace Methods.GlobalIndexer.ImportFile
.BusinessEntity = pData.BusinessEntity, .BusinessEntity = pData.BusinessEntity,
.KindType = pData.KindType, .KindType = pData.KindType,
.StoreName = pData.StoreName, .StoreName = pData.StoreName,
.User = pData.User .User = User
}) })
If oResponse.OK Then If oResponse.OK Then
Logger.Info("Import of file [{0}] under ObjectId [{1}] successful!", pData.File.FileName, oResponse.ObjectId) Logger.Info("Import of file [{0}] under ObjectId [{1}] successful!", pData.File.FileName, oResponse.ObjectId)
Return New ImportFileResponse(oResponse.ObjectId)
Else Else
Throw New ApplicationException(oResponse.ErrorMessage) Throw New ApplicationException(oResponse.ErrorMessage)
End If End If
Logger.Info("Generating display filename for file [{0}]", pData.File.FileName)
Dim oNameconvention As String = Profile.ItemEx(Of String)("NAMENKONVENTION")
Dim oDisplayFilename = GetFilenameByNameconvention(pData.File.FileInfoRaw, oNameconvention, User, oUserAttributes, oAutoAttributes)
Logger.Info("Collecting Attributes for ObjectId [{0}]", oResponse.ObjectId)
Dim oFinalAttributes As New Dictionary(Of String, List(Of String)) From {
{"DisplayFileName", New List(Of String) From {oDisplayFilename}}
}
oFinalAttributes = oFinalAttributes.
Concat(Helpers.UserAttributesToDictionary(oUserAttributes)).
Concat(Helpers.UserAttributesToDictionary(oAutoAttributes)).
ToDictionary(Function(kv) kv.Key, Function(kv) kv.Value)
Logger.Info("Writing [{0}] Attributes for ObjectId [{0}] ", oResponse.ObjectId)
WriteAttributeValues(oResponse.ObjectId, oFinalAttributes)
' Finally, commit the transaction
Transaction?.Commit()
Return New ImportFileResponse(oResponse.ObjectId)
Catch ex As Exception 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) Return New ImportFileResponse(ex)
End Try End Try
End Function End Function
Private Function GetFilenameByNameconvention(pFileInfo As FileInfo, pNameconvention As String, pUser As UserState, pAttributes As List(Of UserAttributeValue), pAutoAttributes As List(Of UserAttributeValue)) As String
Dim oAttributeDict = Helpers.UserAttributesToDictionary(pAttributes)
Dim oAutoAttributeDict = Helpers.UserAttributesToDictionary(pAutoAttributes)
If pNameconvention Is Nothing OrElse pNameconvention = String.Empty Then
Logger.Warn("Nameconvention for File [{0}] was empty. Returning original filename.", pFileInfo.Name)
Return pFileInfo.Name
End If
Dim oFileName As String = Helpers.GetPlaceholderValue(pNameconvention, pFileInfo, pUser, oAttributeDict, oAutoAttributeDict)
Private Function GetFilenameByNameconvention(pFileName As String, pNameconvention As String) As String Return oFileName & pFileInfo.Extension
Return pFileName
End Function End Function
Private Sub WriteAttributeValues(pObjectId As Long, pAttributes As Dictionary(Of String, List(Of String)))
For Each oAttribute As KeyValuePair(Of String, List(Of String)) In pAttributes
Try
' TODO: This works only for simple attributes for now!!!
Dim oValue = oAttribute.Value.FirstOrDefault()
' Dont write empty attributes
If oValue Is Nothing Then
Continue For
End If
' Now make the call to the database
Dim oSuccess = Helpers.SetAttributeValue(Connection, Transaction, pObjectId, oAttribute.Key, oValue, User.Language, 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
End Sub
''' <summary> ''' <summary>
''' Load Profiles for this Import ''' Load Profiles for this Import
''' </summary> ''' </summary>
@ -142,7 +208,7 @@ Namespace Methods.GlobalIndexer.ImportFile
oIndexes.Add(oAutomaticIndex) oIndexes.Add(oAutomaticIndex)
Next Next
Logger.Info("[{0}] automatic indexes loaded.", oIndexes) Logger.Info("Automatic indexes loaded: [{0}]", oIndexes.Count)
Return oIndexes Return oIndexes
Catch ex As Exception Catch ex As Exception
@ -186,6 +252,8 @@ Namespace Methods.GlobalIndexer.ImportFile
oIndexes.Add(oManualIndex) oIndexes.Add(oManualIndex)
Next Next
Logger.Info("Manual indexes loaded: [{0}]", oIndexes.Count)
Return oIndexes Return oIndexes
Catch ex As Exception Catch ex As Exception

View File

@ -3,7 +3,7 @@ Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Patterns Imports DigitalData.Modules.Patterns
Imports DigitalData.Modules.ZooFlow.State Imports DigitalData.Modules.ZooFlow.State
Imports DigitalData.Services.EDMIService.GlobalState Imports DigitalData.Services.EDMIService.IDB
Namespace Methods.GlobalIndexer.ImportFile.Steps Namespace Methods.GlobalIndexer.ImportFile.Steps
Public Class AutomaticIndexing Public Class AutomaticIndexing
@ -12,6 +12,7 @@ Namespace Methods.GlobalIndexer.ImportFile.Steps
Private ReadOnly GlobalState As GlobalState Private ReadOnly GlobalState As GlobalState
Private ReadOnly AutomaticIndexes As List(Of AutomaticIndex) Private ReadOnly AutomaticIndexes As List(Of AutomaticIndex)
Private ReadOnly Patterns As Patterns2 Private ReadOnly Patterns As Patterns2
Private ReadOnly Helpers As Helpers
Private ReadOnly Database As MSSQLServer Private ReadOnly Database As MSSQLServer
Public Sub New(pLogConfig As LogConfig, pDatabase As MSSQLServer, pAutomaticIndexes As List(Of AutomaticIndex), pGlobalState As GlobalState) Public Sub New(pLogConfig As LogConfig, pDatabase As MSSQLServer, pAutomaticIndexes As List(Of AutomaticIndex), pGlobalState As GlobalState)
@ -20,41 +21,49 @@ Namespace Methods.GlobalIndexer.ImportFile.Steps
GlobalState = pGlobalState GlobalState = pGlobalState
AutomaticIndexes = pAutomaticIndexes AutomaticIndexes = pAutomaticIndexes
Patterns = New Patterns2(pLogConfig) Patterns = New Patterns2(pLogConfig)
Helpers = New Helpers(pLogConfig, pDatabase)
Logger.Info("Starting Automatic Indexing") Logger.Info("Starting Automatic Indexing")
End Sub End Sub
''' <summary>
''' Generates a new list of Auto Attributes from the Auto Index configuration and External Data (like User, FileInfo and UserAttributes)
''' </summary>
''' <returns>A new list of Automatic Attributes. This list may be empty.</returns>
Public Function ApplyAutomaticeAttributes(pUserAttributes As List(Of UserAttributeValue), pFileInfo As FileInfo, pUserState As UserState) As List(Of UserAttributeValue) Public Function ApplyAutomaticeAttributes(pUserAttributes As List(Of UserAttributeValue), pFileInfo As FileInfo, pUserState As UserState) As List(Of UserAttributeValue)
Logger.Debug("Start of Method [ApplyAutomaticAttributes]") Logger.Debug("Start of Method [ApplyAutomaticAttributes]")
If AutomaticIndexes Is Nothing OrElse AutomaticIndexes.Count = 0 Then If AutomaticIndexes Is Nothing OrElse AutomaticIndexes.Count = 0 Then
Logger.Warn("No Automatix Indexes supplied. Exiting.") Logger.Warn("No Automatix Indexes supplied. Exiting.")
Return pUserAttributes Return New List(Of UserAttributeValue)
End If End If
Logger.Info("Processing [{0}] automatic indexes", AutomaticIndexes.Count) 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 For Each oAutomaticIndex In AutomaticIndexes
' We add oAttributes from the previous run into the current run so it is in theory possible to reference ' 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. ' 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 If oAttribute IsNot Nothing Then
Logger.Info("Adding Attribute [{0}]", oAttribute) Logger.Debug("Adding Attribute [{0}]", oAttribute)
oAttributes.Add(oAttribute) oAutoAttributes.Add(oAttribute)
End If End If
Next Next
Return oAttributes Return oAutoAttributes
End Function End Function
Private Function ApplyAutomaticIndex(pAutomaticIndex As AutomaticIndex,
Private Function ApplyAutomaticIndex(pAutomaticIndex As AutomaticIndex, pFileInfo As FileInfo, pUserState As UserState, pAttributes As List(Of UserAttributeValue)) As UserAttributeValue pFileInfo As FileInfo,
pUserState As UserState,
pAttributes As List(Of UserAttributeValue),
pAutoAttributes As List(Of UserAttributeValue)) As UserAttributeValue
Try Try
Dim oAttributeDict = pAttributes.ToDictionary( Dim oAttributeDict = Helpers.UserAttributesToDictionary(pAttributes)
Function(attr) attr.AttributeName, Dim oAutoAttributeDict = Helpers.UserAttributesToDictionary(pAutoAttributes)
Function(attr) attr.AttributeValues)
Logger.Info("Applying Automatic Index [{0}]", pAutomaticIndex.Name) Logger.Info("Applying Automatic Index [{0}]", pAutomaticIndex.Name)
@ -64,7 +73,8 @@ Namespace Methods.GlobalIndexer.ImportFile.Steps
' If there is no SQL command, we use the Value property and replace all placeholders in it. ' If there is no SQL command, we use the Value property and replace all placeholders in it.
If oHasSqlCommand = False Then If oHasSqlCommand = False Then
Dim oResult As String = GetPlaceholderValue(pAutomaticIndex.Value, pFileInfo, pUserState, oAttributeDict) Dim oResult As String = Helpers.GetPlaceholderValue(
pAutomaticIndex.Value, pFileInfo, pUserState, oAttributeDict, oAutoAttributeDict)
Return New UserAttributeValue With { Return New UserAttributeValue With {
.AttributeValues = New List(Of String) From {oResult}, .AttributeValues = New List(Of String) From {oResult},
@ -77,9 +87,12 @@ Namespace Methods.GlobalIndexer.ImportFile.Steps
Dim oConnectionString As String = GlobalState.GetConnectionString(pAutomaticIndex.SQLConnectionId) Dim oConnectionString As String = GlobalState.GetConnectionString(pAutomaticIndex.SQLConnectionId)
Dim oFinalSQLCommand = pAutomaticIndex.SQLCommand 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) Logger.Debug("SQL Command is: [{0}]", oFinalSQLCommand)
oFinalSQLCommand = GetPlaceholderValue(oFinalSQLCommand, pFileInfo, pUserState, oAttributeDict) oFinalSQLCommand = Helpers.GetPlaceholderValue(
oFinalSQLCommand, pFileInfo, pUserState, oAttributeDict, oAutoAttributeDict)
' Now we have a SQL command which only contains vector placeholders ' Now we have a SQL command which only contains vector placeholders
' Next, we execute the command to get our result ' Next, we execute the command to get our result
@ -106,17 +119,7 @@ Namespace Methods.GlobalIndexer.ImportFile.Steps
End Try End Try
End Function End Function
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)
Return oResult
End Function
End Class End Class
End Namespace End Namespace

View File

@ -127,13 +127,13 @@ Public Class NewFileMethod
'TODO: File dates in try catch '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}, {"OriginFileName", pData.File.FileName},
{"OriginCreationDatetime", pData.File.FileCreatedAt}, {"OriginCreationDatetime", pData.File.FileCreatedAt},
{"OriginChangedDatetime", pData.File.FileChangedAt} {"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 Try
' Dont write empty attributes ' Dont write empty attributes
If oAttribute.Value Is Nothing Then 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) Dim oSuccess = Helpers.SetAttributeValue(Connection, Transaction, oObjectId, oAttribute.Key, oAttribute.Value, pData.User.Language, pData.User.UserName)
If oSuccess Then 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 Else
Logger.Warn("Default attribute value could not be written") Logger.Warn("System attribute value could not be written")
End If End If
Catch ex As Exception Catch ex As Exception
LogAndThrow(ex, $"System attribute [{oAttribute.Key}] could not be written!") LogAndThrow(ex, $"System attribute [{oAttribute.Key}] could not be written!")
@ -158,7 +158,7 @@ Public Class NewFileMethod
Return New NewFile.NewFileResponse(oObjectId) Return New NewFile.NewFileResponse(oObjectId)
Catch ex As Exception Catch ex As Exception
Logger.Warn("Error occurred while importing file!") Logger.Warn("Error occurred while creating file!")
Logger.Error(ex) Logger.Error(ex)
Logger.Info("Cleaning up files.") Logger.Info("Cleaning up files.")

View File

@ -18,7 +18,7 @@ Public Class DatatableJob
Dim oLogConfig As LogConfig = oJobData.Item("LogConfig") Dim oLogConfig As LogConfig = oJobData.Item("LogConfig")
Dim oCronJobId As Integer = oJobData.Item("CronJobId") Dim oCronJobId As Integer = oJobData.Item("CronJobId")
Dim oCronJobTitle As String = oJobData.Item("CronJobTitle") 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() Dim oResult As New JobResult()

View File

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

View File

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