/*
- * Copyright © 2020 Damyan Ivanov.
+ * Copyright © 2021 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 androidx.annotation.NonNull;
+import androidx.lifecycle.LiveData;
import org.jetbrains.annotations.NotNull;
-public class AccountListItem {
- private final Type type;
- private LedgerAccount account;
- public AccountListItem(@NotNull LedgerAccount account) {
- this.type = Type.ACCOUNT;
- this.account = account;
- }
- public AccountListItem() {
- this.type = Type.HEADER;
- }
+public abstract class AccountListItem {
+ private AccountListItem() {}
+ public abstract boolean sameContent(AccountListItem other);
@NonNull
public Type getType() {
- return type;
+ if (this instanceof Account)
+ return Type.ACCOUNT;
+ else if (this instanceof Header)
+ return Type.HEADER;
+ else
+ throw new RuntimeException("Unsupported sub-class " + this);
}
@NotNull
public LedgerAccount getAccount() {
- if (type != Type.ACCOUNT)
- throw new IllegalStateException(
- String.format("Item type is not %s, but %s", Type.ACCOUNT, type));
- return account;
+ if (this instanceof Account)
+ return ((Account) this).account;
+
+ throw new IllegalStateException(String.format("Item type is not Account, but %s", this));
}
public enum Type {ACCOUNT, HEADER}
+
+ public static class Account extends AccountListItem {
+ private final LedgerAccount account;
+ public Account(@NotNull LedgerAccount account) {
+ this.account = account;
+ }
+ @Override
+ public boolean sameContent(AccountListItem other) {
+ if (!(other instanceof Account))
+ return false;
+ return ((Account) other).account.hasSubAccounts() == account.hasSubAccounts() &&
+ ((Account) other).account.amountsExpanded() == account.amountsExpanded() &&
+ ((Account) other).account.isExpanded() == account.isExpanded() &&
+ ((Account) other).account.getLevel() == account.getLevel() &&
+ ((Account) other).account.getAmountsString()
+ .equals(account.getAmountsString());
+ }
+ }
+
+ public static class Header extends AccountListItem {
+ private final LiveData<String> text;
+ public Header(@NonNull LiveData<String> text) {
+ this.text = text;
+ }
+ public LiveData<String> getText() {
+ return text;
+ }
+ @Override
+ public boolean sameContent(AccountListItem other) {
+ return true;
+ }
+ }
}