/*
- * Copyright © 2021 Damyan Ivanov.
+ * Copyright © 2024 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 {
+public abstract class AccountListItem {
private AccountListItem() {}
+ public abstract boolean sameContent(AccountListItem other);
@NonNull
public Type getType() {
if (this instanceof Account)
else
throw new RuntimeException("Unsupported sub-class " + this);
}
- @NotNull
- public LedgerAccount getAccount() {
- if (this instanceof Account)
- return ((Account) this).account;
-
- throw new IllegalStateException(String.format("Item type is not Account, but %s", this));
+ public boolean isAccount() {
+ return this instanceof Account;
+ }
+ public Account toAccount() {
+ assert isAccount();
+ return ((Account) this);
+ }
+ public boolean isHeader() {
+ return this instanceof Header;
+ }
+ public Header toHeader() {
+ assert isHeader();
+ return ((Header) this);
}
public enum Type {ACCOUNT, HEADER}
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());
+ }
+ @NotNull
+ public LedgerAccount getAccount() {
+ return account;
+ }
+ public boolean allAmountsAreZero() {
+ return account.allAmountsAreZero();
+ }
}
public static class Header extends AccountListItem {
- public Header() {
+ 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;
}
}
}