package Ġio . hol unda . poly flow . task pool . collector . process . instance Ċ Ċ import Ġio . hol unda . camunda . task pool . api . process . instance .* Ċ import Ġio . hol unda . poly flow . task pool . source Reference Ċ import Ġio . hol unda . poly flow . task pool . collector . Cam unda Task pool Collector Properties Ċ import Ġmu . K Logging Ċ import Ġorg . camunda . bpm . engine . Repository Service Ċ import Ġorg . camunda . bpm . engine . history . Historic Process Instance Ċ import Ġorg . camunda . bpm . engine . impl . history . event . Historic Process Instance Event Entity Ċ import Ġorg . springframework . context . event . EventListener Ċ import Ġorg . springframework . core . annotation . Order Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ /** Ċ Ġ* ĠCollect s ĠCam unda Ġevents Ġand ĠCam unda Ġh istoric Ġevents Ġand Ġemits ĠProcess ĠInstance ĠCommands Ċ Ġ* Ġ@ see Ġ[ org . camunda . bpm . engine . impl . history . event . History Event Types ] Ċ Ġ*/ Ċ @ Component Ċ class ĠProcess Instance Event Collector Service ( ĊĠ Ġprivate Ġval Ġcollector Properties : ĠCam unda Task pool Collector Properties , ĊĠ Ġprivate Ġval Ġrepository Service : ĠRepository Service Ċ ) Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ: ĠK Logging () Ġ{ ĊĠĠĠ Ġ// Ġhigh Ġorder Ġto Ġbe Ġlater Ġthan Ġall Ġother Ġlisteners Ġand Ġwork Ġon Ġchanged Ġentity ĊĠĠĠ Ġconst Ġval ĠORDER Ġ= ĠInteger . MAX _ VALUE Ġ- Ġ 1 0 0 ĊĠ Ġ} ĊĊĊĠ Ġ/** ĊĠĠ Ġ* ĠF ires Ġcreate Ġprocess Ġinstance Ġcommand . ĊĠĠ Ġ* ĠSee Ġ[ History Event Types . PROCESS _ INSTANCE _ START ] ĊĠĠ Ġ*/ ĊĠ Ġ@ Order ( ORDER ) ĊĠ Ġ@ EventListener ( condition Ġ= Ġ"# process Instance . eventType . equals (' start ') ") ĊĠ Ġfun Ġcreate ( process Instance : ĠH istoric Process Instance Event Entity ): ĠStart Process Instance Command Ġ= ĊĠĠĠ ĠStart Process Instance Command ( ĊĠĠĠĠĠ Ġsource Reference Ġ= Ġprocess Instance . source Reference ( repository Service , Ġcollector Properties . application Name ), ĊĠĠĠĠĠ Ġprocess InstanceId Ġ= Ġprocess Instance . process InstanceId , ĊĠĠĠĠĠ Ġbusiness Key Ġ= Ġprocess Instance . business Key , ĊĠĠĠĠĠ ĠstartActivity Id Ġ= Ġprocess Instance . startActivity Id , ĊĠĠĠĠĠ Ġstart UserId Ġ= Ġprocess Instance . start UserId , ĊĠĠĠĠĠ Ġsuper InstanceId Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Instance . super Process InstanceId Ġ!= Ġnull Ġ-> Ġprocess Instance . super Process InstanceId ĊĠĠĠĠĠĠĠ Ġprocess Instance . super Case InstanceId Ġ!= Ġnull Ġ-> Ġprocess Instance . super Case InstanceId ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠF ires Ġupdate Ġprocess Ġinstance Ġcommand . ĊĠĠ Ġ* ĠSee Ġ[ History Event Types . PROCESS _ INSTANCE _ UPDATE ] ĊĠĠ Ġ*/ ĊĠ Ġ@ Order ( ORDER ) ĊĠ Ġ@ EventListener ( condition Ġ= Ġ"# process Instance . eventType . equals (' update ') ") ĊĠ Ġfun Ġupdate ( process Instance : ĠH istoric Process Instance Event Entity ): ĠUpdate Process Instance Command ? Ġ= Ġwhen Ġ( process Instance . state ) Ġ{ ĊĠĠĠ Ġ// Ġsuspend ĊĠĠĠ ĠH istoric Process Instance . STATE _ SUS PEN DED Ġ-> ĊĠĠĠĠĠ ĠS uspend Process Instance Command ( ĊĠĠĠĠĠĠĠ Ġsource Reference Ġ= Ġprocess Instance . source Reference ( repository Service , Ġcollector Properties . application Name ), ĊĠĠĠĠĠĠĠ Ġprocess InstanceId Ġ= Ġprocess Instance . process InstanceId , ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ// Ġresume ĊĠĠĠ ĠH istoric Process Instance . STATE _ ACTIVE Ġ-> ĊĠĠĠĠĠ ĠResume Process Instance Command ( ĊĠĠĠĠĠĠĠ Ġsource Reference Ġ= Ġprocess Instance . source Reference ( repository Service , Ġcollector Properties . application Name ), ĊĠĠĠĠĠĠĠ Ġprocess InstanceId Ġ= Ġprocess Instance . process InstanceId , ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Unknown Ġupdate Ġprocess Ġinstance Ġevent Ġreceived Ġ$ process Instance " Ġ} ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĊĠ Ġ/** ĊĠĠ Ġ* ĠF ires Ġend Ġprocess Ġinstance Ġcommand . ĊĠĠ Ġ* ĠSee Ġ[ History Event Types . PROCESS _ INSTANCE _ END ] ĊĠĠ Ġ*/ ĊĠ Ġ@ Order ( ORDER ) ĊĠ Ġ@ EventListener ( condition Ġ= Ġ"# process Instance . eventType . equals (' end ') ") ĊĠ Ġfun Ġend ( process Instance : ĠH istoric Process Instance Event Entity ): ĠEnd Process Instance Command ? Ġ= Ġwhen Ġ( process Instance . state ) Ġ{ ĊĠĠĠ Ġ// Ġcancel ĊĠĠĠ ĠH istoric Process Instance . STATE _ EXTERN ALLY _ TERMIN ATED Ġ-> ĊĠĠĠĠĠ ĠCancel Process Instance Command ( ĊĠĠĠĠĠĠĠ Ġsource Reference Ġ= Ġprocess Instance . source Reference ( repository Service , Ġcollector Properties . application Name ), ĊĠĠĠĠĠĠĠ Ġprocess InstanceId Ġ= Ġprocess Instance . process InstanceId , ĊĠĠĠĠĠĠĠ Ġbusiness Key Ġ= Ġprocess Instance . business Key , ĊĠĠĠĠĠĠĠ Ġend Activity Id Ġ= Ġprocess Instance . end Activity Id , ĊĠĠĠĠĠĠĠ Ġsuper InstanceId Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Instance . super Process InstanceId Ġ!= Ġnull Ġ-> Ġprocess Instance . super Process InstanceId ĊĠĠĠĠĠĠĠĠĠ Ġprocess Instance . super Case InstanceId Ġ!= Ġnull Ġ-> Ġprocess Instance . super Case InstanceId ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdelete Reason Ġ= Ġprocess Instance . delete Reason ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ// Ġfinish ĊĠĠĠ ĠH istoric Process Instance . STATE _ INTER N ALLY _ TERMIN ATED Ġ-> ĊĠĠĠĠĠ ĠFinish Process Instance Command ( ĊĠĠĠĠĠĠĠ Ġsource Reference Ġ= Ġprocess Instance . source Reference ( repository Service , Ġcollector Properties . application Name ), ĊĠĠĠĠĠĠĠ Ġprocess InstanceId Ġ= Ġprocess Instance . process InstanceId , ĊĠĠĠĠĠĠĠ Ġbusiness Key Ġ= Ġprocess Instance . business Key , ĊĠĠĠĠĠĠĠ Ġend Activity Id Ġ= Ġprocess Instance . end Activity Id , ĊĠĠĠĠĠĠĠ Ġsuper InstanceId Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Instance . super Process InstanceId Ġ!= Ġnull Ġ-> Ġprocess Instance . super Process InstanceId ĊĠĠĠĠĠĠĠĠĠ Ġprocess Instance . super Case InstanceId Ġ!= Ġnull Ġ-> Ġprocess Instance . super Case InstanceId ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Unknown Ġend Ġprocess Ġinstance Ġevent Ġreceived Ġ$ process Instance " Ġ} ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ