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