package Ġcom . j ace kp ie tras . zoo . data . repository Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . j ace kp ie tras . zoo . data . R Ċ import Ġcom . j ace kp ie tras . zoo . data . parser . Animal List Web Parser Ċ import Ġcom . j ace kp ie tras . zoo . data . parser . Animal Web Parser Ċ import Ġcom . j ace kp ie tras . zoo . data . parser . make Stream From Url Ċ import Ġcom . j ace kp ie tras . zoo . domain . model .* Ċ import Ġcom . j ace kp ie tras . zoo . domain . repository . Animal Repository Ċ import Ġcom . squareup . mos hi . Json Adapter Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . Types Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ Ċ class ĠAnimal Repository Impl ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġm oshi : ĠM oshi , Ċ ) Ġ: ĠAnimal Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġanimal Flow Ġ= ĠMutable State Flow < List < Animal Entity >>( emptyList ()) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġscrap Test Animal s () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stored Animal s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstored Animal s Ġ= Ġcontext . resources . open Raw Resource ( R . raw . animal s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffered Reader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse Json Animal s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimal Flow . value Ġ= Ġstored Animal s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġscrap All Animal s () Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Adapter Ġ= Ġm oshi . adapter ( Animal Entity :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb s Ġ= Ġstored Animal s . map Ġ{ Ġit . web Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimal List Web Parser ( make Stream From Url (" https :// zoo - kr ak ow . pl / zw ierz eta / ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getContent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġweb s . contains ( it . www ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġbasic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠAnimal Web Parser ( make Stream From Url ( basic . www , Ġprint Ġ= Ġfalse )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimal Ġ= ĠAnimal Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠAnimal Id ( parser . getFirst Paragraph (). title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġparser . getFirst Paragraph (). title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Latin Ġ= Ġparser . getFirst Paragraph (). content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrence Ġ= Ġparser . get Paragraph (" W yst ÄĻ pow anie "). content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment Ġ= Ġparser . get Paragraph (" Å ļ rod ow is ko ĠÅ¼ yc ia "). content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Ġ= Ġparser . get Paragraph (" Po Å¼y w ien ie "). content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiplication Ġ= Ġparser . get Paragraph (" Ro zm na Å¼ anie "). content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotection And Th re ats Ġ= Ġparser . get Paragraph (" O chron a Ġi Ġz ag ro Å¼ enia "). content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfacts Ġ= Ġparser . get Paragraph (" C ie k aw ost ki "). content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphotos Ġ= Ġparser . getP ictures (). map Ġ{ Ġit . url Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivision Ġ= Ġdivision From Pol ish Tag ( basic . filter . tag ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Ġ= Ġbasic . www , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġjson Adapter . toJson ( animal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Sc rapper Ġ$ json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e , Ġ" Sc rapper Ġfailed Ġfor Ġ${ basic . name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Animal s ( region Id : ĠRegion Id ): ĠList < Animal Entity > Ġ= ĊĠĠĠĠĠĠĠ Ġstored Animal s . filter Ġ{ Ġit . region In Z oo . contains ( region Id ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Animal s ( division : ĠDiv ision ?): ĠList < Animal Entity > Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( division Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstored Animal s ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstored Animal s . filter Ġ{ Ġit . division Ġ== Ġdivision Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Animal s ( filter : ĠAnimal Filter ): ĠFlow < List < Animal Entity >> Ġ= ĊĠĠĠĠĠĠĠ Ġanimal Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . filter Ġ{ Ġanimal Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! animal . contains Query ( filter . query ) Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . region Id Ġ!= Ġnull Ġ&& Ġ! animal . region In Z oo . contains ( filter . region Id !! ) Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . div isions . isNotEmpty () Ġ&& Ġ! filter . div isions . contains ( animal . division ) Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAnimal Entity . contains Query ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query . isNull Or Blank ()) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( this . name . lowercase (). contains ( query )) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( this . name Latin . lowercase (). contains ( query )) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Animal ( animal Id : ĠAnimal Id ): ĠAnimal Entity Ġ= ĊĠĠĠĠĠĠĠ Ġstored Animal s . first OrNull Ġ{ Ġit . id . id Ġ== Ġanimal Id . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Cannot Ġfind Ġanimal Ġwith Ġid : Ġ${ animal Id . id }") ĊĊĠĠĠ Ġprivate Ġval Ġanimal Json Adapter : ĠJson Adapter < List < Animal Entity >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm oshi . adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . new Parameterized Type ( Mutable List :: class . java , ĠAnimal Entity :: class . java ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun ĠString . parse Json Animal s (): ĠList < Animal Entity > Ġ= ĊĠĠĠĠĠĠĠ Ġanimal Json Adapter . fromJson ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrence Ġ= Ġit . occ urrence . correct Special Characters (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment Ġ= Ġit . environment . correct Special Characters (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Ġ= Ġit . food . correct Special Characters (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiplication Ġ= Ġit . multip lication . correct Special Characters (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotection And Th re ats Ġ= Ġit . protection And Th re ats . correct Special Characters (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfacts Ġ= Ġit . facts . correct Special Characters (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġempty List () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġstored Animal s : ĠList < Animal Entity > Ġ= Ġempty List () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun ĠString . correct Special Characters (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġreplace (" &# 8 2 2 2 ;", Ġ" âĢ ŀ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" &# 8 2 2 1 ;", Ġ" âĢĿ ") Ċ } Ċ