/** Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ- Ġ 2 0 2 2 ĠEP AM ĠSystems Ċ Ġ* Ċ Ġ* Ġ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 . ep am . drill . admin . storage ĊĊ Ċ class ĠObservable Set Storage < T >( private Ġval Ġtarget Set : ĠMutable Set < T > Ġ= Ġmutable Set Of ()) Ġ: ĠMutable Set < T > Ġby Ġtarget Set Ġ{ ĊĠĠĠ Ġval ĠonUpdate : ĠMutable Set <( Mutable Set < T >) Ġ-> ĠUnit > Ġ= Ġmutable Set Of () ĊĠĠĠ Ġval Ġon Add : ĠMutable Set <( T ) Ġ-> ĠUnit > Ġ= Ġmutable Set Of () ĊĠĠĠ Ġval Ġon Remove : ĠMutable Set <( T ) Ġ-> ĠUnit > Ġ= Ġmutable Set Of () ĊĠĠĠ Ġval Ġon Clear : ĠMutable Set <( Mutable Set < T >) Ġ-> ĠUnit > Ġ= Ġmutable Set Of () ĊĊĊĠĠĠ Ġoverride Ġfun Ġadd ( element : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadd Ġ= Ġtarget Set . add ( element ) ĊĠĠĠĠĠĠĠ Ġon Add . forEach Ġ{ Ġit ( element ) Ġ} ĊĠĠĠĠĠĠĠ ĠonUpdate . forEach Ġ{ Ġit ( target Set ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġadd ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( element : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġremove Ġ= Ġtarget Set . remove ( element ) ĊĠĠĠĠĠĠĠ Ġon Remove . forEach Ġ{ Ġit ( element ) Ġ} ĊĠĠĠĠĠĠĠ ĠonUpdate . forEach Ġ{ Ġit ( target Set ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġremove ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Set . clear () ĊĠĠĠĠĠĠĠ Ġon Clear . forEach Ġ{ Ġit ( target Set ) Ġ} ĊĠĠĠĠĠĠĠ ĠonUpdate . forEach Ġ{ Ġit ( target Set ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġtest () Ġ{ ĊĠĠĠ Ġval Ġk ta Ġ= ĠObservable Set Storage ( mutable Set Of < String >()) ĊĠĠĠ Ġk ta . on Add Ġ+= Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln ("$ item Ġadded ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġk ta . on Update Ġ+= Ġ{ Ġset Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln ("$ set Ġupdated ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġk ta . on Remove Ġ+= Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln ("$ item Ġremoved ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġk ta . on Clear Ġ+= Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" cleaned ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġk ta . add (" 2 3 1 3 ") ĊĠĠĠ Ġk ta . add (" 1 2 3 1 ") ĊĠĠĠ Ġk ta . remove (" 1 2 3 1 ") ĊĠĠĠ Ġk ta . add (" 1 ") ĊĠĠĠ Ġk ta . clear () Ċ } Ċ