/** Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠRo yal ĠBank Ġof ĠS co tl and Ċ Ġ* Ċ Ġ* Ġ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 Ġio . blue bank . bra id . core . json schema Ċ Ċ import Ġcom . fasterxml . jackson . databind . Java Type Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . type . Type Factory Ċ import Ġcom . fasterxml . jackson . module . json Schema . Json Schema Ċ import Ġcom . fasterxml . jackson . module . json Schema . factories . Schema Factory Wrapper Ċ import Ġcom . fasterxml . jackson . module . json Schema . types . Object Schema Ċ import Ġio . blue bank . bra id . core . annotation . Method Description Ċ import Ġio . blue bank . bra id . core . reflection . underlying GenericType Ċ import Ġio . blue bank . bra id . core . service . MethodDescriptor Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġio . vertx . kotlin . core . json . json Ċ import Ġio . vertx . kotlin . core . json . obj Ċ import Ġrx . Observable Ċ import Ġjava . lang . reflect . Constructor Ċ import Ġjava . lang . reflect . Method Ċ Ċ fun ĠMethod . to Descriptor (): ĠMethod Descriptor Ġ{ ĊĠ Ġval Ġservice Annotation Ġ= Ġget Annotation < Method Description >( Method Description :: class . java ) ĊĠ Ġval Ġname Ġ= Ġthis . name ĊĠ Ġval Ġparams Ġ= Ġparameters . map Ġ{ Ġit . name Ġto Ġit . type . to Javascript Type () Ġ}. toMap () ĊĊĠ Ġval Ġreturn Description Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġservice Annotation Ġ!= Ġnull Ġ&& Ġservice Annotation . returnType Ġ!= ĠAny :: class Ġ-> ĊĠĠĠĠĠ Ġservice Annotation . returnType . java ObjectType . to Javascript Type () ĊĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠ ĠType Factory . default Instance () ĊĠĠĠĠĠĠĠ Ġ. construct Type ( generic ReturnType . underlying GenericType ()). to Javascript Type () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval Ġreturn Prefix Ġ= Ġif Ġ( returnType Ġ== ĠObservable :: class . java ) Ġ{ ĊĠĠĠ Ġ" stream - of Ġ" ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġ"" ĊĠ Ġ} ĊĠ Ġval Ġdescription Ġ= Ġservice Annotation ?. description Ġ?: Ġ"" ĊĠ Ġreturn ĠMethod Descriptor ( name , Ġdescription , Ġparams , Ġreturn Prefix Ġ+ Ġreturn Description ) Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny > ĠConstructor < T >. to Descriptor (): ĠMethod Descriptor Ġ{ ĊĠ Ġval Ġname Ġ= Ġthis . name ĊĠ Ġval Ġparams Ġ= Ġparameters . map Ġ{ Ġit . name Ġto Ġit . type . to Javascript Type () Ġ}. toMap () ĊĠ Ġval Ġreturn Description Ġ= Ġthis . decl aring Class . to Javascript Type () ĊĠ Ġval Ġdescription Ġ= Ġthis . decl aring Class . to Simple Javascript Type () ĊĠ Ġreturn ĠMethod Descriptor ( ĊĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠ Ġparameters Ġ= Ġparams , ĊĠĠĠ ĠreturnType Ġ= Ġreturn Description ĊĠ Ġ) Ċ } Ċ Ċ fun ĠClass <* >. to Javascript Type (): ĠString Ġ= Ġdescribe Class ( this ) Ċ fun ĠJava Type . to Javascript Type (): ĠString Ġ= Ġdescribe Java Type ( this ) Ċ Ċ fun ĠClass <* >. to Simple Javascript Type (): ĠString Ġ= Ġdescribe Class Simple ( this ) Ċ Ċ fun Ġdescribe Class Simple ( clazz : ĠClass < *> ): ĠString Ġ{ ĊĠ Ġreturn Ġif Ġ( clazz . is Primitive Ġ|| Ġclazz Ġ== ĠString :: class . java ) Ġ{ ĊĠĠĠ Ġdescribe Class ( clazz ) ĊĠ Ġ} Ġelse Ġif Ġ( clazz . isArray ) Ġ{ ĊĠĠĠ Ġ" array " ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġclazz . simple Name ĊĠ Ġ} Ċ } Ċ Ċ fun Ġdescribe Class ( clazz : ĠClass < *> ): ĠString Ġ{ ĊĠ Ġval Ġmapper Ġ= ĠObjectMapper () ĊĠ Ġval Ġvisitor Ġ= ĠSchema Factory Wrapper () ĊĠ Ġmapper . accept Json Format Visitor ( clazz , Ġvisitor ) ĊĠ Ġreturn Ġdescribe ( visitor . final Schema ()). replace (" \"", Ġ"") Ċ } Ċ Ċ fun Ġdescribe Java Type ( type : ĠJava Type ): ĠString Ġ{ ĊĠ Ġval Ġmapper Ġ= ĠObjectMapper () ĊĠ Ġval Ġvisitor Ġ= ĠSchema Factory Wrapper () ĊĠ Ġmapper . accept Json Format Visitor ( type , Ġvisitor ) ĊĠ Ġreturn Ġdescribe ( visitor . final Schema ()). replace (" \"", Ġ"") Ċ } Ċ Ċ private Ġfun Ġdescribe ( value : ĠJson Schema ): ĠString Ġ= Ġdescribe As Object ( value ). toString () Ċ Ċ private Ġfun Ġdescribe As Object ( value : ĠJson Schema ): ĠAny Ġ{ ĊĠ Ġreturn Ġif Ġ( value Ġis ĠObject Schema ) Ġ{ ĊĠĠĠ Ġdescribe Properties ( value ) ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġvalue . type . value () ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġdescribe Properties ( value : ĠObject Schema ): ĠJsonObject Ġ{ ĊĠ Ġreturn Ġjson Ġ{ ĊĠĠĠ Ġobj Ġ{ ĊĠĠĠĠĠ Ġval Ġjo Ġ= Ġthis ĊĠĠĠĠĠ Ġvalue . properties . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġjo . put ( it . key , Ġdescribe As Object ( it . value )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }