/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠRen ĠBind en Ċ Ġ* Ġ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 . r pk it . languages . bukkit . database . table Ċ Ċ import Ġcom . r pk it . characters . bukkit . character . RP K Character Ċ import Ġcom . r pk it . core . database . Database Ċ import Ġcom . r pk it . core . database . Table Ċ import Ġcom . r pk it . core . service . Services Ċ import Ġcom . r pk it . languages . bukkit . RP K Languages Bu kkit Ċ import Ġcom . r pk it . languages . bukkit . character language . RP K Character Language Ċ import Ġcom . r pk it . languages . bukkit . database . create Ċ import Ġcom . r pk it . languages . bukkit . database . jooq . Tables . RP KIT _ CHARACTER _ LANGUAGE Ċ import Ġcom . r pk it . languages . bukkit . language . RP K Language Ċ import Ġcom . r pk it . languages . bukkit . language . RP K Language Name Ċ import Ġcom . r pk it . languages . bukkit . language . RP K Language Service Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ class ĠRP K Character Language Table ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdatabase : ĠDatabase , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplugin : ĠRP K Languages Bu kkit Ċ ) Ġ: ĠTable Ġ{ ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠCharacter Language CacheKey ( ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Name : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġcache Ġ= Ġif Ġ( plugin . config . getBoolean (" caching . r pk it _ character _ language . character _ id . enabled ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . cache Manager . create Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" r pk - languages - bukkit . r pk it _ character _ language . character _ id ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCharacter Language CacheKey :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRP K Character Language :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin . config . getLong (" caching . r pk it _ character _ language . character _ id . size ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert ( entity : ĠRP K Character Language ): ĠCompletableFuture < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Id Ġ= Ġentity . character . id Ġ?: Ġreturn ĠCompletableFuture . completed Future ( null ) ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Name Ġ= Ġentity . language . name ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . run Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . create ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. insert Into ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRP KIT _ CHARACTER _ LANGUAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRP KIT _ CHARACTER _ LANGUAGE . CHARACTER _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRP KIT _ CHARACTER _ LANGUAGE . LANGUAGE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRP KIT _ CHARACTER _ LANGUAGE . UNDER STAND ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Id . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . language . name . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . understanding . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache ?. set ( Character Language CacheKey ( character Id . value , Ġlanguage Name . value ), Ġentity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( entity : ĠRP K Character Language ): ĠCompletableFuture < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Id Ġ= Ġentity . character . id Ġ?: Ġreturn ĠCompletableFuture . completed Future ( null ) ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Name Ġ= Ġentity . language . name ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . run Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . create ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. update ( RP KIT _ CHARACTER _ LANGUAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( RP KIT _ CHARACTER _ LANGUAGE . UNDER STAND ING , Ġentity . understanding . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRP KIT _ CHARACTER _ LANGUAGE . CHARACTER _ ID . eq ( character Id . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( RP KIT _ CHARACTER _ LANGUAGE . LANGUAGE _ NAME . eq ( language Name . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache ?. set ( Character Language CacheKey ( character Id . value , Ġlanguage Name . value ), Ġentity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( character : ĠRP K Character , Ġlanguage : ĠRP K Language ): ĠCompletableFuture < RP K Character Language ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Id Ġ= Ġcharacter . id Ġ?: Ġreturn ĠCompletableFuture . completed Future ( null ) ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Name Ġ= Ġlanguage . name ĊĠĠĠĠĠĠĠ Ġval Ġcache Key Ġ= ĠCharacter Language CacheKey ( character Id . value , Ġlanguage Name . value ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cache ?. containsKey ( cacheKey ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . completed Future ( cache [ cacheKey ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . supply Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdatabase . create ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRP KIT _ CHARACTER _ LANGUAGE . CHARACTER _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRP KIT _ CHARACTER _ LANGUAGE . LANGUAGE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRP KIT _ CHARACTER _ LANGUAGE . UNDER STAND ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( RP KIT _ CHARACTER _ LANGUAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( RP KIT _ CHARACTER _ LANGUAGE . CHARACTER _ ID . eq ( character Id . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( RP KIT _ CHARACTER _ LANGUAGE . LANGUAGE _ NAME . eq ( language . name . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch One () Ġ?: Ġreturn @ supply Async Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacter Language Ġ= ĠRP K Character Language ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ RP KIT _ CHARACTER _ LANGUAGE . UNDER STAND ING ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache ?. set ( cacheKey , Ġcharacter Language ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ supply Async Ġcharacter Language ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ( character : ĠRP K Character ): ĠCompletableFuture < List < RP K Character Language >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Id Ġ= Ġcharacter . id Ġ?: Ġreturn ĠCompletableFuture . completed Future ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . supply Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġdatabase . create ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select ( RP KIT _ CHARACTER _ LANGUAGE . LANGUAGE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( RP KIT _ CHARACTER _ LANGUAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( RP KIT _ CHARACTER _ LANGUAGE . CHARACTER _ ID . eq ( character Id . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage Service Ġ= ĠServices [ RP K Language Service :: class . java ] Ġ?: Ġreturn @ supply Async Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage F utures Ġ= Ġresults . map NotNull Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Service . get Language ( RP K Language Name ( result [ RP KIT _ CHARACTER _ LANGUAGE . LANGUAGE _ NAME ])) ?. let Ġ{ Ġlanguage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget ( character , Ġlanguage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompletableFuture . all Of (* language F utures . to Typed Array ()). join () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ supply Async Ġlanguage F utures . map NotNull ( Comp letableFuture < RP K Character Language ?> :: join ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( entity : ĠRP K Character Language ): ĠCompletableFuture < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Id Ġ= Ġentity . character . id Ġ?: Ġreturn ĠCompletableFuture . completed Future ( null ) ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Name Ġ= Ġentity . language . name ĊĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . run Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . create ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete From ( RP KIT _ CHARACTER _ LANGUAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( RP KIT _ CHARACTER _ LANGUAGE . CHARACTER _ ID . eq ( character Id . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( RP KIT _ CHARACTER _ LANGUAGE . LANGUAGE _ NAME . eq ( language Name . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache ?. remove ( Character Language CacheKey ( character Id . value , Ġlanguage Name . value )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }