package Ġuk . co . sentinel web . c uer . app . orche strator . util Ċ Ċ import Ġuk . co . sentinel web . c uer . app . db . repository . Playlist Item Database Repository Ċ import Ġuk . co . sentinel web . c uer . app . orche strator . Media Orche strator Ċ import Ġuk . co . sentinel web . c uer . app . orche strator . Orche strator Contract .* Ċ import Ġuk . co . sentinel web . c uer . domain . Media Domain Ċ import Ġuk . co . sentinel web . c uer . domain . Playlist Domain Ċ Ċ /** Ċ Ġ* ĠChecks Ġfor Ġany Ġexisting Ġmedia Ġitems Ġin Ġthe Ġplaylist . Ċ Ġ*/ Ċ class ĠPlaylist Media Lookup Orche strator Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmedia Orche strator : ĠMedia Orche strator , ĊĠĠĠ Ġprivate Ġval Ġroom Playlist Item Database Repository : ĠPlaylist Item Database Repository Ċ ) Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġlookup Media And Replace ( playlist : ĠPlaylist Domain , Ġtarget : ĠSource ): ĠPlaylist Domain Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedia Lookup Ġ= Ġbuild Media Lookup ( playlist , Ġtarget ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġplaylist . copy ( id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġplaylist . items . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Ġ= Ġmedia Lookup . get ( it . media . platform Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Media Ġsave Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġlookup Playlist Items And Replace ( playlist : ĠPlaylist Domain ): ĠPlaylist Domain Ġ= ĊĠĠĠĠĠĠĠ Ġbuild Media Lookup ( playlist , ĠSource . LOCAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit . values . map NotNull Ġ{ Ġit . id Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġroom Playlist Item Database Repository . load List ( Media IdList Filter ( it )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . distinct By Ġ{ Ġit . media . platform Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . associate By Ġ{ Ġit . media . platform Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġplaylist . items . map Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ item . media . platform Id ] Ġ?: Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġplaylist ĊĊĊĠĠĠ Ġ// Ġtodo Ġconsider Ġmoving Ġthis Ġto Ġplaylist Ġsave ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġbuild Media Lookup ( ĊĠĠĠĠĠĠĠ Ġplaylist : ĠPlaylist Domain , Ġtarget : ĠSource ĊĠĠĠ Ġ): ĠMap < String , ĠMedia Domain > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Media Ġ= Ġmedia Orche strator . load List ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform IdList Filter ( playlist . items . map Ġ{ Ġit . media . platform Id Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptions ( target , Ġflat Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexisting Media Platform Ids Ġ= Ġexisting Media . map Ġ{ Ġit . platform Id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmedia Lookup Ġ= Ġplaylist . items ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . media Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġremove All Ġ{ Ġexisting Media Platform Ids . contains ( it . platform Id ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . copy ( id Ġ= Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġmedia Orche strator . save ( it , ĠOptions ( target , Ġflat Ġ= Ġfalse )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġadd All ( existing Media ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate Ġ{ Ġit . platform Id Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmedia Lookup ĊĠĠĠ Ġ} Ċ }