/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠAl te h ĠUnion Ġ( al te h . union @ gmail . com ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT ĠLicense Ġ( see Ġthe Ġroot ĠLICENSE Ġfile Ġfor Ġdetails ) Ċ Ġ*/ Ċ Ċ package Ġorg . al te h . org helper . dao Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . room .* Ċ import Ġorg . al te h . org helper . data . database . Argument Ċ import Ġorg . al te h . org helper . data . Argument Of Module Ċ Ċ /** Ċ Ġ* ĠA ĠData ĠAccess ĠObject Ġfor Ġworking Ġwith Ġthe Ġ[ Argument ] Ġdata Ġclass . Ċ Ġ*/ Ċ @ Dao Ċ interface ĠArgument Dao Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInser ts Ġa Ġnew Ġinstance Ġto Ġthe ĠDB . ĠDeletes Ġthe Ġprevious Ġinstance Ġfirst ly Ġif Ġit Ġconflicts Ġwith Ġthe Ġnew Ġone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Insert ( on Conflict Ġ= ĠOn Conflict Strategy . REPLACE ) ĊĠĠĠ Ġsuspend Ġfun Ġinsert ( argument Ġ: ĠArgument ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġan Ġexisting Ġinstance Ġwith Ġthe Ġnew Ġvalues . ĠThe Ġcaller Ġneeds Ġto Ġmake Ġsure Ġthat Ġthe Ġprevious Ġinstance ĊĠĠĠĠ Ġ* Ġalready Ġexists Ġin Ġthe Ġtable . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Update ĊĠĠĠ Ġsuspend Ġfun Ġupdate ( argument : ĠArgument ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġan Ġinstance Ġby Ġits Ġprimary Ġkey Ġ( cons isting Ġof Ġ[ source Key ], Ġ[ account Key ], Ġ[ org Key ], Ġ[ module Key ], ĊĠĠĠĠ Ġ* Ġ[ command Key ] Ġand Ġ[ id Key ]) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (" SELECT Ġ* ĠFROM ĠArgument ĠWHERE Ġsource Ġ= Ġ: source Key ĠAND ĠaccountId Ġ= Ġ: account Key ĠAND Ġorg Id Ġ= Ġ: org Key ĠAND Ġmodule Id Ġ= Ġ: module Key ĠAND Ġcommand Id Ġ= Ġ: command Key ĠAND Ġid Ġ= Ġ: id Key ") ĊĠĠĠ Ġfun Ġget ( source Key : ĠString , Ġaccount Key : ĠString , Ġorg Key : ĠString , Ġmodule Key : ĠString , Ġcommand Key : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Key : ĠString ): ĠArgument ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġall Ġinstances Ġrelated Ġto Ġspecific Ġaccount Ġ([ account Key ]) Ġin Ġthe Ġspecific Ġsource ĊĠĠĠĠ Ġ* Ġplatform Ġ([ source Key ]), Ġthe Ġspecific Ġorg Ġ([ org Key ]) Ġthe Ġspecific Ġmodule Ġ([ module Key ]) ĊĠĠĠĠ Ġ* Ġand Ġthe Ġspecific Ġcommand Ġ([ command Key ]). ĊĠĠĠĠ Ġ* ĠMost ly Ġneeded Ġto Ġunderstand Ġwhat Ġinstances Ġare Ġunused Ġand Ġshould Ġbe Ġdeleted Ġduring Ġthe Ġbulk Ġupdate ĊĠĠĠĠ Ġ* Ġoperation Ġafter Ġfetching Ġthe Ġlatest Ġvalues Ġfrom Ġthe Ġserver . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (" SELECT Ġ* ĠFROM ĠArgument ĠWHERE Ġsource Ġ= Ġ: source Key ĠAND ĠaccountId Ġ= Ġ: account Key ĠAND Ġorg Id Ġ= Ġ: org Key ĠAND Ġmodule Id Ġ= Ġ: module Key ĠAND Ġcommand Id Ġ= Ġ: command Key ") ĊĠĠĠ Ġfun ĠgetBy Command ( source Key : ĠString , Ġaccount Key : ĠString , Ġorg Key : ĠString , Ġmodule Key : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Key : ĠString ): ĠList < Argument > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġall Ġinstances Ġof Ġthe Ġclass Ġin Ġthe ĠDB Ġas Ġa Ġ[ LiveData ]. ĊĠĠĠĠ Ġ* ĠThe Ġapplication Ġthen Ġshould Ġapply Ġfilters Ġto Ġthis Ġdata Ġto Ġpresent Ġit Ġto Ġthe Ġuser ĊĠĠĠĠ Ġ* Ġ( e . g . Ġshow Ġarguments Ġrelevant Ġto Ġa Ġspecific Ġcommand Ġonly ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (" SELECT Ġ* ĠFROM ĠArgument ") ĊĠĠĠ Ġfun ĠgetAll Arguments (): ĠLive Data < List < Argument >> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġ[ LiveData ] Ġof Ġall Ġarguments Ġalong Ġtheir Ġcommands , Ġgrouped Ġby Ġmodule Ġ( see Ġ[ Argument Of Module ]). ĊĠĠĠĠ Ġ* ĠThis Ġis Ġneeded Ġto Ġget Ġthe Ġfull Ġview Ġof Ġthe Ġmodule Ġin Ġone Ġjoined Ġquery , Ġso Ġthe Ġuser ĊĠĠĠĠ Ġ* Ġcan Ġwork Ġwith Ġall Ġcommands Ġof Ġthe Ġmodule Ġal together . ĊĠĠĠĠ Ġ* ĠThe Ġreceiver Ġis Ġexpected Ġto Ġmake Ġa Ġlist Ġof Ġ[ org . al te h . org helper . data . database . Command ] Ġbased ĊĠĠĠĠ Ġ* Ġout Ġof Ġthis Ġand Ġattach Ġthe Ġlist Ġof Ġ[ Argument ] Ġto Ġeach Ġcorresponding Ġcommand Ġto Ġget ĊĠĠĠĠ Ġ* Ġthe Ġproper Ġhierarchy Ġof Ġobjects . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (" SELECT Ġcom .*, Ġarg . id ĠAS Ġarg Id , Ġarg . name ĠAS Ġarg Name , Ġarg . scanner Type ĠAS Ġscanner Type , Ġarg . help ĠAS Ġarg Help ĠFROM ĠCommand Ġcom ĠLEFT ĠOUT ER ĠJOIN ĠArgument Ġarg ĠON Ġ( com . source Ġ= Ġarg . source ĠAND Ġcom . accountId Ġ= Ġarg . accountId ĠAND Ġcom . org Id Ġ= Ġarg . org Id ĠAND Ġcom . module Id Ġ= Ġarg . module Id ĠAND Ġcom . id Ġ= Ġarg . command Id )") ĊĠĠĠ Ġfun Ġget Arguments By Module (): ĠLive Data < List < Argument Of Module >> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDeletes Ġall Ġinstances Ġfrom Ġthe ĠDB . ĠNorm ally Ġnot Ġneeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (" DELETE ĠFROM ĠArgument ") ĊĠĠĠ Ġsuspend Ġfun Ġclear () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInser ts Ġot Ġupdates Ġthe Ġlist Ġof Ġ[ arguments ] Ġfor Ġthe Ġgiven Ġ[ source ], Ġ[ accountId ], Ġ[ org Id ], Ġ[ module Id ] ĊĠĠĠĠ Ġ* Ġand Ġ[ command Id ]. ĠAlso Ġchecks Ġif Ġsome Ġexisting Ġarguments Ġbecame Ġunused Ġdue Ġto Ġthis Ġbulk Ġupdate , Ġand Ġdeletes Ġthem . ĊĠĠĠĠ Ġ* ĠWe Ġcannot Ġjust Ġuse Ġthe Ġ[ insert ] Ġwith Ġ[ On Conflict Strategy . REPLACE ], Ġbecause ĠSQLite Ġwill ĊĠĠĠĠ Ġ* Ġdelete Ġthe Ġprevious Ġinstances Ġduring Ġthe Ġprocess Ġand Ġthat Ġwill Ġtrigger Ġa Ġcascade Ġdeletion ĊĠĠĠĠ Ġ* Ġon Ġall Ġchild Ġentities Ġ( down Ġto Ġthe Ġpreviously Ġentered Ġvalues Ġfor Ġthe Ġarguments ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġsuspend Ġfun Ġreload For Command ( source : ĠString , ĠaccountId : ĠString , Ġorg Id : ĠString , Ġmodule Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Id : ĠString , Ġarguments : ĠList < Argument >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Args Ġ= ĠgetBy Command ( source , ĠaccountId , Ġorg Id , Ġmodule Id , Ġcommand Id ) ĊĠĠĠĠĠĠĠ Ġval Ġunused Args Ġ= Ġcurrent Args . filter Ġ{ Ġcur Arg Ġ-> Ġarguments . find Ġ{ Ġnew Arg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArgument . are Items The Same ( cur Arg , Ġnew Arg ) Ġ} Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġused Args Ġ= Ġcurrent Args . filter Ġ{ Ġcur Arg Ġ-> Ġ! unused Args . contains ( cur Arg ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġunused Args . forEach Ġ{ Ġargument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ( argument ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġarguments . forEach Ġ{ Ġargument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( used Args . find Ġ{ Ġused Arg Ġ-> ĠArgument . are Items The Same ( used Arg , Ġargument ) Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( argument ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert ( argument ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDeletes Ġan Ġinstance Ġfrom Ġthe ĠDB . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Delete ĊĠĠĠ Ġsuspend Ġfun Ġdelete ( argument : ĠArgument ) Ċ }