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