package Ġnet . app tr onic . core . entity . commons Ċ Ċ import Ġnet . app tr onic . core . base . observable . Observable Ċ import Ġnet . app tr onic . core . base . observable . Observer Ċ import Ġnet . app tr onic . core . context . Context Ċ import Ġnet . app tr onic . core . context . lifecycle . Lifecycle Stage Ċ import Ġnet . app tr onic . core . entity . Entity Ċ import Ġnet . app tr onic . core . entity . Entity Subscription Ċ import Ġnet . app tr onic . core . entity . subscriptions . Entity Subscription Listener Ċ Ċ fun Ġ< T > ĠEntity < T >. perform Entity Subscription ( ĊĠĠĠĠĠĠĠ Ġtarget Context : ĠContext , ĊĠĠĠĠĠĠĠ Ġsource : ĠObservable < T >, ĊĠĠĠĠĠĠĠ Ġtarget : ĠObserver < T > Ċ ): ĠEntity Subscription Ġ{ ĊĠĠĠ Ġreturn Ġperform Entity Subscription ( context , Ġtarget Context , Ġsource , Ġtarget ) Ċ } Ċ Ċ private Ġfun Ġ< T > Ġperform Entity Subscription ( ĊĠĠĠĠĠĠĠ Ġdefinition Context : ĠContext , Ġtarget Context : ĠContext , ĊĠĠĠĠĠĠĠ Ġsource : ĠObservable < T >, Ġtarget : ĠObserver < T > Ċ ): ĠEntity Subscription Ġ{ ĊĠĠĠ Ġval Ġstages : ĠList < Lifecycle Stage > Ġ= Ġif Ġ( target Context Ġ== Ġdefinition Context ) Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Context . lifecycle . let Ġ{ Ġit . getActive Stage () Ġ?: Ġit . root Stage Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Context . lifecycle . root Stage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Context . lifecycle . let Ġ{ Ġit . getActive Stage () Ġ?: Ġit . root Stage Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġall Entered Ġ= Ġstages . all Ġ{ Ġit . is Entered () Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( all Entered ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity Subscription Ġ= ĠContext Entity Subscription ( target ) ĊĠĠĠĠĠĠĠ Ġstages . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . register Subscription ( entity Subscription ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġgeneric Subscription Ġ= Ġsource . subscribe ( target ) ĊĠĠĠĠĠĠĠ Ġentity Subscription . register Listener ( object Ġ: ĠEntity Subscription Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Un subscribed ( subscription : ĠEntity Subscription ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Subscription . unsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġentity Subscription ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠContext Entity Subscription < T >( target ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }