package Ġlt . mark mer kk . widgets . list Ċ Ċ import Ġcom . google . common . event bus . Subscribe Ċ import Ġcom . j fo enix . svg . SV GG lyph Ċ import Ġjavafx . beans . property . Simple String Property Ċ import Ġjavafx . scene . Parent Ċ import Ġjavafx . scene . control . TableView Ċ import Ġlt . mark mer kk . Active Display Repository Ċ import Ġlt . mark mer kk . Graphics Ċ import Ġlt . mark mer kk . Main Ċ import Ġlt . mark mer kk . Strings Ċ import Ġlt . mark mer kk . WT EventBus Ċ import Ġlt . mark mer kk . Work log Storage Ċ import Ġlt . mark mer kk . entities . Log Ċ import Ġlt . mark mer kk . entities . Log Edit Type Ċ import Ġlt . mark mer kk . entities . Sync Status Ċ import Ġlt . mark mer kk . events . Event Active Display Data Change Ċ import Ġlt . mark mer kk . events . Event Edit Log Ċ import Ġlt . mark mer kk . ui _ 2 . views . ContextMenu Edit Log Ċ import Ġlt . mark mer kk . utils . Log Format ters Ċ import Ġlt . mark mer kk . utils . Log Utils Ċ import Ġlt . mark mer kk . widgets . Main Container Navigator Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġrx . observable s . Java Fx Observable Ċ import Ġt orn ad of x . Fragment Ċ import Ġt orn ad of x . as Observable Ċ import Ġt orn ad of x . column Ċ import Ġt orn ad of x . getValue Ċ import Ġt orn ad of x . readonly Column Ċ import Ġt orn ad of x . setValue Ċ import Ġt orn ad of x . table view Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠList Log Widget : ĠFragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġstrings : ĠStrings ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġgraphics : ĠGraphics < SV GG lyph > ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġevent Bus : ĠW T EventBus ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġactive Display Repository : ĠActive Display Repository ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġwork log Storage : ĠWork log Storage ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠMain . component (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Table : ĠTable View < Log ViewModel > ĊĊĠĠĠ Ġprivate Ġval Ġmain Container Navigator Ġ= ĠMain Container Navigator ( ĊĠĠĠĠĠĠĠ Ġevent Bus Ġ= Ġevent Bus , ĊĠĠĠĠĠĠĠ Ġui Component Ġ= Ġthis , ĊĠĠĠĠĠĠĠ Ġactive Display Repository Ġ= Ġactive Display Repository ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġcontext Menu Edit Log : ĠContext Menu Edit Log Ġ= ĠContext Menu Edit Log ( ĊĠĠĠĠĠĠĠ Ġstrings , ĊĠĠĠĠĠĠĠ Ġgraphics , ĊĠĠĠĠĠĠĠ Ġevent Bus , ĊĠĠĠĠĠĠĠ Ġwork log Storage , ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Edit Type . NEW , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Edit Type . UPDATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Edit Type . CL ONE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Edit Type . DELETE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Edit Type . SPLIT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Edit Type . WE BL INK , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Edit Type . BROWSER ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġlogs Ġ= Ġmutable ListOf < Log ViewModel >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Observable () ĊĊĠĠĠ Ġoverride Ġval Ġroot : ĠParent Ġ= Ġtable view ( logs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Table Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġcolumn Resize Policy Ġ= ĠTable View . CON STR AIN ED _ RE SIZE _ POLICY ĊĠĠĠĠĠĠĠ ĠJava Fx Observable . values Of ( selection Model . selected ItemProperty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġselect Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselect Item Ids Ġ= ĠlistOf ( select Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġselect Item . editable Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġselect Item . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Menu Edit Log . bind Logs ( select Item Ids ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" J FX Ġprop Ġerror ", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġset On Mouse Clicked Ġ{ Ġmouse Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselect Log Id Ġ= Ġview Table . selection Model . selected Items . first OrNull ()?. id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselect Log Ġ= Ġwork log Storage . findById ( select Log Id Ġ?: Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mouse Event . click Count Ġ>= Ġ 2 Ġ&& Ġselect Log Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Bus . post ( Event Edit Log ( Log Edit Type . UPDATE , ĠlistOf ( select Log ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext Menu Ġ= Ġcontext Menu Edit Log . root ĊĠĠĠĠĠĠĠ Ġcolumn (" S ", ĠLog ViewModel :: color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġ 3 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġ 3 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Fragment ( List Log Status Indicator Cell :: class ) Ġ// Ġprobably Ġdisplays Ġincorrect Ġvalues Ġwhen Ġre - rendering ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreadonly Column (" Ticket ", ĠLog ViewModel :: ticket Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġ 1 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġ 1 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreadonly Column (" Start ", ĠLog ViewModel :: start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreadonly Column (" End ", ĠLog ViewModel :: end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreadonly Column (" Duration ", ĠLog ViewModel :: duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreadonly Column (" Comment ", ĠLog ViewModel :: comment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dock () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Dock () ĊĠĠĠĠĠĠĠ Ġmain Container Navigator . on Attach () ĊĠĠĠĠĠĠĠ Ġevent Bus . register ( this ) ĊĠĠĠĠĠĠĠ Ġreload Logs ( active Display Repository . display Logs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Un dock () Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Bus . unregister ( this ) ĊĠĠĠĠĠĠĠ Ġmain Container Navigator . on Detach () ĊĠĠĠĠĠĠĠ Ġsuper . on Un dock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠLog ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditable : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Status Color : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġticket Code : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Property Ġ= ĠSimple String Property ( sync Status Color ) ĊĠĠĠĠĠĠĠ Ġvar Ġcolor Ġby Ġcolor Property ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe ĊĠĠĠ Ġfun Ġon Log Storage Data Change ( event : ĠEvent Active Display Data Change ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreload Logs ( event . data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreload Logs ( logs : ĠList < Log >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtotal ViewModel Ġ= ĠLog ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Status Color Ġ= ĠSync Status . INVALID . to Color (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġticket Code Ġ= Ġ" TOTAL ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= ĠLog Utils . format Short Duration Millis ( active Display Repository . total In Millis ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġlog ViewModels Ġ= Ġactive Display Repository . display Logs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġit . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Status Color Ġ= ĠSync Status . expose Status ( it ). to Color (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġticket Code Ġ= Ġit . code . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠLog Format ters . format Time . print ( it . time . start ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠLog Format ters . format Time . print ( it . time . end ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= ĠLog Utils . format Short Duration Millis ( it . time . duration . millis ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġit . comment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . start Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( total ViewModel ) ĊĠĠĠĠĠĠĠ Ġthis . logs . clear () ĊĠĠĠĠĠĠĠ Ġthis . logs . addAll ( log ViewModels ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( List Log Widget :: class . java ) !! ĊĠĠĠ Ġ} Ċ Ċ }