package Ġcom . github . gr ish berg . profiler . chart Ċ Ċ import Ġcom . github . gr ish berg . profiler . common . App Logger Ċ import Ġcom . github . gr ish berg . profiler . common . Sort edList Ċ import Ġcom . github . gr ish berg . profiler . common . settings . Settings Repository Ċ import Ġcom . github . gr ish berg . profiler . ui . Book Mark Info Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġcom . google . gson . stream . Json Reader Ċ import Ġjava . io .* Ċ import Ġjava . lang . reflect . Type ĊĊ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Book marks " Ċ private Ġconst Ġval ĠBO OK MARK S _ DIR Ġ= Ġ" bookmarks " Ċ const Ġval ĠBO OK MARK _ EXTENSION Ġ= Ġ" bookmark " Ċ Ċ class ĠBook marks Ġ{ ĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson Builder (). enable Complex Map Key Serialization (). set Pretty Print ing (). create () ĊĊĠĠĠ Ġprivate Ġval Ġbookmark FileName : ĠString ? ĊĠĠĠ Ġprivate Ġval Ġsettings : ĠSettings Repository ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġbook marks Ġ= ĠSort edList < Book marks Rectangle >() ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠApp Logger ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġcurrent Selected Bookmark : ĠBook marks Rectangle ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTry Ġto Ġread Ġbook marks Ġfrom Ġ" bookmarks " Ġfolder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtrace FileName ĊĠĠĠĠ Ġ* Ġ@ param Ġsettings ĊĠĠĠĠ Ġ* Ġ@ param Ġlogger ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( trace FileName : ĠString ?, Ġsettings : ĠSettings Repository , Ġlogger : ĠApp Logger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbookmark FileName Ġ= Ġtrace FileName ĊĠĠĠĠĠĠĠ Ġthis . settings Ġ= Ġsettings ĊĠĠĠĠĠĠĠ Ġthis . logger Ġ= Ġlogger ĊĠĠĠĠĠĠĠ Ġload () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( bookmarks FileName : ĠFile , Ġsettings : ĠSettings Repository , Ġlogger : ĠApp Logger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . logger Ġ= Ġlogger ĊĠĠĠĠĠĠĠ Ġread Book marks FromFile ( bookmarks FileName ) ĊĠĠĠĠĠĠĠ Ġthis . settings Ġ= Ġsettings ĊĠĠĠĠĠĠĠ Ġbookmark FileName Ġ= Ġbook marks FileName . name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( settings : ĠSettings Repository , Ġlogger : ĠApp Logger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . settings Ġ= Ġsettings ĊĠĠĠĠĠĠĠ Ġthis . logger Ġ= Ġlogger ĊĠĠĠĠĠĠĠ Ġbookmark FileName Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Dir Ġ= ĠFile ( settings . files Dir (), Ġ" bookmarks ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! current Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbook marks FromFile Ġ= ĠFile ( current Dir , Ġ"$ bookmark FileName . bookmark ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! bookmarks FromFile . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . d (" No Ġbookmark Ġfile Ġfor $ bookmark FileName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġread Book marks FromFile ( bookmarks FromFile ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! bookmarks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġbook marks [ bookmarks . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup ( height : ĠDouble , Ġis Thread Time : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbook marks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setup ( height , Ġis Thread Time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsize (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbook marks . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġiterator (): ĠIterator < Book marks Rectangle ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbook marks . iterator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbookmark At ( index : ĠInt ): ĠBook marks Rectangle Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbook marks [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( bookmark : ĠBook marks Rectangle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bookmarks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġbookmark ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbook marks . add ( bookmark ) ĊĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( bookmarks Rectangle : ĠBook marks Rectangle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġselected Index Ġ= Ġbook marks . indexOf ( current Selected Bookmark ) ĊĠĠĠĠĠĠĠ Ġbook marks . remove ( bookmarks Rectangle ) ĊĠĠĠĠĠĠĠ Ġif Ġ( bookmarks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bookmarks Rectangle Ġ=== Ġcurrent Selected Bookmark ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selectedIndex Ġ> Ġbook marks . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Index Ġ= Ġbook marks . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġbook marks [ selectedIndex ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Current Bookmark () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Selected Bookmark Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġselected Index Ġ= Ġbook marks . indexOf ( current Selected Bookmark ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks . remove ( current Selected Bookmark ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selectedIndex Ġ> Ġbook marks . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Index Ġ= Ġbook marks . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġbook marks [ selectedIndex ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bookmarks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Book marks FromFile ( save FileName : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Type : ĠType Ġ= Ġobject Ġ: ĠType Token < List < Book marks Rectangle . Book marks Serializable Model >>() Ġ{} . type ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Reader Ġ= ĠFileReader ( save FileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠJson Reader ( file Reader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Markers : ĠList < Book marks Rectangle . Book marks Serializable Model > Ġ= Ġgson . fromJson ( reader , Ġlist Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bookmark Ġin Ġloaded Markers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks . add ( Book marks Rectangle . from Book marks Serializable Model ( bookmark )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġbook marks . first () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . d ("$ TAG : Ġthere Ġis Ġno Ġbook marks Ġfile .") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ("$ TAG : ĠC ant Ġload Ġbook marks ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bookmarks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Dir Ġ= ĠFile ( settings . files Dir (), ĠBO OK MARK S _ DIR ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! current Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Dir . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsave FileName Ġ= ĠFile ( current Dir , Ġ"$ bookmark FileName .$ BOOK MARK _ EXTENSION ") ĊĊĠĠĠĠĠĠĠ Ġvar ĠoutputStream : ĠFileOutputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream Ġ= ĠFileOutputStream ( save FileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffered Writer Ġ= ĠBuffered Writer ( OutputStream Writer ( output Stream , Ġ" UTF - 8 ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgson . toJson ( get Serializable Book marks (), Ġbuffered Writer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Writer . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ("$ TAG : Ġsave Ġbook marks Ġerror ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ("$ TAG : Ġsave Ġbook marks Ġerror ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output Stream Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Serializable Book marks (): ĠList < Book marks Rectangle . Book marks Serializable Model >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Book marks Rectangle . Book marks Serializable Model >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġbook marks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( b . to Book marks Serializable Model ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfile : ĠFile ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Dir Ġ= ĠFile ( settings . files Dir (), ĠBO OK MARK S _ DIR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile ( current Dir , Ġ"$ bookmark FileName .$ BOOK MARK _ EXTENSION ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfocus Previous Bookmark (): ĠBook marks Rectangle ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bookmarks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġselected Index Ġ= Ġbook marks . indexOf ( current Selected Bookmark ) ĊĠĠĠĠĠĠĠ Ġselected Index -- ĊĠĠĠĠĠĠĠ Ġif Ġ( selectedIndex Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Index Ġ= Ġbook marks . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġbook marks [ selectedIndex ] ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Selected Bookmark ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfocus Next Bookmark (): ĠBook marks Rectangle ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bookmarks . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġselected Index Ġ= Ġbook marks . indexOf ( current Selected Bookmark ) ĊĠĠĠĠĠĠĠ Ġselected Index ++ ĊĠĠĠĠĠĠĠ Ġif Ġ( selectedIndex Ġ>= Ġbook marks . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent Selected Bookmark Ġ= Ġbook marks [ selectedIndex ] ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Selected Bookmark ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Bookmark ( selected Bookmark : ĠBook marks Rectangle , Ġresult : ĠBook Mark Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Bookmark . update Name And Color ( result ) ĊĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠ Ġ} Ċ } Ċ