Modules/Modules.Windream/ConnectionBuilder.vb
2019-08-29 16:31:14 +02:00

119 lines
4.9 KiB
VB.net

Imports NLog
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Windream
Imports DigitalData.Modules.Language
Public Class ConnectionBuilder
Implements IConnectionBuilder
Private ReadOnly LogConfig As LogConfig
Private SessionReconnect As Boolean = False
Private DriveLetter As String = "W"
Private BasePath As String = BASE_PATH
Private Support64Bit As Boolean = False
Private ServerName As String = Nothing
Private UserName As String = Nothing
Private Password As String = Nothing
Private Domain As String = Nothing
Private Const BASE_PATH As String = "\\windream\objects"
Public Sub New(LogConfig As LogConfig)
Me.LogConfig = LogConfig
End Sub
''' <summary>
''' Sets flag in Windream class to reconnect on lost connection
''' </summary>
''' <returns>A IConnectionBuilder instance to allow for chaining</returns>
Public Function WithSessionReconnect() As IConnectionBuilder Implements IConnectionBuilder.WithSessionReconnect
SessionReconnect = True
Return Me
End Function
''' <summary>
''' Sets the drive letter of windream drive, default is "W"
''' </summary>
''' <param name="driveLetter">The drive letter to use</param>
''' <returns>A IConnectionBuilder instance to allow for chaining</returns>
Public Function WithDriveLetter(driveLetter As String) As IConnectionBuilder Implements IConnectionBuilder.WithDriveLetter
Me.DriveLetter = driveLetter
BasePath = String.Empty
Return Me
End Function
''' <summary>
''' Sets the drive letter to String.Empty, use \\windream\objects as Windream base path
''' </summary>
''' <param name="BasePath">The windream base path, eg. \\windream\objects</param>
''' <returns>A IConnectionBuilder instance to allow for chaining</returns>
Public Function WithWindreamObjects(BasePath As String) As IConnectionBuilder Implements IConnectionBuilder.WithWindreamObjects
BasePath = BasePath
DriveLetter = String.Empty
Return Me
End Function
''' <summary>
''' Sets the drive letter to String.Empty, use \\windream\objects as Windream base path
''' </summary>
''' <returns>A IConnectionBuilder instance to allow for chaining</returns>
Public Function WithWindreamObjects() As IConnectionBuilder Implements IConnectionBuilder.WithWindreamObjects
BasePath = BASE_PATH
DriveLetter = String.Empty
Return Me
End Function
Public Function WithWindreamObjectsOrDriveLetter(BasePath As String, DriveLetter As String) As IConnectionBuilder Implements IConnectionBuilder.WithWindreamObjectsOrDriveLetter
If Utils.NotNull(BasePath, Nothing) IsNot Nothing Then
Return WithWindreamObjects(BasePath)
ElseIf Utils.NotNull(DriveLetter, Nothing) IsNot Nothing Then
Return WithDriveLetter(DriveLetter)
Else
Return WithWindreamObjects()
End If
End Function
''' <summary>
''' Sets flag in Windream class to indicate 64-bit support
''' </summary>
''' <returns>A IConnectionBuilder instance to allow for chaining</returns>
Public Function With64BitSupport() As IConnectionBuilder Implements IConnectionBuilder.With64BitSupport
Support64Bit = True
Return Me
End Function
''' <summary>
''' Sets the servername in Windream class, overriding the client setting
''' </summary>
''' <param name="serverName"></param>
''' <returns>A IConnectionBuilder instance to allow for chaining</returns>
Public Function WithServerName(serverName As String) As IConnectionBuilder Implements IConnectionBuilder.WithServerName
Me.ServerName = serverName
Return Me
End Function
''' <summary>
''' Sets the username, password and domain in Windream class, overriding the client settings
''' </summary>
''' <param name="userName">The username used for the connection</param>
''' <param name="password">The password used for the connection</param>
''' <param name="domain">The domain used for the connection</param>
''' <returns>A IConnectionBuilder instance to allow for chaining</returns>
Public Function WithImpersonation(userName As String, password As String, domain As String) As IConnectionBuilder Implements IConnectionBuilder.WithImpersonation
Me.UserName = userName
Me.Password = password
Me.Domain = domain
Return Me
End Function
''' <summary>
''' Creates a connection.
''' </summary>
''' <exception cref="Exceptions.SessionException">If there was an error while establishing the connection</exception>
''' <returns>A Windream Object</returns>
Public Function Connect() As Windream Implements IConnectionBuilder.Connect
Return New Windream(LogConfig, SessionReconnect, DriveLetter, BasePath, Support64Bit, ServerName, UserName, Password, Domain)
End Function
End Class