package Ġio . v rap . codegen . languages . jav al ang . client . builder . requests Ċ Ċ import Ġcom . google . inject . Inject Ċ import Ġio . v rap . codegen . languages . extensions . resource Ċ import Ġio . v rap . codegen . languages . extensions . to Comment Ċ import Ġio . v rap . codegen . languages . extensions . to Request Name Ċ import Ġio . v rap . codegen . languages . java . base . Java Sub Templates Ċ import Ġio . v rap . codegen . languages . java . base . extensions .* Ċ import Ġio . v rap . rm f . codegen . io . Template File Ċ import Ġio . v rap . rm f . codegen . rend ring . Method Renderer Ċ import Ġio . v rap . rm f . codegen . rend ring . utils . escape All Ċ import Ġio . v rap . rm f . codegen . rend ring . utils . keep Indent ation Ċ import Ġio . v rap . rm f . codegen . types . V rap ObjectType Ċ import Ġio . v rap . rm f . codegen . types . V rap Scalar Type Ċ import Ġio . v rap . rm f . codegen . types . V rap Type Ċ import Ġio . v rap . rm f . codegen . types . V rap Type Provider Ċ import Ġio . v rap . rm f . r aml . model . resources . Method Ċ import Ġio . v rap . rm f . r aml . model . types . QueryParameter Ċ import Ġio . v rap . rm f . r aml . model . util . String Case Format Ċ import Ġorg . eclipse . emf . ecore . EObject Ċ Ċ /** Ċ Ġ* ĠQuery Ġparameters Ġwith Ġthis Ġannotation Ġshould Ġbe Ġignored Ġby ĠJVM Ġsdk . Ċ Ġ*/ Ċ const Ġval ĠPL ACE HOLDER _ PARAM _ AN NOT ATION Ġ= Ġ" placeholder Param " Ċ Ċ class ĠJava HttpRequest Renderer Ġ@ Inject Ġconstructor ( override Ġval Ġv rap Type Provider : ĠV rap Type Provider ) Ġ: ĠMethod Renderer , ĠJava ObjectType Extensions , ĠJava E ObjectType Extensions Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( type : ĠMethod ): ĠTemplate File Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv rap Type Ġ= Ġv rap Type Provider . do Switch ( type Ġas ĠE Object ) Ġas ĠV rap ObjectType ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| package Ġ${ v rap Type .` package `. to Java Package ()}; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . v rap . rm f . base . client . utils . Utils ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . v rap . rm f . base . client . utils . json . V rap Json Utils ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . io . InputStream ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . io . IOException ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . net . URI ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . nio . file . Files ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . time . Duration ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . util . ArrayList ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . util . List ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . util . Map ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . util . HashMap ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . util . stream . Collectors ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . util . concurrent . Comp letableFuture ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . v rap . rm f . base . client . utils . Generated ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . io . Unsupported EncodingException ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . net . URL Encoder ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . v rap . rm f . base . client .*; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ type . imports ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġstatic Ġio . v rap . rm f . base . client . utils . Client Utils . blocking Wait ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|< ${ type . to Comment (). escape All () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|< ${ Java Sub Templates . generated Annotation }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass Ġ${ type . to Request Name ()} Ġextends ĠApi Method \< ${ type . to Request Name () }\ > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . fields () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . constructor () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . copy Constructor () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . create Request Method () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . execute Blocking Method () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . execute Method () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . path Arguments Get ters () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . queryParams Get ters () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . path Arguments Set ters () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ type . queryParams Set ters () }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. keep Indent ation () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTemplate File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Path Ġ= Ġ"${ v rap Type .` package ` }.${ type . to Request Name ()} ". replace (".", Ġ"/") Ġ+ Ġ". java ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . constructor (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Arguments Ġ= Ġmutable ListOf (" final ĠApi HttpClient Ġapi HttpClient ") ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Assignments Ġ= Ġmutable ListOf (" super ( api HttpClient ); ") ĊĊĠĠĠĠĠĠĠ Ġthis . path Arguments (). map Ġ{ Ġ" String Ġ$ it " Ġ}. forEach Ġ{ Ġconstructor Arguments . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġthis . path Arguments (). map Ġ{ Ġ" this .$ it Ġ= Ġ$ it ;" Ġ}. forEach Ġ{ Ġconstructor Assignments . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( this . bodies Ġ!= Ġnull Ġ&& Ġthis . bodies . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this . bodies [ 0 ]. type . to V rap Type () Ġis ĠV rap ObjectType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Body V rap Type Ġ= Ġthis . bodies [ 0 ]. type . to V rap Type () Ġas ĠV rap ObjectType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Body Argument Ġ= Ġ"${ method Body V rap Type .` package `. to Java Package ()}. ${ method Body V rap Type . simple ClassName } Ġ${ method Body V rap Type . simple ClassName . de capitalize () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Arguments . add ( method Body Argument ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Body Assignment Ġ= Ġ" this .${ method Body V rap Type . simple ClassName . de capitalize ()} Ġ= Ġ${ method Body V rap Type . simple ClassName . de capitalize ()}; " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Assignments . add ( method Body Assignment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Arguments . add (" com . fasterxml . jackson . databind . JsonNode Ġjson Node ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Assignments . add (" this . json Node Ġ= Ġjson Node ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| public Ġ${ this . to Request Name ()} (${ constructor Arguments . join ToString ( separator Ġ= Ġ", Ġ") }) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ constructor Assignments . join ToString ( separator Ġ= Ġ"\ n ") }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin (). keep Indent ation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . copy Constructor (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Assignments Ġ= Ġmutable ListOf (" super ( t ); ") ĊĊĠĠĠĠĠĠĠ Ġthis . path Arguments (). map Ġ{ Ġ" this .$ it Ġ= Ġt .$ it ;" Ġ}. forEach Ġ{ Ġconstructor Assignments . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( this . bodies Ġ!= Ġnull Ġ&& Ġthis . bodies . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this . bodies [ 0 ]. type . to V rap Type () Ġis ĠV rap ObjectType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Body V rap Type Ġ= Ġthis . bodies [ 0 ]. type . to V rap Type () Ġas ĠV rap ObjectType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Body Assignment Ġ= Ġ" this .${ method Body V rap Type . simple ClassName . de capitalize ()} Ġ= Ġt .${ method Body V rap Type . simple ClassName . de capitalize ()}; " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Assignments . add ( method Body Assignment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Assignments . add (" this . json Node Ġ= Ġt . json Node ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| public Ġ${ this . to Request Name ()} (${ this . to Request Name ()} Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ< ${ constructor Assignments . join ToString ( separator Ġ= Ġ"\ n ") }> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin (). keep Indent ation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . fields (): ĠString ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Args Ġ= Ġthis . path Arguments (). map Ġ{ Ġ" private ĠString Ġ$ it ;" Ġ}. join ToString ( separator Ġ= Ġ"\ n ") ĊĊĠĠĠĠĠĠĠ Ġval Ġbody : ĠString Ġ= Ġif ( this . bodies Ġ!= Ġnull Ġ&& Ġthis . bodies . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this . bodies [ 0 ]. type . to V rap Type () Ġis ĠV rap ObjectType ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Body V rap Type Ġ= Ġthis . bodies [ 0 ]. type . to V rap Type () Ġas ĠV rap ObjectType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" private Ġ${ method Body V rap Type .` package `. to Java Package ()}. ${ method Body V rap Type . simple ClassName } Ġ${ method Body V rap Type . simple ClassName . de capitalize ()}; " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" private Ġcom . fasterxml . jackson . databind . JsonNode Ġjson Node ;" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ""" | ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| <$ path Args > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| <$ body > ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠQuery Parameter . fieldName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString Case Format . LOWER _ C AME L _ CASE . apply ( this . name . replace (".", Ġ"- ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . path Arguments () Ġ: ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . resource (). full Uri . variables . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . create Request Method () Ġ: ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Arguments Ġ= Ġthis . path Arguments (). map Ġ{ Ġ" {$ it }" Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġstring Format Ġ= Ġthis . resource (). full Uri . template ĊĠĠĠĠĠĠĠ Ġpath Arguments . forEach Ġ{ Ġstring Format Ġ= Ġstring Format . replace ( it , Ġ"% s ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstring Format Args Ġ= Ġpath Arguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . replace ("{ ", Ġ""). replace (" }", Ġ"") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" this .$ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ", Ġ") ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Name Ġ: ĠString ? Ġ= Ġif ( this . bodies Ġ!= Ġnull Ġ&& Ġthis . bodies . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this . bodies [ 0 ]. type . to V rap Type () Ġis ĠV rap ObjectType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Body V rap Type Ġ= Ġthis . bodies [ 0 ]. type . to V rap Type () Ġas ĠV rap ObjectType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body V rap Type . simple ClassName . de capitalize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" json Node " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Path Generation Ġ: ĠString Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| List < String > Ġparams Ġ= Ġnew ĠArrayList <>( getQuery Param Uri Strings ()); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| String ĠhttpRequest Path Ġ= ĠString . format ("$ string Format ", Ġ$ string Format Args ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| if (! params . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠhttpRequest Path Ġ+= Ġ" ?" Ġ+ ĠString . join ("& ", Ġparams ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin (). escape All () ĊĠĠĠĠĠĠĠ Ġval Ġbody Setter : ĠString Ġ= Ġif ( body Name Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this . bodies [ 0 ]. type . isFile ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| try Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġnew ĠApi HttpRequest ( Api HttpMethod .${ this . method . name }, ĠURI . create ( httpRequest Path ), Ġget Headers (), ĠFiles . read All Bytes ( file . to Path ())); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } Ġcatch Ġ( Exception Ġe ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġe . printStackTrace (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| try Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfinal Ġbyte [] Ġbody Ġ= Ġapi HttpClient (). get Serializer Service (). toJson ByteArray ($ body Name ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġnew ĠApi HttpRequest ( Api HttpMethod .${ this . method . name }, ĠURI . create ( httpRequest Path ), Ġget Headers (), Ġbody ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } Ġcatch ( Exception Ġe ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġe . printStackTrace (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| public ĠApi HttpRequest Ġcreate HttpRequest () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ<$ request Path Generation > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ$ body Setter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġnew ĠApi HttpRequest ( Api HttpMethod .${ this . method . name }, ĠURI . create ( httpRequest Path ), Ġget Headers (), Ġnull ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . execute Blocking Method () Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| public ĠApi HttpResponse \< ${ this . java ReturnType ( v rap Type Provider )}\ > Ġexecute Blocking (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġexecute Blocking ( Duration . of Seconds ( 6 0 )); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| public ĠApi HttpResponse \< ${ this . java ReturnType ( v rap Type Provider )}\ > Ġexecute Blocking ( Duration Ġtimeout ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġblocking Wait ( execute (), Ġtimeout ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . execute Method () Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| public ĠCompletableFuture \< Api HttpResponse \< ${ this . java ReturnType ( v rap Type Provider )}\ >\ > Ġexecute (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġapi HttpClient (). execute ( this . create HttpRequest (), Ġ${ this . java ReturnType ( v rap Type Provider )}. class ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . path Arguments Get ters () Ġ: ĠString Ġ= Ġthis . path Arguments () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" public ĠString Ġget ${ it . capitalize ()} () Ġ{ return Ġthis .$ it ; }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"\ n ") ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . path Arguments Set ters () Ġ: ĠString Ġ= Ġthis . path Arguments () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" public Ġvoid Ġset ${ it . capitalize ()} ( final ĠString Ġ$ it ) Ġ{ Ġthis .$ it Ġ= Ġ$ it ; Ġ}" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"\ n \ n ") ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . queryParams Get ters () Ġ: ĠString Ġ= Ġthis . query Parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . getAnnotation ( PLACE HOLDER _ PARAM _ AN NOT ATION , Ġtrue ) Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| public ĠList < String > Ġget ${ it . fieldName (). capitalize ()} () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġthis . getQuery Param ("${ it . fieldName ()} "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin (). escape All () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"\ n \ n ") ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . queryParams Set ters () Ġ: ĠString Ġ= Ġthis . query Parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . getAnnotation ( PLACE HOLDER _ PARAM _ AN NOT ATION , Ġtrue ) Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| public Ġ${ this . to Request Name ()} Ġwith ${ it . fieldName (). capitalize ()} ( final Ġ${ it . type . to V rap Type (). simple Name ()} Ġ${ it . fieldName ()} ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġnew Ġ${ this . to Request Name ()} ( this ). add QueryParam ("${ it . fieldName () }", Ġ${ it . fieldName () }); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin (). escape All () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"\ n \ n ") ĊĊĠĠĠ Ġprivate Ġfun ĠMethod . imports (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . query Parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type . to V rap Type () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ! is ĠV rap Scalar Type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Imports ForType ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . isNull Or Blank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" import Ġ${ it }; " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"\ n ") ĊĊĠĠĠ Ġ} Ċ } Ċ