package Ġde . un isa ar land . pc df analy ser . cache s Ċ Ċ import Ġde . un isa ar land . cache s . Cache Database Ċ import Ġde . un isa ar land . cache s . NO x Analy ses Queries Ċ import Ġde . un isa ar land . pc df analy ser . event Stream . File Event Stream Ċ import Ġde . un isa ar land . pc df analy ser . an alys ers . NO x Analy ser Ċ import Ġjava . io . File ĊĊ Ċ /** Ċ Ġ* ĠClass Ġrepresenting Ġcached ĠNO x Ġanalysis Ġresults . Ċ Ġ* Ġ@ constructor Ġrequires Ġa Ġcache Ġdatabase Ġobject . ĠOptionally , Ġthe Ġdefault Ġanalysis Ġmethod Ġmay Ġbe Ċ Ġ* Ġreplaced Ġby Ġa Ġcustom Ġ[ analysis Cache Delegate ]. Ċ Ġ* Ċ Ġ* ĠFor Ġdatabase Ġqueries Ġ@ see ĠNO x Analy ses . sq . Ċ Ġ*/ Ċ class ĠNO x Analysis Cache ( ĊĠĠĠ Ġdatabase : ĠCache Database , ĊĠĠĠ Ġval Ġanalysis Cache Delegate : ĠAnalysis Cache Delegate < Double ?> Ġ= ĠAnalysis Cache Delegate Ġ{ ĊĠĠĠĠĠĠĠ ĠNO x Analy ser ( it ) ĊĠĠĠ Ġ} Ċ ) Ġ: ĠAnalysis Cache < Double ?> () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġqueries : ĠNO x Analy ses Queries Ġ= Ġdatabase . n Ox Analy ses Queries ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Analysis Result ( pc df File : ĠFile ): ĠPair < Boolean , ĠDouble ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠPair < Boolean , ĠDouble ?> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġqueries . select ByName ( pc df File . absolute Path ). execute As List (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . n ox ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( false , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Analysis Result For File ( pc df File : ĠFile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġqueries . select ByName ( pc df File . absolute Path ). execute As List (). isNotEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcached Analysis Result For File ( pc df File : ĠFile ): ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfetch Analysis Result ( pc df File ). second ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġanalysis Result For File ( pc df File : ĠFile , Ġcache Result : ĠBoolean ): ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfetch Result Ġ= Ġfetch Analysis Result ( pc df File ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! fetch Result . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanaly ser Ġ= Ġanalysis Cache Delegate . analy ser For Event Stream ( File Event Stream ( pc df File )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġanaly ser . analy se () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cache Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Analysis Result To Cache ( pc df File , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Result . second ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Analysis Result To Cache ( pc df File : ĠFile , Ġresult : ĠDouble ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġqueries . insert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpc df File . absolute Path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVERSION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVERSION Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ Ċ }