package Ġdev . dev ura . par al in Ċ Ċ import Ġio . jav al in . http . Context Ċ import Ġio . jav al in . plugin . json . J aval in Json Ċ import Ġjava . security . Invalid Parameter Exception Ċ Ċ open Ġclass ĠPar al in Ġprivate Ġconstructor ( private Ġval Ġctx : ĠContext ) Ġ: ĠPar al in Http Builder , ĠPar al in Options Builder Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġhttp : ĠPar al in Http ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġkey : ĠString ĊĠĠĠ Ġprivate Ġvar Ġmatch Pattern : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġverify Block : Ġ(( String ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdefault : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsplit Pattern : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsplit Index : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlength : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġexc : ĠClass < *> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrange : ĠPair < Int , ĠInt >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcontains Pattern : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠEntry Ġpoint Ġfor Ġextracting Ġhttp Ġparameter ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġ[ ctx ] Ġis Ġa ĠJ aval in Ġ[ Context ] Ġobject ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ[ Par al in Http Builder ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġwith ( ctx : ĠContext ): ĠPar al in Http Builder Ġ= ĠPar al in ( ctx ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġheader ( key : ĠString ): ĠPar al in Options Builder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . http Ġ= ĠPar al in Http . HEADER ĊĠĠĠĠĠĠĠ Ġthis . key Ġ= Ġkey ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery ( key : ĠString ): ĠPar al in Options Builder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . http Ġ= ĠPar al in Http . QUERY ĊĠĠĠĠĠĠĠ Ġthis . key Ġ= Ġkey ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġform ( key : ĠString ): ĠPar al in Options Builder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . http Ġ= ĠPar al in Http . FORM ĊĠĠĠĠĠĠĠ Ġthis . key Ġ= Ġkey ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmatch ( regex : ĠString ): ĠPar al in Options Builder Ġ= Ġapply { Ġthis . match Pattern Ġ= Ġregex Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġverify ( block : Ġ( String ) Ġ-> ĠBoolean ): ĠPar al in Options Builder Ġ= Ġapply { Ġthis . verify Block Ġ= Ġblock Ġ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdefault ( value : ĠString ): ĠPar al in Options Builder Ġ= Ġapply { Ġthis . default Ġ= Ġvalue Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsplit ( pattern : ĠString , Ġindex : ĠInt ): ĠPar al in Options Builder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . split Pattern Ġ= Ġpattern ĊĠĠĠĠĠĠĠ Ġthis . split Index Ġ= Ġindex ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlength ( n : ĠInt ): ĠPar al in Options Builder Ġ= Ġapply Ġ{ Ġthis . length Ġ= Ġn Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrange ( from : ĠInt , Ġto : ĠInt ): ĠPar al in Options Builder Ġ= Ġapply Ġ{ Ġthis . range Ġ= ĠPair ( from , Ġto ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( value : ĠString ): ĠPar al in Options Builder Ġ= Ġapply { Ġthis . contains Pattern Ġ= Ġvalue Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparam Ġ= Ġ( http ( key ) Ġ?: Ġdefault Ġ?: Ġthrow Ġgen Exc ( Par al in Exc Msg . MISSING , Ġexc )). trim () ĊĠĠĠĠĠĠĠ Ġif Ġ( param Ġ== Ġ"") Ġthrow Ġgen Exc ( Par al in Exc Msg . INVALID _ EMPTY , Ġexc ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( split Pattern Ġ!= Ġnull Ġ&& Ġsplit Index Ġ!= Ġnull Ġ&& Ġparam Ġ!= Ġdefault ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam Ġ= Ġparam . split ( split Pattern !! )[ split Index !! ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Length Ġ= Ġparam . length Ġ== Ġlength ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Length ) Ġthrow Ġgen Exc ( Par al in Exc Msg . INVALID _ SIZE , Ġexc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( range Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin Range Ġ= Ġparam . length Ġ>= Ġrange !!. first Ġ&& Ġparam . length Ġ< Ġrange !!. second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! in Range ) Ġthrow Ġgen Exc ( Par al in Exc Msg . INVALID _ SIZE , Ġexc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( contains Pattern Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontains Ġ= Ġparam . contains ( contains Pattern !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! contains ) Ġthrow Ġgen Exc ( Par al in Exc Msg . INVALID _ VALUE , Ġexc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( verify Block Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! verify Block !!. invoke ( param )) Ġthrow Ġgen Exc ( Par al in Exc Msg . INVALID _ VALUE , Ġexc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( match Pattern Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= ĠRegex ( match Pattern !! ). matches ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! matches ) Ġthrow Ġgen Exc ( Par al in Exc Msg . INVALID _ VALUE , Ġexc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġparam ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun < T Ġ: ĠException > Ġthrow Exc ( exc : ĠClass < T >): ĠPar al in Options Builder Ġ= Ġapply Ġ{ Ġthis . exc Ġ= Ġexc Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Int (): ĠInt Ġ= Ġas String (). toInt () ĊĊĠĠĠ Ġoverride Ġfun Ġas String OrNull (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ Ġas String () Ġ} Ġcatch ( exc : ĠException ) Ġ{ Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Int OrNull (): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ Ġas Int () Ġ} Ġcatch Ġ( exc : ĠException ) Ġ{ Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Double (): ĠDouble Ġ= Ġas String (). toDouble () ĊĊĠĠĠ Ġoverride Ġfun Ġas Double OrNull (): ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġas String (). toDouble OrNull () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun < T Ġ: ĠEnum < T >> Ġas Enum ( enum Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjava . lang . Enum . valueOf ( enum Class , Ġas String (). toUpperCase ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠEnum < T >> Ġas Enum OrNull ( enum Class : ĠClass < T >): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġas Enum ( enum Class ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠException ) Ġ{ Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġas Json Obj ( obj Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJ aval in Json . fromJson ( asString (), Ġobj Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġas Json Obj OrNull ( obj Class : ĠClass < T >): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparam Ġ= Ġas String OrNull () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ aval in Json . fromJson ( param , Ġobj Class ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠException ) Ġ{ Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhttp ( key : ĠString ): ĠString ? Ġ= Ġwhen Ġ( http ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPar al in Http . HEADER Ġ-> Ġctx . header ( key ) ĊĠĠĠĠĠĠĠ ĠPar al in Http . QUERY Ġ-> Ġctx . query Param ( key ) ĊĠĠĠĠĠĠĠ ĠPar al in Http . FORM Ġ-> Ġctx . form Param ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Exc ( msg : ĠString , Ġexc Class : ĠClass < *> ? Ġ= Ġnull ): ĠException Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexc Ġ= Ġexc Class Ġ?: ĠPar al in Exc :: class . java ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexc . get Constructor ( String :: class . java ). newInstance ( msg ) Ġas ĠException ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠException ) Ġ{ Ġthrow ĠInvalid Parameter Exception () Ġ} ĊĠĠĠ Ġ} Ċ Ċ }