package Ġcom . g no e mes . shim ori . data . database Ċ Ċ import Ġandroid . database . sqlite . SQLite Exception Ċ import Ġandroid . util . Log Ċ import Ġcom . g no e mes . shim ori . data . da os . Entity Dao Ċ import Ġcom . g no e mes . shim ori . data . da os . Entity Inser ter Ċ import Ġcom . g no e mes . shim ori . data . util . Database Transaction Runner Ċ import Ġcom . g no e mes . shim ori . model . Sh im ori Entity Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠSh im ori Entity Inser ter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtransaction Runner : ĠDatabase Transaction Runner Ċ ) Ġ: ĠEntity Inser ter Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġ< E Ġ: ĠSh im ori Entity > Ġinsert OrUpdate ( dao : ĠEntity Dao < E >, Ġentities : ĠList < E >) Ġ= ĊĠĠĠĠĠĠĠ Ġtransaction Runner Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentities . forEach Ġ{ Ġinsert OrUpdate ( dao , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġ< E Ġ: ĠSh im ori Entity > Ġinsert OrUpdate ( dao : ĠEntity Dao < E >, Ġentity : ĠE ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" INSERT ER ", Ġ" insert OrUpdate Ġ$ entity ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( entity . id Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . insert ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSQLite Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLite Exception (" Error Ġwhile Ġinserting Ġentity Ġ$ entity "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Cause ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . update ( entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSQLite Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLite Exception (" Error Ġwhile Ġupdating Ġentity : Ġ$ entity "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Cause ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }