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