package Ġde . et ern al w ings . v ima . plugin Ċ Ċ import Ġde . et ern al w ings . v ima . domain . Metadata Value Ċ import Ġde . et ern al w ings . v ima . domain . Video Ċ Ċ class ĠVideo Container ( ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġlocation : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġmetadata : ĠMap < Int , Metadata Value <* >> Ċ ) Ġ{ ĊĠĠĠ Ġinternal Ġvar Ġchanged : ĠSet < Int > Ġ= Ġempty Set () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun Ġhas Metadata ( id : ĠInt ) Ġ= Ġmetadata . containsKey ( id ) ĊĊĠĠĠ Ġprivate Ġfun Ġmark Changed ( metadata Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchanged Ġ= Ġchanged Ġ+ Ġmetadata Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġ< T > Ġupdate Metadata ( id : ĠInt , Ġvalue : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġthis . metadata [ id ] Ġ?: Ġthrow ĠIllegalStateException (" No Ġsuch Ġmetadata Ġwith Ġid Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Metadata Value Ġ= Ġmetadata Ġas ĠMetadata Value < T > ĊĠĠĠĠĠĠĠ Ġif ( original Metadata Value . value Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Metadata Value . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmark Changed ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġ< T > Ġget Metadata Value ( id : ĠInt ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġthis . metadata [ id ] Ġ?: Ġthrow ĠIllegalStateException (" No Ġsuch Ġmetadata Ġwith Ġid Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ( metadata Ġas ĠMetadata Value < T >). value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Video ( video : ĠVideo ): ĠVideo Container Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġvideo . metadata !!. map Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . key Ġto Ġentry . value . clone () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVideo Container ( video . id !! , Ġvideo . name !! , Ġvideo . location !! , Ġmetadata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ