package Ġcom . sw iss chain . matching . engine . database . cache Ċ Ċ import Ġcom . sw iss chain . matching . engine . da os . Asset Ċ import Ġcom . sw iss chain . matching . engine . database . Di ctionaries Database Accessor Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġkotlin . concurrent . fixed Rate Timer Ċ Ċ @ Component Ċ class ĠAssets Cache Ġ@ Autowired Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdatabase Accessor : ĠDi ctionaries Database Accessor , ĊĠĠĠĠĠĠĠ Ġ@ Value ("\ ${ application . assets . cache . update . interval }") Ġupdate Interval : ĠLong ? Ġ= Ġnull ) Ġ: ĠData Cache () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠLOGGER Ġ= ĠLoggerFactory . getLogger ( Assets Cache :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġassets Map : ĠMap < String , ĠMap < String , ĠAsset >> Ġ= ĠHashMap () ĊĊĠĠĠ Ġfun Ġget Asset ( broker Id : ĠString , Ġasset Id : ĠString ): ĠAsset ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġassets Map [ broker Id ]?. get ( asset Id ) Ġ?: Ġdatabase Accessor . load Asset ( broker Id , Ġasset Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Map Ġ= Ġdatabase Accessor . load Assets () ĊĠĠĠĠĠĠĠ Ġif Ġ( new Map . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassets Map Ġ= Ġnew Map ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . assets Map Ġ= Ġdatabase Accessor . load Assets () ĊĠĠĠĠĠĠĠ ĠLOGGER . info (" Loaded Ġ${ assets Map . values . sum By Ġ{ Ġit . size Ġ}} Ġassets ") ĊĠĠĠĠĠĠĠ Ġupdate Interval ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Rate Timer ( name Ġ= Ġ" Assets ĠCache ĠUp dater ", Ġinitial Delay Ġ= Ġit , Ġperiod Ġ= Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }