/* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 1 9 ĠR oh it ĠSa he br ao ĠSur w ase . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠĠĠ Ġ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 Ġcom . ro hit ss . aac . repository Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġcom . android networking . Android Networking Ċ import Ġcom . android networking . common . Priority Ċ import Ġcom . android networking . error . AN Error Ċ import Ġcom . android networking . interfaces . Parsed RequestListener Ċ import Ġcom . ro hit ss . aac . Build Config Ċ import Ġcom . ro hit ss . aac . model . Articles DAO Ċ import Ġcom . ro hit ss . aac . model . Articles Item Ċ import Ġcom . ro hit ss . aac . model . News Response Nullable Ċ import Ġorg . jetbrains . ank o . do Async Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠR oh it ĠSur w ase Ġon Ġ 0 7 / 0 8 / 1 8 . Ċ Ġ*/ Ċ class ĠArticles Repository Ġprivate Ġconstructor ( private Ġval Ġarticles DAO : ĠArticles DAO ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFor ĠSingleton Ġinstantiation ĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠArticles Repository ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( database DAO : ĠArticles DAO ): ĠArticles Repository Ġ= Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠArticles Repository ( database DAO ). also Ġ{ Ġinstance Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll () Ġ= Ġarticles DAO . getAll () ĊĊĠĠĠ Ġfun Ġinsert All ( articles ItemList : ĠList < Articles Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarticles DAO . insert All ( articles ItemList ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete All () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ Ġarticles DAO . delete All () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Articles () Ġ{ ĊĠĠĠĠĠĠĠ ĠAndroid Networking . get (" https :// news api . org / v 2 / top - head lines ? sources = bbc - news ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Headers (" X - Api - Key ", ĠBuild Config . ApiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Priority . LOW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAs Object ( News Response Nullable :: class . java , Ġobject Ġ: ĠParsed RequestListener < News Response Nullable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( news Response Nullable : ĠNews Response Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticles ItemList : ĠMutable List < Articles Item >? Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠNote : Ġwe Ġhave Ġtwo Ġdifferent Ġdata Ġmodel - Ġarticle : ĠArticles Item Ġ& ĠArticles Item Nullable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠWe Ġare Ġgetting Ġserver Ġdata Ġin ĠArticles Item Nullable Ġand Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġfiltering Ġit Ġto Ġremove Ġany Ġnull Ġor Ġempty Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġfiltered Ġdata Ġis Ġthen Ġcopied Ġto Ġthe ĠArticles Item Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġway Ġwe Ġare Ġreducing Ġnull ability ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Response Nullable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. articles ?. as Sequence ()?. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Not Ġ{ ĠText Utils . isEmpty ( it . author ) Ġ|| ĠText Utils . isEmpty ( it . title ) Ġ|| ĠText Utils . isEmpty ( it . description ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĠArticles Item ( 0 , Ġit . author !! , Ġit . description !! , Ġit . title !! ) Ġ} ?. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġarticles ItemList ?. add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( articles ItemList Ġ!= Ġnull Ġ&& Ġ! articles ItemList . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert All ( articles ItemList ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Ro hit SS ", Ġ" List ĠEmpty ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( an Error : ĠAN Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Ro hit SS ", Ġan Error . error Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ