package Ġwire seg al . w ob . misc . util Ċ Ċ import Ġcom . fasterxml . jackson . databind . node . Object Node Ċ import Ġorg . javac ord . api . entity . message . embed . Embed Builder Ċ import Ġorg . javac ord . api . entity . message . embed . internal . Embed Builder Delegate Ċ import Ġorg . javac ord . core . entity . message . embed . Embed Builder Delegate Impl Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* Ġ@ author ĠWire Se gal Ċ Ġ* ĠCreated Ġat Ġ 1 0 : 3 8 ĠPM Ġon Ġ 2 / 1 5 / 1 8 . Ċ Ġ*/ Ċ fun Ġfile In Home ( name : ĠString ): ĠFile Ġ{ ĊĠĠĠ Ġval Ġhome Ġ= ĠSystem . getProperty (" user . home ") ĊĠĠĠ Ġreturn ĠFile ( home , Ġ".$ name ") Ċ } Ċ Ċ class ĠFake Embed Builder ( val Ġjson : ĠObject Node ) Ġ: ĠEmbed Builder () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdelegate Ġ= Ġobject Ġ: ĠEmbed Builder Delegate Impl () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto JsonNode ( node : ĠObject Node ): ĠObject Node Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode . set All ( json ) Ġas ĠObject Node ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Delegate (): ĠEmbed Builder Delegate Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdelegate ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠSaved Map ( val Ġlocation : ĠFile , Ġval Ġload Limit : ĠInt Ġ= Ġ- 1 , Ġprivate Ġval Ġbacking Map : ĠMutable Map < String , ĠString > Ġ= Ġmutable Map Of ()) Ġ: ĊĠĠĠĠĠĠĠ ĠMutable Map < String , ĠString > Ġby Ġbacking Map Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlock Ġ= ĠAny () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠ Ġload ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ= Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbacking Map . clear () ĊĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( key : ĠString , Ġvalue : ĠString ): ĠString ? Ġ= Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġbacking Map . put ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput All ( from : ĠMap < out ĠString , ĠString >) Ġ= Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload ( false ) ĊĠĠĠĠĠĠĠ Ġbacking Map . put All ( from ) ĊĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( key : ĠString ): ĠString ? Ġ= Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġbacking Map . remove ( key ) ĊĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġfill Direct ( from : ĠMap < out ĠString , ĠString >, Ġpurge : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( purge ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Map . clear () ĊĠĠĠĠĠĠĠ Ġif Ġ( load Limit Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġfrom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Map [ k ] Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( counter ++ Ġ>= Ġload Limit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Map . put All ( from ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation . write Text ( back ing Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . key . replace (" :", Ġ"\\ :") Ġ+ Ġ":: " Ġ+ Ġit . value . replace (" :", Ġ"\\ :") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") Ġ+ Ġif Ġ( back ing Map . any ()) Ġ"\ n " Ġelse Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġload ( purge : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation . createNew File () ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġlocation . read Text () ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġtext . split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . split (" :: ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . replace ("\\ :", Ġ": ") Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . size Ġ> Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġif Ġ( load Limit Ġ> Ġ 0 ) Ġtake ( load Limit ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġentries . associate Ġ{ Ġit [ 0 ] Ġto Ġit [ 1 ] Ġ}. to Mutable Map () ĊĠĠĠĠĠĠĠ Ġfill Direct ( map , Ġpurge ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠSaved Typed Map < K Ġ: ĠAny , ĠV Ġ: ĠAny >( location : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġserialize Key : Ġ( K ) Ġ-> ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdeserialize Key : Ġ( String ) Ġ-> ĠK ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġserialize Value : Ġ( K , ĠV ) Ġ-> ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdeserialize Value : Ġ( K , ĠString ) Ġ-> ĠV ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġpersistent Load : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġload Limit : ĠInt Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġbacking Map : ĠMutable Map < K , ĠV > Ġ= Ġmutable Map Of ()) Ġ: ĠMutable Map < K , ĠV > Ġby Ġbacking Map Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġinternal Map Ġ= ĠSaved Backing Map ( location ) ĊĊĠĠĠ Ġprivate Ġvar Ġlock Ġ= ĠAny () ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ= Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbacking Map . clear () ĊĠĠĠĠĠĠĠ Ġinternal Map . save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( key : ĠK , Ġvalue : ĠV ): ĠV ? Ġ= Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( persistent Load ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Map . load ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġbacking Map . put ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġinternal Map . save () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput All ( from : ĠMap < out ĠK , ĠV >) Ġ= Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( persistent Load ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Map . load ( false ) ĊĠĠĠĠĠĠĠ Ġbacking Map . put All ( from ) ĊĠĠĠĠĠĠĠ Ġinternal Map . save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( key : ĠK ): ĠV ? Ġ= Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( persistent Load ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Map . load ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġbacking Map . remove ( key ) ĊĠĠĠĠĠĠĠ Ġinternal Map . save () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠSaved Backing Map ( location : ĠFile ) Ġ: ĠSaved Map ( location , Ġload Limit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Direct ( back ing Map . map Ġ{ Ġserialize Key ( it . key ) Ġto Ġserialize Value ( it . key , Ġit . value ) Ġ}. toMap (), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . save () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġload ( purge : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . load ( purge ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( purge ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġif Ġ( load Limit Ġ> Ġ 0 ) Ġload Limit Ġelse Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Map . put All ( map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count ++ Ġ< Ġlimit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġdeserialize Key ( it . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġdeserialize Value ( k , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Ġto Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ