1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets;
18
19 import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
20 import io.github.tonywasher.joceanus.oceanus.date.OceanusDateRange;
21 import io.github.tonywasher.joceanus.metis.data.MetisDataDifference;
22 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicDataType;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseCash;
25 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseCashCategory;
26
27 import java.util.Iterator;
28
29
30
31
32 public final class MoneyWiseXAnalysisCashBucket
33 extends MoneyWiseXAnalysisAccountBucket<MoneyWiseCash> {
34
35
36
37 private static final MetisFieldSet<MoneyWiseXAnalysisCashBucket> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseXAnalysisCashBucket.class);
38
39
40
41
42 static {
43 FIELD_DEFS.declareLocalField(MoneyWiseBasicDataType.CASHCATEGORY, MoneyWiseXAnalysisCashBucket::getCategory);
44 }
45
46
47
48
49 private final MoneyWiseCashCategory theCategory;
50
51
52
53
54
55
56
57 private MoneyWiseXAnalysisCashBucket(final MoneyWiseXAnalysis pAnalysis,
58 final MoneyWiseCash pCash) {
59
60 super(pAnalysis, pCash);
61
62
63 theCategory = pCash.getCategory();
64 }
65
66
67
68
69
70
71
72 private MoneyWiseXAnalysisCashBucket(final MoneyWiseXAnalysis pAnalysis,
73 final MoneyWiseXAnalysisCashBucket pBase) {
74
75 super(pAnalysis, pBase);
76
77
78 theCategory = pBase.getCategory();
79 }
80
81
82
83
84
85
86
87
88 private MoneyWiseXAnalysisCashBucket(final MoneyWiseXAnalysis pAnalysis,
89 final MoneyWiseXAnalysisCashBucket pBase,
90 final OceanusDate pDate) {
91
92 super(pAnalysis, pBase, pDate);
93
94
95 theCategory = pBase.getCategory();
96 }
97
98
99
100
101
102
103
104
105 private MoneyWiseXAnalysisCashBucket(final MoneyWiseXAnalysis pAnalysis,
106 final MoneyWiseXAnalysisCashBucket pBase,
107 final OceanusDateRange pRange) {
108
109 super(pAnalysis, pBase, pRange);
110
111
112 theCategory = pBase.getCategory();
113 }
114
115 @Override
116 public MetisFieldSet<MoneyWiseXAnalysisCashBucket> getDataFieldSet() {
117 return FIELD_DEFS;
118 }
119
120
121
122
123
124
125 public MoneyWiseCashCategory getCategory() {
126 return theCategory;
127 }
128
129 @Override
130 public Long getBucketId() {
131 return getAccount().getExternalId();
132 }
133
134
135
136
137 public static final class MoneyWiseXAnalysisCashBucketList
138 extends MoneyWiseXAnalysisAccountBucketList<MoneyWiseXAnalysisCashBucket, MoneyWiseCash> {
139
140
141
142 private static final MetisFieldSet<MoneyWiseXAnalysisCashBucketList> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseXAnalysisCashBucketList.class);
143
144
145
146
147
148
149 MoneyWiseXAnalysisCashBucketList(final MoneyWiseXAnalysis pAnalysis) {
150
151 super(pAnalysis);
152 }
153
154
155
156
157
158
159
160
161 MoneyWiseXAnalysisCashBucketList(final MoneyWiseXAnalysis pAnalysis,
162 final MoneyWiseXAnalysisCashBucketList pBase,
163 final OceanusDate pDate) {
164
165 this(pAnalysis);
166
167
168 constructFromBase(pBase, pDate);
169 }
170
171
172
173
174
175
176
177
178 MoneyWiseXAnalysisCashBucketList(final MoneyWiseXAnalysis pAnalysis,
179 final MoneyWiseXAnalysisCashBucketList pBase,
180 final OceanusDateRange pRange) {
181
182 this(pAnalysis);
183
184
185 constructFromBase(pBase, pRange);
186 }
187
188 @Override
189 public MetisFieldSet<MoneyWiseXAnalysisCashBucketList> getDataFieldSet() {
190 return FIELD_DEFS;
191 }
192
193
194
195
196
197
198
199 public MoneyWiseXAnalysisCashBucket getMatchingCash(final MoneyWiseCash pCash) {
200
201 final MoneyWiseXAnalysisCashBucket myCash = findItemById(pCash.getIndexedId());
202 return myCash != null
203 ? myCash
204 : new MoneyWiseXAnalysisCashBucket(getAnalysis(), pCash);
205 }
206
207
208
209
210
211
212 public MoneyWiseXAnalysisCashBucket getDefaultCash() {
213
214 return isEmpty()
215 ? null
216 : getUnderlyingList().get(0);
217 }
218
219
220
221
222
223
224
225 public MoneyWiseXAnalysisCashBucket getDefaultCash(final MoneyWiseCashCategory pCategory) {
226
227 if (pCategory != null) {
228
229 final Iterator<MoneyWiseXAnalysisCashBucket> myIterator = iterator();
230 while (myIterator.hasNext()) {
231 final MoneyWiseXAnalysisCashBucket myBucket = myIterator.next();
232
233
234 if (MetisDataDifference.isEqual(pCategory, myBucket.getCategory())) {
235 return myBucket;
236 }
237 }
238 }
239
240
241 return null;
242 }
243
244 @Override
245 protected MoneyWiseXAnalysisCashBucket newBucket(final MoneyWiseCash pCash) {
246 return new MoneyWiseXAnalysisCashBucket(getAnalysis(), pCash);
247 }
248
249 @Override
250 protected MoneyWiseXAnalysisCashBucket newBucket(final MoneyWiseXAnalysisCashBucket pBase) {
251 return new MoneyWiseXAnalysisCashBucket(getAnalysis(), pBase);
252 }
253
254 @Override
255 protected MoneyWiseXAnalysisCashBucket newBucket(final MoneyWiseXAnalysisCashBucket pBase,
256 final OceanusDate pDate) {
257 return new MoneyWiseXAnalysisCashBucket(getAnalysis(), pBase, pDate);
258 }
259
260 @Override
261 protected MoneyWiseXAnalysisCashBucket newBucket(final MoneyWiseXAnalysisCashBucket pBase,
262 final OceanusDateRange pRange) {
263 return new MoneyWiseXAnalysisCashBucket(getAnalysis(), pBase, pRange);
264 }
265 }
266 }