package Ġs late kit . apis . codegen Ċ Ċ import Ġs late kit . apis . core . Api Ċ import Ġs late kit . apis . core . Action Ċ import Ġs late kit . apis . helpers . Api Helper Ċ import Ġs late kit . apis . security . Ver bs Ċ import Ġs late kit . common .* Ċ import Ġs late kit . common . io . Files Ċ import Ġs late kit . common . requests . Request Ċ import Ġs late kit . common . utils . Props Ċ import Ġs late kit . meta . K Types Ċ import Ġs late kit . meta . Reflect or Ċ import Ġjava . io . File Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Parameter Ċ import Ġkotlin . reflect . K Type Ċ import Ġkotlin . reflect . full . declared Member Functions Ċ Ċ abstract Ġclass ĠCode Gen Base ( val Ġsettings : ĠCode Gen Settings ) Ġ{ ĊĊĠĠĠ Ġopen Ġval Ġbasic Types Ġ= Ġmap Of < K Type , ĠType Info >() ĊĊĠĠĠ Ġopen Ġval Ġtemplate Class Suffix Ġ= Ġ" Api " ĊĊĠĠĠ Ġopen Ġfun Ġtemplate Class (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠgetContent ( settings . templates Folder , Ġsettings . class File ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġtemplate Model (): ĠString Ġ= ĠgetContent ( settings . templates Folder , Ġsettings . model File ) ĊĊĠĠĠ Ġopen Ġfun Ġtemplate Method (): ĠString Ġ= ĠgetContent ( settings . templates Folder , Ġsettings . method File ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ command =" codegen " Ġ- lang =" java " Ġ- package =" bl endl ife . api " Ġ- path To Templates =" C :\ Dev \ github \ blend - server \ scripts \ templates \ codegen " ĊĠĠĠĠ Ġ* Ġ Ġ- name Of Template Class =" codegen - java - api . txt " ĊĠĠĠĠ Ġ* Ġ Ġ- name Of Template Method =" codegen - java - method . txt " ĊĠĠĠĠ Ġ* Ġ Ġ- name Of Template Model =" codegen - java - model . txt " ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgenerate ( req : ĠRequest ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= Ġthis . settings . host . ctx . logs . getLogger (" s late ") ĊĠĠĠĠĠĠĠ Ġval Ġdirs Ġ= Ġthis . settings . host . ctx . dirs ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġtemplates Ġfolder Ġexists ĊĠĠĠĠĠĠĠ Ġval Ġtemplates FolderPath Ġ= ĠU ris . interpret ( settings . templates Folder ) ĊĠĠĠĠĠĠĠ Ġval Ġtemplates Folder Ġ= ĠFile ( templates FolderPath ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! templates Folder . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Templates Ġfolder : Ġ${ templates Folder . absolute Path } Ġdoes Ġnot Ġexist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput FolderPath Raw Ġ= Ġthis . settings . output Folder . orElse ( dirs ?. path To Outputs Ġ?: ĠProps . tmp Dir ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput FolderPath Ġ= ĠU ris . interpret ( output FolderPath Raw ) ĊĠĠĠĠĠĠĠ Ġval Ġdate Folder Ġ= ĠFiles . folder Name By Date () ĊĊĠĠĠĠĠĠĠ Ġ// ĠC :\ Users \ kv \ bl endl ife - kotlin \ core \ blend . cli \ output \ 2 0 1 7 - 1 1 - 0 8 ĊĠĠĠĠĠĠĠ Ġval Ġcode Gen Dirs Ġ= ĠCode Gen Dirs ( output FolderPath Ġ?: Ġ"", Ġdate Folder ) ĊĠĠĠĠĠĠĠ Ġcode Gen Dirs . create ( log ) ĊĠĠĠĠĠĠĠ Ġcode Gen Dirs . log ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCollection Ġof Ġall Ġcustom Ġtypes ĊĠĠĠĠĠĠĠ Ġthis . settings . host . routes . visit Apis Ġ{ Ġ_, Ġapi Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Api Helper . is Web Protocol ( api . protocol , Ġ"")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" API : Ġ" Ġ+ Ġapi . area Ġ+ Ġ"." Ġ+ Ġapi . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġonly Ġthe Ġdeclared Ġmembers Ġin Ġthe Ġapi / class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclared Members Ġ= Ġapi . cls . declared Member Functions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclared Member Lookup Ġ= Ġdeclared Members . map Ġ{ Ġfunc Ġ-> Ġ( func . name Ġto Ġtrue ) Ġ}. toMap () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġall Ġthe Ġactions Ġon Ġthe Ġapi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuff Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIterate Ġover Ġall Ġthe Ġapi Ġactions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi . actions . items . forEach Ġ{ Ġaction Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOk Ġto Ġgenerate Ġ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Generate ( api , Ġaction , Ġdeclared Member Lookup )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġcode Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Info Ġ= Ġgen Method ( api , Ġaction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" generating Ġmethod Ġfor : Ġ" Ġ+ Ġapi . area Ġ+ Ġ"/" Ġ+ Ġapi . name Ġ+ Ġ"/" Ġ+ Ġaction . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuff . append ( method Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuff . append ( newline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġunique Ġtypes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIterate Ġover Ġall Ġthe Ġapi Ġactions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi . actions . items . map Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( action . member . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Model From Type ( action . params User . map Ġ{ Ġit . type Ġ}, Ġcode Gen Dirs . model Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Model From Type ( listOf ( action . member . returnType ), Ġcode Gen Dirs . model Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Error Ġtrying Ġto Ġgenerate Ġtypes Ġfrom Ġreturn Ġtype :" Ġ+ Ġaction . member . name Ġ+ Ġ", Ġ" Ġ+ Ġaction . member . returnType . classifier ?. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġfile . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgen Client Api ( req , Ġapi , Ġcode Gen Dirs . api Folder , Ġbuff . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Error Ġinspect ing Ġand Ġgenerating Ġcode Ġfor : Ġ${ api . area }.${ api . name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Model From Type ( types : ĠList < K Type >, Ġmodel Folder : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtypes . map Ġ{ Ġbuild TypeName ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġis Type Applicable For CodeGen ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġtype Info Ġ-> Ġgen Model ( model Folder , Ġtype Info . dataType ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Type Applicable For CodeGen ( it : ĠType Info ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! it . is Basic Type Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . is Collection Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dataType Ġ!= ĠRequest :: class Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dataType Ġ!= ĠAny :: class Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dataType Ġ!= ĠContext :: class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgen Client Api ( req : ĠRequest , Ġapi Reg : ĠApi , Ġfolder : ĠFile , Ġmethods : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġsettings . packageName ĊĠĠĠĠĠĠĠ Ġval Ġraw Template Ġ= Ġthis . template Class () ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġraw Template ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { className }", Ġapi Reg . name . pas cal Case ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { packageName }", ĠpackageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { about }", Ġ" Client Ġside ĠAPI Ġfor Ġ" Ġ+ Ġapi Reg . name . pas cal Case ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { description }", Ġapi Reg . desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { route }", Ġapi Reg . area Ġ+ Ġ"/" Ġ+ Ġapi Reg . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { version }", Ġreq . data . getString OrElse (" version ", Ġ" 1 . 0 . 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { methods }", Ġmethods ) ĊĊĠĠĠĠĠĠĠ ĠFile ( folder , Ġapi Reg . name . pas cal Case () Ġ+ Ġtemplate Class Suffix Ġ+ Ġ". ${ settings . extension } "). write Text ( template ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgen Method ( api : ĠApi , Ġaction : ĠAction ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġbuild MethodInfo ( api , Ġaction ) ĊĠĠĠĠĠĠĠ Ġval Ġraw Template Ġ= Ġthis . template Method () ĊĠĠĠĠĠĠĠ Ġval Ġfinal Template Ġ= Ġinfo . entries . fold ( raw Template , Ġ{ Ġacc , Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc . replace ("@ { ${ entry . key }} ", Ġentry . value ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġfinal Template ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgen Model ( folder : ĠFile , Ġcls : ĠK Class < *> ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġbuild Model Info ( cls ) ĊĠĠĠĠĠĠĠ Ġval Ġraw Template Ġ= Ġthis . template Model () ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġraw Template ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { packageName }", Ġsettings . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { className }", Ġcls . simple Name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("@ { properties }", Ġinfo ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( folder , Ġcls . simple Name ?. pas cal Case () Ġ+ Ġ". ${ settings . extension }") ĊĠĠĠĠĠĠĠ Ġfile . write Text ( template ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfile . absolute Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild MethodInfo ( api : Ġs late kit . apis . core . Api , Ġaction : ĠAction ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Info Ġ= Ġbuild TypeName ( action . member . returnType ) ĊĠĠĠĠĠĠĠ Ġval Ġverb Ġ= Ġaction . verb ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" route " Ġto Ġapi . area Ġ+ Ġ"/" Ġ+ Ġapi . name Ġ+ Ġ"/" Ġ+ Ġaction . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" verb " Ġto Ġverb , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" methodName " Ġto Ġaction . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" method Desc " Ġto Ġaction . desc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" method Params " Ġto Ġbuild Args ( action ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" method ReturnType " Ġto Ġtype Info . target ReturnType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" queryParams " Ġto Ġbuild QueryParams ( action ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" post Data Decl " Ġto Ġif Ġ( verb Ġ== ĠVer bs . get ) Ġ"" Ġelse Ġ" HashMap < String , ĠObject > Ġpost Data Ġ= Ġnew ĠHashMap <>(); ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" post Data Vars " Ġto Ġbuild Data Params ( action ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" post Data Param " Ġto Ġif Ġ( verb Ġ== ĠVer bs . get ) Ġ"" Ġelse Ġ" post Data ,", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" converter Types " Ġto Ġtype Info . conversion Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" converter Class " Ġto Ġget Converter TypeName ( type Info ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Converter TypeName ( info : ĠType Info ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( info . is Collection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info . is List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" List " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Map " ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( info . is Pair ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pair " ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Single " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbuilds Ġthe Ġname Ġof Ġthe Ġdatatype Ġfor Ġthe Ġtarget ( Java ) Ġlanguage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbuilds Ġthe Ġname Ġof Ġthe Ġdatatype Ġfor Ġthe Ġtarget ( Java ) Ġlanguage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġbuild TypeName ( t pe : ĠK Type ): ĠType Info Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( basic Types . containsKey ( t pe )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbasic Types [ t pe ] !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcls Ġ= Ġt pe . classifier Ġas ĠK Class < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Reflect or . is S late Kit Enum ( cls )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild TypeName ( K Types . K Int Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cls Ġ== ĠResult :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgen Type Ġ= Ġt pe . arguments [ 0 ]. type !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinal Type Ġ= Ġbuild TypeName ( gen Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cls . sup ert ypes . contains ( K Types . K Smart StringType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Info ( true , Ġfalse , Ġ" String ", Ġ" String ", ĠK Types . K Smart String Class , ĠK Types . K Smart String Class , Ġ" String . class ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cls Ġ== ĠList :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Type Ġ= Ġt pe . arguments [ 0 ]. type !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Cls Ġ= ĠK Types . getClass From Type ( list Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist TypeInfo Ġ= Ġbuild TypeName ( list Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Sig Ġ= Ġ" List < " Ġ+ Ġlist TypeInfo . target ReturnType Ġ+ Ġ" >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Info ( false , Ġtrue , Ġtype Sig , Ġtype Sig , ĠList :: class , Ġlist Cls , Ġlist TypeInfo . conversion Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cls Ġ== ĠMap :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt pe Key Ġ= Ġt pe . arguments [ 0 ]. type !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt pe Val Ġ= Ġt pe . arguments [ 1 ]. type !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġcls Key Ġ= ĠK Types . getClass From Type ( t pe Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcls Val Ġ= ĠK Types . getClass From Type ( t pe Val ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey TypeInfo Ġ= Ġbuild TypeName ( t pe Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġval TypeInfo Ġ= Ġbuild TypeName ( t pe Val ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig Ġ= Ġ" Map < " Ġ+ Ġkey TypeInfo . target ReturnType Ġ+ Ġ"," Ġ+ Ġval TypeInfo . target ReturnType Ġ+ Ġ" >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Info ( false , Ġtrue , Ġsig , Ġsig , ĠMap :: class , Ġcls Val , Ġ"${ key TypeInfo . conversion Type }, ${ val TypeInfo . conversion Type }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cls Ġ== ĠPair :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt pe First Ġ= Ġt pe . arguments [ 0 ]. type !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt pe Second Ġ= Ġt pe . arguments [ 1 ]. type !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst TypeInfo Ġ= Ġbuild TypeName ( t pe First ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond TypeInfo Ġ= Ġbuild TypeName ( t pe Second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig Ġ= Ġ" Pair < " Ġ+ Ġfirst TypeInfo . target ReturnType Ġ+ Ġ"," Ġ+ Ġsecond TypeInfo . target ReturnType Ġ+ Ġ" >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Info ( false , Ġfalse , Ġsig , Ġsig , Ġcls , Ġcls , Ġ"${ first TypeInfo . conversion Type }, ${ second TypeInfo . conversion Type }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig Ġ= Ġcls . simple Name Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Info ( false , Ġfalse , Ġsig , Ġsig , Ġcls , Ġcls , Ġsig Ġ+ Ġ". class ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Args ( reg : ĠAction ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġreg . params User . fold Indexed ("", Ġ{ Ġn dx : ĠInt , Ġacc : ĠString , Ġparam : ĠK Parameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġ( if Ġ( nd x Ġ> Ġ 0 ) Ġ"\ t \ t " Ġelse Ġ"") Ġ+ Ġbuild Arg ( param ) Ġ+ Ġ"," Ġ+ Ġnewline ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbuilds Ġa Ġstring Ġof Ġparameters Ġto Ġput Ġinto Ġthe Ġquery Ġstring . ĊĠĠĠĠ Ġ* Ġe . g . ĠqueryParams . put (" id ", Ġid ); ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġbuild QueryParams ( reg : ĠAction ): ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbuilds Ġa Ġstring Ġof Ġthe Ġparameters Ġto Ġput Ġinto Ġthe Ġentity / body Ġof Ġrequest ĊĠĠĠĠ Ġ* Ġe .. g Ġdata Params . put (' id ", Ġid ); ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġbuild Data Params ( reg : ĠAction ): ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbuilds Ġan Ġindividual Ġargument Ġto Ġthe Ġmethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġbuild Arg ( parameter : ĠK Parameter ): ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbuilds Ġall Ġthe Ġproperties / fields ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġbuild Model Info ( cls : ĠK Class < *> ): ĠString ĊĊĠĠĠ Ġopen Ġfun Ġcan Generate ( api Reg : ĠApi , Ġapi Reg Action : ĠAction , Ġdeclared Member Lookup : ĠMap < String , ĠBoolean >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġinclude Ġdeclared Ġitems ĊĠĠĠĠĠĠĠ Ġval Ġis Declared Ġ= Ġdeclared Member Lookup . containsKey ( api Reg Action . name ) ĊĠĠĠĠĠĠĠ Ġval Ġis Web Protocol Ġ= ĠApi Helper . is Web Protocol ( api Reg Action . protocol , Ġapi Reg . protocol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ(! this . settings . declared Methods Only Ġ|| Ġis Declared ) Ġ&& Ġis Web Protocol ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetContent ( folder Path : ĠString , Ġpath : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath ToFile Ġ= Ġfolder Path Ġ+ ĠFile . separator Ġ+ Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠU ris . read Text ( path ToFile ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ