package Ġgg . scala . store . storage . impl Ċ Ċ import Ġgg . scala . store . connection . mongo . Abstract DataStore Mongo Connection Ċ import Ġgg . scala . store . connection . redis . Abstract DataStore Redis Connection Ċ import Ġgg . scala . store . controller . DataStore Object Controller Ċ import Ġgg . scala . store . storage . Abstract DataStore Storage Layer Ċ import Ġgg . scala . store . storage . stor able . I DataStore Object Ċ import Ġorg . bson . conversions . B son Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġkotlin . properties . Deleg ates Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* Ġ@ author ĠGrow ly X Ċ Ġ* Ġ@ since Ġ 1 2 / 3 0 / 2 0 2 1 Ċ Ġ*/ Ċ class ĠRedis DataStore Storage Layer < D Ġ: ĠI DataStore Object >( ĊĠĠĠ Ġconnection : ĠAbstract DataStore Redis Connection , ĊĠĠĠ Ġprivate Ġval Ġcontainer : ĠData Store Object Controller < D >, ĊĠĠĠ Ġprivate Ġval ĠdataType : ĠK Class < D > Ċ ) Ġ: ĠAbstract DataStore Storage Layer < Abstract DataStore Redis Connection , ĠD , Ġ( D ) Ġ-> ĠBoolean >( connection ) Ċ { ĊĠĠĠ Ġprivate Ġvar Ġsection Ġby ĠDeleg ates . notNull < String >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRepresents Ġthe Ġ" directory " Ġin Ġwhich Ġall ĊĠĠĠĠ Ġ* Ġthe Ġobjects Ġwill Ġbe Ġstored Ġin . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSimilar Ġto Ġhow Ġ[ Abstract DataStore Mongo Connection ] ĊĠĠĠĠ Ġ* Ġhandles Ġits Ġcollections , Ġwe 're Ġusing Ġthe Ġ[ dataType ] ĊĠĠĠĠ Ġ* Ġsimple Name Ġas Ġthe Ġsubdirectory Ġto ĠData Store 's ĊĠĠĠĠ Ġ* Ġparent Ġdirectory . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsection Ġ= Ġ" DataStore :${ dataType . simple Name }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload All With Filter Sync ( ĊĠĠĠĠĠĠĠ Ġfilter : Ġ( D ) Ġ-> ĠBoolean ĊĠĠĠ Ġ): ĠMap < UUID , ĠD > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload All Sync (). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . invoke ( it . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload With Filter Sync ( filter : Ġ( D ) Ġ-> ĠBoolean ): ĠD ? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload All Sync (). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . invoke ( it . value ) ĊĠĠĠĠĠĠĠ Ġ}. values . first OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Sync ( data : ĠD ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġrun S af ely Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . use Resource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection , Ġdata . identifier . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . serializer . toJson ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Sync ( identifier : ĠUUID ): ĠD ? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun S af ely Return Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserialized Ġ= Ġconnection . use Resource With Return Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh get ( section , Ġidentifier . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn @ run S af ely Return Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run S af ely Return Ġcontainer . serializer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( serialized , ĠdataType . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload All Sync (): ĠMap < UUID , ĠD > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun S af ely Return Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserialized Ġ= Ġconnection . use Resource With Return Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh getAll ( section ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn @ run S af ely Return Ġmutable Map Of () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeserialized Ġ= Ġmutable Map Of < UUID , ĠD >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( mutable Entry Ġin Ġserialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeserialized [ UUID . fromString ( mutable Entry . key )] Ġ= Ġcontainer . serializer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( mutable Entry . value , ĠdataType . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run S af ely Return Ġdeserialized ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Sync ( identifier : ĠUUID ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġrun S af ely Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . use Resource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh del ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection , Ġidentifier . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ