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