/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 0 8 - 2 0 2 0 ĠHa ul mont . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . ha ul mont . cli . plugin . sdk . component . cub a . services . cub a Ċ Ċ import Ġcom . github . kit tin un f . fuel . Fuel Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . ha ul mont . cli . core . commands . Launch Options Ċ import Ġcom . ha ul mont . cli . plugin . sdk . component . cub a . providers . Cub a Framework Provider Ċ import Ġcom . ha ul mont . cub a . cli . plugin . sdk . Sdk Plugin Ċ import Ġcom . ha ul mont . cub a . cli . plugin . sdk . di . sdk K ode in Ċ import Ġcom . ha ul mont . cub a . cli . plugin . sdk . dto . Cub a Market place Addon Ċ import Ġcom . ha ul mont . cub a . cli . plugin . sdk . dto . Market place Addon Compatibility Ċ import Ġcom . ha ul mont . cub a . cli . plugin . sdk . services . Sdk Settings Holder Ċ import Ġcom . ha ul mont . cub a . cli . plugin . sdk . templates . Component Registry Ċ import Ġorg . kode in . di . generic . instance Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util . logging . Logger Ċ import Ġkotlin . concurrent . thread ĊĊ Ċ class ĠC uba Component Version ManagerImpl Ġ: ĠC uba Component Version Manager Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĠLogger . getLogger ( Cub a Component Version ManagerImpl :: class . java . name ) ĊĊĠĠĠ Ġprivate Ġval Ġsdk Settings : ĠS dk Settings Holder Ġby Ġsdk K ode in . instance < Sdk Settings Holder >() ĊĊĠĠĠ Ġprivate Ġval Ġcomponent Registry : ĠComponent Registry Ġby Ġsdk K ode in . instance < Component Registry >() ĊĊĠĠĠ Ġvar Ġadd ons : ĠList < Cub a Market place Addon >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġload Sync (): ĠList < Cub a Market place Addon > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Launch Options . skip Version Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġread Addons ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Cub a Addons File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtriple Ġ= ĠF uel . get ( sdk Settings [" cub a . addon . marketplace Url "]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response String () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriple . third . fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġread Addons ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . se vere (" error : Ġ${ error }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġread Addons ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Cub a Addons File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Cub a Addons File (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sdk Settings . has Property (" cub a - addons - file ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPath . of ( sdk Settings [" cub a - addons - file "]). to File (). read Text ( StandardCharsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠS dk Plugin :: class . java . getResource AsStream (" cub a - app - components . json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffered Reader () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ Ġit . read Text () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Addons ( json : ĠString ): ĠList < Cub a Market place Addon > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠGson (). fromJson ( json , ĠJsonObject :: class . java ) Ġ?: Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġplatform Versions Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Registry . provider ByName ( Cub a Framework Provider . C UB A _ PLATFORM _ PROVIDER ). versions ( null ) ĊĠĠĠĠĠĠĠ Ġreturn Ġarray . getAs JsonArray (" app Components ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠJsonObject Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠGson (). fromJson ( it , ĠC uba Market place Addon :: class . java ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . artifactId . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Standard Cub a Addon ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . compatibility List Ġ= Ġplatform Versions . map Ġ{ Ġversion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarketplace Addon Compatibility ( version . id , ĠlistOf ( version . id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Standard Cub a Addon ( addon : ĠC uba Market place Addon ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġaddon . compatibility List . first (). artifact Versions . join ToString (). contains ("\ $ cub a Version ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ons (): ĠList < Cub a Market place Addon > Ġ= ĊĠĠĠĠĠĠĠ Ġadd ons Ġ?: Ġload Sync (). also Ġ{ Ġadd ons Ġ= Ġit Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload ( load Completed Fun : Ġ( addons : ĠList < Cub a Market place Addon >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Completed Fun ( load Sync (). also Ġ{ Ġadd ons Ġ= Ġit Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }