Add Command line args parsing
This commit is contained in:
62
GUIs.ZooFlow/ClassCommandlineArgs.vb
Normal file
62
GUIs.ZooFlow/ClassCommandlineArgs.vb
Normal 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
|
||||
Reference in New Issue
Block a user