- public void loadItems(long patternId) {
- DB db = App.getRoomDB();
- LiveData<PatternHeader> ph = db.getPatternDAO()
- .getPattern(patternId);
- ArrayList<PatternDetailsItem> list = new ArrayList<>();
-
- MLDB.queryInBackground(
- "SELECT name, regular_expression, transaction_description, transaction_comment, " +
- "date_year_match_group, date_month_match_group, date_day_match_group FROM " +
- "patterns WHERE id=?", new String[]{String.valueOf(patternId)},
- new MLDB.CallbackHelper() {
- @Override
- public void onDone() {
- super.onDone();
-
- MLDB.queryInBackground(
- "SELECT id, position, acc, acc_match_group, currency, " +
- "currency_match_group, amount, amount_match_group," +
- " comment, comment_match_group FROM " +
- "pattern_accounts WHERE pattern_id=? ORDER BY " + "position ASC",
- new String[]{String.valueOf(patternId)}, new MLDB.CallbackHelper() {
- @Override
- public void onDone() {
- super.onDone();
- items.postValue(list);
- }
- @Override
- public boolean onRow(@NonNull Cursor cursor) {
- PatternDetailsItem.AccountRow item =
- PatternDetailsItem.createAccountRow(
- cursor.getInt(1));
- list.add(item);
-
- item.setId(cursor.getInt(0));
-
- if (cursor.isNull(3)) {
- item.setAccountName(cursor.getString(2));
- }
- else {
- item.setAccountNameMatchGroup(cursor.getShort(3));
- }
-
- if (cursor.isNull(5)) {
- final int currId = cursor.getInt(4);
- if (currId > 0)
- item.setCurrency(Currency.loadById(currId));
- }
- else {
- item.setCurrencyMatchGroup(cursor.getShort(5));
- }
-
- if (cursor.isNull(7)) {
- item.setAmount(cursor.getFloat(6));
- }
- else {
- item.setAmountMatchGroup(cursor.getShort(7));
- }
-
- if (cursor.isNull(9)) {
- item.setAccountComment(cursor.getString(8));
- }
- else {
- item.setAccountCommentMatchGroup(cursor.getShort(9));
- }
-
- return true;
- }
- });
- }
- @Override
- public boolean onRow(@NonNull Cursor cursor) {
- PatternDetailsItem.Header header = PatternDetailsItem.createHeader();
- header.setName(cursor.getString(0));
- header.setPattern(cursor.getString(1));
- header.setTransactionDescription(cursor.getString(2));
- header.setTransactionComment(cursor.getString(3));
- header.setDateYearMatchGroup(cursor.getShort(4));
- header.setDateMonthMatchGroup(cursor.getShort(5));
- header.setDateDayMatchGroup(cursor.getShort(6));
-
- list.add(header);
-
- return false;
- }
- });
+ public LiveData<List<PatternDetailsItem>> getItems(Long patternId) {
+ if (patternId != null && patternId <= 0)
+ throw new IllegalArgumentException("Pattern ID " + patternId + " is invalid");
+
+ mPatternId = patternId;
+
+ if (mPatternId == null) {
+ resetItems();
+ return items;
+ }
+
+ DB db = DB.get();
+ LiveData<PatternWithAccounts> dbList = db.getPatternDAO()
+ .getPatternWithAccounts(mPatternId);
+ Observer<PatternWithAccounts> observer = new Observer<PatternWithAccounts>() {
+ @Override
+ public void onChanged(PatternWithAccounts src) {
+ ArrayList<PatternDetailsItem> l = new ArrayList<>();
+
+ PatternDetailsItem header = PatternDetailsItem.fromRoomObject(src.header);
+ l.add(header);
+ for (PatternAccount acc : src.accounts) {
+ l.add(PatternDetailsItem.fromRoomObject(acc));
+ }
+
+ for (PatternDetailsItem i : l) {
+ Logger.debug("patterns-db", "Loaded pattern item " + i);
+ }
+ items.postValue(l);
+
+ dbList.removeObserver(this);
+ }
+ };
+ dbList.observeForever(observer);
+
+ return items;