package Ġcom . code po etics . ra ff ia . l enses Ċ Ċ import Ġcom . code po etics . ra ff ia . b ask ets . Basket Ċ import Ġorg . p collections . P Vector Ċ import Ġjava . util . regex . Pattern Ċ Ċ type alias ĠB asket Predicate Ġ= Ġ( Basket ) Ġ-> ĠBoolean Ċ Ċ internal Ġobject ĠPath Parser Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġkey Expr Ġ= ĠPattern . compile ("^ \\ .[ a - zA - Z 0 - 9 \\ -_ ]+ ") ĊĠĠĠ Ġprivate Ġval Ġdeep Key Expr Ġ= ĠPattern . compile ("^ \\. \\ .[ a - zA - Z 0 - 9 \\ -_ ]+ ") ĊĠĠĠ Ġprivate Ġval Ġindex Expr Ġ= ĠPattern . compile ("^ \\ [ ([^ ]] + )] ") ĊĠĠĠ Ġprivate Ġval Ġinteger Expr Ġ= ĠPattern . compile ("^ - ?[ 0 - 9 ]+ $ ") ĊĊĠĠĠ Ġfun Ġparse ( path String : ĠString , Ġpredicates : ĠP Vector < Basket Predicate >): ĠStr and Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrimmed Ġ= Ġpath String . trim () ĊĠĠĠĠĠĠĠ Ġif Ġ(! trimmed . startsWith ("$ ") Ġand Ġ! trimmed . startsWith ("@ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Path Ġstring Ġmust Ġbegin Ġwith Ġ$ Ġor Ġ@ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Remaining ( Root Str and , Ġtrimmed . substring ( 1 ), Ġpredicates ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Remaining ( parsed : ĠStr and , Ġremaining : ĠString , Ġpredicates : ĠP Vector < Basket Predicate >): ĠStr and Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( remaining . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! predicates . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Un matched Ġpredicate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparsed ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( remaining . startsWith (" .* ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Remaining ( parsed . then ( Wildcard Str and ), Ġremaining . substring ( 2 ), Ġpredicates ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( remaining . startsWith ("[ * ] ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Remaining ( parsed . then ( Wildcard Str and ), Ġremaining . substring ( 3 ), Ġpredicates ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( remaining . startsWith ("[ ? ] ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( predicates . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Predicate Ġexpression Ġwithout Ġmatching Ġpredicate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Remaining ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed . then ( Conditional Str and ( predicates [ 0 ])), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining . substring ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpredicates . minus ( 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Expr Matcher Ġ= Ġkey Expr . matcher ( remaining ) ĊĠĠĠĠĠĠĠ Ġif Ġ( key Expr Matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey Expr Matcher . group (). substring ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Remaining ( parsed . then ( Key Str and ( array Of ( key ))), Ġremaining . substring ( key . length Ġ+ Ġ 1 ), Ġpredicates ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdeep Key Expr Matcher Ġ= Ġdeep Key Expr . matcher ( remaining ) ĊĠĠĠĠĠĠĠ Ġif Ġ( deep Key Expr Matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġdeep Key Expr Matcher . group (). substring ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Remaining ( parsed . then ( Deep Scan Str and ( key )), Ġremaining . substring ( key . length Ġ+ Ġ 2 ), Ġpredicates ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġindex Expr Matcher Ġ= Ġindex Expr . matcher ( remaining ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! index Expr Matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Un re cogn ised Ġpath Ġsegment : Ġ" Ġ+ Ġremaining ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġindex Expr Ġ= Ġindex Expr Matcher . group ( 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Remaining ( parsed . then ( parse Index Expression ( index Expr . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ})), Ġremaining . substring ( index Expr . length Ġ+ Ġ 2 ), Ġpredicates ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Index Expression ( expression : ĠString ): ĠStr and Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( expression . contains ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Multi Index Expression ( expression ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( expression . contains (" :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Range Expression ( expression ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( expression . startsWith ("' ") Ġ&& Ġexpression . endsWith ("' ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey Str and ( array Of ( expression . substring ( 1 , Ġexpression . length Ġ- Ġ 1 ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( integer Expr . matcher ( expression ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIndex Str and ( int ArrayOf ( Integer . valueOf ( expression ) !! )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Un re cogn ised Ġindex Ġexpression : Ġ" Ġ+ Ġexpression ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Multi Index Expression ( expression : ĠString ): ĠStr and Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindices Ġ= Ġexpression . split ("," . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġif Ġ( indices [ 0 ]. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}. startsWith ("' ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġto Keys ( indices ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġto Array Indices ( indices ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Range Expression ( expression : ĠString ): ĠStr and Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( expression Ġ== Ġ": ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" \":\" Ġis Ġnot Ġa Ġlegal Ġrange Ġexpression ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( expression . startsWith (" :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArray Slice Str and ( 0 , ĠInteger . parseInt ( expression . substring ( 1 ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( expression . endsWith (" :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArray Slice Str and ( Integer . parseInt ( expression . substring ( 0 , Ġexpression . length Ġ- Ġ 1 )), ĠInteger . MAX _ VALUE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġexpression . split (" :" . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġif Ġ( bounds . size Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("\ "" Ġ+ Ġexpression Ġ+ Ġ"\" Ġis Ġnot Ġa Ġlegal Ġrange Ġexpression ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠArray Slice Str and ( Integer . parseInt ( bounds [ 0 ]), ĠInteger . parseInt ( bounds [ 1 ])) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Keys ( indices : ĠArray < String >): ĠStr and Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Str and ( indices . map ( String :: trim ). map Ġ{ Ġit . substring ( 1 , Ġit . length Ġ- Ġ 1 ). trim () Ġ}. to Typed Array ()) ĊĊĠĠĠ Ġprivate Ġfun Ġto Array Indices ( indices : ĠArray < String >): ĠStr and Ġ= ĊĠĠĠĠĠĠĠ ĠIndex Str and ( indices . map ( String :: trim ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! integer Expr . matcher ( it ). matches ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Un re cogn ised Ġindex Ġexpression : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInteger . valueOf ( it ) ĊĠĠĠĠĠĠĠ Ġ}. to IntArray ()) Ċ Ċ } Ċ