/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠDev J ake Ċ Ġ* Ċ Ġ* Ġ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 Ġme . salt . entities . permissions Ċ Ċ import Ġme . salt . entities . objects . Perm Role Ċ import Ġme . salt . utilities . exception . Builder Value Exception Ċ import Ġme . salt . utilities . exception . exception Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠUser Permission Builder ( userId : ĠString ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠuserId Ġ= ĠuserId ĊĠĠĠ Ġprivate Ġvar Ġgroups Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġprivate Ġvar Ġpermissions Ġ= Ġmutable ListOf < Node >() Ġ// TODO Ġdefault Ġpermissions , Ġsuch Ġas Ġpermission Ġto Ġsend Ġa Ġmessage Ġto Ġany Ġchannel ? ĊĠĠĠ Ġprivate Ġvar Ġenforce ments Ġ= Ġmutable ListOf < Node >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Pattern . compile ("\\ D "). matcher ( userId ). matches ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception ( Builder Value Exception (" The Ġspecified ĠuserId Ġcontains Ġnon - num erical Ġcharacters ! ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild () Ġ= ĠUser Permission ( userId , Ġgroups , Ġpermissions , Ġenforce ments ) ĊĊĠĠĠ Ġfun Ġadd Groups ( var arg Ġgroup Titles : ĠString ) Ġ= Ġapply Ġ{ Ġgroups . addAll ( group Titles ) Ġ} ĊĠĠĠ Ġfun Ġremove Groups ( var arg Ġgroup Titles : ĠString ) Ġ= Ġapply Ġ{ Ġgroups . removeAll ( group Titles ) Ġ} ĊĊĠĠĠ Ġfun Ġadd Permissions ( var arg Ġnodes : ĠNode ) Ġ= Ġapply Ġ{ Ġpermissions . addAll ( nodes ) Ġ} ĊĠĠĠ Ġfun Ġremove Permissions ( var arg Ġnodes : ĠNode ) Ġ= Ġapply Ġ{ Ġpermissions . removeAll ( nodes ) Ġ} ĊĊĠĠĠ Ġfun Ġadd En force ments ( var arg Ġnodes : ĠNode ) Ġ= Ġapply Ġ{ Ġenforce ments . addAll ( nodes ) Ġ} ĊĠĠĠ Ġfun Ġremove En force ments ( var arg Ġnodes : ĠNode ) Ġ= Ġapply Ġ{ Ġenforce ments . removeAll ( nodes ) Ġ} Ċ } Ċ Ċ class ĠGroup Permission Builder ( groupName : ĠString ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠgroupName Ġ= ĠgroupName ĊĠĠĠ Ġprivate Ġvar Ġpermissions Ġ= Ġmutable ListOf < Node >() ĊĠĠĠ Ġprivate Ġvar Ġenforce ments Ġ= Ġmutable ListOf < Node >() ĊĠĠĠ Ġprivate Ġvar Ġgroups Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġprivate Ġvar Ġapply To All Users Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġapply To Users With Role Ġ= Ġmutable ListOf < Perm Role >() ĊĊĠĠĠ Ġfun Ġbuild () Ġ= ĠGroup Permission ( groupName , Ġpermissions , Ġenforce ments , Ġgroups , Ġapply To All Users , Ġapply To Users With Role ) ĊĊĠĠĠ Ġfun Ġadd Groups ( var arg Ġgroup Titles : ĠString ) Ġ= Ġapply Ġ{ Ġgroups . addAll ( group Titles ) Ġ} ĊĠĠĠ Ġfun Ġremove Groups ( var arg Ġgroup Titles : ĠString ) Ġ= Ġapply Ġ{ Ġgroups . removeAll ( group Titles ) Ġ} ĊĊĠĠĠ Ġfun Ġadd Permissions ( var arg Ġnodes : ĠNode ) Ġ= Ġapply Ġ{ Ġpermissions . addAll ( nodes ) Ġ} ĊĠĠĠ Ġfun Ġremove Permissions ( var arg Ġnodes : ĠNode ) Ġ= Ġapply Ġ{ Ġpermissions . removeAll ( nodes ) Ġ} ĊĊĠĠĠ Ġfun Ġadd En force ments ( var arg Ġnodes : ĠNode ) Ġ= Ġapply Ġ{ Ġenforce ments . addAll ( nodes ) Ġ} ĊĠĠĠ Ġfun Ġremove En force ments ( var arg Ġnodes : ĠNode ) Ġ= Ġapply Ġ{ Ġenforce ments . removeAll ( nodes ) Ġ} ĊĊĠĠĠ Ġfun Ġset Apply To All Users ( apply To All Users : ĠBoolean ) Ġ= Ġapply Ġ{ Ġthis . apply To All Users Ġ= Ġapply To All Users Ġ} ĊĠĠĠ Ġfun Ġset Apply To Users With Role ( var arg Ġapply To Users With Role : ĠP erm Role ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . apply To Users With Role . addAll ( apply To Users With Role ) ĊĠĠĠ Ġ} Ċ }