/* Ċ Ġ* Ġ ĠCopyright Ġ( c ) Ġ 2 0 0 4 - 2 0 2 1 , ĠUniversity Ġof ĠOs lo Ċ Ġ* Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġ Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ġ ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* Ġ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* Ġ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* Ġ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ġ ĠNeither Ġthe Ġname Ġof Ġthe ĠH ISP Ġproject Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ċ Ġ* Ġ Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ċ Ġ* Ġ Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* Ġ ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND Ċ Ġ* Ġ ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED Ċ Ġ* Ġ ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* Ġ ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR Ċ Ġ* Ġ ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ċ Ġ* Ġ Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; Ċ Ġ* Ġ ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON Ċ Ġ* Ġ ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ċ Ġ* Ġ Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS Ċ Ġ* Ġ ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġorg . h isp . dh is . android . core . relationship Ċ Ċ import Ġdagger . Re usable Ċ import Ġjavax . inject . Inject Ċ import Ġorg . h isp . dh is . android . core . arch . db . query builders . internal . Where Clause Builder Ċ import Ġorg . h isp . dh is . android . core . arch . db . stores . internal . Ident ifiable Object Store Ċ import Ġorg . h isp . dh is . android . core . arch . repositories . children . internal . Children Appender Ċ import Ġorg . h isp . dh is . android . core . arch . repositories . collection . internal . ReadOnly Ident ifiable Collection Repository Impl Ċ import Ġorg . h isp . dh is . android . core . arch . repositories . filters . internal . Boolean Filter Connector Ċ import Ġorg . h isp . dh is . android . core . arch . repositories . filters . internal . Filter Connector Factory Ċ import Ġorg . h isp . dh is . android . core . arch . repositories . scope . Repository Scope Ċ import Ġorg . h isp . dh is . android . core . arch . repositories . scope . internal . Filter Item Operator Ċ import Ġorg . h isp . dh is . android . core . common . Ident ifiable Columns Ċ import Ġorg . h isp . dh is . android . core . enrollment . internal . Enrollment Store Ċ import Ġorg . h isp . dh is . android . core . event . internal . Event Store Ċ import Ġorg . h isp . dh is . android . core . relationship . internal . Relationship Type Collection Repository Helper . available For Enrollment Raw Query Ċ import Ġorg . h isp . dh is . android . core . relationship . internal . Relationship Type Collection Repository Helper . available For Event Raw Query Ċ import Ġorg . h isp . dh is . android . core . relationship . internal . Relationship Type Collection Repository Helper . available For Tracked Entity Instance Raw Query Ċ import Ġorg . h isp . dh is . android . core . relationship . internal . Relationship Type Fields Ċ import Ġorg . h isp . dh is . android . core . system info . DH IS Version Manager Ċ import Ġorg . h isp . dh is . android . core . tracked entity . internal . Tracked Entity Instance Store Ċ Ċ @ Re usable Ċ class ĠRelationship Type Collection Repository Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠ Ġstore : ĠIdent ifiable Object Store < Relationship Type >, ĊĠĠĠ Ġprivate Ġval Ġte i Store : ĠTrack ed Entity Instance Store , ĊĠĠĠ Ġprivate Ġval Ġenrollment Store : ĠEn rollment Store , ĊĠĠĠ Ġprivate Ġval Ġevent Store : ĠEvent Store , ĊĠĠĠ Ġprivate Ġval Ġd his Version Manager : ĠDH IS Version Manager , ĊĠĠĠ Ġchildren Append ers : ĠMutable Map < String , ĠChildren Appender < Relationship Type >>, ĊĠĠĠ Ġscope : ĠRepository Scope Ċ ) Ġ: ĠReadOnly Ident ifiable Collection Repository Impl < Relationship Type , ĠRelationship Type Collection Repository >( ĊĠĠĠ Ġstore , ĊĠĠĠ Ġchildren Append ers , ĊĠĠĠ Ġscope , ĊĠĠĠ ĠFilter Connector Factory < Relationship Type Collection Repository >( scope ) Ġ{ Ġs : ĠRepository Scope Ġ-> ĊĠĠĠĠĠĠĠ ĠRelationship Type Collection Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore , Ġte i Store , Ġenrollment Store , Ġevent Store , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd his Version Manager , Ġchildren Append ers , Ġs ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġby Bid irectional (): ĠBoolean Filter Connector < Relationship Type Collection Repository > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcf . bool ( Relationship Type Table Info . Columns . B IDI RECTION AL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġby Constraint ( ĊĠĠĠĠĠĠĠ Ġrelationship EntityType : ĠRelationship EntityType , ĊĠĠĠĠĠĠĠ Ġrelationship Entity Uid : ĠString , ĊĠĠĠĠĠĠĠ Ġrelationship Constraint Type : ĠRelationship Constraint Type ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠRelationship Type Collection Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcf . sub Query ( Ident ifiable Columns . UID ). in Table Where ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship Constraint Table Info . TABLE _ INFO . name (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship Constraint Table Info . Columns . REL ATION SHIP _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Clause Builder ( relationship EntityType , Ġrelationship Entity Uid ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( relationship Constraint Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Key StringValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship Constraint Table Info . Columns . CONSTRAINT _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelationship Constraint Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFilter ĠRelationship Types Ġby Ġthose Ġthat Ġme ets Ġthe Ġrequirements Ġfor Ġthis Ġtracked Entity Instance : ĊĠĠĠĠ Ġ* Ġ- Ġthe ĠTE I Ġmight Ġbe Ġassigned Ġto Ġthe ĠFROM Ġcomponent ĊĠĠĠĠ Ġ* Ġ- Ġor Ġthe ĠTE I Ġmight Ġbe Ġassigned Ġto Ġthe ĠTO Ġcomponent Ġand Ġthe ĠRelationship Type Ġis Ġbid irectional ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġby Available For Tracked Entity Instance ( tracked Entity Instance Uid : ĠString ): ĠRelationship Type Collection Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( dh is Version Manager . is 2 _ 2 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAll Ġrelationships Ġare Ġallowed Ġfor ĠTE Is Ġin Ġ 2 . 2 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtracked Entity Instance Ġ= Ġte i Store . select By Uid ( tracked Entity Instance Uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcf . sub Query ( Ident ifiable Columns . UID ). raw Sub Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Item Operator . IN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable For Tracked Entity Instance Raw Query ( tracked Entity Instance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFilter ĠRelationship Types Ġby Ġthose Ġthat Ġme ets Ġthe Ġrequirements Ġfor Ġthis Ġenrollment : ĊĠĠĠĠ Ġ* Ġ- Ġthe Ġenrollment Ġmight Ġbe Ġassigned Ġto Ġthe ĠFROM Ġcomponent ĊĠĠĠĠ Ġ* Ġ- Ġor Ġthe Ġenrollment Ġmight Ġbe Ġassigned Ġto Ġthe ĠTO Ġcomponent Ġand Ġthe ĠRelationship Type Ġis Ġbid irectional ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġby Available For Enrollment ( enrollment Uid : ĠString ): ĠRelationship Type Collection Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( dh is Version Manager . is 2 _ 2 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEn rollment Ġrelationships Ġare Ġnot Ġsupported Ġin Ġ 2 . 2 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcf . string ( Ident ifiable Columns . UID ). ` in `( emptyList ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenrollment Ġ= Ġenrollment Store . select By Uid ( enrollment Uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcf . sub Query ( Ident ifiable Columns . UID ). raw Sub Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Item Operator . IN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable For Enrollment Raw Query ( enrollment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFilter ĠRelationship Types Ġby Ġthose Ġthat Ġme ets Ġthe Ġrequirements Ġfor Ġthis Ġevent : ĊĠĠĠĠ Ġ* Ġ- Ġthe Ġevent Ġmight Ġbe Ġassigned Ġto Ġthe ĠFROM Ġcomponent ĊĠĠĠĠ Ġ* Ġ- Ġor Ġthe Ġevent Ġmight Ġbe Ġassigned Ġto Ġthe ĠTO Ġcomponent Ġand Ġthe ĠRelationship Type Ġis Ġbid irectional ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġby Available For Event ( event Uid : ĠString ): ĠRelationship Type Collection Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( dh is Version Manager . is 2 _ 2 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEvent Ġrelationships Ġare Ġnot Ġsupported Ġin Ġ 2 . 2 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcf . string ( Ident ifiable Columns . UID ). ` in `( emptyList ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġevent Store . select By Uid ( event Uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcf . sub Query ( Ident ifiable Columns . UID ). raw Sub Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Item Operator . IN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable For Event Raw Query ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Constraints (): ĠRelationship Type Collection Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcf . with Child ( Relationship Type Fields . CONSTRAINT S ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconstraint Clause Builder ( ĊĠĠĠĠĠĠĠ Ġrelationship EntityType : ĠRelationship EntityType , ĊĠĠĠĠĠĠĠ Ġrelationship Entity Uid : ĠString ĊĠĠĠ Ġ): ĠWhere Clause Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWhere Clause Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Key StringValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship Constraint Table Info . Columns . REL ATION SHIP _ ENTITY , Ġrelationship EntityType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Key StringValue ( get Relationship Entity Column ( relationship EntityType ), Ġrelationship Entity Uid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Relationship Entity Column ( relationship EntityType : ĠRelationship EntityType ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( relationship EntityType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship EntityType . TRACK ED _ ENTITY _ INSTANCE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship Constraint Table Info . Columns . TRACK ED _ ENTITY _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship EntityType . PROGRAM _ INSTANCE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship Constraint Table Info . Columns . PROGRAM ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship EntityType . PROGRAM _ STAGE _ INSTANCE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship Constraint Table Info . Columns . PROGRAM _ STAGE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ