2022-12-20 11:57:31 +01:00

301 lines
10 KiB
VB.net

Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Language
Imports ECM.JobRunner.Windows.Scheduler
Imports DigitalData.Modules.Windream
Imports ECM.JobRunner.Common
Public Class State
Inherits BaseClass
Private ReadOnly Database As MSSQLServer
Private ReadOnly Windream As Windream
Public ReadOnly JobStatus As JobStatus
Public ReadOnly Property JobTypes As New List(Of JobType)
Public ReadOnly Property ObjectTypes As New List(Of ObjectType)
Public ReadOnly Property JobDefinitions As New List(Of JobDefinition)
Public ReadOnly Property ProfileDefintions As New ProfileDefinitions
Public Class ProfileDefinitions
Public Property ImportProfiles As New List(Of ImportProfile)
Public Property ImportProfileSteps As New List(Of ImportProfileStep)
End Class
Public Sub New(pLogConfig As LogConfig, pDatabase As MSSQLServer, pWindream As Windream)
MyBase.New(pLogConfig)
Database = pDatabase
Windream = pWindream
JobStatus = New JobStatus(pLogConfig)
LoadData()
End Sub
Public Sub Reload()
LoadData()
End Sub
Public Sub ReloadTypes()
_JobTypes = GetJobTypes()
_ObjectTypes = GetObjectTypes()
End Sub
Public Sub ReloadJobs()
_JobDefinitions = GetJobDefinitions(_JobTypes)
End Sub
Public Sub ReloadProfiles()
_ProfileDefintions.ImportProfileSteps = GetImportProfileSteps()
_ProfileDefintions.ImportProfiles = GetImportProfiles()
End Sub
Private Sub LoadData()
ReloadTypes()
ReloadJobs()
ReloadProfiles()
End Sub
Private Function GetObjectTypes() As List(Of ObjectType)
Dim oObjectTypes As New List(Of ObjectType)
Try
Logger.Info("Loading Windream Object Types..")
Dim oObjectTypesNames = Windream.ObjectTypes
Logger.Info("[{0}] Windream Object Types loaded!", oObjectTypes.Count)
For Each oObjectTypeName In oObjectTypesNames
Dim oObjectType = New ObjectType With {
.Name = oObjectTypeName,
.Indexes = GetIndexesFor(oObjectTypeName)
}
oObjectTypes.Add(oObjectType)
Next
Return oObjectTypes
Catch ex As Exception
Logger.Error(ex)
Return oObjectTypes
End Try
End Function
Private Function GetIndexesFor(pObjectType As String) As List(Of String)
Dim oIndexes As New List(Of String)
Try
Logger.Info("Loading Windream Indexes for [{0}]..", pObjectType)
oIndexes = Windream.GetIndiciesByObjecttype(pObjectType)
Logger.Info("[{0}] Windream Indexes loaded!", oIndexes.Count)
Return oIndexes
Catch ex As Exception
Logger.Error(ex)
Return oIndexes
End Try
End Function
Private Function GetJobTypes() As List(Of JobType)
Dim oTypes As New List(Of JobType)
Try
Logger.Info("Loading Job Types..")
Dim oSQL As String = "SELECT * FROM TBECM_JR_TYPE"
Dim oTable As DataTable = Database.GetDatatable(oSQL)
If oTable Is Nothing Then
Logger.Warn("Database Error while loading Job Types!")
Return oTypes
End If
Logger.Info("[{0}] Job Types loaded!", oTable.Rows.Count)
For Each oRow As DataRow In oTable.Rows
Dim oType As New JobType With {
.Id = oRow.ItemEx("GUID", 0),
.Name = oRow.ItemEx("JOB_TYPE", ""),
.Active = oRow.ItemEx("ACTIVE", 0)
}
oTypes.Add(oType)
Logger.Debug("Adding Job Type [{0}]", oType.Name)
Next
Return oTypes
Catch ex As Exception
Logger.Error(ex)
Return oTypes
End Try
End Function
Private Function GetImportProfileSteps() As List(Of ImportProfileStep)
Dim oSteps As New List(Of ImportProfileStep)
Try
Logger.Info("Loading Import Profiles Steps..")
Dim oSQL As String = "SELECT * FROM TBECM_JR_FIW_STEP"
Dim oTable As DataTable = Database.GetDatatable(oSQL)
If oTable Is Nothing Then
Logger.Warn("Database Error while loading Import Profile Steps!")
Return oSteps
End If
Logger.Info("[{0}] Import Profile Steps loaded!", oTable.Rows.Count)
For Each oRow As DataRow In oTable.Rows
Dim oTypeId = oRow.ItemEx("PROFILE_ID", 0)
Dim oStep As New ImportProfileStep With {
.Id = oRow.ItemEx("GUID", 0),
.ProfileId = oRow.ItemEx("PROFILE_ID", 0),
.IndexName = oRow.Item("IDX_NAME"),
.Argument1 = oRow.ItemEx("ARGUMENT1", ""),
.Argument2 = oRow.ItemEx("ARGUMENT2", ""),
.Argument3 = oRow.ItemEx("ARGUMENT3", ""),
.Active = oRow.ItemEx("ACTIVE", 0),
.Method = oRow.ItemEx("METHOD", "ALL"),
.Scope = oRow.ItemEx("SCOPE", "FILE")
}
oSteps.Add(oStep)
Logger.Debug("Adding Import Profile Step for Index [{0}]", oStep.IndexName)
Next
Return oSteps
Catch ex As Exception
Logger.Error(ex)
Return oSteps
End Try
End Function
Private Function GetImportProfiles() As List(Of ImportProfile)
Dim oProfiles As New List(Of ImportProfile)
Try
Logger.Info("Loading Import Profiles..")
Dim oSQL As String = "SELECT * FROM TBECM_JR_FIW_PROFILE"
Dim oTable As DataTable = Database.GetDatatable(oSQL)
If oTable Is Nothing Then
Logger.Warn("Database Error while loading Import Profiles!")
Return oProfiles
End If
Logger.Info("[{0}] Import Profiles loaded!", oTable.Rows.Count)
For Each oRow As DataRow In oTable.Rows
Dim oProfile As New ImportProfile With {
.Id = oRow.ItemEx("GUID", 0),
.JobId = oRow.ItemEx("JR_JOB_ID", 0),
.ObjectTypeName = oRow.Item("WM_OBJECTTYPE"),
.SourceFolder = oRow.ItemEx("SOURCE_FOLDER", ""),
.TargetFolder = oRow.ItemEx("TARGET_FOLDER", ""),
.BackupFolder = oRow.ItemEx("BACKUP_FOLDER", ""),
.SubfolderDateFormat = oRow.ItemEx("SF_DATE_FORMAT", ""),
.DeleteFiles = oRow.ItemEx("DEL_FILE_SUCCESS", 0),
.FileExcludeRegex = oRow.ItemEx("EXCLUDE_REGEX", ""),
.IncludeSubfolders = oRow.ItemEx("INCL_SUBFOLDER", 0),
.Active = oRow.ItemEx("ACTIVE", 0)
}
Logger.Debug("ProfileId: [{0}]", oProfile.Id)
Logger.Debug("JobId: [{0}]", oProfile.JobId)
Logger.Debug("ObjectType: [{0}]", oProfile.ObjectTypeName)
Logger.Debug("SourceFolder: [{0}]", oProfile.SourceFolder)
Logger.Debug("TargetFolder: [{0}]", oProfile.TargetFolder)
oProfiles.Add(oProfile)
Logger.Debug("Adding Import Profile for Folder [{0}]", oProfile.SourceFolder)
Next
Return oProfiles.
Select(Function(p) FillJobForProfile(p, JobDefinitions)).
Select(Function(p) FillStepsForProfile(p, ProfileDefintions.ImportProfileSteps)).
Select(Function(p) FillObjectTypeForProfile(p, ObjectTypes)).
ToList()
Catch ex As Exception
Logger.Error(ex)
Return oProfiles
End Try
End Function
Private Function FillJobForProfile(pProfile As ImportProfile, pJobDefinitions As List(Of JobDefinition)) As ImportProfile
Dim oJob = pJobDefinitions.
Where(Function(job) job.Id = pProfile.JobId).
FirstOrDefault()
pProfile.Job = oJob
Return pProfile
End Function
Private Function FillObjectTypeForProfile(pProfile As ImportProfile, pObjectTypes As List(Of ObjectType)) As ImportProfile
Dim oObjectType = pObjectTypes.
Where(Function(t) t.Name = pProfile.ObjectTypeName).
FirstOrDefault()
pProfile.ObjectType = oObjectType
Return pProfile
End Function
Private Function FillStepsForProfile(pProfile As ImportProfile, pProfileSteps As List(Of ImportProfileStep)) As ImportProfile
Dim oSteps = pProfileSteps.
Where(Function(s) s.ProfileId = pProfile.Id).
ToList()
pProfile.Steps = oSteps
Return pProfile
End Function
Private Function GetJobDefinitions(pJobTypes As List(Of JobType)) As List(Of JobDefinition)
Dim oJobs As New List(Of JobDefinition)
Try
Logger.Info("Loading Jobs..")
Dim oSQL As String = "SELECT * FROM TBECM_JR_JOB"
Dim oTable As DataTable = Database.GetDatatable(oSQL)
If oTable Is Nothing Then
Logger.Warn("Database Error while loading Jobs!")
Return oJobs
End If
Logger.Info("[{0}] Jobs loaded!", oTable.Rows.Count)
For Each oRow As DataRow In oTable.Rows
Dim oTypeId = oRow.ItemEx("JOB_TYPE_ID", 0)
Dim oJob As New JobDefinition With {
.Id = oRow.ItemEx("GUID", 0),
.TypeId = oTypeId,
.Type = pJobTypes.Where(Function(t) t.Id = oTypeId).SingleOrDefault,
.Name = oRow.ItemEx("TITLE", ""),
.Active = oRow.ItemEx("ACTIVE", 0),
.CronSchedule = oRow.ItemEx("QUARTZ_DEF", "")
}
oJobs.Add(oJob)
Logger.Debug("Adding Job [{0}]", oJob.Name)
Next
Return oJobs
Catch ex As Exception
Logger.Error(ex)
Return oJobs
End Try
End Function
End Class