package Ġcom . an ap lan . engineering . az uki . core . system ĊĊ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . Kotlin Module Ċ import Ġjava . io . File Ċ Ċ type alias ĠFunctional Element Ġ= ĠInt Ċ type alias ĠBehavior Ġ= ĠInt Ċ Ċ const Ġval Ġunsupported Behavior : ĠBehavior Ġ= Ġ- 1 Ċ Ċ interface ĠRe ified Behavior Ġ Ġ{ ĊĠĠĠ Ġval Ġbehavior : ĠBehavior Ċ } ĊĊĊ Ċ data Ġclass ĠE ac Metadata ( ĊĠĠĠ Ġval Ġfunctional Element : ĠFunctional Element , ĊĠĠĠ Ġval Ġbehavior : ĠBehavior , ĊĠĠĠ Ġval Ġbehavior Summary : ĠString , ĊĠĠĠ Ġval ĠmethodName : ĠString , ĊĠĠĠ Ġval Ġacceptance Criteria : ĠString , ĊĠĠĠ Ġval Ġimplementation : ĠString , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġscenario Name Ġ= Ġ"${ functional Element }-${ behavior }-${ methodName }" Ċ } Ċ Ċ internal Ġval ĠobjectMapper Ġ= ĠObjectMapper (). register Module ( Kotlin Module ()) Ċ Ċ internal Ġconst Ġval Ġe ac Metadata Dir Property Ġ= Ġ" eac . metadata . dir " Ċ internal Ġconst Ġval Ġe ac Report Dir Property Ġ= Ġ" eac . report . dir " Ċ Ċ object ĠE ac Metadata Recorder Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmetadata Dir Ġby Ġlazy Ġ{ ĠFile ( java . lang . System . getProperty ( eac Metadata Dir Property )) Ġ} ĊĊĠĠĠ Ġval Ġrecording Ġby Ġlazy Ġ{ Ġjava . lang . System . getProperties (). containsKey ( eac Metadata Dir Property ) Ġ} ĊĊĠĠĠ Ġfun Ġrecord ( metadata : ĠE ac Metadata ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimpl Dir Ġ= ĠFile ( metadata Dir , Ġmetadata . implementation ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! impl Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimpl Dir . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmetadata File Ġ= ĠFile ( impl Dir , Ġ"${ metadata . scenario Name }. json ") ĊĠĠĠĠĠĠĠ ĠobjectMapper . writeValue ( metadata File , Ġmetadata ) ĊĠĠĠ Ġ} Ċ } ĊĊ