/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 0 8 - 2 0 1 8 ĠHa ul mont . Ċ Ġ* Ċ Ġ* Ġ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 . ha ul mont . cli . core Ċ Ċ import Ġcom . be ust . j command er . Missing Command Exception Ċ import Ġcom . be ust . j command er . Parameter Exception Ċ import Ġcom . google . common . event bus . EventBus Ċ import Ġcom . ha ul mont . cli . core . commands .* Ċ import Ġcom . ha ul mont . cli . core . event . After Command Execution Event Ċ import Ġcom . ha ul mont . cli . core . event . Before Command Execution Event Ċ import Ġcom . ha ul mont . cli . core . event . Error Event Ċ import Ġorg . kode in . di . generic . instance Ċ Ċ class ĠSingle Command Cli ( private Ġval Ġargs : ĠArray < String >, Ġcommands Registry : ĠCommands Registry ) Ġ: ĠCli Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbus : ĠEvent Bus Ġby Ġk ode in . instance () ĊĊĠĠĠ Ġprivate Ġval Ġprint Helper : ĠPrint Helper Ġby Ġk ode in . instance () ĊĊĠĠĠ Ġprivate Ġval Ġcommand Parser : ĠCommand Parser Ġ= ĠCommand Parser ( commands Registry . apply (:: register Base Commands ), Ġfalse ) ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Parser . parse Command ( args ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠMissing Command Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Helper . unrecognized Command () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠParameter Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Helper . unrecognized Parameters ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġeval Command ( command ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġeval Command ( command : ĠCli Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Common Parameters . help ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Parser . print Help ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbus . post ( Before Command Execution Event ( command )) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHelp Command Ġ-> Ġcommand Parser . print Help () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcommand . execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Helper . handle Command Exception ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbus . post ( Error Event ( e )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbus . post ( After Command Execution Event ( command )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġregister Base Commands ( commands Registry : ĠCommands Registry ) Ġ= ĊĠĠĠĠĠĠĠ Ġcommands Registry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand (" help ", ĠHelp Command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand (" version ", ĠVersion Command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand (" parameters ", ĠShow Non Interactive Parameters ( commands Registry )) ĊĠĠĠĠĠĠĠ Ġ}