package Ġcom . exception factory . ep g . provider . service . xml tv . listing Ċ Ċ import Ġcom . exception factory . ep g . provider . model . xml tv . Tv Ċ import Ġcom . exception factory . ep g . provider . model . xml tv . listing . Listing Parameters Ċ import Ġcom . exception factory . ep g . provider . model . zap 2 it . grid . Grid Parameters Ċ import Ġcom . exception factory . ep g . provider . service . zap 2 it . grid . Grid Service Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġreactor . core . publisher . Mono Ċ import Ġjava . time . Instant Ċ import Ġjava . time . temporal . Ch rono Unit Ċ Ċ /** Ċ Ġ* ĠDefault ĠListing ĠService Ġimplemented Ġusing ĠZ ap 2 it ĠGrid ĠList ings Ċ Ġ*/ Ċ @ Service Ċ class ĠDefault Listing Service (@ Autowired Ġval Ġgrid Service : ĠGrid Service , Ġ@ Autowired Ġval Ġlisting Producer : ĠListing Producer ) Ġ: ĠListing Service Ġ{ ĊĠĠĠ Ġ/** ĠMaximum ĠNumber Ġof ĠH ours Ġfor Ġeach Ġset Ġof ĠList ings Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġlisting Hours Ġ= Ġ 6 L ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet ĠXML TV ĠList ings Ġfrom Ġmultiple ĠZ ap 2 it ĠGrid ĠService ĠList ings ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlisting Parameters ĠListing ĠParameters ĊĠĠĠĠ Ġ* Ġ@ return ĠReactive ĠMono ĠXML TV ĠList ings ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetList ings ( listing Parameters : ĠListing Parameters ): ĠMono < Tv > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstart Ġ= ĠInstant . now (). tr uncated To ( Ch rono Unit . HOUR S ) ĊĠĠĠĠĠĠĠ Ġval Ġlist ings Ġ= ĠArrayList < Tv >() ĊĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġstart . plus ( listing Parameters . duration ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( end Ġ> Ġstart ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid Parameters Ġ= Ġget Grid Parameters ( listing Parameters , Ġstart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmono Grid Ġ= Ġgrid Service . get Grid ( grid Parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġmono Grid . block () Ġ?: Ġthrow ĠIllegalArgumentException (" Grid ĠList ings Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlisting Ġ= Ġlisting Producer . get Tv ( grid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ings . add ( listing ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġstart . plus ( listing Hours , ĠCh rono Unit . HOUR S ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠMono . just ( get Ag gregated List ings ( list ings )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet ĠGrid ĠParameters Ġfrom ĠListing ĠLocation Ġand ĠStart ĠTime ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlisting Parameters ĠListing ĠParameters ĊĠĠĠĠ Ġ* Ġ@ param Ġstart ĠStart ĠTime Ġfor ĠList ings ĊĠĠĠĠ Ġ* Ġ@ return ĠGrid ĠParameters ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Grid Parameters ( listing Parameters : ĠListing Parameters , Ġstart : ĠInstant ): ĠGrid Parameters Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGrid Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġlisting Parameters . country , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpostal Code Ġ= Ġlisting Parameters . postal Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhead end Id Ġ= Ġlisting Parameters . head end Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġstart . epoch Second ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet ĠAg gregated ĠTV ĠList ings ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlist ings ĠXML TV ĠList ings ĊĠĠĠĠ Ġ* Ġ@ return ĠAg gregated ĠXML TV ĠList ings ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Ag gregated List ings ( list ings : ĠList < Tv >): ĠT v Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannels Ġ= Ġlist ings . flatMap Ġ{ Ġlisting Ġ-> Ġlisting . channel Ġ}. distinct By Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġprogram mes Ġ= Ġlist ings . flatMap Ġ{ Ġlisting Ġ-> Ġlisting . program me Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlisting Ġ= Ġlist ings . first () ĊĠĠĠĠĠĠĠ Ġreturn ĠT v ( listing . source Info Url , Ġlisting . source Info Name , Ġlisting . source Data Url , Ġchannels , Ġprogram mes ) ĊĠĠĠ Ġ} Ċ }