/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠO range Ċ Ġ* Ċ Ġ* ĠH url ĠJVM Ġ( JVM ĠRunner Ġfor Ġhttps :// h url . dev ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . orange . cc md . h url . core . run Ċ Ċ import Ġcom . orange . cc md . h url . core . ast . Count Sub query Ċ import Ġcom . orange . cc md . h url . core . ast . Regex Sub query Ċ import Ġcom . orange . cc md . h url . core . ast . Sub query Ċ import Ġcom . orange . cc md . h url . core . variable . Variable Jar Ċ import Ġcom . orange . cc md . h url . core . template . Template Ċ Ċ class ĠInvalid Sub query Exception ( message : ĠString ) Ġ: ĠException ( message ) Ċ Ċ internal Ġfun ĠSub query . eval ( query Result : ĠQuery Result , Ġvariables : ĠVariable Jar ): ĠQuery Result Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠCount Sub query Ġ-> Ġthis . eval ( query Result Ġ= Ġquery Result ) ĊĠĠĠ Ġis ĠRegex Sub query Ġ-> Ġthis . eval ( query Result Ġ= Ġquery Result , Ġvariables Ġ= Ġvariables ) Ċ } Ċ Ċ internal Ġfun ĠCount Sub query . eval ( query Result : ĠQuery Result ): ĠQuery Result Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( query Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠQuery ListResult Ġ-> ĠQuery Number Result ( query Result . value . size ) ĊĠĠĠĠĠĠĠ Ġis ĠQuery Node Set Result Ġ-> ĠQuery Number Result ( query Result . size ) ĊĠĠĠĠĠĠĠ ĠQuery None Result Ġ-> ĠQuery Number Result ( 0 ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠInvalid Sub query Exception (" count Ġsub query Ġis Ġincompatible Ġwith Ġquery Ġresult ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠRegex Sub query . eval ( query Result : ĠQuery Result , Ġvariables : ĠVariable Jar ): ĠQuery Result Ġ{ ĊĠĠĠ Ġif Ġ( query Result Ġ! is ĠQuery String Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠInvalid Sub query Exception (" regex Ġsub query Ġexpects Ġa Ġquery Ġstring Ġresult ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtext Ġ= Ġquery Result . value ĊĠĠĠ Ġval Ġexpr Rendered Ġ= ĠTemplate . render ( text Ġ= Ġexpr . value , Ġvariables Ġ= Ġvariables , Ġposition Ġ= Ġexpr . begin ) ĊĠĠĠ Ġval Ġregex Ġ= ĠRegex ( pattern Ġ= Ġexpr Rendered ) ĊĠĠĠ Ġval Ġmatch Result Ġ= Ġregex . match Ent ire ( text ) ĊĠĠĠ Ġif Ġ( match Result Ġ== Ġnull Ġ|| Ġmatch Result . group Values . size Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠInvalid Sub query Exception (" regex Ġsub query Ġmust Ġhave Ġat Ġleast Ġone Ġgroup ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠQuery String Result ( value Ġ= Ġmatch Result . group Values [ 1 ]) Ċ }