package Ġcom . source plusplus . portal . display . views Ċ Ċ import Ġcom . source plusplus . protocol . artifact . trace . Trace Order Type Ċ import Ġcom . source plusplus . protocol . artifact . trace . Trace Result Ċ import Ġio . vertx . core . json . JsonArray Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġkotlin . collections . HashMap Ċ Ċ /** Ċ Ġ* ĠHold s Ġthe Ġcurrent Ġview Ġfor Ġthe ĠTr aces Ġportal Ġtab . Ċ Ġ* Ċ Ġ* Ġ@ since Ġ 0 . 0 . 1 Ċ Ġ* Ġ@ author Ġ[ Brand on ĠF erg erson ]( mailto : b fer g erson @ apache . org ) Ċ Ġ*/ Ċ class ĠTr aces View Ġ{ ĊĊĠĠĠ Ġvar Ġtrace Result Cache Ġ= ĠConcurrent HashMap < Trace Order Type , ĠTrace Result >() ĊĠĠĠ Ġvar Ġtrace Stack s Ġ= ĠHashMap < String , ĠJson Array >() Ġ// todo : Ġev ict ing Ġcache ĊĠĠĠ Ġvar Ġtrace Stack : ĠJson Array ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġinner Trace Stack Ġ= ĠStack < JsonArray >() ĊĠĠĠ Ġvar Ġorder Type Ġ= ĠTrace Order Type . LATE ST _ TR ACES ĊĠĠĠ Ġvar Ġview Type Ġ= ĠView Type . TR ACES ĊĠĠĠ Ġvar Ġtrace Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġspan Id : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġview Trace Amount Ġ= Ġ 1 0 ĊĊĠĠĠ Ġfun Ġcache Artifact Trace Result ( artifact Trace Result : ĠTrace Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Trace Result Ġ= Ġtrace Result Cache [ artifact Trace Result . order Type ] ĊĠĠĠĠĠĠĠ Ġif Ġ( current Trace Result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmerged Artifact Trace Result Ġ= Ġartifact Trace Result . merge With ( current Trace Result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Result Cache [ merged Artifact Trace Result . order Type ] Ġ= Ġmerged Artifact Trace Result . truncate ( view Trace Amount ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Result Cache [ artifact Trace Result . order Type ] Ġ= Ġartifact Trace Result . truncate ( view Trace Amount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġartifact Trace Result : ĠTrace Result ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrace Result Cache [ order Type ] ĊĊĠĠĠ Ġfun Ġcache Trace Stack ( trace Id : ĠString , Ġtrace Stack : ĠJson Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrace Stack s [ trace Id ] Ġ= Ġtrace Stack ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Trace Stack ( trace Id : ĠString ): ĠJson Array ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrace Stack s [ trace Id ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinner Trace : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! inner Trace Stack . isEmpty () ĊĊĠĠĠ Ġfun Ġclone View ( view : ĠTr aces View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrace Result Cache Ġ= ĠConcurrent HashMap ( view . trace Result Cache ) ĊĠĠĠĠĠĠĠ Ġtrace Stack s Ġ= ĠHashMap ( view . trace Stack s ) ĊĠĠĠĠĠĠĠ Ġtrace Stack Ġ= Ġif Ġ( view . trace Stack Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson Array (). addAll ( view . trace Stack ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . inner Trace Stack . reversed (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Trace Stack . push ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġorder Type Ġ= Ġview . order Type ĊĠĠĠĠĠĠĠ Ġview Type Ġ= Ġview . view Type ĊĠĠĠĠĠĠĠ Ġtrace Id Ġ= Ġview . trace Id ĊĠĠĠĠĠĠĠ Ġspan Id Ġ= Ġview . span Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠView Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTR ACES , ĠTRACE _ STACK , ĠSP AN _ INFO ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ