/* Ċ Ġ* Ġ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 . engine . util . extension Ċ Ċ import Ġandroid . content . Context Ċ import Ġca . u hn . fhir . context . Fhir Context Ċ import Ġcom . google . android . fhir . Fhir Engine Ċ import Ġcom . google . android . fhir . db . Resource NotFoundException Ċ import Ġcom . google . android . fhir . search . Order Ċ import Ġcom . google . android . fhir . search . String Filter Modifier Ċ import Ġcom . google . android . fhir . search . count Ċ import Ġcom . google . android . fhir . search . search Ċ import Ġcom . google . android . fhir . sync . Resource Sync Params Ċ import Ġcom . google . android . fhir . sync . State Ċ import Ġcom . google . android . fhir . sync . Sync Job Ċ import Ġcom . google . gson . Gson Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġorg . hl 7 . fhir . r 4 . model . Imm un ization Ċ import Ġorg . hl 7 . fhir . r 4 . model . Patient Ċ import Ġorg . hl 7 . fhir . r 4 . model . Related Person Ċ import Ġorg . hl 7 . fhir . r 4 . model . Resource Ċ import Ġorg . smart register . fhir core . engine . data . domain . util . Pagination Util Ċ import Ġorg . smart register . fhir core . engine . data . remote . fhir . resource . Fhir Resource DataSource Ċ Ċ suspend Ġfun ĠF hir Engine . run One Time Sync ( ĊĠ Ġshared Sync Status : ĠMutable Shared Flow < State >, ĊĠ Ġsync Job : ĠSync Job , ĊĠ Ġresource Sync Params : ĠResource Sync Params , ĊĠ Ġfhir Resource DataSource : ĠF hir Resource DataSource Ċ ) Ġ{ ĊĊĠ Ġ// ĠTODO Ġrun Ġinitial Ġsync Ġfor Ġbinary Ġand Ġlibrary Ġresources ĊĊĠ Ġsync Job . run ( ĊĠĠĠ Ġfhir Engine Ġ= Ġthis , ĊĠĠĠ ĠdataSource Ġ= Ġfhir Resource DataSource , ĊĠĠĠ Ġresource Sync Params Ġ= Ġresource Sync Params , ĊĠĠĠ Ġsubscribe To Ġ= Ġshared Sync Status ĊĠ Ġ) Ċ } Ċ Ċ fun Ġ< T > ĠContext . load Resource Template ( id : ĠString , Ġclazz : ĠClass < T >, Ġdata : ĠMap < String , ĠString ?> ): ĠT Ġ{ ĊĠ Ġvar Ġjson Ġ= Ġassets . open ( id ). buffered Reader (). use Ġ{ Ġit . read Text () Ġ} ĊĊĠ Ġdata . entries . forEach Ġ{ Ġit . value ?. let Ġ{ Ġv Ġ-> Ġjson Ġ= Ġjson . replace ( it . key , Ġv ) Ġ} Ġ} ĊĊĠ Ġreturn Ġif Ġ( Resource :: class . java . isAssignableFrom ( clazz )) ĊĠĠĠ ĠF hir Context . for R 4 (). new Json Parser (). parse Resource ( json ) Ġas ĠT ĊĠ Ġelse ĠGson (). fromJson ( json , Ġclazz ) Ċ } Ċ Ċ suspend Ġfun ĠF hir Engine . search Active Pat ients ( ĊĠ Ġquery : ĠString , ĊĠ Ġpage Number : ĠInt , ĊĠ Ġload All : ĠBoolean Ġ= Ġfalse Ċ ) Ġ= ĊĠ Ġthis . search < Patient > Ġ{ ĊĠĠĠ Ġfilter ( Patient . ACTIVE , Ġtrue ) ĊĠĠĠ Ġif Ġ( query . isNotBlank ()) Ġ{ ĊĠĠĠĠĠ Ġfilter ( Patient . NAME ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠString Filter Modifier . CONTAIN S ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġquery . trim () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġsort ( Patient . NAME , ĠOrder . ASC ENDING ) ĊĠĠĠ Ġcount Ġ= ĊĠĠĠĠĠ Ġif Ġ( load All ) Ġthis @ search Active Pat ients . count Active Pat ients (). toInt () ĊĠĠĠĠĠ Ġelse ĠPagination Util . DEFAULT _ PAGE _ SIZE ĊĠĠĠ Ġfrom Ġ= Ġpage Number Ġ* ĠPagination Util . DEFAULT _ PAGE _ SIZE ĊĠ Ġ} Ċ Ċ suspend Ġfun ĠF hir Engine . count Active Pat ients (): ĠLong Ġ= ĊĠ Ġthis . count < Patient > Ġ{ Ġfilter ( Patient . ACTIVE , Ġtrue ) Ġ} Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠResource > ĠF hir Engine . load Resource ( resourceId : ĠString ): ĠT ? Ġ{ ĊĠ Ġreturn Ġtry Ġ{ ĊĠĠĠ Ġthis @ load Resource . load ( T :: class . java , Ġresource Id ) ĊĠ Ġ} Ġcatch Ġ( resource NotFoundException : ĠResource NotFoundException ) Ġ{ ĊĠĠĠ Ġnull ĊĠ Ġ} Ċ } Ċ Ċ suspend Ġfun ĠF hir Engine . load Related Pers ons ( patient Id : ĠString ): ĠList < Related Person >? Ġ{ ĊĠ Ġreturn Ġtry Ġ{ ĊĠĠĠ Ġthis @ load Related Pers ons . search Ġ{ ĊĠĠĠĠĠ Ġfilter ( Related Person . PAT IENT ) Ġ{ Ġvalue Ġ= Ġ" Patient /$ patient Id " Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ġcatch Ġ( resource NotFoundException : ĠResource NotFoundException ) Ġ{ ĊĠĠĠ Ġnull ĊĠ Ġ} Ċ } Ċ Ċ suspend Ġfun ĠF hir Engine . load Patient Imm un izations ( patient Id : ĠString ): ĠList < Imm un ization >? Ġ{ ĊĠ Ġreturn Ġtry Ġ{ ĊĠĠĠ Ġthis @ load Patient Imm un izations . search Ġ{ ĊĠĠĠĠĠ Ġfilter ( Imm un ization . PAT IENT ) Ġ{ Ġvalue Ġ= Ġ" Patient /$ patient Id " Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ġcatch Ġ( resource NotFoundException : ĠResource NotFoundException ) Ġ{ ĊĠĠĠ Ġnull ĊĠ Ġ} Ċ } Ċ