/* Ċ Ġ* Ġ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 . writer . java Ċ Ċ import Ġio . openapi processor . core . framework . Framework Annotations Ċ import Ġio . openapi processor . core . converter . Api Options Ċ import Ġio . openapi processor . core . model . Endpoint Ċ import Ġio . openapi processor . core . model . Interface Ċ import Ġio . openapi processor . core . model . parameters . Additional Parameter Ċ import Ġjava . io . Writer Ċ Ċ /** Ċ Ġ* ĠWriter Ġfor ĠJava Ġinterfaces . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMartin ĠHa uner Ċ Ġ* Ġ@ author ĠB astian ĠWil helm Ċ Ġ*/ Ċ class ĠInterface Writer ( ĊĊĠĠĠ Ġprivate Ġval Ġapi Options : ĠApi Options , ĊĠĠĠ Ġprivate Ġval Ġheader Writer : ĠSimple Writer , ĊĠĠĠ Ġprivate Ġval Ġmethod Writer : ĠMethod Writer , ĊĠĠĠ Ġprivate Ġval Ġannotations : ĠFramework Annotations , ĊĠĠĠ Ġprivate Ġval Ġvalidation Annotations : ĠBean Validation Factory Ġ= ĠBean Validation Factory (), ĊĠĠĠ Ġprivate Ġval Ġimport Filter : ĠImport Filter Ġ= ĠDefault Import Filter () Ċ Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġwrite ( target : ĠWriter , Ġit f : ĠInterface ) Ġ{ ĊĠĠĠĠĠĠĠ Ġheader Writer . write Ġ( target ) ĊĠĠĠĠĠĠĠ Ġtarget . write Ġ(" package Ġ${ itf . get PackageName ()}; \ n \ n ") ĊĊĠĠĠĠĠĠĠ Ġval Ġimports : ĠList < String > Ġ= Ġcollect Imports Ġ( itf . get PackageName (), Ġit f . endpoints ) ĊĠĠĠĠĠĠĠ Ġimports . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . write (" import Ġ${ it }; \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtarget . write ("\ n ") ĊĊĠĠĠĠĠĠĠ Ġtarget . write (" public Ġinterface Ġ${ itf . get Interface Name ()} Ġ{\ n \ n ") ĊĊĠĠĠĠĠĠĠ Ġit f . endpoints . forEach Ġ{ Ġep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġep . endpoint Responses . forEach Ġ{ Ġer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Writer . write ( target , Ġep , Ġer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . write ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtarget . write Ġ(" }\ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollect Imports ( packageName : ĠString , Ġendpoints : ĠList < Endpoint >): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimports : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠĠĠĠĠ Ġendpoints . forEach Ġ{ Ġep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimports . add ( annotations . getAnnotation Ġ( ep . method ). fully QualifiedName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ep . deprecated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . add Ġ( java . lang . Deprecated :: class . java . canonical Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġep . parameters . forEach Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Options . bean Validation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . addAll Ġ( validation Annotations . collect Imports Ġ( p . dataType )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . with Annotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . add Ġ( annotations . getAnnotation Ġ( p ). fully QualifiedName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p Ġis ĠAdditional Parameter Ġ&& Ġp . annotation DataType Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . addAll Ġ( p . annotation DataType . get Imports ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . addAll Ġ( p . dataType Imports ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġep . request B odies . forEach Ġ{ Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . add Ġ( annotations . getAnnotation Ġ( b ). fully QualifiedName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . addAll Ġ( b . dataType Imports ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Options . bean Validation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . addAll Ġ( validation Annotations . collect Imports Ġ( b . dataType )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġep . endpoint Responses . forEach Ġ{ Ġmr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Imports : ĠMutable Set < String > Ġ= Ġmr . response Imports . to Mutable Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Imports . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . addAll Ġ( response Imports ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġimport Filter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( packageName , Ġimports ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted Ġ() ĊĠĠĠ Ġ} Ċ Ċ } Ċ