package Ġat . r br ats ch un . mse . movies . data Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġjava . net . URL Ċ Ċ class ĠMovie Db Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġinitialized Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠMovie Db () ĊĠĠĠĠĠĠĠ Ġvar Ġmovie Collection : ĠArrayList < Movie Collection > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" Movie Db " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Movie Collections (): ĠArrayList < Movie Collection > Ġ{ ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B ee ĠMovie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 3 8 9 7 9 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 BM j E 1 MD Yx OTA 4 MF 5 BM l 5 Ban Bn Xk Ft ZT cw M DE 0 MD U zM w @@ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Epic ĠMovie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 3 8 9 7 9 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 B MT A 3 ND M 5 OD U 3 Nz le QT Je Q W pw Z 1 5 Bb WU 3 MD gy Mj gy N DE @ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Movie Ġ 4 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 1 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 3 8 9 7 9 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 B MT g 4 Nz Q 3 ND M 1 Nl 5 BM l 5 Ban Bn Xk Ft ZT cw Nj Ez Mj M 3 OA @@ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sc ary ĠMovie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 1 7 5 1 4 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 BM GE z Z jd j MG Qt Zm Yz ZC 0 0 N 2 I 4 L Th i Y 2 Qt NW Y 5 Zm Q 3 M 2 Ex Zm M 4 Xk Ey Xk F qc G de QX Vy MT Qx Nz Mz N DI @ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sc ary ĠMovie Ġ 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 2 5 7 1 0 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 BM z Qx Yj U 1 OT Ut Yj Ri OC 0 0 ND g 2 L WI 4 M WU t Z GU 5 Yz dk YT cw NT Bl Xk Ey Xk F qc G de QX Vy MT Qx Nz Mz N DI @ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sc ary ĠMovie Ġ 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 3 0 6 0 4 7 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 BN DE 2 N TI y Mj g 2 OF 5 BM l 5 Ban Bn Xk Ft Z TY w N DE y MT g 3 ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sc ary ĠMovie Ġ 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 3 6 2 1 2 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 BZ mF k Mz c 2 NT ct N 2 U 1 Ni 0 0 Mz E 5 L WJ m Mz Mt YW Q 4 Nj Qy Y 2 Mz Ym M 1 Xk Ey Xk F qc G de QX Vy N TI z OT k 5 OD M @ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠLe go ĠB at man ĠMovie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 1 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 4 1 1 6 2 8 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 B MT cy N TE y OT Y 0 M 1 5 BM l 5 Ban Bn Xk Ft ZT gw OT Ay Nz U 3 M DI @ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠLe go ĠMovie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 1 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 1 4 9 0 0 1 7 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 B MT g 4 MD k 1 OD Ex N 1 5 BM l 5 Ban Bn Xk Ft ZT gw Nz Iy Nj g 3 M DE @ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠSh aw sh ank ĠRe de mpt ion ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 9 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 1 1 1 1 6 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 BM DF k YT c 0 M GE t Zm Nh MC 0 0 Z DI zL WF m N TE t OD M 1 Zm Rl Y WM w M WF m Xk Ey Xk F qc G de QX Vy MT Mx OD k 2 OT U @ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovie Collection . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠSimp son s ĠMovie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" movie ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt 0 4 6 2 5 3 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// m . media - amazon . com / images / M / MV 5 B MT gx MD cz MT A 5 N 1 5 BM l 5 Ban Bn Xk Ft ZT cw M zk 1 Mz Mz Mw @@ ._ V 1 _ SX 3 0 0 . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmovie Collection ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload Movies (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// www . om db api . com /? s = movie & y = 2 0 1 8 & apikey = 7 b 7 9 da 7 6 " ĊĠĠĠĠĠĠĠ ĠLog . d ( LOG _ TAG , Ġ" fetch ing Ġmovies Ġ... ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! initialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Ġ= Ġj ack son ObjectMapper () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. readValue < Movie SearchResult >( URL ( url ). read Text ()). Search ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Collection Ġ= Ġmovies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( LOG _ TAG , Ġ" downloaded Ġ$ movie Collection . size Ġmovies Ġ... ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" error Ġdownloading Ġmovies : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Collection Ġ= Ġmock Movie Collections () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialized Ġ= Ġ! initialized ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch ( q : ĠString ): ĠArrayList < Movie Collection > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( q . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġmovie Collection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠArrayList ( movie Collection . filter Ġ{ Ġm Ġ-> Ġm . Title . contains ( q ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Details ( imdb Id : ĠString ): ĠMovie ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// www . om db api . com /? i =$ imdb Id & apiKey = 7 b 7 9 da 7 6 " ĊĠĠĠĠĠĠĠ ĠLog . d ( LOG _ TAG , Ġ" fetch ing Ġmovie Ġdetails Ġwith Ġurl : Ġ$ url ") ĊĠĠĠĠĠĠĠ Ġvar Ġmovie : ĠMovie ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Ġ= Ġj ack son ObjectMapper () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. readValue < Movie >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL ( url ). read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" error Ġfetching Ġmovie Ġdetail Ġfor Ġim db Id Ġ$ imdb Id : Ġ$ e . message ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmovie ĊĠĠĠ Ġ} Ċ }