1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.data.basic;
18
19 import io.github.tonywasher.joceanus.metis.data.MetisDataDifference;
20 import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataFieldId;
21 import io.github.tonywasher.joceanus.metis.data.MetisDataResource;
22 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
23 import io.github.tonywasher.joceanus.metis.field.MetisFieldVersionedSet;
24 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAssetCategory;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryClass;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryType;
27 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryType.MoneyWiseLoanCategoryTypeList;
28 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
29 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
30 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
31 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
32 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
33 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataValues;
34 import io.github.tonywasher.joceanus.prometheus.data.PrometheusStaticDataItem;
35 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
36
37 import java.util.Iterator;
38
39
40
41
42 public final class MoneyWiseLoanCategory
43 extends MoneyWiseCategoryBase
44 implements MoneyWiseAssetCategory {
45
46
47
48 public static final String OBJECT_NAME = MoneyWiseBasicDataType.LOANCATEGORY.getItemName();
49
50
51
52
53 public static final String LIST_NAME = MoneyWiseBasicDataType.LOANCATEGORY.getListName();
54
55
56
57
58 private static final MetisFieldVersionedSet<MoneyWiseLoanCategory> FIELD_DEFS = MetisFieldVersionedSet.newVersionedFieldSet(MoneyWiseLoanCategory.class);
59
60
61
62
63 static {
64 FIELD_DEFS.declareLinkField(MoneyWiseStaticDataType.LOANTYPE);
65 }
66
67
68
69
70
71
72
73 MoneyWiseLoanCategory(final MoneyWiseLoanCategoryList pList,
74 final MoneyWiseLoanCategory pCategory) {
75
76 super(pList, pCategory);
77 }
78
79
80
81
82
83
84
85
86 private MoneyWiseLoanCategory(final MoneyWiseLoanCategoryList pList,
87 final PrometheusDataValues pValues) throws OceanusException {
88
89 super(pList, pValues);
90
91
92 final Object myValue = pValues.getValue(MoneyWiseStaticDataType.LOANTYPE);
93 if (myValue instanceof Integer i) {
94 setValueType(i);
95 } else if (myValue instanceof String s) {
96 setValueType(s);
97 }
98 }
99
100
101
102
103
104
105 public MoneyWiseLoanCategory(final MoneyWiseLoanCategoryList pList) {
106 super(pList);
107 }
108
109 @Override
110 public MetisFieldSetDef getDataFieldSet() {
111 return FIELD_DEFS;
112 }
113
114 @Override
115 public boolean includeXmlField(final MetisDataFieldId pField) {
116
117 if (MoneyWiseStaticDataType.LOANTYPE.equals(pField)) {
118 return true;
119 }
120
121
122 return super.includeXmlField(pField);
123 }
124
125 @Override
126 public MoneyWiseLoanCategoryType getCategoryType() {
127 return getValues().getValue(MoneyWiseStaticDataType.LOANTYPE, MoneyWiseLoanCategoryType.class);
128 }
129
130 @Override
131 public MoneyWiseLoanCategoryClass getCategoryTypeClass() {
132 final MoneyWiseLoanCategoryType myType = getCategoryType();
133 return myType == null
134 ? null
135 : myType.getLoanClass();
136 }
137
138 @Override
139 public MoneyWiseLoanCategory getParentCategory() {
140 return getValues().getValue(PrometheusDataResource.DATAGROUP_PARENT, MoneyWiseLoanCategory.class);
141 }
142
143
144
145
146
147
148
149 private void setValueType(final MoneyWiseLoanCategoryType pValue) {
150 getValues().setUncheckedValue(MoneyWiseStaticDataType.LOANTYPE, pValue);
151 }
152
153
154
155
156
157
158 private void setValueType(final Integer pValue) {
159 getValues().setUncheckedValue(MoneyWiseStaticDataType.LOANTYPE, pValue);
160 }
161
162
163
164
165
166
167 private void setValueType(final String pValue) {
168 getValues().setUncheckedValue(MoneyWiseStaticDataType.LOANTYPE, pValue);
169 }
170
171
172
173
174
175
176
177 public boolean isCategoryClass(final MoneyWiseLoanCategoryClass pClass) {
178
179 return getCategoryTypeClass() == pClass;
180 }
181
182 @Override
183 public MoneyWiseLoanCategoryList getList() {
184 return (MoneyWiseLoanCategoryList) super.getList();
185 }
186
187
188
189
190
191
192
193 public void setDefaults(final MoneyWiseLoanCategory pParent) throws OceanusException {
194 getList().getValidator().setDefaults(pParent, this);
195 }
196
197 @Override
198 public void resolveDataSetLinks() throws OceanusException {
199
200 super.resolveDataSetLinks();
201
202
203 final MoneyWiseDataSet myData = getDataSet();
204 resolveDataLink(MoneyWiseStaticDataType.LOANTYPE, myData.getLoanCategoryTypes());
205 }
206
207 @Override
208 protected void resolveEditSetLinks() throws OceanusException {
209
210 resolveDataLink(PrometheusDataResource.DATAGROUP_PARENT, getList());
211
212
213 final PrometheusEditSet myEditSet = getList().getEditSet();
214 if (myEditSet.hasDataType(MoneyWiseStaticDataType.LOANTYPE)) {
215 resolveDataLink(MoneyWiseStaticDataType.LOANTYPE, myEditSet.getDataList(MoneyWiseStaticDataType.LOANTYPE, MoneyWiseLoanCategoryTypeList.class));
216 }
217 }
218
219 @Override
220 public void setCategoryType(final PrometheusStaticDataItem pType) {
221 setValueType((MoneyWiseLoanCategoryType) pType);
222 }
223
224
225
226
227
228
229
230 @Override
231 public boolean applyChanges(final PrometheusDataItem pCategory) {
232
233 if (!(pCategory instanceof MoneyWiseLoanCategory myCategory)) {
234 return false;
235 }
236
237
238 pushHistory();
239
240
241 applyBasicChanges(myCategory);
242
243
244 if (!MetisDataDifference.isEqual(getCategoryType(), myCategory.getCategoryType())) {
245 setValueType(myCategory.getCategoryType());
246 }
247
248
249 return checkForHistory();
250 }
251
252
253
254
255 public static class MoneyWiseLoanCategoryList
256 extends MoneyWiseCategoryBaseList<MoneyWiseLoanCategory> {
257
258
259
260 private static final MetisFieldSet<MoneyWiseLoanCategoryList> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseLoanCategoryList.class);
261
262
263
264
265 private PrometheusEditSet theEditSet;
266
267
268
269
270
271
272 protected MoneyWiseLoanCategoryList(final MoneyWiseDataSet pData) {
273 super(pData, MoneyWiseLoanCategory.class, MoneyWiseBasicDataType.LOANCATEGORY);
274 }
275
276
277
278
279
280
281 protected MoneyWiseLoanCategoryList(final MoneyWiseLoanCategoryList pSource) {
282 super(pSource);
283 }
284
285 @Override
286 public MetisFieldSet<MoneyWiseLoanCategoryList> getDataFieldSet() {
287 return FIELD_DEFS;
288 }
289
290 @Override
291 public String listName() {
292 return LIST_NAME;
293 }
294
295 @Override
296 public MetisFieldSetDef getItemFields() {
297 return MoneyWiseLoanCategory.FIELD_DEFS;
298 }
299
300
301
302
303
304
305 public PrometheusEditSet getEditSet() {
306 return theEditSet;
307 }
308
309 @Override
310 protected MoneyWiseLoanCategoryList getEmptyList(final PrometheusListStyle pStyle) {
311 final MoneyWiseLoanCategoryList myList = new MoneyWiseLoanCategoryList(this);
312 myList.setStyle(pStyle);
313 return myList;
314 }
315
316
317
318
319
320
321
322
323 public MoneyWiseLoanCategoryList deriveEditList(final PrometheusEditSet pEditSet) throws OceanusException {
324
325 final MoneyWiseLoanCategoryList myList = getEmptyList(PrometheusListStyle.EDIT);
326 myList.ensureMap();
327 pEditSet.setEditEntryList(MoneyWiseBasicDataType.LOANCATEGORY, myList);
328 myList.getValidator().setEditSet(pEditSet);
329
330
331 myList.theEditSet = pEditSet;
332
333
334 final Iterator<MoneyWiseLoanCategory> myIterator = iterator();
335 while (myIterator.hasNext()) {
336 final MoneyWiseLoanCategory myCurr = myIterator.next();
337
338
339 if (myCurr.isDeleted()) {
340 continue;
341 }
342
343
344 final MoneyWiseLoanCategory myCategory = new MoneyWiseLoanCategory(myList, myCurr);
345 myList.add(myCategory);
346 myCategory.resolveEditSetLinks();
347
348
349 myCategory.adjustMapForItem();
350 }
351
352
353 return myList;
354 }
355
356
357
358
359
360
361
362 @Override
363 public MoneyWiseLoanCategory addCopyItem(final PrometheusDataItem pCategory) {
364
365 if (!(pCategory instanceof MoneyWiseLoanCategory)) {
366 throw new UnsupportedOperationException();
367 }
368
369 final MoneyWiseLoanCategory myCategory = new MoneyWiseLoanCategory(this, (MoneyWiseLoanCategory) pCategory);
370 add(myCategory);
371 return myCategory;
372 }
373
374
375
376
377
378
379 @Override
380 public MoneyWiseLoanCategory addNewItem() {
381 final MoneyWiseLoanCategory myCategory = new MoneyWiseLoanCategory(this);
382 add(myCategory);
383 return myCategory;
384 }
385
386 @Override
387 public MoneyWiseLoanCategory addValuesItem(final PrometheusDataValues pValues) throws OceanusException {
388
389 final MoneyWiseLoanCategory myCategory = new MoneyWiseLoanCategory(this, pValues);
390
391
392 if (!isIdUnique(myCategory.getIndexedId())) {
393 myCategory.addError(ERROR_DUPLICATE, MetisDataResource.DATA_ID);
394 throw new MoneyWiseDataException(myCategory, ERROR_VALIDATION);
395 }
396
397
398 add(myCategory);
399
400
401 return myCategory;
402 }
403 }
404 }