X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fdao%2FTemplateHeaderDAO.java;h=ed2473b2ec65ac01af50ade9af357d7bb420d551;hb=860e0419d619210bb59bcae1b64d8c5db90eef70;hp=faef98fb95f65655be51eba04c1b5e2b0f68dcba;hpb=3ab99e1679326277d6ba7f8ce28f17a96dfa07aa;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/dao/TemplateHeaderDAO.java b/app/src/main/java/net/ktnx/mobileledger/dao/TemplateHeaderDAO.java index faef98fb..ed2473b2 100644 --- a/app/src/main/java/net/ktnx/mobileledger/dao/TemplateHeaderDAO.java +++ b/app/src/main/java/net/ktnx/mobileledger/dao/TemplateHeaderDAO.java @@ -17,7 +17,10 @@ package net.ktnx.mobileledger.dao; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; @@ -25,29 +28,128 @@ import androidx.room.Query; import androidx.room.Transaction; import androidx.room.Update; +import net.ktnx.mobileledger.db.DB; +import net.ktnx.mobileledger.db.TemplateAccount; import net.ktnx.mobileledger.db.TemplateHeader; import net.ktnx.mobileledger.db.TemplateWithAccounts; +import net.ktnx.mobileledger.utils.Misc; import java.util.List; @Dao -public interface TemplateHeaderDAO { +public abstract class TemplateHeaderDAO { @Insert() - long insert(TemplateHeader item); + public abstract long insertSync(TemplateHeader item); + + public void insertAsync(@NonNull TemplateHeader item, @Nullable Runnable callback) { + BaseDAO.runAsync(() -> { + insertSync(item); + if (callback != null) + Misc.onMainThread(callback); + }); + } @Update - void update(TemplateHeader... items); + public abstract void updateSync(TemplateHeader... items); @Delete - void delete(TemplateHeader item); + public abstract void deleteSync(TemplateHeader item); + + public void deleteAsync(@NonNull TemplateHeader item, @NonNull Runnable callback) { + BaseDAO.runAsync(() -> { + deleteSync(item); + Misc.onMainThread(callback); + }); + } - @Query("SELECT * FROM templates ORDER BY UPPER(name)") - LiveData> getTemplates(); + @Query("SELECT * FROM templates ORDER BY is_fallback, UPPER(name)") + public abstract LiveData> getTemplates(); @Query("SELECT * FROM templates WHERE id = :id") - LiveData getTemplate(Long id); + public abstract LiveData getTemplate(Long id); + + @Query("SELECT * FROM templates WHERE id = :id") + public abstract TemplateHeader getTemplateSync(Long id); + + public void getTemplateAsync(@NonNull Long id, + @NonNull AsyncResultCallback callback) { + LiveData resultReceiver = getTemplate(id); + resultReceiver.observeForever(new Observer() { + @Override + public void onChanged(TemplateHeader h) { + if (h == null) + return; + + resultReceiver.removeObserver(this); + callback.onResult(h); + } + }); + } + + @Transaction + @Query("SELECT * FROM templates WHERE id = :id") + public abstract LiveData getTemplateWithAccounts(@NonNull Long id); @Transaction @Query("SELECT * FROM templates WHERE id = :id") - LiveData getTemplateWithAccounts(Long id); + public abstract TemplateWithAccounts getTemplateWithAccountsSync(@NonNull Long id); + + @Transaction + @Query("SELECT * FROM templates WHERE uuid = :uuid") + public abstract TemplateWithAccounts getTemplateWithAccountsByUuidSync(String uuid); + + @Transaction + @Query("SELECT * FROM templates") + public abstract List getAllTemplatesWithAccountsSync(); + + @Transaction + public void insertSync(TemplateWithAccounts templateWithAccounts) { + long template_id = insertSync(templateWithAccounts.header); + for (TemplateAccount acc : templateWithAccounts.accounts) { + acc.setTemplateId(template_id); + DB.get() + .getTemplateAccountDAO() + .insertSync(acc); + } + } + + public void getTemplateWithAccountsAsync(@NonNull Long id, @NonNull + AsyncResultCallback callback) { + LiveData resultReceiver = getTemplateWithAccounts(id); + resultReceiver.observeForever(new Observer() { + @Override + public void onChanged(TemplateWithAccounts result) { + if (result == null) + return; + + resultReceiver.removeObserver(this); + callback.onResult(result); + } + }); + } + public void insertAsync(@NonNull TemplateWithAccounts item, @Nullable Runnable callback) { + BaseDAO.runAsync(() -> { + insertSync(item); + if (callback != null) + Misc.onMainThread(callback); + }); + } + public void duplicateTemplateWitAccounts(@NonNull Long id, @Nullable + AsyncResultCallback callback) { + BaseDAO.runAsync(() -> { + TemplateWithAccounts src = getTemplateWithAccountsSync(id); + TemplateWithAccounts dup = src.createDuplicate(); + dup.header.setName(dup.header.getName()); + dup.header.setId(insertSync(dup.header)); + TemplateAccountDAO accDao = DB.get() + .getTemplateAccountDAO(); + for (TemplateAccount dupAcc : dup.accounts) { + dupAcc.setTemplateId(dup.header.getId()); + dupAcc.setId(accDao.insertSync(dupAcc)); + } + if (callback != null) + Misc.onMainThread(() -> callback.onResult(dup)); + }); + } + }