/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 . ĠOpen L attice , ĠInc . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< http :// www . gnu . org / licenses />. Ċ Ġ* Ċ Ġ* ĠYou Ġcan Ġcontact Ġthe Ġowner Ġof Ġthe Ġcopyright Ġat Ġsupport @ open l attice . com Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . open l attice . organizations . tasks Ċ Ċ import Ġcom . google . common . base . Stop watch Ċ import Ġcom . open l attice . Id Constants . GLOBAL _ ORG AN IZATION _ ID Ċ import Ġcom . open l attice . assembler . tasks . Users And Roles Initialization Task Ċ import Ġcom . open l attice . authorization . System Role Ċ import Ġcom . open l attice . authorization . initial izers . Authorization Initialization Task Ċ import Ġcom . open l attice . authorization . initial izers . Authorization Initialization Task . Companion . GLOBAL _ ADMIN _ ROLE Ċ import Ġcom . open l attice . authorization . initial izers . Authorization Initialization Task . Companion . GLOBAL _ USER _ ROLE Ċ import Ġcom . open l attice . edm . tasks . Edm Sync Initializer Task Ċ import Ġcom . open l attice . organization . Organization Constants . Companion . GLOBAL _ ORG _ PR INC IP AL Ċ import Ġcom . open l attice . organization . Organization Principal Ċ import Ġcom . open l attice . organizations . Grant Ċ import Ġcom . open l attice . organizations . Grant Type Ċ import Ġcom . open l attice . organizations . Organization Ċ import Ġcom . open l attice . tasks . H azelcast Initialization Task Ċ import Ġcom . open l attice . tasks . Post Construct Initializer Task Dependencies . Post Construct Initializer Task Ċ import Ġcom . open l attice . tasks . Task Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ private Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Organizations Initialization Task :: class . java ) Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠMat thew ĠT am ay o - R ios Ġ& lt ; mat thew @ open l attice . com & gt ; Ċ Ġ*/ Ċ class ĠOrgan izations Initialization Task Ġ: ĠH azelcast Initialization Task < Organizations Initialization Dependencies > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġinitialize ( dependencies : ĠOrgan izations Initialization Dependencies ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Running Ġbootstrap Ġprocess Ġfor Ġorganizations .") ĊĠĠĠĠĠĠĠ Ġval Ġsw Ġ= ĠStop watch . create Started () ĊĠĠĠĠĠĠĠ Ġval Ġorganization Service Ġ= Ġdependencies . organization Service ĊĠĠĠĠĠĠĠ Ġval Ġpartition Manager Ġ= Ġdependencies . partition Manager ĊĠĠĠĠĠĠĠ Ġval Ġglobal Org Ġ= Ġorganization Service . maybe Get Organization ( GLOBAL _ ORG _ PR INC IP AL ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Partitions Ġ= Ġpartition Manager . getAll Partitions () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( global Org . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorg Principal Ġ= Ġglobal Org . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorg Ġ= Ġorganization Service . get Organization ( org Principal . id ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerge Gr ants ( org ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies . configuration . connection . if Present Ġ{ Ġorg . connections . addAll ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorg . gr ants . forEach Ġ{ Ġ( role Id , Ġgrant Map ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Map . values . forEach Ġ{ Ġgrant Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Service . update Role Grant ( org Principal . id , Ġrole Id , Ġgrant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġid Ġ= Ġ{}, ĠActual Ġid Ġ= Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLOBAL _ ORG AN IZATION _ ID . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg Principal . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( GLOBAL _ ORG AN IZATION _ ID . id Ġ== Ġorg Principal . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mismatch Ġin Ġexpected Ġglobal Ġorg Ġid Ġand Ġread Ġglobal Ġorg Ġid " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorg Ġ= Ġcreate Global Org ( default Partitions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerge Gr ants ( org ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies . configuration . connection . if Present Ġ{ Ġorg . connections . addAll ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Service . create Organization ( GLOBAL _ ADMIN _ ROLE . principal , Ġorg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Boot str apping Ġfor Ġorganizations Ġtook Ġ{} Ġms ", Ġsw . elapsed ( TimeUnit . MILLISECONDS )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmerge Gr ants ( org : ĠOrganization ) Ġ{ ĊĠĠĠĠĠĠĠ Ġglobal Gr ants (). forEach Ġ{ Ġ( role Id , Ġgrant Map ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Map . forEach Ġ{ Ġ( grant Type , Ġgrant ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg . gr ants . get Or Put ( role Id ) Ġ{ Ġgrant Map Ġ} [ grant Type ] Ġ= Ġgrant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġglobal Gr ants (): ĠMutable Map < UUID , ĠMutable Map < Grant Type , ĠGrant >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Principal Ġ= Ġget Dependency (). sp m . lookup Role ( GLOBAL _ USER _ ROLE . principal ) ĊĠĠĠĠĠĠĠ Ġval Ġadmin Principal Ġ= Ġget Dependency (). sp m . lookup Role ( GLOBAL _ ADMIN _ ROLE . principal ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Principal . id Ġto Ġmutable Map Of ( Grant Type . Automatic Ġto ĠGrant ( Grant Type . Automatic , Ġset Of ())), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadmin Principal . id Ġto Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrant Type . Roles Ġto ĠGrant ( Grant Type . Roles , Ġset Of ( System Role . ADMIN . principal . id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Initial Delay (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget TimeUnit (): ĠTimeUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTimeUnit . MILLISECONDS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter (): ĠSet < Class < out ĠH azelcast Initialization Task <* >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthorization Initialization Task :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsers And Roles Initialization Task :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPost Construct Initializer Task :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEd m Sync Initializer Task :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTask . ORG AN IZATION _ INITIAL IZATION . name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Dependencies Class (): ĠClass < out ĠOrgan izations Initialization Dependencies > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOrgan izations Initialization Dependencies :: class . java ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Global Org ( partitions : ĠList < Int >): ĠOrganization Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠGLOBAL _ ORG AN IZATION _ ID . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġ" Global ĠOrganization " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOrganization ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse cur able Principal Ġ= ĠOrganization Principal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLOBAL _ ORG _ PR INC IP AL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Domains Ġ= Ġmutable Set Of (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmembers Ġ= Ġmutable Set Of (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroles Ġ= Ġmutable Set Of (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsms Entity Set Info Ġ= Ġmutable Set Of (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpartitions Ġ= Ġpartitions . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} Ċ } Ċ