package Ġcom . l hw dev . self Test Macro . repository Ċ Ċ import Ġcom . l hw dev . fetch . http . Session Ċ import Ġnet . g ote v . cook iest ore . InMemory Cookie Store Ċ import Ġjava . net . Cookie Manager Ċ import Ġjava . net . Cookie Policy ĊĊ Ċ object ĠSession Manager Ġ{ Ċ ĉ class ĠSession Info ( Ċĉ ĉ val Ġsession : ĠSession , Ċĉ ĉ var Ġanonymous : ĠBoolean , Ċĉ ĉ var Ġdebug Info : ĠAny ? Ġ= Ġnull , Ċĉ ĉ var Ġsession Fully Loaded : ĠBoolean Ġ= Ġfalse Ċ ĉ ) ĊĉĊ ĉ private Ġval Ġsession Map Ġ= Ġmutable Map Of < Any ?, ĠSession Info >() ĊĉĊ ĉ private Ġfun Ġnew Session ( name : ĠAny ?) Ġ= ĠSession ( Ċĉ ĉ Cookie Manager ( Ċĉĉ ĉ InMemory Cookie Store ( name Ġ= Ġ" self Test /$ name "), Ċĉĉ ĉ Cookie Policy . ACCEPT _ ALL Ċĉ ĉ ) Ċ ĉ ) ĊĉĊĉĊ ĉ fun Ġsession For ( key : ĠAny ?): ĠSession Ġ= Ġsession Info For ( key Ġ= Ġkey ). session ĊĉĊ ĉ fun Ġsession Info For ( key : ĠAny ?): ĠSession Info Ġ{ Ċĉ ĉ // Ġ 1 . Ġexisting Ċĉ ĉ val Ġexisting Info Ġ= Ġsession Map [ key ] Ċĉ ĉ if ( existing Info Ġ!= Ġnull ) Ġreturn Ġexisting Info ĊĉĉĊĉ ĉ // Ġ 2 . Ġanonymous Ċĉ ĉ val Ġanonymous Ġ= Ġanonymous Session Info OrNull Ċĉ ĉ if ( anonymous Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ anonymous Session Info OrNull Ġ= Ġnull Ċĉĉ ĉ anonymous . anonymous Ġ= Ġfalse Ċĉĉ ĉ anonymous . debug Info Ġ= Ġkey Ċĉĉ ĉ session Map [ key ] Ġ= Ġanonymous Ċĉĉ ĉ return Ġanonymous Ċĉ ĉ } ĊĉĉĊĉ ĉ val Ġinfo Ġ= ĠSession Info ( session Ġ= Ġnew Session ( key ), Ġanonymous Ġ= Ġfalse ) Ċĉ ĉ session Map [ key ] Ġ= Ġinfo Ċĉ ĉ return Ġinfo Ċ ĉ } ĊĉĊ ĉ fun Ġnew Detached Session Info (): ĠSession Info Ġ{ Ċĉ ĉ return ĠSession Info ( session Ġ= Ġnew Session (" ? "), Ġanonymous Ġ= Ġtrue ) Ċ ĉ } ĊĉĊ ĉ fun Ġattach Session Info ( info : ĠSession Info , Ġkey : ĠAny ?) Ġ{ Ċĉ ĉ info . anonymous Ġ= Ġfalse Ċĉ ĉ info . debug Info Ġ= Ġkey Ċĉ ĉ session Map [ key ] Ġ= Ġinfo Ċ ĉ } ĊĉĊ ĉ var Ġanonymous Session Info OrNull : ĠSession Info ? Ġ= Ġnull Ċĉ ĉ private Ġset ĊĉĊ ĉ val Ġanonymous Session Info : ĠSession Info Ċĉ ĉ get () Ġ= Ġanonymous Session Info OrNull Ġ?: Ġrun Ġ{ Ċĉĉ ĉ val Ġinfo Ġ= ĠSession Info ( session Ġ= Ġnew Session (" anonymous "), Ġanonymous Ġ= Ġtrue ) Ċĉĉ ĉ anonymous Session Info OrNull Ġ= Ġinfo Ċĉĉ ĉ info Ċĉ ĉ } ĊĉĊ ĉ val Ġanonymous Session : ĠSession Ġget () Ġ= Ġanonymous Session Info . session Ċ ĉ val Ġany Session : ĠSession Ġget () Ġ= Ġsession Map . values . first OrNull ()?. session Ġ?: Ġanonymous Session Info . session Ċ } Ċ