/** Ċ Ġ* ĠCopyright Ġ 2 0 0 6 Ġ- Ġ 2 0 2 1 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġjet brains . ex od us . database Ċ Ċ import Ġjet brains . ex od us . core . data Structures . hash . Linked HashSet Ċ Ċ class ĠLink Change ( val Ġlink Name : ĠString ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ added Entities : ĠMutable Set < Transient Entity >? Ġ= Ġnull ĊĠĠĠ Ġval Ġadded Entities Ġget () Ġ= Ġ_ added Entities ĊĠĠĠ Ġval Ġadded Entities Size : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ added Entities ?. size Ġ?: Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġ_ removed Entities : ĠMutable Set < Transient Entity >? Ġ= Ġnull ĊĠĠĠ Ġval Ġremoved Entities Ġget () Ġ= Ġ_ removed Entities ĊĠĠĠ Ġval Ġremoved Entities Size : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ removed Entities ?. size Ġ?: Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġ_ deleted Entities : ĠMutable Set < Transient Entity >? Ġ= Ġnull ĊĠĠĠ Ġval Ġdeleted Entities Ġget () Ġ= Ġ_ deleted Entities ĊĠĠĠ Ġval Ġdeleted Entities Size : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ deleted Entities ?. size Ġ?: Ġ 0 ĊĊĠĠĠ Ġval Ġchange Type : ĠLink Change Type ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadded Ġ= Ġadded Entities Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremoved Ġ= Ġremoved Entities Size Ġ+ Ġdeleted Entities Size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded Ġ!= Ġ 0 Ġ&& Ġremoved Ġ== Ġ 0 Ġ-> ĠLink Change Type . ADD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded Ġ== Ġ 0 Ġ&& Ġremoved Ġ!= Ġ 0 Ġ-> ĠLink Change Type . REMOVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded Ġ!= Ġ 0 Ġ&& Ġremoved Ġ!= Ġ 0 Ġ-> ĠLink Change Type . ADD _ AND _ REMOVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" No Ġadded Ġor Ġremoved Ġlinks .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġis NotEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadded Entities Size Ġ> Ġ 0 Ġ|| Ġremoved Entities Size Ġ> Ġ 0 Ġ|| Ġdeleted Entities Size Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"$ link Name :$ change Type " ĊĊĠĠĠ Ġfun Ġadd Added ( e : ĠTrans ient Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ removed Entities ?. remove ( e ) Ġ== Ġtrue ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġadded Entities Ġ= Ġthis ._ added Entities Ġ?: ĠLinked HashSet < Transient Entity >(). also Ġ{ Ġnew Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ._ added Entities Ġ= Ġnew Set ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadded Entities . add ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Removed ( e : ĠTrans ient Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ added Entities ?. remove ( e ) Ġ== Ġtrue ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġremoved Entities Ġ= Ġthis ._ removed Entities Ġ?: ĠLinked HashSet < Transient Entity >(). also Ġ{ Ġnew Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ._ removed Entities Ġ= Ġnew Set ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġremoved Entities . add ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Deleted ( e : ĠTrans ient Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ removed Entities ?. remove ( e ) ĊĠĠĠĠĠĠĠ Ġ_ added Entities ?. remove ( e ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeleted Entities Ġ= Ġthis ._ deleted Entities Ġ?: ĠLinked HashSet < Transient Entity >(). also Ġ{ Ġnew Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ._ deleted Entities Ġ= Ġnew Set ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdeleted Entities . add ( e ) ĊĠĠĠ Ġ} Ċ } Ċ