// package Ġcom . shop ify orders . data . datamodel . order č Ċ // č Ċ // import Ġandroid . arch . persistence . room . Database č Ċ // import Ġandroid . arch . persistence . room . Room č Ċ // import Ġandroid . arch . persistence . room . Room Database č Ċ // import Ġandroid . content . Context č Ċ // import Ġandroid . util . Log č Ċ // import Ġcom . android . vol ley . Request č Ċ // import Ġcom . android . vol ley . Request Queue č Ċ // import Ġcom . android . vol ley . Response č Ċ // import Ġcom . android . vol ley . toolbox . String Request č Ċ // import Ġcom . android . vol ley . toolbox . Vol ley č Ċ // import Ġcom . shop ify orders . domain . Order č Ċ // import Ġcom . shop ify orders . domain . Order Impl č Ċ // import Ġorg . json . simple . JSONArray č Ċ // import Ġorg . json . simple . JSONObject č Ċ // import Ġorg . json . simple . parser . JSONParser č Ċ // import Ġorg . json . simple . parser . ParseException č Ċ // import Ġjava . io . File č Ċ // import Ġjava . text . SimpleDateFormat č Ċ // č Ċ //@ Database ( entities Ġ= Ġ[ Order Mapper :: class ], Ġversion Ġ= Ġ 0 , Ġexport Schema Ġ= Ġfalse ) č Ċ // abstract Ġclass ĠOrder Database Ġ: ĠRoom Database Ġ(){ č Ċ // ĠĠĠ Ġ// ĠEndpoint Ġfor ĠAPI Ġis Ġhere Ġfor Ġb rev ity č Ċ // ĠĠĠ Ġprivate Ġval Ġc ENDPOINT Ġ= Ġ" https :// shop ic ruit . my shop ify . com / admin / orders . json ? page = 1 & access _ token = c 3 2 3 1 3 df 0 d 0 ef 5 1 2 ca 6 4 d 5 b 3 3 6 a 0 d 7 c 6 " č Ċ // ĠĠĠ Ġval ĠTAG Ġ= Ġ" ORDER _ DATABASE " č Ċ // č Ċ // ĠĠĠ Ġvar Ġreq Queue Ġ: Request Queue ? Ġ= Ġnull č Ċ // ĠĠĠ Ġval Ġjson Parser : ĠJSON Parser Ġ= ĠJSON Parser () č Ċ // č Ċ // ĠĠĠ Ġabstract Ġfun Ġorder Dao (): ĠOrder Dao č Ċ // č Ċ // ĠĠĠ Ġcompanion Ġobject Ġ{ č Ċ // ĠĠĠĠĠĠĠ Ġval ĠDB _ NAME Ġ= Ġ" Order ĠDatabase " č Ċ // ĠĠĠĠĠĠĠ Ġvar ĠINSTANCE : ĠOrder Database ? Ġ= Ġnull č Ċ // č Ċ // ĠĠĠĠĠĠĠ Ġfun ĠgetInstance Ġ( context : ĠContext ) Ġ: ĠOrder Database Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchecks Ġif Ġthe Ġdatabase Ġhas Ġbeen Ġinitialized č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent DB Ġ: ĠFile Ġ= Ġcontext . get Database Path ( DB _ NAME ) č Ċ // č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġnew Ġinstance Ġof Ġthe Ġdatabase č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= ĠRoom . database Builder ( context . application Context , č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder Database :: class . java , ĠDB _ NAME ). build () č Ċ // č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinitialize Ġthe Ġdatabase Ġif Ġit Ġhasn 't Ġalready Ġbeen Ġdone č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! current DB . exists ()) Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE !!. initialize Database ( context ) č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE !! č Ċ // ĠĠĠĠĠĠĠ Ġ} č Ċ // č Ċ // ĠĠĠĠĠĠĠ Ġfun Ġdestroy Instance Ġ() Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= Ġnull č Ċ // ĠĠĠĠĠĠĠ Ġ} č Ċ // ĠĠĠ Ġ} č Ċ // č Ċ // ĠĠĠ Ġ/** č Ċ // ĠĠĠĠ Ġ* ĠInitializes Ġthe Ġdata Ġin Ġthe ĠRoom ĠDatabase Ġby Ġmaking Ġan Ġapi Ġcall č Ċ // ĠĠĠĠ Ġ*/ č Ċ // ĠĠĠ Ġfun Ġinitialize Database ( context : ĠContext ) Ġ{ č Ċ // ĠĠĠĠĠĠĠ Ġreq Queue Ġ= ĠVol ley . new Request Queue ( context ) č Ċ // č Ċ // ĠĠĠĠĠĠĠ Ġ// Ġattach Ġlisteners Ġto Ġthe Ġrequest č Ċ // ĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠString Request ( Request . Method . GET , Ġc ENDPOINT , č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < String > Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcalls Ġthe Ġmethod Ġto Ġparse Ġthe ĠJSON Ġresponse č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ-> Ġval Ġlist Ġ= Ġparse JSON ( response ) č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ-> Ġ ĠLog . d ( TAG , Ġerror . message ) č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) č Ċ // ĠĠĠĠĠĠĠ Ġ// Ġadds Ġthe Ġrequest Ġto Ġthe Ġqueue Ġto Ġbe Ġexecuted č Ċ // ĠĠĠĠĠĠĠ Ġreq Queue !!. add ( request ) č Ċ // ĠĠĠ Ġ} č Ċ // č Ċ // č Ċ // ĠĠĠ Ġ/** č Ċ // ĠĠĠĠ Ġ* Ġparses Ġresponse Ġfrom Ġrequest Ġto Ġinsert Ġorders Ġinto Ġthe Ġdatabase č Ċ // ĠĠĠĠ Ġ*/ č Ċ // ĠĠĠ Ġprivate Ġfun Ġparse JSON ( responseText : ĠString ) Ġ{ č Ċ // ĠĠĠĠĠĠĠ Ġval Ġstring ToDate Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ' T ' HH : mm ") č Ċ // ĠĠĠĠĠĠĠ Ġtry Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġresponse Text ) č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Object Ġ= Ġjson Parser . parse ( responseText ) Ġas ĠJSONObject č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorders Array Ġ= Ġresponse Object . get (" orders ") Ġas ĠJSONArray č Ċ // č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreates Ġan Ġiterator Ġfor Ġthe Ġorders Ġusing Ġits Ġkeys č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorder Iterator Ġ= Ġorders Array . iterator () č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġorder List Ġ= ĠArrayList < Order > Ġ() č Ċ // č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( order Iterator . hasNext ()) Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorder Ġ= Ġorder Iterator . next () Ġas ĠJSONObject č Ċ // č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct ID Ġ= Ġorder . get (" id "). toString () č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġorder . get (" created _ at "). toString () č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Date Ġ= Ġstring ToDate . parse ( created . substring ( 0 , Ġ 1 6 )) č Ċ // č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprovince Code Ġ= Ġ"" č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovince Ġ= Ġorder . get (" shipping _ address ") č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( province Ġ!= Ġnull ) Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovince Code Ġ= Ġ( province Ġas ĠJSONObject ). get (" province "). toString () č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} č Ċ // č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" product Ġ= Ġ" Ġ+ Ġproduct ID č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", Ġdate Ġ= Ġ" Ġ+ Ġcreated Date . toString () č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", Ġprovince Ġcode Ġ= Ġ" Ġ+ Ġprovince Code Ġ) č Ċ // č Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder List . add ( Order Impl ( product ID , Ġprovince Code , Ġcreated Date )) č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE !!. order Dao (). insert Orders ( order List ) č Ċ // ĠĠĠĠĠĠĠ Ġ} č Ċ // ĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠParseException ) Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġe . message ) č Ċ // ĠĠĠĠĠĠĠ Ġ} č Ċ // ĠĠĠ Ġ} č Ċ // č Ċ //}