/** Ċ Ġ* Ġ< s late _ header > Ċ Ġ* Ġurl : Ġwww . s late kit . com Ċ Ġ* Ġgit : Ġwww . github . com / code - helix / s late kit Ċ Ġ* Ġorg : Ġwww . code helix . co Ċ Ġ* Ġauthor : ĠK ish ore ĠRed dy Ċ Ġ* Ġcopyright : Ġ 2 0 1 6 ĠCode Hel ix ĠSolutions ĠInc . Ċ Ġ* Ġlicense : Ġrefer Ġto Ġwebsite Ġand / or Ġgithub Ċ Ġ* Ġabout : ĠA Ġtool - kit , Ġutility Ġlibrary Ġand Ġserver - backend Ċ Ġ* Ġman tra : ĠSimp licity Ġabove Ġall Ġelse Ċ Ġ* Ġ</ s late _ header > Ċ Ġ*/ Ċ Ċ package Ġs late kit . common . args Ċ Ċ import Ġs late kit . common . lex . Lex Result Ċ import Ġs late kit . common . lex . Lexer Ċ import Ġs late kit . results . Failure Ċ import Ġs late kit . results . Success Ċ import Ġs late kit . results . Try Ċ import Ġs late kit . results . builders . T ries Ċ import Ġs late kit . results . then Ċ Ċ /** Ċ Ġ* ĠParses Ġarguments . Ċ Ġ*/ Ċ object ĠArgs Service Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠParses Ġthe Ġarguments Ġusing Ġthe Ġsupplied Ġprefix Ġand Ġseparator Ġfor Ġthe Ġargs . ĊĠĠĠĠ Ġ* Ġe . g . Ġusers . activate Ġ- email : k ish ore @ gmail . com Ġ- code : 1 2 3 4 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtext Ġ: Ġthe Ġraw Ġline Ġof Ġtext Ġto Ġparse Ġinto Ġ{ action } Ġ{ key / value } * Ġ{ position } * ĊĠĠĠĠ Ġ* Ġ@ param Ġprefix Ġ: Ġthe Ġprefix Ġfor Ġa Ġnamed Ġkey / value Ġpair Ġe . g . Ġ"-" Ġas Ġin Ġ- env = dev ĊĠĠĠĠ Ġ* Ġ@ param Ġsep Ġ: Ġthe Ġseparator Ġfor Ġa Ġn ma ed Ġkey / value Ġpair Ġe . g . Ġ"=" Ġas Ġin Ġ- env = dev ĊĠĠĠĠ Ġ* Ġ@ param Ġhas Action : Ġwhether Ġthe Ġline Ġof Ġtext Ġhas Ġan Ġaction Ġbefore Ġany Ġnamed Ġargs . ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . g . Ġname . action Ġ{ named arg } * ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġparse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefix : ĠString Ġ= ĠArgs . PREFIX , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsep : ĠString Ġ= ĠArgs . SEPARATOR , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Action : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Char : ĠString Ġ= ĠArgs . META _ CHAR , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsys Char : ĠString Ġ= ĠArgs . SYS _ CHAR ĊĠĠĠ Ġ): ĠTry < Args > Ġ{ ĊĊĠĠĠĠĠĠĠĠ Ġ// ĠNOTE : Ġ. then Ġ= Ġflat Map ĊĠĠĠĠĠĠĠĠ Ġreturn Ġclean se ( text ) ĊĠĠĠĠĠĠĠ Ġ. then Ġ{ Ġline : String ĠĠĠĠĠĠĠĠ Ġ-> Ġtokenize ( line ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. then Ġ{ Ġresult : Lex Result ĠĠĠ Ġ-> Ġconvert ( result ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. then Ġ{ Ġtokens : List < String > Ġ-> Ġprocess ( text . trim (), Ġtokens , Ġprefix , Ġsep , Ġhas Action , Ġmeta Char , Ġsys Char ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClean se Ġthe Ġline Ġbefore Ġprocessing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġclean se ( line : String ): ĠTry < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcleaned Ġ= Ġline . trim () ĊĠĠĠĠĠĠĠ Ġreturn ĠSuccess ( cleaned ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠToken ize Ġthe Ġline Ġby Ġparsing Ġit Ġlex ically ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtokenize ( line : ĠString ): ĠTry < Lex Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠLex er ( line ). parse () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( result . success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠFailure ( Exception ( result . message ), Ġmsg Ġ= Ġresult . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠSuccess ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠValidate Ġthe Ġtokens ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconvert ( lex Result : Lex Result ): ĠTry < List < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġlex Result . tokens . map Ġ{ Ġt Ġ-> Ġt . text Ġ}. take ( lex Result . tokens . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSuccess ( args ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinally Ġparse Ġthe Ġtokens Ġinto Ġarguments ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġprocess ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtokens : ĠList < String >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefix : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsep : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Action : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Char : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsys Char : ĠString ĊĠĠĠ Ġ): ĠTry < Args > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠT ries . of Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġinput Ġ= Ġ" area . api . action Ġ- arg 1 =" 1 " Ġ- arg 2 =" 2 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresult Ġ= Ġ" area . api . action " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠArgs Parser ( prefix , Ġsep , Ġmeta Char , Ġsys Char ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġif Ġ( has Action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Result Ġ= Ġparser . parse Action ( tokens , Ġprefix , Ġmeta Char , Ġsys Char ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġof Ġnamed Ġargs Ġis Ġalways Ġ 1 Ġafter Ġthe Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Of Named Args Ġ= Ġif Ġ( action Result . pos Ġ== Ġ 0 ) Ġ 0 Ġelse Ġaction Result . pos Last ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( action Result . action , Ġaction Result . actions , Ġstart Of Named Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ("", ĠlistOf (), Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġaction = Ġ" area . api . action " Ġe . g . Ġ" app . users . activate " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġresult . first ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġe . g . Ġ[" area ", Ġ" api ", Ġ" action "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġver bs Ġ= Ġresult . second ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġindex Ġafter Ġthe Ġaction Ġwhere Ġthe Ġnamed Ġarguments Ġbegin . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Of Named Args Ġ= Ġresult . third ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġfor Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Result Ġ= Ġif Ġ( start Of Named Args Ġ>= Ġtokens . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParsed Args ( map Of (), Ġmap Of (), Ġmap Of (), Ġstart Of Named Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . parse Named ( tokens , Ġstart Of Named Args ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġof Ġindex Ġargs Ġis Ġalways Ġ 1 Ġafter Ġthe Ġnamed Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Of Index Args Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args Result . nd x Ġ== Ġstart Of Named Args ) Ġstart Of Named Args ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġargs Result . nd x Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Result : ĠList < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tokens . isNotEmpty () Ġ&& Ġstart Of Index Args Ġ>= Ġ 0 Ġ&& Ġstart Of Index Args Ġ<= Ġ( tokens . size Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . sub List ( args Result . nd x , Ġtokens . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠArgs ( line , Ġtokens , Ġaction , Ġver bs . toList (), Ġprefix , Ġsep , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Result . named , Ġargs Result . meta , Ġargs Result . sys , Ġindex Result , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ