/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - present , ĠTeam ĠBucket ĠContributors . Ċ Ġ* Ċ Ġ* Ġ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 . github . l uk s 9 1 . team bucket . persistence Ċ Ċ import Ġcom . github . l uk s 9 1 . team bucket . model .* Ċ import Ġio . reactivex . schedul ers . Timed Ċ import Ġio . realm . Realm List Ċ import Ġio . realm . Realm Model Ċ import Ġio . realm . Realm Results Ċ import Ġio . realm . annotations . Link ing Objects Ċ import Ġio . realm . annotations . PrimaryKey Ċ import Ġio . realm . annotations . Realm Class Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ // We Ġdon 't Ġwant Ġto Ġexpose Ġmutable Ġmodel Ġoutside Ġof Ġthis Ġusage . ĠAll Ġthe Ġmodules Ġand Ġstreams Ġhave Ġto Ġwork Ġwith Ġmutable Ċ // model Ġclasses Ġspecified Ġin Ġ. model Ġpackage . ĠAs Ġof ĠQ 2 Ġ 2 0 1 7 , Ġrealm Ġdoes Ġnot Ġwork Ġwith ĠKotlin Ġdata Ġclasses . Ċ @ Realm Class Ċ internal Ġopen Ġclass ĠRealm Project (@ PrimaryKey Ġopen Ġvar Ġkey : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġname : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġdescription : ĠString ? Ġ= ĠEMPTY _ STRING ) Ġ: ĠRealm Model Ġ{ ĊĠĠĠ Ġfun Ġto Project (): ĠProject Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProject ( key , Ġname , Ġdescription ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( project : ĠProject ): ĠRealm Project Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRealm Project ( project . key , Ġproject . name , Ġproject . description ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Realm Class Ċ internal Ġopen Ġclass ĠRealm Repository ( ĊĠĠĠĠĠĠĠ Ġopen Ġvar Ġslug : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠ Ġopen Ġvar Ġname : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠ Ġopen Ġvar Ġproject : ĠRealm Project Ġ= ĠRealm Project ()) Ġ: ĠRealm Model Ġ{ ĊĊĠĠĠ Ġ@ PrimaryKey Ġopen Ġvar Ġrealm Id : ĠString Ġ= Ġ"${ project ?. key }_ $ slug " ĊĊĠĠĠ Ġfun Ġto Repository (): ĠRepository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRepository ( slug , Ġname , Ġproject . to Project ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( repository : ĠRepository ): ĠRealm Repository Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRealm Repository ( repository . slug , Ġrepository . name , ĠRealm Project . from ( repository . project )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Realm Class Ċ internal Ġopen Ġclass ĠRealm Team (@ PrimaryKey Ġopen Ġvar Ġtimestamp Millis : ĠLong Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġmembers List : ĠRealm List < Realm D ens ified User > Ġ= ĠRealm List < Realm D ens ified User >()) Ġ: ĊĠĠĠĠĠĠĠ ĠRealm Model Ġ{ ĊĊĠĠĠ Ġfun Ġto Timed Map (): ĠTime d < Map < User , ĠD ensity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmembers Map Ġ= Ġmembers List . associate By Ġ({ Ġit . user . to User () Ġ}, Ġ{ ĠD ensity ( it . inbound , Ġit . outbound ) Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn ĠTime d ( members Map , Ġtimestamp Millis , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( map : ĠTime d < Map < User , ĠD ensity >>) Ġ= ĠRealm Team ( map . time (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . value (). map Ġ{ ĠRealm D ens ified User . from ( it . key , Ġit . value ) Ġ}. to Realm List ()) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ internal Ġfun Ġ< T : ĠRealm Model > ĠIterable < T >. to Realm List (): ĠRealm List < T > Ġ= ĠRealm List < T >(). apply Ġ{ Ġadd All ( this @ to Realm List ) Ġ} Ċ Ċ @ Realm Class Ċ internal Ġopen Ġclass ĠRealm D ens ified User ( open Ġvar Ġuser : ĠRealm User Ġ= ĠRealm User (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġinbound : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġoutbound : ĠInt Ġ= Ġ 0 ) Ġ: ĠRealm Model Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( user : ĠUser , Ġdensity : ĠD ensity ) Ġ= ĠRealm D ens ified User ( Realm User . from ( user ), Ġdensity . inbound , Ġdensity . outbound ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Realm Class Ċ internal Ġopen Ġclass ĠRealm User (@ PrimaryKey Ġopen Ġvar Ġid : ĠLong Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġname : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar ĠdisplayName : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġslug : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġavatar Url Suffix : ĠString ? Ġ= ĠEMPTY _ STRING ) Ġ: ĠRealm Model Ġ{ ĊĊĠĠĠ Ġfun Ġto User (): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser ( id , Ġname , ĠdisplayName , Ġslug , Ġavatar Url Suffix . or Empty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( user : ĠUser ): ĠRealm User Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRealm User ( user . id , Ġuser . name , Ġuser . displayName , Ġuser . slug , Ġuser . avatar Url Suffix . or Empty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Realm Class Ċ internal Ġopen Ġclass ĠRealm PullRequest Member ( open Ġvar Ġuser : ĠRealm User Ġ= ĠRealm User (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġrole : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġapproved : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġstatus : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Link ing Objects (" review ers ") Ġopen Ġval Ġreviewing Pull Requests : ĠRealm Results < Realm PullRequest >? Ġ= Ġnull ) Ġ: ĠRealm Model Ġ{ ĊĊĠĠĠ Ġfun Ġto PullRequest Member (): ĠPull Request Member Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPull Request Member ( user . to User (), Ġrole , Ġapproved , Ġstatus ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( member : ĠPull Request Member ): ĠRealm PullRequest Member Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRealm PullRequest Member ( Realm User . from ( member . user ), Ġmember . role , Ġmember . approved , Ġmember . status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Realm Class Ċ internal Ġopen Ġclass ĠRealm Git Reference (@ PrimaryKey Ġopen Ġvar Ġdisplay Id : ĠString Ġ= ĠStringUtils . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġlatest Commit : ĠString Ġ= ĠStringUtils . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġrepository : ĠRealm Repository Ġ= ĠRealm Repository ()): ĠRealm Model Ġ{ ĊĊĠĠĠ Ġfun Ġto Git Reference (): ĠGit Reference Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGit Reference ( display Id , Ġlatest Commit , Ġrepository . to Repository ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( git Reference : ĠGit Reference ): ĠRealm Git Reference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRealm Git Reference ( git Reference . display Id , Ġgit Reference . latest Commit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Repository . from ( git Reference . repository )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Realm Class Ċ internal Ġopen Ġclass ĠRealm PullRequest ( open Ġvar Ġid : ĠLong Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġtitle : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġcreated Date : ĠLong Ġ= Ġ 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġupdated Date : ĠLong Ġ= Ġ 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġauthor : ĠRealm PullRequest Member Ġ= ĠRealm PullRequest Member (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġreviewers : ĠRealm List < Realm PullRequest Member > Ġ= ĠRealm List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġstate : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġsource Branch : ĠRealm Git Reference Ġ= ĠRealm Git Reference (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġvar Ġtarget Branch : ĠRealm Git Reference Ġ= ĠRealm Git Reference ()) Ġ: ĠRealm Model Ġ{ ĊĊĠĠĠ Ġ@ PrimaryKey Ġopen Ġvar Ġrealm Id : ĠString Ġ= Ġ"${ id }_${ source Branch ?. repository ?. slug }_${ source Branch ?. repository ?. project ?. key }" ĊĊĠĠĠ Ġfun Ġto PullRequest (): ĠPull Request Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPull Request ( id , Ġtitle , Ġcreated Date , Ġupdated Date , Ġauthor . to PullRequest Member (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreviewers . map ( Realm PullRequest Member :: to PullRequest Member ). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate , Ġsource Branch . to Git Reference (), Ġtarget Branch . to Git Reference ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( pull Request : ĠPull Request ): ĠRealm PullRequest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreviewers Ġ= ĠRealm List < Realm PullRequest Member >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreviewers . addAll ( pull Request . review ers . map ( Realm PullRequest Member . Factory :: from )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRealm PullRequest ( pull Request . id , Ġpull Request . title , Ġpull Request . created Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpull Request . updated Date , ĠRealm PullRequest Member . from ( pull Request . author ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreviewers , Ġpull Request . state , ĠRealm Git Reference . from ( pull Request . source Branch ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Git Reference . from ( pull Request . target Branch )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }