/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 - 2 0 2 0 Ġthe Ġoriginal Ġauthors Ċ Ġ* Ċ Ġ* Ġ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 . openapi processor . core . model ĊĊ Ċ import Ġio . openapi processor . core . model . parameters . Multipart Parameter Ċ import Ġio . openapi processor . core . model . parameters . Parameter Ċ Ċ /** Ċ Ġ* ĠEndpoint Ġproperties . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMartin ĠHa uner Ċ Ġ*/ Ċ class ĠEndpoint ( ĊĠĠĠ Ġval Ġpath : ĠString , ĊĠĠĠ Ġval Ġmethod : ĠHttpMethod , ĊĠĠĠ Ġval Ġoperation Id : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġdeprecated : ĠBoolean Ġ= Ġfalse Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ Deprecated (" groovy Ġto Ġkotlin ") ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpath : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod : ĠHttpMethod , ĊĠĠĠĠĠĠĠ Ġoperation Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdeprecated : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġresponses : ĠMutable Map < String , ĠList < Response >> ĊĠĠĠ Ġ): Ġthis ( path , Ġmethod , Ġoperation Id , Ġdeprecated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . responses Ġ= Ġresponses ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated (" groovy Ġto Ġkotlin ") ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpath : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod : ĠHttpMethod , ĊĠĠĠĠĠĠĠ Ġoperation Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdeprecated : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġparameters : ĠMutable List < Parameter >, ĊĠĠĠĠĠĠĠ Ġresponses : ĠMutable Map < String , ĠList < Response >> ĊĠĠĠ Ġ): Ġthis ( path , Ġmethod , Ġoperation Id , Ġdeprecated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠ Ġthis . responses Ġ= Ġresponses ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated (" groovy Ġto Ġkotlin ") ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpath : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod : ĠHttpMethod , ĊĠĠĠĠĠĠĠ Ġoperation Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdeprecated : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġparameters : ĠMutable List < Parameter >, ĊĠĠĠĠĠĠĠ Ġrequest B odies : ĠMutable List < RequestBody >, ĊĠĠĠĠĠĠĠ Ġresponses : ĠMutable Map < String , ĠList < Response >> ĊĠĠĠ Ġ): Ġthis ( path , Ġmethod , Ġoperation Id , Ġdeprecated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠ Ġthis . request B odies Ġ= Ġrequest B odies ĊĠĠĠĠĠĠĠ Ġthis . responses Ġ= Ġresponses ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtodo ĊĠĠĠ Ġ/* private Ġval */ Ġvar Ġparameters : ĠMutable List < Parameter > Ġ= Ġmutable ListOf () Ġ// Ġtodo Ġnot Ġmutable ĊĠĠĠ Ġ/* private Ġval */ Ġvar Ġrequest B odies : ĠMutable List < RequestBody > Ġ= Ġmutable ListOf () Ġ// Ġtodo Ġnot Ġmutable ĊĠĠĠ Ġprivate Ġ/* val */ Ġvar Ġresponses : ĠMutable Map < String , ĠList < Response >> Ġ Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġ// Ġgrouped Ġresponses ĊĠĠĠ Ġlateinit Ġvar Ġendpoint Responses : ĠList < Endpoint Response >// Ġ= Ġempty List () ĊĊĠĠĠ Ġ// Ġtodo ĊĠĠĠ Ġfun Ġadd Responses ( http Status : ĠString , Ġstatus Responses : ĠList < Response >) Ġ{ ĊĠĠĠĠĠĠĠ Ġresponses [ http Status ] Ġ= Ġstatus Responses ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtodo Ġmove Ġlists Ġinit Ġto Ġconstructor Ġthen Ġrun Ġthis Ġfrom Ġconstructor ĊĠĠĠ Ġ// Ġfluent ĊĠĠĠ Ġfun Ġinit Endpoint Responses Ġ(): ĠEndpoint Ġ{ ĊĠĠĠĠĠĠĠ Ġendpoint Responses Ġ= Ġcreate Endpoint Responses Ġ() ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġh mm m ĊĠĠĠ Ġfun Ġget RequestBody (): ĠRequest Body Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest B odies . first Ġ() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġall Ġpossible Ġresponses Ġfor Ġan Ġopen api Ġstatus Ġ(' 2 0 0 ', Ġ' 2 xx ', ... Ġor Ġ' default '). ĠIf Ġthe Ġgiven ĊĠĠĠĠ Ġ* Ġstatus Ġhas Ġno Ġresponses Ġthe Ġresult Ġis Ġan Ġempty Ġlist . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstatus Ġthe Ġresponse Ġstatus ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġlist Ġof Ġresponses ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Responses Ġ( status : ĠString ): ĠList < Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! responses . containsKey Ġ( status )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresponses [ status ] !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġprovides Ġa Ġlist Ġof Ġall Ġconsumed Ġcontent Ġtypes Ġof Ġthis Ġendpoint Ġincluding Ġmultipart / form - data . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġmultipart / form - data Ġis Ġspecial Ġbecause Ġa Ġmultipart Ġrequest Ġbody Ġwith Ġmultiple Ġproperties Ġis ĊĠĠĠĠ Ġ* Ġconverted Ġto Ġmultiple Ġ{@ link ĠMultip art Parameter } s Ġin Ġthe Ġinternal Ġmodel . ĠThe Ġrequest Ġbody ĊĠĠĠĠ Ġ* Ġinformation Ġis Ġno Ġlonger Ġavailable . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġlist Ġof Ġcontent Ġtypes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Cons umes Content Types (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Types Ġ= Ġrequest B odies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . contentType Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġval Ġmultipart Ġ= Ġparameters . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠMultip art Parameter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( multipart Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Types . add Ġ(" multipart / form - data ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcontent Types ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġnot Ġneeded .... Ġ=> ĠEndpoint Response . getContent Types () ĊĠĠĠ Ġ// Ġonly Ġcalled Ġby Ġtests ? ĊĠĠĠ Ġfun Ġget Produces Content Types Ġ( status : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponses Ġ= Ġget Responses Ġ( status ) ĊĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= Ġget Error Responses Ġ() ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Types Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠ Ġresponses . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Types . add Ġ( it . contentType ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġerrors . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Types . add Ġ( it . contentType ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcontent Types . toList Ġ() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtest Ġsupport Ġ=> Ġextension Ġfunction Ġ? ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstatus Ġthe Ġresponse Ġstatus ĊĠĠĠĠ Ġ* Ġ@ return Ġfirst Ġresponse Ġof Ġstatus ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget First Response Ġ( status : ĠString ): ĠResponse ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! responses . containsKey Ġ( status )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġresponses [ status ] ĊĠĠĠĠĠĠĠ Ġif Ġ( resp Ġ!= Ġnull Ġ&& Ġresp . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresp ?. first Ġ() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġchecks Ġif Ġthe Ġendpoint Ġhas Ġmultiple Ġsuccess Ġresponses Ġwith Ġdifferent Ġcontent Ġtypes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġcondition Ġis Ġmet , Ġotherwise Ġfalse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Multiple Endpoint Responses (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġendpoint Responses . size Ġ> Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreates Ġgroups Ġfrom Ġthe Ġresponses . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġif Ġthe Ġendpoint Ġdoes Ġprovide Ġits Ġresult Ġin Ġmultiple Ġcontent Ġtypes Ġit Ġwill Ġcreate Ġone Ġentry ĊĠĠĠĠ Ġ* Ġfor Ġeach Ġresponse Ġkind Ġ( main Ġresponse ). Ġif Ġerror Ġresponses Ġare Ġdefined Ġthey Ġare Ġadded Ġas ĊĠĠĠĠ Ġ* Ġerror Ġresponses . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġthis Ġis Ġused Ġto Ġcreate Ġone Ġcontroller Ġmethod Ġfor Ġeach Ġ( successful ) Ġresponse Ġdefinition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġlist Ġof Ġmethod Ġresponses ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Endpoint Responses (): ĠList < Endpoint Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuc cesses Ġ= Ġget Success Responses () ĊĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= Ġget Error Responses () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuc cesses . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEndpoint Response ( it , Ġerrors ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Success Responses (): ĠSet < Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable Map Of < String , ĠResponse >() ĊĊĠĠĠĠĠĠĠ Ġresponses ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Keys Ġ{ Ġit . startsWith (" 2 ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ it . contentType ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Error Responses (): ĠSet < Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresponses ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Keys Ġ{ Ġ! it . startsWith (" 2 ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . first () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . empty Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /* ĊĠĠĠ Ġprivate ĠSet < Response > Ġget Success Responses Ġ() Ġ{ ĊĠĠĠĠĠĠĠ ĠMap < String , ĠResponse > Ġresult Ġ= Ġ[ :] ĊĊĠĠĠĠĠĠĠ Ġresponses . findAll Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . key . startsWith Ġ(' 2 ') ĊĠĠĠĠĠĠĠ Ġ}. each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put Ġ( it . contentType , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult . values Ġ() Ġas ĠSet < Response > ĊĠĠĠ Ġ} Ċ Ġ*/ Ċ