package Ġcom . graph ene . reader . store . key . handler Ċ Ċ import Ġcom . google . common . base . Join er Ċ import Ġcom . graph ene . common . Hierarchy Metric Paths Ċ import Ġcom . graph ene . common . utils . Path Expression Utils Ċ import Ġcom . graph ene . reader . exceptions . Too M uch Data Expected Exception Ċ import Ġcom . graph ene . reader . service . index . Key Search Handler Ċ import Ġorg . elasticsearch . index . query . Query Builders Ċ import Ġorg . elasticsearch . search . Search Hit Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠAnd rei ĠI van ov Ċ Ġ* Ġ@ author Ġdark Ċ Ġ*/ Ċ class ĠSimple Key Search Handler ( ĊĠ Ġprivate Ġval Ġelasticsearch Client : ĠElasticsearch Client Ċ ) Ġ: ĠKey Search Handler Ġ{ ĊĊĠ Ġ@ Throws ( Too M uch Data Expected Exception :: class ) ĊĠ Ġoverride Ġfun Ġget Paths ( tenant : ĠString , Ġpath Expressions : ĠList < String >, Ġfrom : ĠLong , Ġto : ĠLong ): ĠSet < String > Ġ{ ĊĠĠĠ Ġval Ġreg Ex s Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġval Ġresult Ġ= Ġmutable Set Of < String >() ĊĊĠĠĠ Ġfor Ġ( wildcard Ġin Ġpath Expressions ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Path Expression Utils . is Plain Path ( wildcard )) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . add ( wildcard ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġreg Ex s . add ( Path Expression Utils . get Esc aped Path Expression ( wildcard )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlogger . debug (" get Paths Ġplain Ġpaths : Ġ" Ġ+ Ġresult . size Ġ+ Ġ", Ġwildcard Ġpaths : Ġ" Ġ+ Ġreg Ex s . size ) ĊĊĠĠĠ Ġif Ġ( 0 Ġ< Ġreg Ex s . size ) Ġ{ ĊĠĠĠĠĠ Ġval Ġscroll Ids Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠ Ġvar Ġresponse Ġ= Ġelasticsearch Client . query ( ĊĠĠĠĠĠĠĠ ĠQuery Builders . regexp Query (" path ", ĠJoin er . on ("| "). skip Null s (). join ( reg Ex s )), ĊĠĠĠĠĠĠĠ Ġfrom Ġ* Ġ 1 0 0 0 L , ĊĠĠĠĠĠĠĠ Ġto Ġ* Ġ 1 0 0 0 L ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġwhile Ġ( response . hits . hits . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( hit Ġin Ġresponse . hits ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġresult . add ( hit . source As Map [" path "] Ġas ĠString ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresponse Ġ= Ġelasticsearch Client . search Scroll ( response ) ĊĠĠĠĠĠĠĠ Ġscroll Ids . add ( response . scroll Id ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( scroll Ids . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġelasticsearch Client . clear Scroll ( scroll Ids ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( Too M uch Data Expected Exception :: class ) ĊĠ Ġoverride Ġfun Ġget Hierarchy Metric Paths ( tenant : ĠString , Ġpath Expression : ĠString , Ġfrom : ĠLong , Ġto : ĠLong ): ĠCollection < Hierarchy Metric Paths . Hierarchy Metric Path > Ġ{ ĊĠĠĠ Ġval Ġhierarchy Metric Paths Ġ= Ġmutable Map Of < String , ĠH ierarchy Metric Paths . Hierarchy Metric Path >() ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġvar Ġresponse Ġ= Ġelasticsearch Client . query ( ĊĠĠĠĠĠĠĠ ĠQuery Builders . regexp Query (" path ", ĠPath Expression Utils . get Esc aped Path Expression ( path Expression )), ĊĠĠĠĠĠĠĠ Ġfrom , ĊĠĠĠĠĠĠĠ Ġto ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġwhile Ġ( response . hits . hits . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( hit Ġin Ġresponse . hits ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġhierarchy Metric Path Ġ= Ġmap To Hierarchy Metric Path ( hit ) ĊĠĠĠĠĠĠĠĠĠ Ġhierarchy Metric Paths . put If Absent ( hierarchy Metric Path . text , Ġhierarchy Metric Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresponse Ġ= Ġelasticsearch Client . search Scroll ( response ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġlogger . error (" Fail Ġto Ġget Ġpaths Ġ: Ġ" Ġ+ Ġe . message , Ġe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġhierarchy Metric Paths . values ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġmap To Hierarchy Metric Path ( hit : ĠSearch Hit ): ĠH ierarchy Metric Paths . Hierarchy Metric Path Ġ{ ĊĠĠĠ Ġval Ġsource Ġ= Ġhit . source As Map ĊĊĠĠĠ Ġval Ġpath Ġ= Ġsource [" path "] Ġas ĠString ĊĠĠĠ Ġval Ġleaf Ġ= Ġsource [" leaf "] Ġas ĠBoolean ĊĊĠĠĠ Ġreturn ĠH ierarchy Metric Paths . of ( path , Ġleaf ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġinternal Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĠ Ġ} Ċ } Ċ