package Ġdev . d res . api . rest . handler Ċ Ċ import Ġdev . d res . api . rest . Access Manager Ċ import Ġdev . d res . api . rest . RestApi Role Ċ import Ġdev . d res . api . rest . types . status . Error Status Ċ import Ġdev . d res . api . rest . types . status . Error Status Exception Ċ import Ġdev . d res . api . rest . types . status . Success Status Ċ import Ġdev . d res . data . dbo . DAO Ċ import Ġdev . d res . data . dbo . Dao Indexer Ċ import Ġdev . d res . data . model . UID Ċ import Ġdev . d res . data . model . basics . media . Media Collection Ċ import Ġdev . d res . data . model . basics . media . Media Item Ċ import Ġdev . d res . data . model . basics . media . Media Item Segment List Ċ import Ġdev . d res . data . model . run . Run Action Context Ċ import Ġdev . d res . data . model . submissions . batch .* Ċ import Ġdev . d res . run . Interactive Run Manager Ċ import Ġdev . d res . run . Non Interactive Run Manager Ċ import Ġdev . d res . utilities . Time Util Ċ import Ġdev . d res . utilities . extensions . UID Ċ import Ġdev . d res . utilities . extensions . sessionId Ċ import Ġio . jav al in . core . security . Route Role Ċ import Ġio . jav al in . http . Context Ċ import Ġio . jav al in . plugin . openapi . annotations .* Ċ Ċ abstract Ġclass ĠBatch Submission Handler ( internal Ġval Ġcollections : ĠDAO < Media Collection >, Ġinternal Ġval Ġitem Index : ĠDao Indexer < Media Item , ĠPair < UID , ĠString >>, Ġinternal Ġval Ġsegment Index : ĠDao Indexer < Media Item Segment List , ĠUID >) Ġ: ĠPost Rest Handler < Success Status >, ĠAccess Managed Rest Handler Ġ{ ĊĊĠĠĠ Ġoverride Ġval ĠapiVersion Ġ= Ġ" v 1 " ĊĠĠĠ Ġoverride Ġval Ġpermitted Roles : ĠSet < Route Role > Ġ= Ġset Of ( RestApi Role . P ARTIC IP ANT ) ĊĊĠĠĠ Ġinternal Ġfun ĠuserId ( ctx : ĠContext ): ĠUID Ġ= ĠAccess Manager . getUserId For Session ( ctx . sessionId ()) Ġ?: Ġthrow ĠError Status Exception ( 4 0 1 , Ġ" Authorization Ġrequired .", Ġctx ) ĊĊĠĠĠ Ġfun Ġrun Id ( ctx : ĠContext ) Ġ= Ġctx . path Param Map (). getOrElse (" run Id ") Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠError Status Exception ( 4 0 4 , Ġ" Parameter Ġ' run Id ' Ġis Ġmissing ! '", Ġctx ) ĊĠĠĠ Ġ}. UID () ĊĊĠĠĠ Ġprotected Ġfun Ġget Interactive Manager ( userId : ĠUID , Ġrun Id : ĠUID ): ĠInteractive Run Manager ? ĊĠĠĠĠĠĠĠ Ġ= ĠAccess Manager . get Run Manager ForUser ( userId ). filter Is Instance < Interactive Run Manager >(). find Ġ{ Ġit . id Ġ== Ġrun Id Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġget Non Interactive Manager ( userId : ĠUID , Ġrun Id : ĠUID ): ĠNon Interactive Run Manager ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠAccess Manager . get Run Manager ForUser ( userId ). filter Is Instance < Non Interactive Run Manager >(). find Ġ{ Ġit . id Ġ== Ġrun Id Ġ} Ċ } Ċ Ċ data Ġclass ĠJson Batch Submission ( val Ġbatches Ġ: ĠList < Json Task Result Batch >) Ċ Ċ data Ġclass ĠJson Task Result Batch ( val Ġtask Name : ĠString , Ġval Ġresult Name : ĠString , Ġval Ġresults : ĠList < Json Task Result >) Ċ Ċ data Ġclass ĠJson Task Result ( val Ġitem : ĠString , Ġval Ġsegment : ĠInt ?) Ċ Ċ class ĠJson Batch Submission Handler ( collections : ĠDAO < Media Collection >, Ġitem Index : ĠDao Indexer < Media Item , ĠPair < UID , ĠString >>, Ġsegment Index : ĠDao Indexer < Media Item Segment List , ĠUID >) Ġ: ĠBatch Submission Handler ( collections , Ġitem Index , Ġsegment Index ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġroute : ĠString Ġ= Ġ" batch Submit /{ run Id }/ json " ĊĊĠĠĠ Ġ@ Open Api ( summary Ġ= Ġ" Endpoint Ġto Ġaccept Ġbatch Ġsubmissions Ġin ĠJSON Ġformat ", ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ api / v 1 / batch Submit /{ run Id }/ json ", ĊĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . POST , ĊĠĠĠĠĠĠĠ ĠpathParams Ġ= Ġ[ Open Api Param (" run Id ", ĠString :: class , Ġ" Comp etition ĠRun ĠID ") ], ĊĠĠĠĠĠĠĠ Ġrequest Body Ġ= ĠOpen Api RequestBody ([ Open Api Content ( Json Batch Submission :: class )]), ĊĠĠĠĠĠĠĠ Ġtags Ġ= Ġ[" Batch ĠSubmission "], ĊĠĠĠĠĠĠĠ Ġresponses Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen ApiResponse (" 2 0 0 ", Ġ[ Open Api Content ( Success Status :: class )]), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen ApiResponse (" 4 0 0 ", Ġ[ Open Api Content ( Error Status :: class )]), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen ApiResponse (" 4 0 1 ", Ġ[ Open Api Content ( Error Status :: class )]), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen ApiResponse (" 4 0 4 ", Ġ[ Open Api Content ( Error Status :: class )]) ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġoverride Ġfun Ġdo Post ( ctx : ĠContext ): ĠSuccess Status Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= ĠuserId ( ctx ) ĊĠĠĠĠĠĠĠ Ġval Ġrun Id Ġ= Ġrun Id ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrun Manager Ġ= Ġget Non Interactive Manager ( userId , Ġrun Id ) Ġ?: Ġthrow ĠError Status Exception ( 4 0 4 , Ġ" Run Ġ${ run Id . string } Ġnot Ġfound ", Ġctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrac Ġ= ĠRun Action Context . run Action Context ( ctx , Ġrun Manager ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Batch Ġ= Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . body As Class < Json Batch Submission >() ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError Status Exception ( 4 0 0 , Ġ" Error Ġparsing Ġjson Ġbatch ", Ġctx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġteam Ġ= Ġrun Manager . description . teams . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . users . contains ( userId ) ĊĠĠĠĠĠĠĠ Ġ} ?. uid Ġ?: Ġthrow ĠError Status Exception ( 4 0 4 , Ġ" No Ġteam Ġfor Ġuser Ġ'$ userId ' Ġcould Ġnot Ġbe Ġfound .", Ġctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult B atches Ġ= Ġjson Batch . batches . map NotNull Ġ{ Ġbatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġrun Manager . tasks ( rac ). find Ġ{ Ġit . description . name Ġ== Ġbatch . task Name Ġ} Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Collection Id Ġ= Ġtask . description . media Collection Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġbatch . results . map Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Item Ġ= Ġthis . item Index [ media Collection Id Ġto Ġresult . item ]. first () Ġ// TODO Ġdeal Ġwith Ġinvalid Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġif Ġ( media Item Ġis ĠMedia Item . Video Item Ġ&& Ġresult . segment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsegment List Ġ= Ġsegment Index [ media Item . id ]. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠTime Util . shot To Time ( result . segment . toString (), Ġsegment List ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemp oral Batch Element ( media Item , Ġtime . first , Ġtime . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Batch Element ( media Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results . all Ġ{ Ġit Ġis ĠTemp oral Batch Element Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Base Result Batch ( media Collection Id , Ġbatch . result Name , Ġteam , Ġresults Ġas ĠList < Temporal Batch Element > )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Result Batch ( media Collection Id , Ġbatch . result Name , Ġteam , Ġresults ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsubmission Batch Ġ= Ġif Ġ( result B atches . all Ġ{ Ġit . results . first () Ġis ĠTemp oral Batch Element Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Temporal Submission Batch ( team , ĠuserId , ĠUID (), Ġresult B atches Ġas ĠList < Base Result Batch < Temporal Batch Element >> )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Submission Batch ( team , ĠuserId , ĠUID (), Ġresult B atches Ġas ĠList < Base Result Batch < Base Result Batch Element >>) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Manager . add Submission Batch ( submission Batch ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSuccess Status (" Submission Ġbatch Ġreceived ") ĊĊĠĠĠ Ġ} ĊĊĊ Ċ } Ċ