]> git.ktnx.net Git - mobile-ledger.git/blob - app/src/main/java/net/ktnx/mobileledger/LedgerAccount.java
better account starr-ing control
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / LedgerAccount.java
1 package net.ktnx.mobileledger;
2
3 import android.support.annotation.NonNull;
4
5 import java.util.ArrayList;
6 import java.util.List;
7 import java.util.regex.Matcher;
8 import java.util.regex.Pattern;
9
10 class LedgerAccount {
11     private String name;
12     private String shortName;
13     private int level;
14     private String parentName;
15     private boolean hidden;
16     private boolean hiddenToBe;
17     private List<LedgerAmount> amounts;
18     static Pattern higher_account = Pattern.compile("^[^:]+:");
19
20     LedgerAccount(String name) {
21         this.setName(name);
22         hidden = false;
23     }
24
25     public boolean isHidden() {
26         return hidden;
27     }
28
29     public void setHidden(boolean hidden) {
30         this.hidden = hidden;
31     }
32
33     LedgerAccount(String name, float amount) {
34         this.setName(name);
35         this.hidden = false;
36         this.amounts = new ArrayList<LedgerAmount>();
37         this.addAmount(amount);
38     }
39
40     public void setName(String name) {
41         this.name = name;
42         stripName();
43     }
44
45     private void stripName() {
46         level = 0;
47         shortName = name;
48         StringBuilder parentBuilder = new StringBuilder();
49         while (true) {
50             Matcher m = higher_account.matcher(shortName);
51             if (m.find()) {
52                 level++;
53                 parentBuilder.append(m.group(0));
54                 shortName = m.replaceFirst("");
55             }
56             else break;
57         }
58         if (parentBuilder.length() > 0)
59             parentName = parentBuilder.substring(0, parentBuilder.length() - 1);
60         else parentName = null;
61     }
62
63     String getName() {
64         return name;
65     }
66
67     void addAmount(float amount, String currency) {
68         if (amounts == null ) amounts = new ArrayList<>();
69         amounts.add(new LedgerAmount(amount, currency));
70     }
71     void addAmount(float amount) {
72         this.addAmount(amount, null);
73     }
74
75     String getAmountsString() {
76         if ((amounts == null) || amounts.isEmpty()) return "";
77
78         StringBuilder builder = new StringBuilder();
79         for( LedgerAmount amount : amounts ) {
80             String amt = amount.toString();
81             if (builder.length() > 0) builder.append('\n');
82             builder.append(amt);
83         }
84
85         return builder.toString();
86     }
87
88     public int getLevel() {
89         return level;
90     }
91
92     @NonNull
93     public String getShortName() {
94         return shortName;
95     }
96
97     public String getParentName() {
98         return parentName;
99     }
100     public void togglehidden() {
101         hidden = !hidden;
102     }
103
104     public boolean isHiddenToBe() {
105         return hiddenToBe;
106     }
107     public void setHiddenToBe(boolean hiddenToBe) {
108         this.hiddenToBe = hiddenToBe;
109     }
110     public void toggleHiddenToBe() {
111         setHiddenToBe(!hiddenToBe);
112     }
113 }