// ĠSPDX - License - Identifier : ĠBSD - 3 - Clause Ċ package Ġorg . isl ando ft ex . ar ara . m vel . rules Ċ Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Transient Ċ import Ġorg . isl ando ft ex . ar ara . api . Ar ara Exception Ċ import Ġorg . isl ando ft ex . ar ara . api . rules . Rule Argument Ċ import Ġorg . isl ando ft ex . ar ara . core . localization . Language Controller Ċ import Ġorg . isl ando ft ex . ar ara . core . ui . Input Handling Ċ import Ġorg . isl ando ft ex . ar ara . m vel . interpreter . Ar ara Exception With Header Ċ import Ġorg . m vel 2 . templates . Template Runtime Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ /** Ċ Ġ* ĠThe Ġrule Ġargument Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ author ĠIsland Ġof ĠTe X Ċ Ġ* Ġ@ version Ġ 5 . 0 Ċ Ġ* Ġ@ since Ġ 4 . 0 Ċ Ġ*/ Ċ @ Serializable Ċ class ĠRule Argument Ġ: ĠRule Argument < Any ?> Ġ{ ĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Rule Argument :: class . java ) ĊĊĠĠĠ Ġoverride Ġvar Ġidentifier : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ@ Serial Name (" required ") ĊĠĠĠ Ġoverride Ġvar Ġis Required : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġflag : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfield ?. trim () ĊĊĠĠĠ Ġoverride Ġval ĠdefaultValue : ĠAny ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdefault ?. trim () ĊĊĠĠĠ Ġprivate Ġval Ġdefault : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġoverride Ġval Ġprocessor : Ġ( Any ?, ĠMap < String , ĠAny >) Ġ-> ĠList < String > Ġ= Ġ{ Ġinput , Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Context Ġ= Ġcontext . plus (" parameters " Ġto Ġ( context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getValue (" parameters ") Ġas ĠMap < *, Ġ* >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( identifier Ġto Ġinput !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag ?. let Ġ{ Ġfn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġoutput Ġ= ĠTemplate Runtime . eval ( fn , Ġresolved Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> ĠlistOf ( output ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> ĠInput Handling . flatten ( output ). map Ġ{ Ġit . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" You Ġare Ġusing Ġan Ġunsupported Ġreturn Ġtype Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" which Ġmay Ġbe Ġdeprecated Ġin Ġfuture Ġversions Ġof Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ar ara . ĠPlease Ġuse ĠString Ġor ĠList < String > Ġinstead .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( output . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠlistOf ( input . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAr ara Exception With Header ( Language Controller . messages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ERROR _ INTER PRE TER _ FLAG _ RUNTIME _ EXCEPTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠValidate Ġthe Ġargument Ġfor Ġlater Ġprocessing . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġvalidate ( rule Error Header : ĠString ): ĠBoolean Ġ= Ġif Ġ( identifier . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( flag Ġ!= Ġnull Ġ|| ĠdefaultValue Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAr ara Exception ( rule Error Header Ġ+ ĠLanguage Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. messages . ERROR _ VALIDATE BODY _ MISSING _ KEYS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠAr ara Exception ( rule Error Header Ġ+ ĠLanguage Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. messages . ERROR _ VALIDATE BODY _ NULL _ ARGUMENT _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Rule Argument ( identifier ='$ identifier ', Ġis Required =$ isRequired , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" flag =$ flag , ĠdefaultValue =$ defaultValue )" ĊĠĠĠ Ġ} Ċ } Ċ