Add Command line args parsing

This commit is contained in:
Jonathan Jenne 2020-11-16 16:30:40 +01:00
parent 83dedb3875
commit a35608d653
4 changed files with 73 additions and 1 deletions

View File

@ -2,6 +2,7 @@
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Config Imports DigitalData.Modules.Config
Imports DigitalData.Modules.Logging.LogConfig Imports DigitalData.Modules.Logging.LogConfig
Imports System.Text.RegularExpressions
Namespace My Namespace My
' Für MyApplication sind folgende Ereignisse verfügbar: ' Für MyApplication sind folgende Ereignisse verfügbar:
@ -39,6 +40,13 @@ Namespace My
_Logger = LogConfig.GetLogger() _Logger = LogConfig.GetLogger()
_Logger.Debug("Starting Client Suite..") _Logger.Debug("Starting Client Suite..")
Dim oCommandLineArgs As New ClassCommandlineArgs(LogConfig)
Dim oArgs = Environment.GetCommandLineArgs().Skip(1).ToList()
oCommandLineArgs.Parse(oArgs)
CommandLineFunction = oCommandLineArgs.FunctionName
CommandLineArgs = oCommandLineArgs.FunctionArgs
End Sub End Sub
Public Sub App_Shutdown(sender As Object, e As EventArgs) Handles Me.Shutdown Public Sub App_Shutdown(sender As Object, e As EventArgs) Handles Me.Shutdown

View File

@ -0,0 +1,62 @@
Imports System.Text.RegularExpressions
Imports DigitalData.Modules.Logging
''' <summary>
''' Parses Commandline Arguments. Used to jump to a specific point in the application.
'''
''' Example: --start-search=id#7~doctype#ARE
''' </summary>
Public Class ClassCommandlineArgs
Private CommandLineArgTypes As New List(Of String) From {
"show-profile",
"start-search"
}
Private CommandLineArgTypeString As String = String.Join("|", CommandLineArgTypes)
Private CommandLineArgRegex As String = $"(?:-{{2}}(?:({CommandLineArgTypeString})+)=([a-zA-Z0-9~#]+)\s*)+"
Private CommandLineArgParameterRegex As String = "(?:~{0,1}([\w\d-]+#[\w\d-]+))+"
Public FunctionName As String
Public FunctionArgs As New Dictionary(Of String, String)
Private LogConfig As LogConfig
Private Logger As Logger
Public Sub New(pLogConfig As LogConfig)
LogConfig = pLogConfig
Logger = pLogConfig.GetLogger()
End Sub
Public Sub Parse(Args As List(Of String))
Dim oRegex = New Regex(CommandLineArgRegex)
Dim oArgRegex = New Regex(CommandLineArgParameterRegex)
Logger.Debug("Application started with {0} arguments", Args.Count)
For Each oArg In Args
Dim oMatch = oRegex.Match(oArg)
Dim oGroups = oMatch.Groups
If oMatch.Success = False Then
Logger.Warn("The Argument [{0}] did not match the required format and was discarded!", oArg)
Continue For
End If
Dim oParamName As String = oGroups.Item(1).Value.Replace("--", "")
Dim oParamValue As String = oGroups.Item(2).Value
If oArgRegex.IsMatch(oParamValue) Then
FunctionName = oParamName
For Each oValue As String In oParamValue.Split("~"c)
Dim oValueArray = oValue.Split("#"c).ToList
FunctionArgs.Add(oValueArray.Item(0), oValueArray.Item(1))
Next
Else
Throw New ArgumentException($"Parameters did not match the required format!", "pValue")
End If
Next
End Sub
End Class

View File

@ -50,7 +50,8 @@ Namespace My
Public Property GDPictureLicense As String Public Property GDPictureLicense As String
Public CommandLineFunction As String
Public CommandLineArgs As New Dictionary(Of String, String)
End Class End Class
End Namespace End Namespace

View File

@ -106,6 +106,7 @@
<Compile Include="ApplicationEvents.vb" /> <Compile Include="ApplicationEvents.vb" />
<Compile Include="Base\BaseClass.vb" /> <Compile Include="Base\BaseClass.vb" />
<Compile Include="ClassClipboardWatcher.vb" /> <Compile Include="ClassClipboardWatcher.vb" />
<Compile Include="ClassCommandlineArgs.vb" />
<Compile Include="ClassControlCreator.vb" /> <Compile Include="ClassControlCreator.vb" />
<Compile Include="ClassFileDrop.vb" /> <Compile Include="ClassFileDrop.vb" />
<Compile Include="ClassFilehandle.vb" /> <Compile Include="ClassFilehandle.vb" />