/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 Ġdz iko ys k Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . repos il ite . shared . extensions Ċ Ċ import Ġcom . repos il ite . VERSION Ċ import Ġp anda . std . Result Ċ import Ġp anda . std . as Success Ċ import Ġpic oc li . CommandLine Ċ import Ġjava . util . Tree Set Ċ Ċ abstract Ġclass ĠValidator Ġ: ĠRunnable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ Ġ} Ċ } Ċ Ċ internal Ġdata Ġclass ĠCommand Configuration < VALUE >( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġconfiguration : ĠVALUE Ċ ) Ċ Ċ internal Ġfun Ġ< CONFIGURATION Ġ: ĠRunnable > Ġload Command Based Configuration ( configuration : ĠCONFIG URATION , Ġdescription : ĠString ): ĠCommand Configuration < CONFIGURATION > Ġ= ĊĠĠĠ Ġdescription . split (" Ġ", Ġlimit Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠCommand Configuration ( it [ 0 ], Ġit . getOrElse ( 1 ) Ġ{ Ġ"" Ġ}) Ġ} ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ ĠCommandLine ( configuration ). execute (* split Arguments ( it . configuration )) Ġ} ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠCommand Configuration ( it . name , Ġconfiguration ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . configuration . run () Ġ} Ċ Ċ private Ġfun Ġsplit Arguments ( args : ĠString ): ĠArray < String > Ġ= ĊĠĠĠ Ġif Ġ( args . isEmpty ()) ĠarrayOf () Ġelse Ġargs . split (" Ġ"). to Typed Array () Ċ Ċ internal Ġfun Ġcreate Command Help ( commands : ĠMap < String , ĠCommandLine >, Ġrequested Command : ĠString ): ĠResult < List < String >, ĠString > Ġ{ ĊĠĠĠ Ġif Ġ( requested Command . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcommands [ requested Command ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠlistOf ( it . usage Message ). as Success () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Unknown Ġcommand Ġ'$ requested Command '") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġunique Commands : ĠMutable Set < CommandLine > Ġ= ĠTree Set ( Comparator . comp aring Ġ{ Ġit . command Name Ġ}) ĊĠĠĠ Ġunique Commands . addAll ( commands . values ) ĊĊĠĠĠ Ġval Ġresponse Ġ= Ġmutable ListOf (" Repos il ite Ġ$ VERSION ĠCommands :") ĊĊĠĠĠ Ġunique Commands ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspecification Ġ= Ġcommand . command Spec ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . add (" Ġ Ġ" Ġ+ Ġcommand . command Name Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( specification . args (). isEmpty ()) Ġ"" Ġelse Ġ" Ġ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecification . args (). join ToString ( separator Ġ= Ġ" Ġ", Ġtransform Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Option ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoption Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . required ()) Ġoption Ġ+= Ġ"[" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Ġ+= Ġ"-- " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Ġ+= Ġif Ġ( it . param Label (). startsWith ("< ")) Ġit . param Label (). substring ( 1 ). drop Last ( 1 ) Ġelse Ġit . param Label () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . type () Ġ!= ĠBoolean :: class . java Primitive Type ) Ġoption Ġ+= Ġ" =< value >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . required ()) Ġoption Ġ+= Ġ" ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġit . param Label () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ- Ġ${ specification . usage Message (). description (). join ToString (". Ġ") }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresponse . as Success () Ċ } Ċ