/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ċ Ġ* Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ Ġ* Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ċ Ġ* Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . devops . worker . common . api Ċ Ċ import Ġcom . tencent . devops . worker . common . exception . Api NotExist Exception Ċ import Ġorg . reflection s . Reflection s Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . lang . reflect . Modifier Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġkotlin . reflect . K Class Ċ Ċ object ĠApi Factory Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Api Factory :: class . java ) ĊĊĠĠĠ Ġprivate Ġval Ġapi Map Ġ= ĠConcurrent HashMap < String , ĠK Class <* >>() ĊĊĠĠĠ Ġ@ Suppress (" ALL ") ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġreflection s Ġ= ĠReflection s (" com . tencent . devops . worker . common . api ") ĊĠĠĠĠĠĠĠ Ġval Ġapi Classes Ġ= Ġreflection s . getSub Types Of ( Worker RestApi SDK :: class . java ) ĊĠĠĠĠĠĠĠ Ġlogger . info (" Get Ġthe ĠApi Ġclasses Ġ$ api Classes ") ĊĠĠĠĠĠĠĠ Ġval Ġcandidate Priority Map Ġ= Ġmutable Map Of < String , ĠInt >() ĊĠĠĠĠĠĠĠ Ġval Ġcandidate Map Ġ= ĠHashMap < String , ĠK Class <* >>() ĊĠĠĠĠĠĠĠ Ġapi Classes ?. forEach Ġ{ Ġapi Class Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Modifier . is Abstract ( api Class . modifiers )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Class . interfaces . forEach Ġ{ Ġapi Interface Class Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfind Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpriority Ġ= Ġcandidate Priority Map [ api Interface Class . canonical Name ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapi Priority Ġ= Ġapi Class . getAnnotation ( Api Priority :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Priority Ġ!= Ġnull Ġ&& Ġapi Priority . priority Ġ> Ġ( priority Ġ?: Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= Ġapi Priority . priority ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( priority Ġ== Ġnull Ġ|| Ġfind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate Priority Map [ api Interface Class . canonical Name ] Ġ= Ġpriority Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate Map [ api Interface Class !!. canonical Name ] Ġ= Ġapi Class . kotlin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcandidate Map . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Map [ it . key ] Ġ= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Add ĠAPI Ġ${ it . key } ĠApi Priority (${ candidate Priority Map [ it . key ]}) Ġfor Ġ${ it . value }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġcreate ( api Interface Class : ĠK Class < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġapi Map [ api Interface Class . java . canonical Name ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠApi NotExist Exception (" api Ġinterface Ġ$ api Interface Class Ġhave Ġno Ġimplement Ġclass ") ĊĠĠĠĠĠĠĠ Ġreturn Ġclazz . java . newInstance () Ġas ĠT ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ ä¼ĺåħĪ çº§ ï¼Į æķ°åŃĹ è¶Ĭ å¤§ èĥ ľ åĩº Ċ Ġ*/ Ċ annotation Ġclass ĠApi Priority ( val Ġpriority : ĠInt ) Ċ