/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 2 1 Ġ- Ġpresent Ġ 8 x 8 , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . j its i . j ico fo . lips yn ch ack Ċ Ċ import Ġorg . j its i . j ico fo . conference . source . Conference Source Map Ċ import Ġorg . j its i . j ico fo . conference . source . Endpoint Source Set Ċ import Ġorg . j its i . j ico fo . conference . source . Source Ċ import Ġorg . j its i . j ico fo . conference . source . S src Group Ċ import Ġorg . j its i . j ico fo . conference . source . S src Group Semantics Ċ import Ġorg . j its i . utils . MediaType Ċ import Ġorg . jx mpp . jid . J id Ċ Ċ /** ĠThis Ġis Ġtemporary Ġuntil Ġwe Ġfully Ġtransition Ġto Ġ[ Conference Source Map ], Ġetc . Ġ*/ Ċ fun Ġfrom Media Source Map ( ĊĠĠĠ Ġmedia Source Map : ĠMedia Source Map , ĊĠĠĠ Ġmedia Source Group Map : ĠMedia Source Group Map Ċ ): ĠConference Source Map Ġ{ ĊĠĠĠ Ġval Ġsources By Endpoint Ġ= Ġmutable Map Of < J id ?, ĠMutable Set < Source >>() ĊĠĠĠ Ġval Ġs src Groups By Endpoint Ġ= Ġmutable Map Of < J id ?, ĠMutable Set < S src Group >>() ĊĊĠĠĠ Ġmedia Source Map . media Types . forEach Ġ{ Ġmedia Type Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġsource Packet Extensions Ġ= Ġmedia Source Map . get Sources For Media ( media Type ) ĊĠĠĠĠĠĠĠ Ġsource Packet Extensions . forEach Ġ{ Ġsource Packet Extension Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner Ġ= ĠS SRC Signal ing . get SSR CO wner ( source Packet Extension ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner Sources Ġ= Ġsources By Endpoint . compute If Absent ( owner ) Ġ{ Ġmutable Set Of () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Sources . add ( Source ( MediaType . parse String ( media Type ), Ġsource Packet Extension )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġmedia Source Group Map . media Types . forEach Ġ{ Ġmedia Type Ġ-> ĊĠĠĠĠĠĠĠ Ġmedia Source Group Map . getSource Groups For Media ( media Type ). forEach Ġ{ Ġsource Group Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsemantics Ġ= ĠS src Group Semantics . fromString ( source Group . semantics ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Ġ= Ġsource Group . sources . map Ġ{ Ġit . ss rc Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġfind Ġthe Ġowner Ġencoded Ġin ĠXML Ġin Ġthe ĠSource Group ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġowner Ġ= Ġsource Group . sources . map Ġ{ ĠS SRC Signal ing . get SSR CO wner ( it ) Ġ}. filter NotNull (). first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( owner Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise Ġtry Ġto Ġfind Ġit Ġbased Ġon Ġthe Ġsources Ġfrom Ġthe Ġother Ġmap . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources By Endpoint . forEach Ġ{ Ġ( endpoint , Ġendpoint Sources ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources . forEach Ġ{ Ġgroup Source Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( endpoint Sources . map Ġ{ Ġit . ss rc Ġ}. contains ( group Source )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Ġ= Ġendpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner S src Groups Ġ= Ġs src Groups By Endpoint . compute If Absent ( owner ) Ġ{ Ġmutable Set Of () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner S src Groups . add ( S src Group ( semantics , Ġsources , ĠMediaType . parse String ( media Type ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġendpoint Source Sets Ġ= Ġmutable Map Of < J id ?, ĠEndpoint Source Set >() ĊĠĠĠ Ġsources By Endpoint . forEach Ġ{ Ġ( owner , Ġsources ) Ġ-> ĊĠĠĠĠĠĠĠ Ġendpoint Source Sets [ owner ] Ġ= ĠEndpoint Source Set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsources , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs src Groups By Endpoint [ owner ] Ġ?: Ġempty Set () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġs src Groups By Endpoint . forEach Ġ{ Ġ( owner , Ġs src Group ) Ġ-> ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġowner Ġhad Ġsources Ġthis Ġgroup Ġwould Ġhave Ġalready Ġbeen Ġadded Ġabove . ĊĠĠĠĠĠĠĠ Ġif Ġ( endpoint Source Sets . none Ġ{ Ġit . key Ġ== Ġowner Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Source Sets [ owner ] Ġ= ĠEndpoint Source Set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs src Group , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠConference Source Map ( endpoint Source Sets ) Ċ } Ċ Ċ /** ĠThis Ġis Ġtemporary Ġuntil Ġwe Ġfully Ġtransition Ġto Ġ[ Conference Source Map ], Ġetc . Ġ*/ Ċ fun ĠConference Source Map . to Media Source Map (): ĠSource Map And Group Map Ġ{ ĊĠĠĠ Ġval Ġsources Ġ= ĠMedia Source Map () ĊĠĠĠ Ġval Ġgroups Ġ= ĠMedia Source Group Map () ĊĊĠĠĠ ĠforEach Ġ{ Ġ( owner , Ġendpoint Source Set ) Ġ-> ĊĠĠĠĠĠĠĠ Ġendpoint Source Set . sources . forEach Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsources . add Source ( source . media Type . toString (), Ġsource . to Packet Extension ( owner )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġendpoint Source Set . ss rc Groups . forEach Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroups . add Source Group (" video ", ĠSource Group ( group . to Packet Extension ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠSource Map And Group Map ( sources , Ġgroups ) Ċ } Ċ Ċ data Ġclass ĠSource Map And Group Map ( val Ġsources : ĠMedia Source Map , Ġval Ġgroups : ĠMedia Source Group Map ) Ċ