package Ġde . mat thi ask ainer . c 4 c . repository . serial isation Ċ Ċ import Ġde . mat thi ask ainer . c 4 c . domain .* Ċ import Ġde . mat thi ask ainer . c 4 c . repository . Version Result Ċ import Ġde . mat thi ask ainer . c 4 c . repository . domain . Contract Table Ċ import Ġde . mat thi ask ainer . c 4 c . repository . domain . TestResult Table Ċ import Ġde . mat thi ask ainer . c 4 c . repository . domain . Version Table Ċ import Ġorg . jetbrains . ex posed . sql .* Ċ Ċ fun Ġto Contract ( row : ĠResult Row ): ĠContract Ġ= ĊĠĠĠ ĠContract ( ĊĠĠĠĠĠĠĠ Ġrow [ Contract Table . id ]. to Contract Id (), ĊĠĠĠĠĠĠĠ Ġrow [ Contract Table . provider ], ĊĠĠĠĠĠĠĠ Ġrow [ Contract Table . consumer ], ĊĠĠĠĠĠĠĠ Ġrow [ Contract Table . element ], ĊĠĠĠĠĠĠĠ Ġto Versions ( row [ Contract Table . id ]. to Contract Id ()) ĊĠĠĠ Ġ) Ċ Ċ fun Ġto Versions ( contract Id : ĠContract Id ): ĠMap < String , ĠVersion > Ġ= ĊĠĠĠ ĠVersion Table . join ( ĊĠĠĠĠĠĠĠ ĠTest Result Table , ĊĠĠĠĠĠĠĠ ĠJoin Type . LEFT , ĊĠĠĠĠĠĠĠ Ġadditional Constraint Ġ= Ġ{ ĠTest Result Table . version Ġeq ĠVersion Table . id Ġ}) ĊĠĠĠĠĠĠĠ Ġ. select Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVersion Table . contract Id Ġeq Ġcontract Id . value ĊĠĠĠĠĠĠĠ Ġ}. orderBy ( Version Table . version Ġto ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠ Ġ. fold ( map Of < String , ĠVersion >()) Ġ{ Ġacc , Ġnext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( acc . containsKey ( next [ Version Table . version ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext [ Version Table . version ] Ġto Ġcombine Versions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( result To Version ( next )). plus ( acc [ next [ Version Table . version ]] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext [ Version Table . version ] Ġto Ġresult To Version ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ private Ġfun Ġresult To Version ( next : ĠResult Row ) Ġ= ĠVersion ( ĊĠĠĠ Ġnext [ Version Table . id ], ĊĠĠĠ Ġif Ġ( next [ TestResult Table . result ] Ġ!= Ġnull ) ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠTest Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext [ Version Table . version ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext [ TestResult Table . execution Date ], ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Run Result . valueOf ( next [ TestResult Table . result ]) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġelse Ġempty List (), ĊĠĠĠ Ġnext [ Version Table . lines ]. split ("\ n ") Ċ ) Ċ Ċ private Ġfun Ġcombine Versions ( versions : ĠList < Version >) Ġ= ĠVersion ( ĊĠĠĠ Ġversions . first (). id , ĊĠĠĠ Ġversions . fold < Version , ĠList < TestResult >>( listOf ()) Ġ{ Ġacc , Ġversion Ġ-> ĊĠĠĠĠĠĠĠ Ġacc . plus ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion . test Results ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. sorted By Ġ{ Ġit . date Ġ}, ĊĠĠĠ Ġversions . first (). file Lines Ċ ) Ċ Ċ fun Ġto Version ( contract Id : ĠContract Id , Ġversion : ĠString ?): ĠVersion ? Ġ= ĊĠĠĠ Ġversion ?. let Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠ ĠVersion Table . select Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Version Table . contract Id Ġeq Ġcontract Id . value ). and ( Version Table . version Ġeq Ġv ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ?. orderBy ( Version Table . version Ġto ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVersion Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Version Table . id ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Version Table . version ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Version Table . lines ]. split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ? . first OrNull () ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġversion Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVersion ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Result . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Result Table . select Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Result Table . version . eq ( version Result . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Result . version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ TestResult Table . execution Date ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Run Result . valueOf ( result [ TestResult Table . result ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Result . lines ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ