X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fdao%2FTemplateHeaderDAO.java;h=b14502c7b6e1c58a7f2495377a97c5b7eee00088;hb=75c771fe745ac8e4bb94c3830baa85144bfdd8da;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..b14502c7 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,14 @@ package net.ktnx.mobileledger.dao; +import android.os.AsyncTask; +import android.os.Handler; +import android.os.Looper; + +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 +32,118 @@ 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 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) { + AsyncTask.execute(() -> { + insertSync(item); + if (callback != null) { + new Handler(Looper.getMainLooper()).post(callback); + } + }); + } @Update - void update(TemplateHeader... items); + public abstract void updateSync(TemplateHeader... items); @Delete - void delete(TemplateHeader item); + public abstract void deleteSync(TemplateHeader item); - @Query("SELECT * FROM templates ORDER BY UPPER(name)") - LiveData> getTemplates(); + public void deleteAsync(@NonNull TemplateHeader item, @NonNull Runnable callback) { + AsyncTask.execute(() -> { + deleteSync(item); + new Handler(Looper.getMainLooper()).post(callback); + }); + } + + @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); + + 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") - LiveData getTemplateWithAccounts(Long id); + public abstract LiveData getTemplateWithAccounts(@NonNull Long id); + + @Transaction + @Query("SELECT * FROM templates WHERE id = :id") + public abstract TemplateWithAccounts getTemplateWithAccountsSync(@NonNull Long id); + + @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) { + AsyncTask.execute(() -> { + insertSync(item); + if (callback != null) { + new Handler(Looper.getMainLooper()).post(callback); + } + }); + } + public void duplicateTemplateWitAccounts(@NonNull Long id, @Nullable + AsyncResultCallback callback) { + AsyncTask.execute(() -> { + 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) + new Handler(Looper.getMainLooper()).post(() -> callback.onResult(dup)); + }); + } + }