/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 ĠAll an ĠY osh io ĠH ase g awa Ċ Ġ* Ċ Ġ* Ġ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 . h ase g awa . di app . db . repositories . content provider Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . net . Uri Ċ import Ġcom . h ase g awa . di app . db . repositories . content provider . Di Contract . Links Contract Ċ import Ġcom . h ase g awa . di app . db . repositories . content provider . Di Contract . Steps Contract Ċ import Ġcom . h ase g awa . di app . db . repositories . content provider . mappings . Step Entity Mapping Ċ import Ġcom . h ase g awa . di app . db . repositories . content provider . mappings . Step Link Entity Mapping Ċ import Ġcom . h ase g awa . di app . db . repositories . copy With Id Ċ import Ġcom . h ase g awa . di app . domain . entities . Step Entity Ċ import Ġcom . h ase g awa . di app . domain . entities . Step Link Entity Ċ import Ġcom . h ase g awa . di app . domain . repositories . Steps Repository Ċ import Ġcom . pus ht o refresh . stor io . content resolver . St or IO Content Resolver Ċ import Ġcom . pus ht o refresh . stor io . content resolver . impl . Default St or IO Content Resolver Ċ import Ġcom . pus ht o refresh . stor io . content resolver . operations . put . Put Results Ċ import Ġcom . pus ht o refresh . stor io . content resolver . queries . Delete Query Ċ import Ġcom . pus ht o refresh . stor io . content resolver . queries . Query Ċ import Ġrx . Observable Ċ Ċ class ĠContent Provider Steps Repository ( resolver : ĠContent Resolver ) Ġ: ĠSteps Repository Ġ{ ĊĠĠĠ Ġprivate Ġval Ġprovider : ĠSt or IO Content Resolver ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . provider Ġ= ĠDefault St or IO Content Resolver . builder (). content Resolver ( resolver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type Mapping ( Step Entity :: class . java , ĠStep Entity Mapping . type Mapping ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type Mapping ( Step Link Entity :: class . java , ĠStep Link Entity Mapping . type Mapping ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Step Links ( links : ĠList < Step Link Entity >): ĠObservable < List < Step Link Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . put () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. objects ( links . map Ġ{ Ġit . copy With Id () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġr : ĠPut Results < Step Link Entity > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . results (). keys . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . results ()[ it ] !!. was Inserted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Step ( step : ĠStep Entity ): ĠObservable < Step Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( step . id Ġ== Ġnull ) Ġreturn Ġadd Step ( step . copy With Id ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . put () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` object `( step ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġstep Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Steps ( steps : ĠList < Step Entity >): ĠObservable < List < Step Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . put () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. objects ( steps . map Ġ{ Ġit . copy With Id () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġr : ĠPut Results < Step Entity > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . results (). keys . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . results ()[ it ] !!. was Inserted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Step Links (): ĠObservable < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. by Query ( Delete Query . builder (). uri ( Links Contract . URI ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . numberOf Rows Deleted () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Steps (): ĠObservable < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. by Query ( Delete Query . builder (). uri ( Steps Contract . URI ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . numberOf Rows Deleted () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget NumberOf Completed Steps (): ĠObservable < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. numberOf Results () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Query ( Query . builder (). uri ( Steps Contract . URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ("${ Steps Contract . COL _ COMPLETED } =? "). where Args ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget NumberOf Steps (): ĠObservable < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. numberOf Results () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Query ( Query . builder (). uri ( Steps Contract . URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Step ById ( id : ĠString ): ĠObservable < Step Entity ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` object `( Step Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Query ( Query . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ( Steps Contract . URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ("${ Steps Contract . COL _ ID } =? ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Args ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Step By Position ( position : ĠInt ): ĠObservable < Step Entity ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` object `( Step Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Query ( Query . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ( Steps Contract . URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ("${ Steps Contract . COL _ POSITION } =? ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Args ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Step Links (): ĠObservable < List < Step Link Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listOf Objects ( Step Link Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Query ( Query . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ( Links Contract . URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Step Links By Step Position ( position : ĠInt ): ĠObservable < List < Step Link Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` object `( Step Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Query ( Query . builder (). uri ( Steps Contract . URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ("${ Steps Contract . COL _ POSITION } =? ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Args ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listOf Objects ( Step Link Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Query ( Query . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ( Links Contract . URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ("${ Links Contract . COL _ STEPS _ ID } =? ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Args ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( emptyList < Step Link Entity >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Steps (): ĠObservable < List < Step Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listOf Objects ( Step Entity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Query ( Query . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ( Steps Contract . URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort Order ("${ Steps Contract . COL _ POSITION }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Rx Observable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnotify Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġprovider . internal (). content Resolver (). notify Change ( Uri . parse ( Steps Contract . URI ), Ġnull ) ĊĠĠĠĠĠĠĠ Ġprovider . internal (). content Resolver (). notify Change ( Uri . parse ( Links Contract . URI ), Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ