package Ġcom . open l attice . linking Ċ Ċ import Ġcom . hazelcast . aggregation . Ag greg ators Ċ import Ġcom . hazelcast . core . H azelcast Instance Ċ import Ġcom . hazelcast . query . Predicate Ċ import Ġcom . hazelcast . query . Pred icates Ċ import Ġcom . open l attice . data . Entity Data Key Ċ import Ġcom . open l attice . hazelcast . H azelcast Map Ċ import Ġcom . open l attice . linking . map stores . FEED BACK _ INDEX Ċ import Ġcom . open l attice . linking . map stores . FIRST _ ENTITY _ INDEX Ċ import Ġcom . open l attice . linking . map stores . FIRST _ ENTITY _ KEY _ INDEX Ċ import Ġcom . open l attice . linking . map stores . FIRST _ ENTITY _ SET _ INDEX Ċ import Ġcom . open l attice . linking . map stores . Link ing Feedback Predicate Builder Ċ import Ġcom . open l attice . linking . map stores . SECOND _ ENTITY _ INDEX Ċ import Ġcom . open l attice . linking . map stores . SECOND _ ENTITY _ KEY _ INDEX Ċ import Ġcom . open l attice . linking . map stores . SECOND _ ENTITY _ SET _ INDEX Ċ import Ġcom . open l attice . postgres . Postgres Table . LINK ING _ FEED BACK Ċ import Ġcom . open l attice . postgres . ResultSet Adapters Ċ import Ġcom . open l attice . postgres . streams . Base Postgres Iterable Ċ import Ġcom . open l attice . postgres . streams . Statement Holder Supplier Ċ import Ġcom . zaxxer . hikari . Hikari DataSource Ċ import Ġjava . util . Optional Ċ import Ġjava . util . UUID Ċ Ċ const Ġval ĠFETCH _ SIZE Ġ= Ġ 1 0 0 _ 0 0 0 Ċ Ċ class ĠPostgres Link ing Feedback Service ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġh ds : ĠH ikari DataSource , ĊĠĠĠĠĠĠĠ Ġh azelcast Instance : ĠH azelcast Instance Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlinking Feedback Ġ= ĠH azelcast Map . LINK ING _ FEED BACK . getMap ( hazelcast Instance ) ĊĊĠĠĠ Ġfun Ġadd Link ing Feedback ( entity Link ing Feedback : ĠEntity Link ing Feedback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlinking Feedback . set ( entity Link ing Feedback . entity Pair , Ġentity Link ing Feedback . linked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Link ing Feedback (): ĠIterable < Entity Link ing Feedback > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsince Ġwe Ġare Ġnot Ġusing Ġan Ġentry processor Ġafter Ġret rive ing Ġall Ġthe Ġfeedback , Ġit 's Ġeasier Ġto Ġjust Ġquery Ġthem ĊĠĠĠĠĠĠĠ Ġreturn ĠBase Postgres Iterable ( Statement Holder Supplier ( h ds , ĠSELECT _ ALL _ SQL , ĠFETCH _ SIZE , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResultSet Adapters . entity Link ing Feedback ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Feedback s ( feedback Type : ĠFeedback Type , Ġentity : ĠEntity Data Key ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Pred icates For Query And Run ( feedback Type , Ġentity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinking Feedback . aggregate ( Ag greg ators . count (), Ġit ) Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Link ing Feedback Entity Key Pairs ( feedback Type : ĠFeedback Type , Ġentity : ĠEntity Data Key ): ĠSet < Entity KeyPair > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Pred icates For Query And Run ( feedback Type , Ġentity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinking Feedback . keySet ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Link ing Feedback On Entity ( feedback Type : ĠFeedback Type , Ġentity : ĠEntity Data Key ): ĠIterable < Entity Link ing Feedback > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Pred icates For Query And Run ( feedback Type , Ġentity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinking Feedback . project ( Link ing Feedback Projection (), Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< R > Ġbuild Pred icates For Query And Run ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback Type : ĠFeedback Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity : ĠEntity Data Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation : Ġ( predicates : ĠPredicate < Entity KeyPair , ĠBoolean >) Ġ-> ĠR ĊĠĠĠ Ġ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġoperation ( build Pred icates For Queries ( feedback Type , Ġentity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġbuild Pred icates For Queries ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeedback Type : ĠFeedback Type , Ġentity : ĠEntity Data Key ĊĠĠĠ Ġ): ĠPredicate < Entity KeyPair , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Predicate Ġ= ĠPred icates . or < Entity KeyPair , ĠBoolean >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPred icates . equal < Entity KeyPair , ĠBoolean >( FIRST _ ENTITY _ INDEX , Ġentity ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPred icates . equal < Entity KeyPair , ĠBoolean >( SECOND _ ENTITY _ INDEX , Ġentity ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPred icates . and ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity Predicate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( feedback Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeedback Type . Positive Ġ-> ĠPred icates . equal ( FEED BACK _ INDEX , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeedback Type . Negative Ġ-> ĠPred icates . equal ( FEED BACK _ INDEX , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeedback Type . All Ġ-> ĠPred icates . always True < Entity KeyPair , ĠBoolean >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Link ing Feedback s ( entity Pairs : ĠSet < Entity KeyPair >): ĠMutable Map < Entity KeyPair , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlinking Feedback . getAll ( entity Pairs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Link ing Feedback ( entity Pair : ĠEntity KeyPair ): ĠEntity Link ing Feedback ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeedback Ġ= Ġlinking Feedback [ entity Pair ] Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠEntity Link ing Feedback ( entity Pair , Ġfeedback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġdelete Link ing Feedback ( entity SetId : ĠUUID , Ġentity Key Ids : ĠOptional < Set < UUID >> ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Entity Set Predicate Ġ= ĠPred icates . equal < Entity KeyPair , ĠBoolean >( FIRST _ ENTITY _ SET _ INDEX , Ġentity SetId ) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Entity Set Predicate Ġ= ĠPred icates . equal < Entity KeyPair , ĠBoolean >( SECOND _ ENTITY _ SET _ INDEX , Ġentity SetId ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Predicate Ġ= Ġif Ġ( entity Key Ids . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPred icates . and ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Entity Set Predicate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLink ing Feedback Predicate Builder . in Uuid Array ( entity Key Ids . get (), ĠFIRST _ ENTITY _ KEY _ INDEX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Entity Set Predicate ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Predicate Ġ= Ġif Ġ( entity Key Ids . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPred icates . and ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Entity Set Predicate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLink ing Feedback Predicate Builder . in Uuid Array ( entity Key Ids . get (), ĠSE COND _ ENTITY _ KEY _ INDEX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Entity Set Predicate ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfeedback Count Ġ= Ġlinking Feedback . size ĊĠĠĠĠĠĠĠ Ġlinking Feedback . removeAll ( Pred icates . or ( first Predicate , Ġsecond Predicate )) ĊĠĠĠĠĠĠĠ Ġreturn Ġfeedback Count Ġ- Ġlinking Feedback . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Link ing Feedback ( entity Pair : ĠEntity KeyPair ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġlinking Feedback . remove ( entity Pair ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠSELECT _ ALL _ SQL Ġ= Ġ" SELECT Ġ* ĠFROM Ġ${ LINK ING _ FEED BACK . name }"