Monitor/GUIs.Monitor/frmMonitor.vb
2022-07-12 16:05:46 +02:00

1091 lines
41 KiB
VB.net

Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraTreeList.Nodes
Imports DigitalData.Controls.SQLConfig
Imports DigitalData.GUIs.Common
Imports DigitalData.Modules.Config
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Language.Utils
Imports DigitalData.Modules.Language
Imports DigitalData.Modules.Patterns
Imports DevExpress.XtraTab
Imports DigitalData.Controls.DocumentViewer
Imports DevExpress.XtraEditors
Imports DevExpress.XtraRichEdit
Imports DevExpress.XtraTreeList.Columns
Imports DevExpress.XtraEditors.Repository
Imports DevExpress.Utils
Imports DevExpress.XtraEditors.Controls
Imports DigitalData.GUIs.Monitor.SearchLoader
Imports DevExpress.XtraLayout
Imports DevExpress.XtraTreeList
Imports DevExpress.XtraGrid.Columns
Imports System.ComponentModel
Public Class frmMonitor
Private ReadOnly ColumnMarkers As New List(Of String) From {"[HTML]", "[SQL]", "[FILENAME]"}
Private ReadOnly SQLColumns As New List(Of String) From {"SELECT1", "SELECT2", "SELECT3", "SELECT4"}
Private ReadOnly DocViewColumns As New List(Of String) From {"DOCVIEW1", "DOCVIEW2"}
Private ReadOnly HtmlViewColumns As New List(Of String) From {"HTML1", "HTML2"}
Private ReadOnly DataColumns As List(Of String) = SQLColumns.
Concat(DocViewColumns).
Concat(HtmlViewColumns).
ToList
Private ReadOnly DisplayColumns As New List(Of String) From {"COLUMN1", "COLUMN2", "COLUMN3", "ADDED_WHEN", "STATE", "ICON"}
Private SQLResultGrids As List(Of GridControl)
Private SQLResultTabs As List(Of XtraTabPage)
Private SQLResultGridIndex As Integer = 0
Private ActiveSQLResultGrid As GridControl
Private FileResultViewers As List(Of DocumentViewer)
Private FileResultTabs As List(Of XtraTabPage)
Private FileResultViewerIndex As Integer = 0
Private HtmlResultViewers As List(Of RichEditControl)
Private HtmlResultTabs As List(Of XtraTabPage)
Private TreeListResults As TreeList
Private GridControlResults As GridControl
Private GridViewResults As GridView
Private Const STATE_SUCCESS As String = "SUCCESS"
Private Const STATE_FAILURE As String = "FAILURE"
Private Const STATE_WARNING As String = "WARNING"
Private Const STATE_WAITING As String = "WAITING"
Private Const STATE_HIGHLIGHT As String = "HIGHLIGHT"
Private Const LIST_CONTROL_NULL_TEXT As String = "Kein Wert ausgewählt"
Private MarkedColumns As New List(Of GridColumn)
Private ActiveSearch As Search = Nothing
Private LastSearch As Search = Nothing
Private LastLoadedSearch As Search = Nothing
Private Enum NodeImage
[Default] = 0
SQL = 1
File = 2
Mail = 3
Success = 4
Failure = 5
Warning = 6
Waiting = 7
User = 8
Highlight = 9
End Enum
Private ReadOnly StateIcons As New Dictionary(Of String, NodeImage) From {
{STATE_SUCCESS, NodeImage.Success},
{STATE_FAILURE, NodeImage.Failure}
}
Private GridBuilder As GridBuilder
Private ControlHelper As Common.ControlHelper
Private SearchLoader As SearchLoader
Private LogConfig As LogConfig
Private Logger As Logger
Private ConfigManager As ConfigManager(Of Config)
Private Database As MSSQLServer
Private FormHelper As FormHelper
Private Patterns As Patterns2
Private Workspace As Common.DocumentResultList.Workspace(Of Config)
Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
LogConfig = New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing, "Digital Data", "Monitor")
Logger = LogConfig.GetLogger()
ConfigManager = New ConfigManager(Of Config)(LogConfig, Application.UserAppDataPath, Application.UserAppDataPath, Application.StartupPath)
Patterns = New Patterns2(LogConfig)
FormHelper = New FormHelper(LogConfig, Me)
ControlHelper = New Common.ControlHelper(LogConfig)
Workspace = New DocumentResultList.Workspace(Of Config)(LogConfig, ConfigManager, WorkspaceManager1)
If ConfigManager.Config.ConnectionString = String.Empty Then
Dim oSQLConfig As New frmSQLConfig(LogConfig)
If oSQLConfig.ShowDialog() = DialogResult.OK Then
ConfigManager.Config.ConnectionString = oSQLConfig.ConnectionString
ConfigManager.Save()
Application.Restart()
Else
FormHelper.ShowErrorMessage(New ApplicationException("No Database configured. Application will close!"), "Form Load")
Application.Exit()
End If
End If
If ConfigManager.Config.DBPrefix <> "" Then
If ConfigManager.Config.SearchSQL.Contains("@IDB_PRAEFIX") Then
Dim oREPLACE = ConfigManager.Config.SearchSQL.Replace("@IDB_PRAEFIX", ConfigManager.Config.DBPrefix)
ConfigManager.Config.SearchSQL = oREPLACE
ConfigManager.Save()
End If
Console.WriteLine(ConfigManager.Config.SearchSQL)
End If
Dim oConnectionString = MSSQLServer.DecryptConnectionString(ConfigManager.Config.ConnectionString)
Database = New MSSQLServer(LogConfig, oConnectionString)
SearchLoader = New SearchLoader(LogConfig, ConfigManager.Config, Database)
GridBuilder = New GridBuilder()
InitGrid()
InitTreeList()
Dim oGrids As GridView() = New List(Of GridView) From {GridView1, GridView2, GridView3, GridView4}.ToArray
GridBuilder.SetDefaults(oGrids)
GridBuilder.SetClipboardHandler(oGrids)
GridBuilder.SetReadOnlyOptions(oGrids)
SQLResultGrids = New List(Of GridControl) From {GridControl1, GridControl2, GridControl3, GridControl4}
SQLResultTabs = New List(Of XtraTabPage) From {XtraTabPageSQL1, XtraTabPageSQL2, XtraTabPageSQL3, XtraTabPageSQL4}
FileResultViewers = New List(Of DocumentViewer) From {DocumentViewer1, DocumentViewer2}
FileResultTabs = New List(Of XtraTabPage) From {XtraTabPageFile1, XtraTabPageFile2}
HtmlResultViewers = New List(Of RichEditControl) From {RichEditControl1, RichEditControl2}
HtmlResultTabs = New List(Of XtraTabPage) From {XtraTabPageHtml1, XtraTabPageHtml2}
SearchLoader.LoadSearchParameters()
LoadSearches()
Dim oLicense = LoadGDPicture()
For Each oGrid In SQLResultGrids
AddHandler oGrid.Enter, Sub()
ActiveSQLResultGrid = oGrid
btnExportGrid.Enabled = True
End Sub
AddHandler oGrid.Leave, Sub()
ActiveSQLResultGrid = Nothing
btnExportGrid.Enabled = False
End Sub
Next
For Each oViewer As DocumentViewer In FileResultViewers
oViewer.Init(LogConfig, oLicense)
Next
SplitContainerSQL.Collapsed = True
SplitContainerFileHTML.Collapsed = True
lbResultCount.Caption = String.Format(lbResultCount.Tag, 0)
Catch ex As Exception
FormHelper.ShowErrorMessage(ex, "frmStart_Load")
End Try
End Sub
Private Function LoadGDPicture() As String
Dim oSQL = "SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE'"
Return Database.GetScalarValue(oSQL)
End Function
Private Sub buttonSearch_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles buttonSearch.ItemClick
LoadData()
End Sub
Private Function LoadData() As Boolean
Try
TreeListResults.DataSource = Nothing
GridControlResults.DataSource = Nothing
If cmbSearches.EditValue Is Nothing Then
Return False
End If
Dim oSearch As Search = cmbSearches.EditValue
Dim oMissingParams = False
If LastLoadedSearch IsNot Nothing AndAlso oSearch.Id = LastLoadedSearch.Id Then
Workspace.SaveWorkspace(oSearch.Id.ToString)
End If
MarkedColumns.Clear()
HideAllTabs()
With AdornerUIManager2.ValidationHintProperties
.State = VisualEffects.ValidationHintState.Invalid
.InvalidState.ShowBorder = True
.InvalidState.ShowBackgroundMode = VisualEffects.ValidationHintBackgroundMode.Target
End With
AdornerUIManager2.Hide()
AdornerUIManager2.Elements.Clear()
'Dim oSQL As String = $"EXEC [{ConfigManager.Config.DBPrefix}].[dbo].[PRDD_MONITORING_GET_TREEVIEW_RESULT] '{cmbSearches.EditValue}','irgendwas','irgendwas','irgendwas',1"
Dim oSQL As String = oSearch.SQLCommand
Dim oControls As New List(Of Control)
For Each oItem As Control In LayoutControl1.Controls
Dim oParam = oSearch.Parameters.
Where(Function(param) param.PatternTitle = oItem.Name).
FirstOrDefault()
If oParam Is Nothing Then
Continue For
End If
oControls.Add(oItem)
If oParam.Required And Not ControlHelper.HasValue(oItem) Then
AdornerUIManager2.Elements.Add(New VisualEffects.ValidationHint With {
.TargetElement = oItem,
.Visible = True
})
oMissingParams = True
End If
Next
AdornerUIManager2.Show()
If oMissingParams = True Then
Return False
End If
oSQL = Patterns.ReplaceControlValues(oSQL, oControls)
Dim oTable As DataTable = Database.GetDatatable(oSQL)
If oSearch.ReturnType = ReturnTypeEnum.TreeView Then
GridControlResults.Visible = False
GridControlResults.Dock = DockStyle.None
TreeListResults.Visible = True
TreeListResults.Dock = DockStyle.Fill
TreeListResults.DataSource = oTable
Dim oMaxLength = 0
For Each oRow As DataRow In oTable.Rows
Dim oProcess = oRow.Item("COLUMN1")
Dim oLength = oProcess.ToString.Length
If oLength > oMaxLength Then
oMaxLength = oLength
End If
Next
InitTreeListColumns(oMaxLength)
' Show all columns in DisplayColumns List
For Each oColumn In TreeListResults.Columns
oColumn.Visible = DisplayColumns.Contains(oColumn.FieldName)
If oColumn.FieldName = "ADDED_WHEN" Then
oColumn.Format.FormatType = FormatType.DateTime
oColumn.Format.FormatString = "dd.MM.yyyy HH:MM:ss"
End If
Next
Dim oStateColumn As TreeListColumn = TreeListResults.Columns.Item("STATE")
For Each oNode As TreeListNode In TreeListResults.Nodes
ExpandNodes(oNode, Function(n)
Dim oObjectValue = n.GetValue(oStateColumn)
Dim oValue As String = NotNull(oObjectValue.ToString, String.Empty)
Return oValue IsNot Nothing AndAlso (oValue = STATE_WARNING Or oValue = STATE_FAILURE)
End Function)
Next
lbResultCount.Caption = String.Format(lbResultCount.Tag, TreeListResults.AllNodesCount)
Else
GridControlResults.Visible = True
GridControlResults.Dock = DockStyle.Fill
TreeListResults.Visible = False
TreeListResults.Dock = DockStyle.None
GridControlResults.DataSource = oTable
GridViewResults.PopulateColumns()
MarkedColumns = GridViewResults.Columns.AsEnumerable.
Where(Function(column)
Dim oCaption = column.FieldName.ToUpper.Trim
Return ColumnMarkers.Any(Function(marker) oCaption.EndsWith(marker))
End Function).ToList()
For Each oColumn In MarkedColumns
oColumn.VisibleIndex = -1
Next
lbResultCount.Caption = String.Format(lbResultCount.Tag, GridViewResults.RowCount)
End If
GridViewResults.FocusInvalidRow()
Workspace.LoadWorkspace(oSearch.Id.ToString)
LastLoadedSearch = oSearch
Return True
Catch ex As Exception
FormHelper.ShowErrorMessage(ex, "LoadData")
Return False
End Try
End Function
Private Sub LoadSearches()
Try
SearchLoader.LoadSearches()
cmbSearches.Properties.Items.Clear()
cmbSearches.Properties.Items.AddRange(SearchLoader.Searches)
If cmbSearches.EditValue IsNot Nothing Then
Dim oOldSearch As Search = DirectCast(cmbSearches.EditValue, Search)
Dim oNewSearch As Search = SearchLoader.Searches.Where(Function(search) search.Id = oOldSearch.Id).SingleOrDefault()
If oNewSearch IsNot Nothing Then
cmbSearches.EditValue = oNewSearch
End If
End If
Catch ex As Exception
FormHelper.ShowErrorMessage(ex, "LoadSearches")
End Try
End Sub
Private Sub InitTreeListColumns(pMaxLength As Integer)
Dim oColumn1 = TreeListResults.Columns.Item("COLUMN1")
Dim oStateColumn = TreeListResults.Columns.Item("STATE")
Dim oIconColumn = TreeListResults.Columns.Item("ICON")
Dim oStateEdit As RepositoryItemImageComboBox = GetStateEdit()
Dim oIconEdit As RepositoryItemImageComboBox = GetIconEdit()
oColumn1.VisibleIndex = 0
oStateColumn.VisibleIndex = 1
oIconColumn.VisibleIndex = 2
Dim oColumnLength = pMaxLength * 5
With oColumn1
.MinWidth = oColumnLength
.MaxWidth = oColumnLength
.Width = oColumnLength
.OptionsColumn.AllowSize = False
End With
With oStateColumn
.ColumnEdit = oStateEdit
.MaxWidth = 25
.MinWidth = 25
.Width = 25
.Caption = " "
.OptionsColumn.AllowSize = False
.ImageOptions.Image = SvgImageCollection1.GetImage(NodeImage.Success)
End With
With oIconColumn
.ColumnEdit = oIconEdit
.MaxWidth = 25
.MinWidth = 25
.Width = 25
.Caption = " "
.OptionsColumn.AllowSize = False
.ImageOptions.Image = SvgImageCollection1.GetImage(NodeImage.SQL)
End With
End Sub
Private Function GetIconEdit() As RepositoryItemImageComboBox
Dim oIconEdit As New RepositoryItemImageComboBox With {
.SmallImages = SvgImageCollection1,
.GlyphAlignment = HorzAlignment.Near
}
oIconEdit.Buttons.Clear()
oIconEdit.Items.AddRange(New List(Of ImageComboBoxItem) From {
New ImageComboBoxItem("Email", "MAIL", NodeImage.Mail),
New ImageComboBoxItem("SQL", "SQL", NodeImage.SQL),
New ImageComboBoxItem("File", "FILE", NodeImage.File)
})
Return oIconEdit
End Function
Private Sub cmbSearches_SelectedValueChanged(sender As Object, e As EventArgs) Handles cmbSearches.SelectedValueChanged
DisposeTreeList()
InitTreeList()
DisposeGrid()
InitGrid()
SplitContainerSQL.Collapsed = True
SplitContainerFileHTML.Collapsed = True
lbResultCount.Caption = String.Format(lbResultCount.Tag, 0)
LoadSearch()
HideAllTabs()
End Sub
Private Sub LoadSearch()
Try
If TypeOf cmbSearches.SelectedItem IsNot Search Then
Exit Sub
End If
Dim oSearch As Search = CType(cmbSearches.SelectedItem, Search)
If ActiveSearch IsNot Nothing Then
Workspace.SaveWorkspace(ActiveSearch.Id.ToString)
End If
LastSearch = ActiveSearch
ActiveSearch = oSearch
AdornerUIManager2.Hide()
AdornerUIManager2.Elements.Clear()
Root.Clear(disposeItemAndControls:=True)
LayoutControl1.Clear(True, True)
'LayoutControl1.Items.Clear()
' LayoutControl1.Controls.Clear()
TreeListResults.DataSource = Nothing
GridControlResults.DataSource = Nothing
If oSearch.Parameters.Count = 0 Then
lbParams.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never
Else
lbParams.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
End If
For Each oParam As SearchParameter In oSearch.Parameters
Dim oControl As Control
Select Case oParam.DataType
Case DataTypeEnum.Boolean
Dim oCheckbox = New CheckEdit With {
.Text = oParam.Title
}
oControl = oCheckbox
Case DataTypeEnum.Date
oControl = New DateEdit()
Case DataTypeEnum.String
Select Case oParam.ItemType
Case ItemTypeEnum.List
Dim oCombobox = New ComboBoxEdit() With {
.Name = oParam.PatternTitle,
.Tag = oParam.PatternTitle
}
Dim oClearButton = GetClearButtonForControl(oCombobox)
Dim oItems = oParam.ItemString.Split(";"c).ToList()
oCombobox.Properties.Items.AddRange(oItems)
oCombobox.Properties.NullText = LIST_CONTROL_NULL_TEXT
oCombobox.Properties.Buttons.Add(oClearButton)
oControl = oCombobox
Case ItemTypeEnum.SQL
Dim oGridCombobox = New LookUpEdit() With {
.Name = oParam.PatternTitle,
.Tag = oParam.PatternTitle
}
Dim oClearButton = GetClearButtonForControl(oGridCombobox)
Dim oSQL = oParam.ItemString
Dim oTable = Database.GetDatatable(oSQL)
oGridCombobox.Properties.DataSource = oTable
oGridCombobox.Properties.DisplayMember = oTable.Columns.Item(0).ColumnName
oGridCombobox.Properties.ValueMember = oTable.Columns.Item(0).ColumnName
oGridCombobox.Properties.NullText = LIST_CONTROL_NULL_TEXT
oGridCombobox.Properties.Buttons.Add(oClearButton)
oControl = oGridCombobox
Case Else
oControl = New TextEdit()
End Select
Case Else
oControl = New TextEdit()
End Select
oControl.Name = oParam.PatternTitle
oControl.Tag = oParam.PatternTitle
Dim oItem As LayoutControlItem = LayoutControl1.AddItem()
oItem.Text = oParam.Title
oItem.Control = oControl
oItem.TextLocation = Locations.Top
oItem.TextToControlDistance = 3
oItem.Padding = New DevExpress.XtraLayout.Utils.Padding(0, 0, 10, 0)
Next
Catch ex As Exception
End Try
End Sub
Private Function GetClearButtonForControl(pControl As Control) As EditorButton
Dim oClearButton As New EditorButton() With {
.Kind = ButtonPredefines.Clear,
.Tag = pControl.Name
}
AddHandler oClearButton.Click, AddressOf ClearButton_Click
Return oClearButton
End Function
Private Sub ClearButton_Click(sender As Object, e As EventArgs)
Dim oButton As EditorButton = sender
Dim oControlName As String = oButton.Tag.ToString
Dim oControl = LayoutControl1.Controls.Find(oControlName, True).SingleOrDefault()
Select Case oControl.GetType
Case GetType(LookUpEdit)
DirectCast(oControl, LookUpEdit).EditValue = Nothing
Case GetType(ComboBoxEdit)
DirectCast(oControl, ComboBoxEdit).EditValue = Nothing
End Select
End Sub
Private Function GetParameterItems(pParam As SearchParameter) As Object
Select Case pParam.ItemType
Case ItemTypeEnum.List
Return pParam.ItemString.Split(";"c).ToList()
Case ItemTypeEnum.SQL
Dim oSQL = pParam.ItemString
Dim oTable = Database.GetDatatable(oSQL)
Return oTable
End Select
End Function
Private Sub TreeListResults_FocusedNodeChanged(sender As Object, e As DevExpress.XtraTreeList.FocusedNodeChangedEventArgs)
If e.Node Is Nothing Then
Exit Sub
End If
Try
Dim oValues As Dictionary(Of String, String) = GetValuesFromNode(e.Node, DataColumns)
Dim oSQLCommands = oValues.
Where(Function(v) v.Key.StartsWith("SELECT")).
Where(Function(v) v.Value IsNot Nothing).
ToDictionary(Function(v) v.Key, Function(v) v.Value)
Dim oFilePaths = oValues.
Where(Function(v) v.Key.StartsWith("DOCVIEW")).
Where(Function(v) v.Value IsNot Nothing).
ToDictionary(Function(v) v.Key, Function(v) v.Value)
Dim oHtmlDocuments = oValues.
Where(Function(v) v.Key.StartsWith("HTML")).
Where(Function(v) v.Value IsNot Nothing).
ToDictionary(Function(v) v.Key, Function(v) v.Value)
Dim oAllTabs = SQLResultTabs.
Concat(FileResultTabs).
Concat(HtmlResultTabs)
For Each oTabPage In oAllTabs
oTabPage.PageVisible = False
Next
SplitContainerSQL.Collapsed = True
SplitContainerFileHTML.Collapsed = True
For Each oSQLCommand As KeyValuePair(Of String, String) In oSQLCommands
Try
Dim oExtracted = ExtractTitle(oSQLCommand.Value)
Dim oCommand = oExtracted.Item1
Dim oTitle = oExtracted.Item2
Dim oTable As DataTable = Database.GetDatatable(oCommand)
If oTable Is Nothing Then
Continue For
End If
Dim oGridIndex = Integer.Parse(oSQLCommand.Key.Last()) - 1
Dim oGridControl As GridControl = SQLResultGrids.Item(oGridIndex)
FillResultGrid(oGridControl, oTable, oTitle)
Catch ex As Exception
Logger.Error(ex)
Continue For
End Try
Next
For Each oFile As KeyValuePair(Of String, String) In oFilePaths
Try
Dim oExtracted = ExtractTitle(oFile.Value)
Dim oPath = oExtracted.Item1
Dim oTitle = oExtracted.Item2
If oPath Is Nothing Then
Continue For
End If
If Not IO.File.Exists(oPath) Then
Continue For
End If
Dim oViewerIndex = Integer.Parse(oFile.Key.Last()) - 1
Dim oViewer As DocumentViewer = FileResultViewers.Item(oViewerIndex)
FillResultViewer(oViewer, oPath, oTitle)
Catch ex As Exception
Logger.Error(ex)
Continue For
End Try
Next
For Each oFile As KeyValuePair(Of String, String) In oHtmlDocuments
Try
Dim oExtracted = ExtractTitle(oFile.Value)
Dim oHtml = oExtracted.Item1
Dim oTitle = oExtracted.Item2
If oHtml Is Nothing Then
Continue For
End If
Dim oViewerIndex = Integer.Parse(oFile.Key.Last()) - 1
Dim oViewer As RichEditControl = HtmlResultViewers.Item(oViewerIndex)
FillResultHtmlViewer(oViewer, oHtml, oTitle)
Catch ex As Exception
Logger.Error(ex)
Continue For
End Try
Next
Catch ex As Exception
FormHelper.ShowErrorMessage(ex, "TreeListResults_FocusedNodeChanged")
End Try
End Sub
Private Function ExtractTitle(Value As String) As Tuple(Of String, String)
If Value.Contains("|"c) Then
Dim oSplit = Value.Split("|"c).ToList
Dim oValue = oSplit.First()
Dim oTitle = oSplit.Item(1)
Return New Tuple(Of String, String)(oValue, oTitle)
End If
Return New Tuple(Of String, String)(Value, Nothing)
End Function
Private Sub ExpandNodes(RootNode As TreeListNode, Condition As Predicate(Of TreeListNode))
For Each oNode As TreeListNode In RootNode.Nodes
ExpandNodes(oNode, Condition)
If Condition(oNode) = True Then
oNode.Expand()
ExpandParentNode(oNode)
End If
Next
End Sub
Private Sub ExpandParentNode(ChildNode As TreeListNode)
If ChildNode.ParentNode IsNot Nothing Then
ChildNode.ParentNode.Expand()
ExpandParentNode(ChildNode.ParentNode)
End If
End Sub
Private Sub FillResultHtmlViewer(RichEditControl As RichEditControl, Html As String, Title As String)
RichEditControl.HtmlText = Html
Dim oTabPage = DirectCast(RichEditControl.Parent, XtraTabPage)
oTabPage.PageVisible = True
oTabPage.Text = NotNull(Title, oTabPage.Text)
XtraTabControlFileHTML.SelectedTabPage = oTabPage
End Sub
Private Sub FillResultViewer(DocumentViewer As DocumentViewer, Path As String, Title As String)
DocumentViewer.LoadFile(Path)
Dim oTabPage = DirectCast(DocumentViewer.Parent, XtraTabPage)
oTabPage.PageVisible = True
oTabPage.Text = NotNull(Title, oTabPage.Text)
XtraTabControlFileHTML.SelectedTabPage = oTabPage
End Sub
Private Sub FillResultGrid(GridControl As GridControl, Table As DataTable, Title As String)
GridControl.DataSource = Table
Dim oTabPage = DirectCast(GridControl.Parent, XtraTabPage)
oTabPage.PageVisible = True
oTabPage.Text = NotNull(Title, oTabPage.Text)
XtraTabControlSQL.SelectedTabPage = oTabPage
End Sub
Private Function GetValuesFromNode(Node As TreeListNode, ColumnNames As List(Of String)) As Dictionary(Of String, String)
Dim oValues As New Dictionary(Of String, String)
For Each oColumnName In ColumnNames
Dim oValue = MaybeGetValueForColumn(Node, oColumnName)
oValues.Add(oColumnName, oValue)
Next
Return oValues
End Function
Private Function MaybeGetValueForColumn(Node As TreeListNode, FieldName As String) As String
Dim oColumn = TreeListResults.Columns.Item(FieldName)
If oColumn Is Nothing Then
Return Nothing
End If
Dim oValue = Node.GetValue(oColumn)?.ToString
If oValue Is String.Empty Then
Return Nothing
Else
Return oValue
End If
End Function
Private Sub TreeListResults_CustomDrawNodeCell(sender As Object, e As DevExpress.XtraTreeList.CustomDrawNodeCellEventArgs)
Dim oColumn = TreeListResults.Columns.Item("STATE")
Dim oState = NotNull(e.Node.GetValue(oColumn), Nothing)
If oState Is Nothing Then
Exit Sub
End If
Dim oColor As Color = Nothing
Select Case oState.ToString
Case STATE_SUCCESS
oColor = Color.LightGreen
Case STATE_FAILURE
oColor = Color.LightCoral
Case STATE_WARNING
oColor = Color.Yellow
Case STATE_WAITING
oColor = Color.LightSkyBlue
End Select
e.Appearance.BackColor = oColor
e.Appearance.Options.UseBackColor = True
e.Handled = False
End Sub
Private Sub TreeListResults_GetStateImage(sender As Object, e As DevExpress.XtraTreeList.GetStateImageEventArgs)
'Dim oValues As Dictionary(Of String, String) = GetValuesFromNode(e.Node, DataColumns)
'Dim oSQLCommands = oValues.
' Where(Function(v) v.Key.StartsWith("SELECT")).
' Where(Function(v) v.Value IsNot Nothing).
' Count()
'Dim oFilePaths = oValues.
' Where(Function(v) v.Key.StartsWith("DOCVIEW")).
' Where(Function(v) v.Value IsNot Nothing).
' Count()
'Dim oHtmlDocuments = oValues.
' Where(Function(v) v.Key.StartsWith("HTML")).
' Where(Function(v) v.Value IsNot Nothing).
' Count()
'Dim oIconColumn = TreeListResults.Columns.Item("ICON")
'Dim oIcon = NotNull(e.Node.GetValue(oIconColumn), Nothing)
'Dim oStateColumn = TreeListResults.Columns.Item("STATE")
'Dim oState = NotNull(e.Node.GetValue(oStateColumn), Nothing)
'If oSQLCommands > 0 Then
' e.NodeImageIndex = NodeImage.SQL
'ElseIf oFilePaths > 0 Then
' e.NodeImageIndex = NodeImage.File
'ElseIf oHtmlDocuments > 0 Then
' e.NodeImageIndex = NodeImage.Mail
'Else
' If oState IsNot Nothing AndAlso StateIcons.ContainsKey(oState) Then
' Dim oIconIndex = StateIcons.Item(oState)
' e.NodeImageIndex = oIconIndex
' Else
' e.NodeImageIndex = NodeImage.Default
' End If
'End If
End Sub
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
Dim oSQLConfig As New frmSQLConfig(LogConfig) With {
.ConnectionString = ConfigManager.Config.ConnectionString
}
If oSQLConfig.ShowDialog() = DialogResult.OK Then
ConfigManager.Config.ConnectionString = oSQLConfig.ConnectionString
ConfigManager.Save()
Database = New MSSQLServer(LogConfig, oSQLConfig.ConnectionString)
LoadSearches()
End If
End Sub
Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnExportGrid.ItemClick
If ActiveSQLResultGrid IsNot Nothing Then
XtraSaveFileDialog1.Filter = "Excel Files (*.xlsx)|*.xlsx"
If XtraSaveFileDialog1.ShowDialog() = DialogResult.OK Then
ActiveSQLResultGrid.ExportToXlsx(XtraSaveFileDialog1.FileName)
End If
End If
End Sub
Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick
XtraSaveFileDialog1.Filter = "Excel Files (*.xlsx)|*.xlsx"
If XtraSaveFileDialog1.ShowDialog() = DialogResult.OK Then
TreeListResults.ExportToXlsx(XtraSaveFileDialog1.FileName)
End If
End Sub
Private Sub frmMonitor_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
If e.KeyCode = Keys.F5 Then
Debug.Write("Debug.Write")
Console.WriteLine("Console.WriteLine")
Debug.Print("Debug.Print")
LoadData()
End If
End Sub
Private Sub TreeListResults_MouseClick(sender As Object, e As MouseEventArgs)
Dim oInfo As TreeListHitInfo = TreeListResults.CalcHitInfo(New Point(e.X, e.Y))
If oInfo.InRowCell Then
Dim oNode = oInfo.Node
Dim oValues As Dictionary(Of String, String) = GetValuesFromNode(oNode, DataColumns)
Console.WriteLine()
Dim oShouldToggleSQL = False
Dim oShouldToggleFile = False
For Each oValue As KeyValuePair(Of String, String) In oValues
If oValue.Key.Contains("SELECT") AndAlso oValue.Value IsNot Nothing Then
oShouldToggleSQL = True
Exit For
End If
Next
For Each oValue As KeyValuePair(Of String, String) In oValues
If oValue.Key.Contains("DOCVIEW") AndAlso oValue.Value IsNot Nothing Then
oShouldToggleFile = True
Exit For
End If
If oValue.Key.Contains("HTML") AndAlso oValue.Value IsNot Nothing Then
oShouldToggleFile = True
Exit For
End If
Next
If oShouldToggleSQL Then
SplitContainerSQL.Collapsed = Not SplitContainerSQL.Collapsed
End If
If oShouldToggleFile Then
SplitContainerFileHTML.Collapsed = Not SplitContainerFileHTML.Collapsed
End If
End If
End Sub
Private Sub BarButtonItem4_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnReloadSearches.ItemClick
SearchLoader.LoadSearchParameters()
LoadSearches()
TreeListResults.DataSource = Nothing
GridControlResults.DataSource = Nothing
End Sub
Private Sub GridViewResults_FocusedRowChanged(sender As Object, e As Views.Base.FocusedRowChangedEventArgs)
If GridViewResults.FocusedRowHandle < 0 Then
Exit Sub
End If
HideAllTabs()
Try
Dim oRow As DataRow = GridViewResults.GetDataRow(GridViewResults.FocusedRowHandle)
Dim oHtmlResultViewerIndex As Integer = 0
Dim oGridResultIndex As Integer = 0
Dim oViewerResultIndex As Integer = 0
For Each oColumn As GridColumn In MarkedColumns
Dim oValue = oRow.ItemEx(oColumn.FieldName, String.Empty)
If oValue.Length > 0 Then
If oColumn.FieldName.EndsWith("[HTML]") Then
Dim oViewer As RichEditControl = HtmlResultViewers.Item(oHtmlResultViewerIndex)
Dim oTitle = oColumn.FieldName.Replace("[HTML]", "").Trim()
oHtmlResultViewerIndex += 1
FillResultHtmlViewer(oViewer, oValue, oTitle)
SplitContainerFileHTML.Collapsed = False
ElseIf oColumn.FieldName.EndsWith("[SQL]") Then
Dim oTable As DataTable = Database.GetDatatable(oValue)
If oTable Is Nothing Then
Continue For
End If
Dim oGridControl As GridControl = SQLResultGrids.Item(oGridResultIndex)
Dim oTitle = oColumn.FieldName.Replace("[SQL]", "").Trim()
oGridResultIndex += 1
FillResultGrid(oGridControl, oTable, oTitle)
SplitContainerSQL.Collapsed = False
ElseIf oColumn.FieldName.EndsWith("[FILENAME]") Then
If oValue Is Nothing Then
Continue For
End If
If Not IO.File.Exists(oValue) Then
Continue For
End If
Dim oViewer As DocumentViewer = FileResultViewers.Item(oViewerResultIndex)
Dim oTitle = oColumn.FieldName.Replace("[FILENAME]", "").Trim()
oViewerResultIndex += 1
FillResultViewer(oViewer, oValue, oTitle)
SplitContainerFileHTML.Collapsed = False
End If
End If
Next
Catch ex As Exception
End Try
End Sub
Private Sub HideAllTabs()
Dim oAllTabs = SQLResultTabs.
Concat(FileResultTabs).
Concat(HtmlResultTabs)
For Each oTabPage In oAllTabs
oTabPage.PageVisible = False
Next
SplitContainerSQL.Collapsed = True
SplitContainerFileHTML.Collapsed = True
End Sub
Private Sub frmMonitor_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
If ActiveSearch IsNot Nothing Then
Workspace.SaveWorkspace(ActiveSearch.Id.ToString)
End If
End Sub
Private Sub btnResetLayout_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnResetLayout.ItemClick
If ActiveSearch IsNot Nothing Then
Workspace.ResetWorkspace(ActiveSearch.Id.ToString)
LastLoadedSearch = Nothing
ActiveSearch = Nothing
DisposeTreeList()
InitTreeList()
DisposeGrid()
InitGrid()
LoadSearch()
HideAllTabs()
lbResultCount.Caption = String.Format(lbResultCount.Tag, 0)
End If
End Sub
Private Sub DisposeGrid()
GridViewResults.Dispose()
GridViewResults = Nothing
GridControlResults.Dispose()
GridControlResults = Nothing
End Sub
Private Sub InitGrid()
GridControlResults = New GridControl() With {
.Name = "GridViewResults",
.Visible = False
}
SplitContainerSQL.Panel1.Controls.Add(GridControlResults)
GridControlResults.ForceInitialize()
GridViewResults = DirectCast(GridControlResults.DefaultView, GridView)
AddHandler GridViewResults.FocusedRowChanged, AddressOf GridViewResults_FocusedRowChanged
GridBuilder.SetDefaults(GridViewResults)
GridBuilder.SetClipboardHandler(GridViewResults)
GridBuilder.SetReadOnlyOptions(GridViewResults)
End Sub
Private Sub DisposeTreeList()
TreeListResults.Dispose()
TreeListResults = Nothing
End Sub
Private Sub InitTreeList()
TreeListResults = New TreeList() With {
.Name = "TreeListResults",
.Visible = False
}
SplitContainerSQL.Panel1.Controls.Add(TreeListResults)
TreeListResults.ForceInitialize()
TreeListResults.KeyFieldName = "GUID"
TreeListResults.ParentFieldName = "PARENT_ID"
AddHandler TreeListResults.FocusedNodeChanged, AddressOf TreeListResults_FocusedNodeChanged
GridBuilder.SetDefaults(TreeListResults)
GridBuilder.SetClipboardHandler(TreeListResults)
GridBuilder.SetReadOnlyOptions(TreeListResults)
End Sub
'Private DisallowedComponentNames As New List(Of String) From {"LayoutControlItem", "LayoutControlGroup", "LayoutControl"}
'Private Sub WorkspaceManager1_PropertyDeserializing(sender As Object, ea As PropertyCancelEventArgs) Handles WorkspaceManager1.PropertyDeserializing, WorkspaceManager1.PropertySerializing
' Dim oName = ea.Component?.GetType.Name
' If DisallowedComponentNames.Contains(oName) Then
' ea.Cancel = True
' End If
'End Sub
Private Function GetStateEdit() As RepositoryItemImageComboBox
Dim oStateEdit As New RepositoryItemImageComboBox With {
.SmallImages = SvgImageCollection1,
.GlyphAlignment = HorzAlignment.Near
}
oStateEdit.Buttons.Clear()
oStateEdit.Items.AddRange(New List(Of ImageComboBoxItem) From {
New ImageComboBoxItem("Success", "SUCCESS", NodeImage.Success),
New ImageComboBoxItem("Failure", "FAILURE", NodeImage.Failure),
New ImageComboBoxItem("Warning", "WARNING", NodeImage.Warning),
New ImageComboBoxItem("Waiting", "WAITING", NodeImage.Waiting),
New ImageComboBoxItem("Default", "DEFAULT", NodeImage.Default),
New ImageComboBoxItem("User", "USER", NodeImage.User),
New ImageComboBoxItem("Highlight", "HIGHLIGHT", NodeImage.Highlight)
})
Return oStateEdit
End Function
End Class