]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/LedgerAccount.java
major rework of the async stuff, view model, pull-to-refresh account list
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / LedgerAccount.java
diff --git a/app/src/main/java/net/ktnx/mobileledger/LedgerAccount.java b/app/src/main/java/net/ktnx/mobileledger/LedgerAccount.java
new file mode 100644 (file)
index 0000000..27ab1d8
--- /dev/null
@@ -0,0 +1,113 @@
+package net.ktnx.mobileledger;
+
+import android.support.annotation.NonNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+class LedgerAccount {
+    private String name;
+    private String shortName;
+    private int level;
+    private String parentName;
+    private boolean hidden;
+    private List<LedgerAmount> amounts;
+    private boolean selected;
+    static Pattern higher_account = Pattern.compile("^[^:]+:");
+
+    LedgerAccount(String name) {
+        this.setName(name);
+        hidden = false;
+        selected = false;
+    }
+
+    public boolean isHidden() {
+        return hidden;
+    }
+
+    public void setHidden(boolean hidden) {
+        this.hidden = hidden;
+    }
+
+    LedgerAccount(String name, float amount) {
+        this.setName(name);
+        this.hidden = false;
+        this.amounts = new ArrayList<LedgerAmount>();
+        this.addAmount(amount);
+    }
+
+    public void setName(String name) {
+        this.name = name;
+        stripName();
+    }
+
+    private void stripName() {
+        level = 0;
+        shortName = name;
+        StringBuilder parentBuilder = new StringBuilder();
+        while (true) {
+            Matcher m = higher_account.matcher(shortName);
+            if (m.find()) {
+                level++;
+                parentBuilder.append(m.group(0));
+                shortName = m.replaceFirst("");
+            }
+            else break;
+        }
+        if (parentBuilder.length() > 0)
+            parentName = parentBuilder.substring(0, parentBuilder.length() - 1);
+        else parentName = null;
+    }
+
+    String getName() {
+        return name;
+    }
+
+    void addAmount(float amount, String currency) {
+        if (amounts == null ) amounts = new ArrayList<>();
+        amounts.add(new LedgerAmount(amount, currency));
+    }
+    void addAmount(float amount) {
+        this.addAmount(amount, null);
+    }
+
+    String getAmountsString() {
+        if ((amounts == null) || amounts.isEmpty()) return "";
+
+        StringBuilder builder = new StringBuilder();
+        for( LedgerAmount amount : amounts ) {
+            String amt = amount.toString();
+            if (builder.length() > 0) builder.append('\n');
+            builder.append(amt);
+        }
+
+        return builder.toString();
+    }
+
+    public int getLevel() {
+        return level;
+    }
+
+    @NonNull
+    public String getShortName() {
+        return shortName;
+    }
+
+    public String getParentName() {
+        return parentName;
+    }
+
+    public boolean isSelected() {
+        return selected;
+    }
+
+    public void setSelected(boolean selected) {
+        this.selected = selected;
+    }
+
+    public void toggleSelected() {
+        selected = !selected;
+    }
+}