/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠOn a ĠSystems , ĠInc Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . smart register . fhir core . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġca . u hn . fhir . rest . param . Param Prefix Enum Ċ import Ġcom . google . android . fhir . Fhir Engine Ċ import Ġcom . google . android . fhir . search . Order Ċ import Ġcom . google . android . fhir . search . search Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . hl 7 . fhir . r 4 . model . Patient Ċ import Ġorg . smart register . fhir core . data . Sample Pat ients Ċ import Ġorg . smart register . fhir core . domain . Pagination Ċ import Ġorg . smart register . fhir core . util . Utils Ċ Ċ private Ġconst Ġval ĠOB SERV ATIONS _ JSON _ FILENAME Ġ= Ġ" sample _ observations _ bundle . json " Ċ Ċ /** Ċ Ġ* ĠThe ĠViewModel Ġhelper Ġclass Ġfor ĠPatient Item RecyclerView Adapter , Ġthat Ġis Ġresponsible Ġfor Ġpre paring Ċ Ġ* Ġdata Ġfor ĠUI . Ċ Ġ*/ Ċ class ĠPatient List ViewModel ( application : ĠApplication , Ġprivate Ġval Ġfhir Engine : ĠF hir Engine ) Ġ: ĊĠ ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠ Ġ// ĠMake Ġsample ĠF hir ĠPat ients Ġand ĠOb servations Ġavailable , Ġin Ġcase Ġneeded Ġfor Ġdemo . ĊĠ Ġprivate Ġval Ġjson String Ob servations Ġ= Ġget Asset File AsString ( OB SERV ATIONS _ JSON _ FILENAME ) ĊĊĠ Ġprivate Ġval Ġsample Pat ients Ġ= ĠSample Pat ients () ĊĊĠ Ġprivate Ġval Ġobservations Ġ= Ġsample Pat ients . get Observation Items ( json String Ob servations ) ĊĠ Ġprivate Ġval Ġlive Ob servations : ĠMutable LiveData < List < Observation Item >> Ġ= ĊĠĠĠ ĠMutable LiveData ( observations ) ĊĊĠ Ġval Ġlive Se ar ched Pag inated Pat ients : ĠMutable LiveData < Pair < List < Patient Item >, ĠPagination >> Ġby Ġlazy Ġ{ ĊĠĠĠ ĠMutable LiveData < Pair < List < Patient Item >, ĠPagination >>() ĊĠ Ġ} ĊĊĠ Ġfun Ġget Ob servations (): ĠLive Data < List < Observation Item >> Ġ{ ĊĠĠĠ Ġreturn Ġlive Ob servations ĊĠ Ġ} ĊĊĠ Ġval Ġlive Search Patient : ĠMutable LiveData < Patient Item > Ġby Ġlazy Ġ{ ĠMutable LiveData < Patient Item >() Ġ} ĊĊĠ Ġfun Ġsearch Results ( query : ĠString ? Ġ= Ġnull , Ġpage : ĠInt Ġ= Ġ 0 , ĠpageSize : ĠInt Ġ= Ġ 1 0 ) Ġ{ ĊĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠ Ġval Ġsearch Results : ĠList < Patient > Ġ= ĊĠĠĠĠĠĠĠ Ġfhir Engine . search Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠUtils . add Base Patient Filter ( this ) ĊĊĠĠĠĠĠĠĠĠĠ Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query ?. isNotBlank () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter ( Patient . FAMILY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= ĠParam Prefix Enum . EQUAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġquery . trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġsort ( Patient . G IV EN , ĠOrder . ASC ENDING ) ĊĠĠĠĠĠĠĠĠĠ Ġcount Ġ= ĠpageSize ĊĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= Ġ( page Ġ* ĠpageSize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġlive Se ar ched Pag inated Pat ients . value Ġ= ĊĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠ Ġsample Pat ients . get Patient Items ( search Results ), ĊĠĠĠĠĠĠĠĠĠ ĠPagination ( total Items Ġ= Ġcount ( query ), ĠpageSize Ġ= ĠpageSize , ĠcurrentPage Ġ= Ġpage ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠReturns Ġnumber Ġof Ġrecords Ġin Ġdatabase Ġ*/ ĊĠ Ġ// ĠTODO ĠThis Ġis Ġa Ġwast ef ul Ġquery Ġthat Ġwill Ġbe Ġreplaced Ġby Ġimplementation Ġof ĊĠ Ġ// Ġhttps :// github . com / google / android - fhir / issues / 4 5 8 ĊĠ Ġ// Ġhttps :// github . com / opens rp / fhir core / issues / 1 0 7 ĊĠ Ġprivate Ġsuspend Ġfun Ġcount ( query : ĠString ? Ġ= Ġnull ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġsearch Results : ĠList < Patient > Ġ= ĊĠĠĠĠĠ Ġfhir Engine . search Ġ{ ĊĠĠĠĠĠĠĠ ĠUtils . add Base Patient Filter ( this ) ĊĊĠĠĠĠĠĠĠ Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( query ?. isNotBlank () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter ( Patient . FAMILY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ= ĠParam Prefix Enum . EQUAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġquery . trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsort ( Patient . G IV EN , ĠOrder . ASC ENDING ) ĊĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 1 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġfrom Ġ= Ġ 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsearch Results . size ĊĠ Ġ} ĊĊĠ Ġfun Ġget Patient Item ( id : ĠString ) Ġ{ ĊĠĠĠ Ġvar Ġpatient Items : ĠList < Patient Item >? Ġ= Ġnull ĊĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠ Ġval Ġpatient Ġ= Ġfhir Engine . load ( Patient :: class . java , Ġid ) ĊĠĠĠĠĠ Ġpatient Items Ġ= Ġsample Pat ients . get Patient Items ( listOf ( patient )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlive Search Patient . value Ġ= Ġpatient Items ?. get ( 0 ) ĊĠ Ġ} ĊĊĠ Ġfun Ġsync Upload () Ġ{ ĊĠĠĠ ĠviewModel Scope . launch Ġ{ Ġfhir Engine . sync Upload () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Asset File AsString ( filename : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġthis . getApplication < Application >() ĊĠĠĠĠĠ Ġ. application Context ĊĠĠĠĠĠ Ġ. assets ĊĠĠĠĠĠ Ġ. open ( filename ) ĊĠĠĠĠĠ Ġ. buffered Reader () ĊĠĠĠĠĠ Ġ. use Ġ{ Ġit . read Text () Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠThe ĠPatient 's Ġdetails Ġfor Ġdisplay Ġpurposes . Ġ*/ ĊĠ Ġdata Ġclass ĠPatient Item ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġgender : ĠString , ĊĠĠĠ Ġval Ġdo b : ĠString , ĊĠĠĠ Ġval Ġhtml : ĠString , ĊĠĠĠ Ġval Ġphone : ĠString , ĊĠĠĠ Ġval Ġlogical Id : ĠString ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġname ĊĠ Ġ} ĊĊĠ Ġ/** ĠThe ĠOb servation 's Ġdetails Ġfor Ġdisplay Ġpurposes . Ġ*/ ĊĠ Ġdata Ġclass ĠOb servation Item ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġcode : ĠString , ĊĠĠĠ Ġval Ġeffective : ĠString , ĊĠĠĠ Ġval Ġvalue : ĠString ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġcode ĊĠ Ġ} Ċ } Ċ Ċ class ĠPatient List ViewModel Factory ( ĊĠ Ġprivate Ġval Ġapplication : ĠApplication , ĊĠ Ġprivate Ġval Ġfhir Engine : ĠF hir Engine Ċ ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Patient List ViewModel :: class . java )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠPatient List ViewModel ( application , Ġfhir Engine ) Ġas ĠT ĊĠĠĠ Ġ} ĊĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown ĠViewModel Ġclass ") ĊĠ Ġ} Ċ } Ċ