package Ġio . ta ff . ex posed . extensions čĊč Ċ import Ġkotlinx . coroutines . as Context Element čĊč Ċ /** ĠThe Ġcurrent Ġtenant 's Ġid Ġ*/ č Ċ internal Ġvar ĠCurrent TenantId Ġ= ĠThread Local < Any >() čĊč Ċ fun Ġ< ID > Ġcurrent TenantId () Ġ= ĠCurrent TenantId . get () Ġas ĠID čĊč Ċ /** čĊ Ġ* ĠSet Ġthe Ġcurrent ĠTenant ĠId . čĊ Ġ*/ č Ċ fun Ġ< ID > ĠsetCurrent TenantId ( id : ĠID ) Ġ= Ġ ĠCurrent TenantId . set ( id ) čĊĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠCurrent TenantId . as Context Element () Ġ} čĊč Ċ /** čĊ Ġ* ĠUn set Ġthe Ġcurrent ĠTenant ĠId . čĊ Ġ*/ č Ċ fun Ġ< ID > Ġclear Current TenantId () Ġ= Ġ( Current TenantId . get () Ġas ĠID ) čĊĠĠĠĠĠĠĠ Ġ. also Ġ{ ĠCurrent TenantId . set ( null ) Ġ} čĊčĊč Ċ /** čĊ Ġ* ĠReturns Ġtrue Ġif Ġthis Ġ== Ġnull čĊ Ġ*/ č Ċ fun ĠAny ?. isNull () Ġ= Ġthis Ġ== Ġnull čĊčĊč Ċ /** čĊ Ġ* ĠLoad Ġvalues Ġfrom Ġthe Ġenvironment Ġand Ġco alesce Ġthem Ġto Ġthe Ġspecified Ġreturn Ġtype . čĊ Ġ*/ č Ċ inline Ġfun Ġ< re ified ĠV > Ġenv ( key : ĠString , Ġdefault : ĠV ? Ġ= Ġnull ) Ġ= Ġ( when Ġ( V :: class ) Ġ{ čĊĠĠĠ ĠString :: class Ġ-> ĠSystem . getenv ( key )?. trim End () čĊĠĠĠ ĠInt :: class Ġ-> ĠSystem . getenv ( key )?. trim End ()?. toInt () čĊĠĠĠ ĠLong :: class Ġ-> ĠSystem . getenv ( key )?. trim End ()?. to Long () čĊĠĠĠ Ġelse Ġ-> Ġnull č Ċ } Ġ?: Ġdefault ) čĊĠĠĠ Ġ. let Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġthrow ĠRuntimeException (" No Ġenvironment Ġvariable Ġdefined Ġfor Ġkey Ġ$ key ") čĊĠĠĠĠĠĠĠ Ġit Ġas ĠV čĊĠĠĠ Ġ} čĊ