]> git.ktnx.net Git - mobile-ledger.git/commitdiff
specialized sub-classes of AccountListItem
authorDamyan Ivanov <dam+mobileledger@ktnx.net>
Fri, 26 Mar 2021 17:19:28 +0000 (19:19 +0200)
committerDamyan Ivanov <dam+mobileledger@ktnx.net>
Fri, 26 Mar 2021 17:19:28 +0000 (19:19 +0200)
app/src/main/java/net/ktnx/mobileledger/model/AccountListItem.java
app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java

index 5fd951715eeaf609cf46358f909b18c9f1a052f9..a96a9a3e2f75c4e9da6bc300e760e47879a860a9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -22,25 +22,34 @@ import androidx.annotation.NonNull;
 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;
-    }
+    private AccountListItem() {}
     @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;
+        }
+    }
+
+    public static class Header extends AccountListItem {
+        public Header() {
+        }
+    }
 }
index 59cad326f1719fa481c8a15748ff7bdd31c511a4..845242bfee305290c724d27eb2f784bfea8d4a46 100644 (file)
@@ -363,7 +363,7 @@ public class MainModel extends ViewModel {
             Logger.debug("dFilter", "waiting for synchronized block");
             Logger.debug("dFilter", String.format(Locale.US,
                     "entered synchronized block (about to examine %d accounts)", list.size()));
-            newDisplayed.add(new AccountListItem());    // header
+            newDisplayed.add(new AccountListItem.Header());    // header
 
             int count = 0;
             for (LedgerAccount a : list) {
@@ -371,7 +371,7 @@ public class MainModel extends ViewModel {
                     return;
 
                 if (a.isVisible()) {
-                    newDisplayed.add(new AccountListItem(a));
+                    newDisplayed.add(new AccountListItem.Account(a));
                     count++;
                 }
             }