package Ġorg . gob lin framework . core . event . listener Ċ Ċ import Ġorg . gob lin framework . api . function . Ordered Ċ import Ġorg . gob lin framework . core . event . G ob lin Event Ċ import Ġorg . gob lin framework . core . event . G ob lin Event Context Ċ import Ġorg . gob lin framework . core . event . G ob lin EventListener Ċ import Ġorg . gob lin framework . core . service . G ob lin Managed Bean Ċ import Ġorg . gob lin framework . core . service . G ob lin ManagedObject Ċ import Ġorg . gob lin framework . core . util . Object Utils Ċ import Ġorg . gob lin framework . core . util . Random Utils Ċ import Ġorg . gob lin framework . core . util . Stop Watch Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Long Ad der Ċ import Ġjava . util . concurrent . locks . Re entrant ReadWrite Lock Ċ import Ġkotlin . concurrent . read Ċ import Ġkotlin . concurrent . write Ċ Ċ @ G ob lin Managed Bean ( type Ġ= Ġ" Core ", Ġname Ġ= Ġ" G ob lin EventListener ") Ċ class ĠG ob lin EventListener Impl Ċ internal Ġconstructor ( private Ġval Ġdeleg ator : ĠG ob lin EventListener ) ĊĠ Ġ: ĠG ob lin ManagedObject (), ĠG ob lin EventListener , ĠOrdered , ĠG ob lin EventListener MX Bean Ġ{ ĊĊĠ Ġprivate Ġval Ġid Ġ= ĠRandom Utils . next ObjectId () ĊĠ Ġprivate Ġval Ġwatch Ġ= ĠStop Watch () ĊĠ Ġprivate Ġval Ġaccepted Count Ġ= ĠLong Ad der () ĊĠ Ġprivate Ġval Ġrejected Count Ġ= ĠLong Ad der () ĊĠ Ġprivate Ġval Ġsucceed Count Ġ= ĠLong Ad der () ĊĠ Ġprivate Ġval Ġfailed Count Ġ= ĠLong Ad der () ĊĊĠ Ġprivate Ġval Ġlock Ġ= ĠRe entrant ReadWrite Lock () ĊĠ Ġprivate Ġval Ġcounts Ġ= ĠIdentity HashMap < Class < out ĠG ob lin Event >, ĠG ob lin Event Count >() ĊĊĠ Ġoverride Ġfun Ġget Order (): ĠInt Ġ{ ĊĠĠĠ Ġreturn ĠObject Utils . calculate Order ( deleg ator ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġaccept ( context : ĠG ob lin Event Context ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġcount Ġ= Ġcount ( context . event . java Class ) ĊĠĠĠ Ġval Ġret Ġ= Ġdeleg ator . accept ( context ) ĊĠĠĠ Ġif Ġ( ret ) Ġ{ ĊĠĠĠĠĠ Ġaccepted Count . increment () ĊĠĠĠĠĠ Ġcount . accepted Count . increment () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġrejected Count . increment () ĊĠĠĠĠĠ Ġcount . rejected Count . increment () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Event ( context : ĠG ob lin Event Context ) Ġ{ ĊĠĠĠ Ġval Ġcount Ġ= Ġcount ( context . event . java Class ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġdeleg ator . on Event ( context ) ĊĠĠĠĠĠ Ġsucceed Count . increment () ĊĠĠĠĠĠ Ġcount . suc ceed Count . increment () ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġfailed Count . increment () ĊĠĠĠĠĠ Ġcount . failed Count . increment () ĊĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcount ( type : ĠClass < out ĠG ob lin Event >): ĠG ob lin Event Count Ġ{ ĊĠĠĠ Ġreturn Ġlock . read Ġ{ Ġcounts [ type ] Ġ} Ġ?: Ġlock . write Ġ{ ĊĠĠĠĠĠ Ġcounts [ type ] Ġ?: Ġkotlin . run Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠG ob lin Event Count ( type ) ĊĠĠĠĠĠĠĠ Ġcounts [ type ] Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġcount ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdispose Bean () Ġ{ ĊĠĠĠ Ġlock . write Ġ{ ĊĠĠĠĠĠ Ġcounts . values . forEach Ġ{ Ġit . dispose () Ġ} ĊĠĠĠĠĠ Ġcounts . clear () ĊĠĠĠ Ġ} ĊĠĠĠ Ġwatch . stop () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetId (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġid ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Up Time (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwatch . toString () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Listener (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġdeleg ator . toString () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Accepted Count (): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġaccepted Count . sum () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Rejected Count (): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġrejected Count . sum () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Suc ceed Count (): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġsucceed Count . sum () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Failed Count (): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġfailed Count . sum () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Event Count List (): ĠArray < G ob lin Event Count MX Bean > Ġ{ ĊĠĠĠ Ġreturn Ġlock . read Ġ{ Ġcounts . values . sorted By Descending Ġ{ Ġit . get Accepted Count () Ġ}. to Typed Array () Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ" G ob lin EventListener :$ deleg ator " ĊĠ Ġ} Ċ }