204 lines
7.0 KiB
VB.net
204 lines
7.0 KiB
VB.net
Imports DevExpress.Utils
|
|
Imports DevExpress.XtraBars
|
|
Imports DevExpress.XtraBars.Ribbon
|
|
Imports DigitalData.Modules.Base
|
|
Imports DigitalData.Modules.Config
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Filesystem
|
|
Imports DigitalData.Modules.Language
|
|
|
|
Namespace DocumentResultList
|
|
Public Class Workspace
|
|
Inherits BaseClass
|
|
|
|
Private ReadOnly Manager As WorkspaceManager
|
|
Private ReadOnly Config As ConfigManager(Of Config)
|
|
Private ReadOnly FileEx As File
|
|
|
|
Public Const WORKSPACE_FILENAME As String = "Workspaces.xml"
|
|
Public Const WORKSPACE_DIRECTORY As String = "Workspaces"
|
|
Public Const DEFAULT_WORKSPACE As String = "Default"
|
|
|
|
Private _CurrentWorkspace = Nothing
|
|
|
|
Public Event WorkspaceLoaded As EventHandler(Of String)
|
|
|
|
Public ReadOnly Property CurrentWorkspace As String
|
|
Get
|
|
Return _CurrentWorkspace
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Workspaces As List(Of String)
|
|
Get
|
|
Return Manager.Workspaces.
|
|
Select(Function(ws As IWorkspace) ws.Name).
|
|
ToList()
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub New(pLogConfig As LogConfig, pConfigManager As ConfigManager(Of Config), pWorkspaceManager As WorkspaceManager)
|
|
MyBase.New(pLogConfig)
|
|
Manager = pWorkspaceManager
|
|
Config = pConfigManager
|
|
FileEx = New File(pLogConfig)
|
|
End Sub
|
|
|
|
Private Function GetWorkspaceDirectoryPath() As String
|
|
Dim oConfigPath As String = Config.UserConfigPath
|
|
Dim oConfigDirectory As String = IO.Path.Combine(IO.Path.GetDirectoryName(oConfigPath), WORKSPACE_DIRECTORY)
|
|
|
|
If IO.Directory.Exists(oConfigDirectory) = False Then
|
|
Try
|
|
IO.Directory.CreateDirectory(oConfigDirectory)
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End If
|
|
|
|
Return oConfigDirectory
|
|
End Function
|
|
|
|
Private Function GetWorkspacePath(pWorkspaceName As String) As String
|
|
Dim oDirectory = GetWorkspaceDirectoryPath()
|
|
Dim oFilename As String = Utils.ConvertTextToSlug(pWorkspaceName) & ".xml"
|
|
Return IO.Path.Combine(oDirectory, oFilename)
|
|
End Function
|
|
|
|
Public Function SaveWorkspaces() As Boolean
|
|
Try
|
|
If Manager.Workspaces.Count = 0 Then
|
|
Logger.Debug("No Workspace exists yet, capturing Workspace [{0}]", DEFAULT_WORKSPACE)
|
|
Manager.CaptureWorkspace(DEFAULT_WORKSPACE)
|
|
_CurrentWorkspace = DEFAULT_WORKSPACE
|
|
End If
|
|
|
|
SaveWorkspace(_CurrentWorkspace)
|
|
|
|
Return True
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Function SaveWorkspace(pName As String, Optional pForce As Boolean = False)
|
|
Try
|
|
Dim oFilePath = GetWorkspacePath(pName)
|
|
Logger.Debug("Saving Workspace [{0}] to [{1}]", pName, oFilePath)
|
|
Manager.CaptureWorkspace(pName)
|
|
Manager.SaveWorkspace(pName, oFilePath, createIfNotExisting:=pForce)
|
|
Return True
|
|
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Function ResetWorkspaces() As Boolean
|
|
Try
|
|
Dim oFilePath = GetWorkspaceDirectoryPath()
|
|
|
|
If IO.Directory.Exists(oFilePath) = False Then
|
|
Logger.Debug("Workspaces directory not found, no workspaces will be deleted!")
|
|
Return True
|
|
End If
|
|
|
|
Dim oFiles = IO.Directory.GetFiles(oFilePath)
|
|
|
|
If oFiles.Count = 0 Then
|
|
Logger.Debug("No Workspaces found, no workspaces will be deleted!")
|
|
Return True
|
|
End If
|
|
|
|
For Each oFile In oFiles
|
|
Try
|
|
IO.File.Delete(oFile)
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
Next
|
|
|
|
Return True
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Function LoadWorkspaces() As Boolean
|
|
Try
|
|
Dim oFilePath = GetWorkspaceDirectoryPath()
|
|
|
|
If IO.Directory.Exists(oFilePath) = False Then
|
|
Logger.Warn("Workspaces directory not found, workspaces will not be saved!")
|
|
Return True
|
|
End If
|
|
|
|
Dim oFiles = IO.Directory.GetFiles(oFilePath)
|
|
|
|
If oFiles.Count = 0 Then
|
|
Logger.Debug("Workspaces empty, creating default workspace")
|
|
Manager.CaptureWorkspace(DEFAULT_WORKSPACE)
|
|
_CurrentWorkspace = DEFAULT_WORKSPACE
|
|
End If
|
|
|
|
For Each oFile In oFiles
|
|
Dim oWorkspaceName As String = IO.Path.GetFileNameWithoutExtension(oFile)
|
|
Manager.LoadWorkspace(oWorkspaceName, oFile, True)
|
|
Logger.Debug("Workspace [{0}] loaded!", oWorkspaceName)
|
|
Next
|
|
|
|
Return True
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Sub LoadWorkspace(pName As String)
|
|
Try
|
|
Manager.AllowTransitionAnimation = DefaultBoolean.False
|
|
Manager.ApplyWorkspace(pName)
|
|
_CurrentWorkspace = pName
|
|
RaiseEvent WorkspaceLoaded(Me, pName)
|
|
|
|
Manager.AllowTransitionAnimation = DefaultBoolean.True
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Function GetWorkspaceButtons(pRibbonControl As RibbonControl, pRibbonGroup As RibbonPageGroup) As Boolean
|
|
Dim oItems As New List(Of BarItem)
|
|
|
|
For Each oWorkspace In Manager.Workspaces
|
|
Dim oItem As BarButtonItem = pRibbonControl.Items.CreateButton(oWorkspace.Name)
|
|
oItem.ImageIndex = 1
|
|
oItem.Id = pRibbonControl.Manager.GetNewItemId()
|
|
oItem.Tag = oWorkspace
|
|
|
|
AddHandler oItem.ItemClick, AddressOf Item_ItemClick
|
|
|
|
oItems.Add(oItem)
|
|
Next
|
|
|
|
pRibbonGroup.ItemLinks.AddRange(oItems)
|
|
|
|
Return True
|
|
End Function
|
|
|
|
Private Sub Item_ItemClick(sender As Object, e As ItemClickEventArgs)
|
|
Dim oTag = e.Item.Tag
|
|
|
|
If oTag IsNot Nothing AndAlso TypeOf oTag Is IWorkspace Then
|
|
Dim oWorkspace As IWorkspace = oTag
|
|
LoadWorkspace(oWorkspace.Name)
|
|
End If
|
|
End Sub
|
|
End Class
|
|
|
|
|
|
|
|
End Namespace |