/* Ċ Copyright Ġ 2 0 1 8 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ċ Permission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ċ software Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ċ without Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ċ merge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ permit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso . Ċ Ċ THE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , Ċ INCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA Ċ P ARTIC ULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT Ċ HOLDER S ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION Ċ OF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ SOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . amazonaws . mobile . samples . aws omen otes . repository Ċ Ċ import Ġandroid . arch . paging . Page Key ed DataSource Ċ import Ġandroid . util . Log Ċ import Ġcom . amazonaws . mobile . samples . aws omen otes . models . Note Ċ import Ġcom . amazonaws . mobile . samples . aws omen otes . services . DataService Ċ import Ġcom . amazonaws . mobile . samples . aws omen otes . TAG Ċ Ċ /** Ċ Ġ* ĠA ĠDataSource Ġimplements Ġa Ġpaging Ġsystem Ġfor Ġa ĠRecyclerView . Ġ ĠThis Ġone Ġuses Ġthe ĠData Service Ċ Ġ* Ġto Ġprovide Ġa Ġpage d Ġview Ġinto Ġthe ĠNotes ĠAPI . Ċ Ġ*/ Ċ class ĠNotes DataSource ( private Ġval Ġdata Service : ĠData Service ) Ġ: ĠPage Key ed DataSource < String , ĠNote >() Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPart Ġof Ġthe ĠPage Key ed DataSource Ġ- Ġload Ġthe Ġfirst Ġpage Ġof Ġa Ġlist . Ġ ĠThis Ġis Ġcalled Ġwhen ĊĠĠĠĠ Ġ* Ġthe Ġdata Ġsource Ġis Ġfirst Ġcreated Ġor Ġinvalid ated Ġand Ġassumes Ġno Ġnext Token Ġhas Ġbeen ĊĠĠĠĠ Ġ* Ġprovided . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġload Initial ( params : ĠLoad Initial Params < String >, Ġcallback : ĠLoad Initial Callback < String , ĠNote >) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Initial (${ params . requested Load Size }) ") ĊĠĠĠĠĠĠĠ Ġdata Service . load Notes ( params . requested Load Size , Ġnull ) Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Items Ġresponse Ġ= Ġ(${ response . items . size }, Ġ\" ${ response . nextToken }\ ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( response . items , Ġnull , Ġresponse . nextToken ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPart Ġof Ġthe ĠPage Key ed DataSource Ġ- Ġload Ġthe Ġnext Ġpage Ġof Ġa Ġlist . Ġ ĠThis Ġis Ġcalled Ġafter ĊĠĠĠĠ Ġ* Ġthe Ġload Initial () Ġhas Ġreturned Ġa Ġresponse Ġthat Ġincludes Ġa Ġnext Token Ġto Ġload Ġthe Ġnext ĊĠĠĠĠ Ġ* Ġpage Ġof Ġitems . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġload After ( params : ĠLoad Params < String >, Ġcallback : ĠLoad Callback < String , ĠNote >) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load After (${ params . requested Load Size }, Ġ${ params . key }) ") ĊĠĠĠĠĠĠĠ Ġdata Service . load Notes ( params . requested Load Size , Ġparams . key ) Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Items Ġresponse Ġ= Ġ(${ response . items . size }, Ġ\" ${ response . nextToken }\ ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( response . items , Ġresponse . nextToken ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPart Ġof Ġthe ĠPage Key ed DataSource Ġ- Ġnormally Ġused Ġto Ġload Ġthe Ġprevious Ġpage , Ġbut Ġthis ĊĠĠĠĠ Ġ* Ġversion Ġdoes Ġnot Ġsupport Ġpaging Ġbackwards , Ġso Ġit Ġbecomes Ġan Ġinvalid ation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġload Before ( params : ĠLoad Params < String >, Ġcallback : ĠLoad Callback < String , ĠNote >) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" load Before (${ params . requested Load Size }, Ġ${ params . key }") ĊĠĠĠĠĠĠĠ Ġinvalidate () Ġ// ĠOur Ġserver - side ĠAPI Ġcannot Ġgo Ġbackwards Ġalong Ġthe Ġlist . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġnotes Ġrepository Ġneeds Ġto Ġdo Ġnon - page d Ġlist Ġtype Ġoperations Ġas Ġwell . Ġ ĠThese Ġoperations ĊĠĠĠĠ Ġ* Ġare Ġpassed Ġthrough Ġdirectly Ġto Ġthe Ġdata Ġservice . Ġ ĠHowever , Ġde letions Ġ( and Ġsaves ) Ġaffect ĊĠĠĠĠ Ġ* Ġthe Ġlist , Ġso Ġwe Ġmust Ġensure Ġthat Ġthe Ġlist Ġis Ġinvalid ated Ġwhen Ġthey Ġsucceed . Ġ ĠThis Ġcall Ġis ĊĠĠĠĠ Ġ* Ġto Ġdelete Ġan Ġitem . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdelete Item ( note Id : ĠString , Ġcallback : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Service . delete Note ( note Id ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġinvalidate () Ġ// ĠIf Ġthe Ġnote Ġwas Ġdeleted , Ġthe Ġlist Ġis Ġno Ġlonger Ġvalid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠObtain Ġa Ġsingle Ġitem Ġfrom Ġthe Ġdata Ġservice . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetItem ( note Id : ĠString , Ġcallback : Ġ( Note ?) Ġ-> ĠUnit ) Ġ= Ġdata Service . get Note ( note Id , Ġcallback ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġnotes Ġrepository Ġneeds Ġto Ġdo Ġnon - page d Ġlist Ġtype Ġoperations Ġas Ġwell . Ġ ĠThese Ġoperations ĊĠĠĠĠ Ġ* Ġare Ġpassed Ġthrough Ġdirectly Ġto Ġthe Ġdata Ġservice . Ġ ĠHowever , Ġde letions Ġ( and Ġsaves ) Ġaffect ĊĠĠĠĠ Ġ* Ġthe Ġlist , Ġso Ġwe Ġmust Ġensure Ġthat Ġthe Ġlist Ġis Ġinvalid ated Ġwhen Ġthey Ġsucceed . Ġ ĠThis Ġcall Ġis ĊĠĠĠĠ Ġ* Ġto Ġsave Ġan Ġitem . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Item ( note : ĠNote , Ġcallback : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Service . save Note ( note ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġinvalidate () Ġ// ĠIf Ġthe Ġnote Ġwas Ġsaved , Ġthe Ġlist Ġis Ġno Ġlonger Ġvalid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ