/*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2020 Damyan Ivanov.
* This file is part of MoLe.
* MoLe is free software: you can distribute it and/or modify it
* under the term of the GNU General Public License as published by
package net.ktnx.mobileledger.model;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.DiffUtil;
-
-import net.ktnx.mobileledger.App;
import net.ktnx.mobileledger.utils.Misc;
public class Currency {
- public static final DiffUtil.ItemCallback<Currency> DIFF_CALLBACK =
- new DiffUtil.ItemCallback<Currency>() {
- @Override
- public boolean areItemsTheSame(@NonNull Currency oldItem,
- @NonNull Currency newItem) {
- return oldItem.id == newItem.id;
- }
- @Override
- public boolean areContentsTheSame(@NonNull Currency oldItem,
- @NonNull Currency newItem) {
- return oldItem.name.equals(newItem.name) &&
- oldItem.position.equals(newItem.position) &&
- (oldItem.hasGap == newItem.hasGap);
- }
- };
- private int id;
+ private final int id;
private String name;
private Position position;
private boolean hasGap;
this.position = position;
this.hasGap = hasGap;
}
- public Currency(MobileLedgerProfile profile, String name, Position position, boolean hasGap) {
- SQLiteDatabase db = App.getDatabase();
- int attempts = 0;
- while (true) {
- if (++attempts > 10)
- throw new RuntimeException("Giving up getting next ID after 10 attempts");
-
- try (Cursor c = db.rawQuery("select max(rowid) from currencies", null)) {
- c.moveToNext();
- int nextId = c.getInt(0) + 1;
- db.execSQL("insert into currencies(id, name, position, has_gap) values(?, ?, ?, ?)",
- new Object[]{nextId, name, position.toString(), hasGap});
-
- this.id = nextId;
- break;
- }
+ static public boolean equal(Currency left, Currency right) {
+ if (left == null) {
+ return right == null;
}
-
- this.name = name;
- this.position = position;
- this.hasGap = hasGap;
+ else
+ return left.equals(right);
}
- public static Currency loadByName(String name) {
- MobileLedgerProfile profile = Data.profile.getValue();
- return profile.loadCurrencyByName(name);
+ static public boolean equal(Currency left, String right) {
+ right = Misc.emptyIsNull(right);
+ if (left == null) {
+ return right == null;
+ }
+ else {
+ String leftName = Misc.emptyIsNull(left.getName());
+ if (leftName == null) {
+ return right == null;
+ }
+ else
+ return leftName.equals(right);
+ }
}
public int getId() {
return id;
public void setHasGap(boolean hasGap) {
this.hasGap = hasGap;
}
- static public boolean equal(Currency left, Currency right) {
- if (left == null) {
- return right == null;
- }
- else
- return left.equals(right);
- }
- static public boolean equal(Currency left, String right) {
- right = Misc.emptyIsNull(right);
- if (left == null) {
- return right == null;
- }
- else {
- String leftName = Misc.emptyIsNull(left.getName());
- if (leftName == null) {
- return right == null;
- }
- else
- return leftName.equals(right);
- }
- }
public enum Position {
- before(-1), after(1), unknown(0), none(-2);
- private int value;
- Position(int value) {
- this.value = value;
- }
- static Position valueOf(int value) {
- switch (value) {
- case -1:
- return before;
- case +1:
- return after;
- case 0:
- return unknown;
- case -2:
- return none;
- default:
- throw new IllegalStateException(String.format("Unexpected value (%d)", value));
- }
- }
+ before, after, unknown, none
}
}