From be6656e219ffc13abb8f93b41fcf95907a6ddef4 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Fri, 30 Apr 2021 23:53:38 -0700 Subject: [PATCH] Adds MonsterRepository to manage access to the RoomDB store. --- .../monstercards/MonsterCardsApplication.java | 9 +++ .../monstercards/data/MonsterRepository.java | 59 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java diff --git a/app/src/main/java/com/majinnaibu/monstercards/MonsterCardsApplication.java b/app/src/main/java/com/majinnaibu/monstercards/MonsterCardsApplication.java index af9fe7b..62d1c02 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/MonsterCardsApplication.java +++ b/app/src/main/java/com/majinnaibu/monstercards/MonsterCardsApplication.java @@ -10,6 +10,13 @@ import com.majinnaibu.monstercards.data.MonsterRepository; public class MonsterCardsApplication extends Application { + private AppDatabase m_db; + private MonsterRepository m_monsterLibraryRepository; + + public MonsterRepository getMonsterRepository() { + return m_monsterLibraryRepository; + } + public static MonsterCardsApplication getInstance(Context context) { return (MonsterCardsApplication) context.getApplicationContext(); } @@ -25,6 +32,8 @@ public class MonsterCardsApplication extends Application { super.onCreate(); // Required initialization logic here! + m_db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "monsters").build(); + m_monsterLibraryRepository = new MonsterRepository(m_db); } // Called by the system when the device configuration changes while your component is running. diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java b/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java new file mode 100644 index 0000000..83a1660 --- /dev/null +++ b/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java @@ -0,0 +1,59 @@ +package com.majinnaibu.monstercards.data; + +import androidx.annotation.NonNull; + +import com.majinnaibu.monstercards.AppDatabase; +import com.majinnaibu.monstercards.models.Monster; + +import java.util.List; +import java.util.UUID; + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Flowable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +public class MonsterRepository { + + private AppDatabase m_db; + + public MonsterRepository(@NonNull AppDatabase db) { + m_db = db; + } + + public Flowable> getMonsters() { + + return m_db.monsterDAO() + .getAll() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Flowable getMonster(UUID monsterId) { + return m_db.monsterDAO() + .loadAllByIds(new String[]{monsterId.toString()}) + .map( + monsters -> { + if (monsters.size() > 0) { + return monsters.get(0); + } else { + return null; + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Completable addMonster(Monster monster) { + Completable result = m_db.monsterDAO().insertAll(monster); + result.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); + return result; + } + + public Completable deleteMonster(Monster monster) { + Completable result = m_db.monsterDAO().delete(monster); + result.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); + return result; + } + +}