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.MetisDataEditState;
21 import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataFieldId;
22 import io.github.tonywasher.joceanus.metis.data.MetisDataResource;
23 import io.github.tonywasher.joceanus.metis.data.MetisDataState;
24 import io.github.tonywasher.joceanus.metis.field.MetisFieldItem;
25 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
26 import io.github.tonywasher.joceanus.metis.field.MetisFieldVersionedSet;
27 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDepositCategory.MoneyWiseDepositCategoryList;
28 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDepositInfo.MoneyWiseDepositInfoList;
29 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePayee.MoneyWisePayeeList;
30 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTax.MoneyWiseTaxCredit;
31 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTransCategory.MoneyWiseTransCategoryList;
32 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoClass;
33 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoType.MoneyWiseAccountInfoTypeList;
34 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
35 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency.MoneyWiseCurrencyList;
36 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseDepositCategoryClass;
37 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
38 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseTransCategoryClass;
39 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
40 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseLogicException;
41 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
42 import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
43 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusMoney;
44 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
45 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
46 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataMapItem;
47 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
48 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataSet;
49 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataValues;
50 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataValues.PrometheusInfoItem;
51 import io.github.tonywasher.joceanus.prometheus.data.PrometheusEncrypted.PrometheusDataInfoSetItemCtl;
52 import io.github.tonywasher.joceanus.prometheus.data.PrometheusListStyle;
53 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
54
55 import java.util.Iterator;
56 import java.util.Objects;
57
58
59
60
61 public class MoneyWiseDeposit
62 extends MoneyWiseAssetBase
63 implements PrometheusDataInfoSetItemCtl<MoneyWiseDepositInfo> {
64
65
66
67 public static final String OBJECT_NAME = MoneyWiseBasicDataType.DEPOSIT.getItemName();
68
69
70
71
72 public static final String LIST_NAME = MoneyWiseBasicDataType.DEPOSIT.getListName();
73
74
75
76
77 private static final MetisFieldVersionedSet<MoneyWiseDeposit> FIELD_DEFS = MetisFieldVersionedSet.newVersionedFieldSet(MoneyWiseDeposit.class);
78
79
80
81
82 static {
83 FIELD_DEFS.declareLocalField(PrometheusDataResource.DATAINFOSET_NAME, MoneyWiseDeposit::getInfoSet);
84 FIELD_DEFS.buildFieldMap(MoneyWiseAccountInfoClass.class, MoneyWiseDeposit::getFieldValue);
85 }
86
87
88
89
90 private final boolean hasInfoSet;
91
92
93
94
95 private final boolean useInfoSet;
96
97
98
99
100 private final MoneyWiseDepositInfoSet theInfoSet;
101
102
103
104
105
106
107
108 protected MoneyWiseDeposit(final MoneyWiseDepositList pList,
109 final MoneyWiseDeposit pDeposit) {
110
111 super(pList, pDeposit);
112
113
114 switch (getList().getStyle()) {
115 case EDIT:
116 theInfoSet = new MoneyWiseDepositInfoSet(this, pList.getActInfoTypes(), pList.getDepositInfo());
117 theInfoSet.cloneDataInfoSet(pDeposit.getInfoSet());
118 hasInfoSet = true;
119 useInfoSet = true;
120 break;
121 case CLONE, CORE:
122 theInfoSet = new MoneyWiseDepositInfoSet(this, pList.getActInfoTypes(), pList.getDepositInfo());
123 hasInfoSet = true;
124 useInfoSet = false;
125 break;
126 default:
127 theInfoSet = null;
128 hasInfoSet = false;
129 useInfoSet = false;
130 break;
131 }
132 }
133
134
135
136
137
138
139
140
141 private MoneyWiseDeposit(final MoneyWiseDepositList pList,
142 final PrometheusDataValues pValues) throws OceanusException {
143
144 super(pList, pValues);
145
146
147 theInfoSet = new MoneyWiseDepositInfoSet(this, pList.getActInfoTypes(), pList.getDepositInfo());
148 hasInfoSet = true;
149 useInfoSet = false;
150 }
151
152
153
154
155
156
157 public MoneyWiseDeposit(final MoneyWiseDepositList pList) {
158 super(pList);
159
160
161 theInfoSet = new MoneyWiseDepositInfoSet(this, pList.getActInfoTypes(), pList.getDepositInfo());
162 hasInfoSet = true;
163 useInfoSet = true;
164 }
165
166 @Override
167 public MetisFieldSetDef getDataFieldSet() {
168 return FIELD_DEFS;
169 }
170
171 @Override
172 public boolean includeXmlField(final MetisDataFieldId pField) {
173
174 if (MoneyWiseBasicResource.CATEGORY_NAME.equals(pField)) {
175 return true;
176 }
177 if (MoneyWiseStaticDataType.CURRENCY.equals(pField)) {
178 return true;
179 }
180 if (MoneyWiseBasicResource.ASSET_PARENT.equals(pField)) {
181 return true;
182 }
183
184
185 return super.includeXmlField(pField);
186 }
187
188 @Override
189 public Long getExternalId() {
190 return MoneyWiseAssetType.createExternalId(MoneyWiseAssetType.DEPOSIT, getIndexedId());
191 }
192
193 @Override
194 public MoneyWiseDepositInfoSet getInfoSet() {
195 return theInfoSet;
196 }
197
198 @Override
199 public MoneyWisePayee getParent() {
200 return (MoneyWisePayee) super.getParent();
201 }
202
203
204
205
206
207
208
209 private Object getFieldValue(final MetisDataFieldId pFieldId) {
210 return theInfoSet != null ? theInfoSet.getFieldValue(pFieldId) : null;
211 }
212
213
214
215
216
217
218 public OceanusDate getMaturity() {
219 return hasInfoSet
220 ? theInfoSet.getValue(MoneyWiseAccountInfoClass.MATURITY, OceanusDate.class)
221 : null;
222 }
223
224
225
226
227
228
229 public char[] getSortCode() {
230 return hasInfoSet
231 ? theInfoSet.getValue(MoneyWiseAccountInfoClass.SORTCODE, char[].class)
232 : null;
233 }
234
235
236
237
238
239
240 public char[] getReference() {
241 return hasInfoSet
242 ? theInfoSet.getValue(MoneyWiseAccountInfoClass.REFERENCE, char[].class)
243 : null;
244 }
245
246
247
248
249
250
251 public char[] getAccount() {
252 return hasInfoSet
253 ? theInfoSet.getValue(MoneyWiseAccountInfoClass.ACCOUNT, char[].class)
254 : null;
255 }
256
257
258
259
260
261
262 public char[] getNotes() {
263 return hasInfoSet
264 ? theInfoSet.getValue(MoneyWiseAccountInfoClass.NOTES, char[].class)
265 : null;
266 }
267
268 @Override
269 public OceanusMoney getOpeningBalance() {
270 return hasInfoSet
271 ? theInfoSet.getValue(MoneyWiseAccountInfoClass.OPENINGBALANCE, OceanusMoney.class)
272 : null;
273 }
274
275 @Override
276 public MoneyWiseDepositCategory getCategory() {
277 return getValues().getValue(MoneyWiseBasicResource.CATEGORY_NAME, MoneyWiseDepositCategory.class);
278 }
279
280
281
282
283
284
285 public Integer getCategoryId() {
286 final MoneyWiseDepositCategory myCategory = getCategory();
287 return myCategory == null
288 ? null
289 : myCategory.getIndexedId();
290 }
291
292
293
294
295
296
297 public String getCategoryName() {
298 final MoneyWiseDepositCategory myCategory = getCategory();
299 return myCategory == null
300 ? null
301 : myCategory.getName();
302 }
303
304
305
306
307
308
309 public MoneyWiseDepositCategoryClass getCategoryClass() {
310 final MoneyWiseDepositCategory myCategory = getCategory();
311 return myCategory == null
312 ? null
313 : myCategory.getCategoryTypeClass();
314 }
315
316 @Override
317 public boolean isGross() {
318 final MoneyWiseDepositCategory myCategory = getCategory();
319 final MoneyWiseDepositCategoryClass myClass = myCategory == null ? null : myCategory.getCategoryTypeClass();
320 return myClass != null && myClass.isGross();
321 }
322
323 @Override
324 public boolean isTaxFree() {
325 final MoneyWiseDepositCategory myCategory = getCategory();
326 final MoneyWiseDepositCategoryClass myClass = myCategory == null ? null : myCategory.getCategoryTypeClass();
327 return myClass != null && myClass.isTaxFree();
328 }
329
330 @Override
331 public boolean isForeign() {
332 final MoneyWiseCurrency myDefault = getDefaultCurrency();
333 return !myDefault.equals(getAssetCurrency());
334 }
335
336 @Override
337 public MoneyWiseDeposit getBase() {
338 return (MoneyWiseDeposit) super.getBase();
339 }
340
341 @Override
342 public MoneyWiseDepositList getList() {
343 return (MoneyWiseDepositList) super.getList();
344 }
345
346 @Override
347 public MetisDataState getState() {
348
349 MetisDataState myState = super.getState();
350
351
352 if ((myState == MetisDataState.CLEAN) && useInfoSet) {
353
354 myState = theInfoSet.getState();
355 }
356
357
358 return myState;
359 }
360
361 @Override
362 public MetisDataEditState getEditState() {
363
364 MetisDataEditState myState = super.getEditState();
365
366
367 if (myState == MetisDataEditState.CLEAN
368 && useInfoSet) {
369
370 myState = theInfoSet.getEditState();
371 }
372
373
374 return myState;
375 }
376
377 @Override
378 public boolean hasHistory() {
379
380 boolean hasHistory = super.hasHistory();
381
382
383 if (!hasHistory && useInfoSet) {
384
385 hasHistory = theInfoSet.hasHistory();
386 }
387
388
389 return hasHistory;
390 }
391
392 @Override
393 public void pushHistory() {
394
395 super.pushHistory();
396
397
398 if (useInfoSet) {
399
400 theInfoSet.pushHistory();
401 }
402 }
403
404 @Override
405 public void popHistory() {
406
407 super.popHistory();
408
409
410 if (useInfoSet) {
411
412 theInfoSet.popHistory();
413 }
414 }
415
416 @Override
417 public boolean checkForHistory() {
418
419 boolean bChanges = super.checkForHistory();
420
421
422 if (useInfoSet) {
423
424 bChanges |= theInfoSet.checkForHistory();
425 }
426
427
428 return bChanges;
429 }
430
431 @Override
432 public MetisDataDifference fieldChanged(final MetisDataFieldId pField) {
433
434 final MoneyWiseAccountInfoClass myClass = MoneyWiseDepositInfoSet.getClassForField(pField);
435 if (myClass != null) {
436 return useInfoSet
437 ? theInfoSet.fieldChanged(myClass)
438 : MetisDataDifference.IDENTICAL;
439 }
440
441
442 return super.fieldChanged(pField);
443 }
444
445 @Override
446 public void setDeleted(final boolean bDeleted) {
447
448 if (useInfoSet) {
449 theInfoSet.setDeleted(bDeleted);
450 }
451
452
453 super.setDeleted(bDeleted);
454 }
455
456
457
458
459
460
461
462 public boolean isDepositClass(final MoneyWiseDepositCategoryClass pClass) {
463
464 return getCategoryClass() == pClass;
465 }
466
467
468
469
470
471
472 public void setDefaults() throws OceanusException {
473 getList().getValidator().setDefaults(this);
474 }
475
476
477
478
479
480
481 public void autoCorrect() throws OceanusException {
482 getList().getValidator().autoCorrect(this);
483 }
484
485 @Override
486 public int compareValues(final PrometheusDataItem pThat) {
487
488 final MoneyWiseDeposit myThat = (MoneyWiseDeposit) pThat;
489 int iDiff = MetisDataDifference.compareObject(getCategory(), myThat.getCategory());
490 if (iDiff == 0) {
491 iDiff = MetisDataDifference.compareObject(getName(), myThat.getName());
492 }
493 return iDiff;
494 }
495
496 @Override
497 public void resolveDataSetLinks() throws OceanusException {
498
499 super.resolveDataSetLinks();
500
501
502 resolveDataLink(MoneyWiseBasicResource.CATEGORY_NAME, MoneyWiseBasicDataType.DEPOSITCATEGORY);
503 resolveDataLink(MoneyWiseStaticDataType.CURRENCY, MoneyWiseStaticDataType.CURRENCY);
504 resolveDataLink(MoneyWiseBasicResource.ASSET_PARENT, MoneyWiseBasicDataType.PAYEE);
505 }
506
507 @Override
508 protected void resolveEditSetLinks() throws OceanusException {
509
510 final PrometheusEditSet myEditSet = getList().getEditSet();
511
512
513 resolveDataLink(MoneyWiseBasicResource.ASSET_PARENT, myEditSet.getDataList(MoneyWiseBasicDataType.PAYEE, MoneyWisePayeeList.class));
514 if (myEditSet.hasDataType(MoneyWiseBasicDataType.DEPOSITCATEGORY)) {
515 resolveDataLink(MoneyWiseBasicResource.CATEGORY_NAME, myEditSet.getDataList(MoneyWiseBasicDataType.DEPOSITCATEGORY, MoneyWiseDepositCategoryList.class));
516 }
517 if (myEditSet.hasDataType(MoneyWiseStaticDataType.CURRENCY)) {
518 resolveDataLink(MoneyWiseStaticDataType.CURRENCY, myEditSet.getDataList(MoneyWiseStaticDataType.CURRENCY, MoneyWiseCurrencyList.class));
519 }
520
521
522 theInfoSet.resolveEditSetLinks(myEditSet);
523 }
524
525
526
527
528
529
530
531 public void setMaturity(final OceanusDate pMaturity) throws OceanusException {
532 setInfoSetValue(MoneyWiseAccountInfoClass.MATURITY, pMaturity);
533 }
534
535
536
537
538
539
540
541 public void setSortCode(final char[] pSortCode) throws OceanusException {
542 setInfoSetValue(MoneyWiseAccountInfoClass.SORTCODE, pSortCode);
543 }
544
545
546
547
548
549
550
551 public void setAccount(final char[] pAccount) throws OceanusException {
552 setInfoSetValue(MoneyWiseAccountInfoClass.ACCOUNT, pAccount);
553 }
554
555
556
557
558
559
560
561 public void setReference(final char[] pReference) throws OceanusException {
562 setInfoSetValue(MoneyWiseAccountInfoClass.REFERENCE, pReference);
563 }
564
565
566
567
568
569
570
571 public void setNotes(final char[] pNotes) throws OceanusException {
572 setInfoSetValue(MoneyWiseAccountInfoClass.NOTES, pNotes);
573 }
574
575
576
577
578
579
580
581 public void setOpeningBalance(final OceanusMoney pBalance) throws OceanusException {
582 setInfoSetValue(MoneyWiseAccountInfoClass.OPENINGBALANCE, pBalance);
583 }
584
585
586
587
588
589
590
591
592 private void setInfoSetValue(final MoneyWiseAccountInfoClass pInfoClass,
593 final Object pValue) throws OceanusException {
594
595 if (!hasInfoSet) {
596 throw new MoneyWiseLogicException(ERROR_BADINFOSET);
597 }
598
599
600 theInfoSet.setValue(pInfoClass, pValue);
601 }
602
603 @Override
604 public void adjustClosed() throws OceanusException {
605
606 super.adjustClosed();
607
608
609 if (isDepositClass(MoneyWiseDepositCategoryClass.BOND) && getMaturity() == null) {
610
611 setMaturity(getCloseDate());
612 }
613 }
614
615 @Override
616 public MoneyWiseTransCategory getDetailedCategory(final MoneyWiseTransCategory pCategory,
617 final MoneyWiseTaxCredit pYear) {
618
619 final MoneyWiseTransCategoryList myCategories = getDataSet().getDataList(MoneyWiseBasicDataType.TRANSCATEGORY, MoneyWiseTransCategoryList.class);
620 switch (Objects.requireNonNull(pCategory.getCategoryTypeClass())) {
621 case INTEREST:
622 if (isTaxFree()) {
623 return myCategories.getSingularClass(MoneyWiseTransCategoryClass.TAXFREEINTEREST);
624 }
625 if (isDepositClass(MoneyWiseDepositCategoryClass.PEER2PEER)) {
626 return myCategories.getSingularClass(MoneyWiseTransCategoryClass.PEER2PEERINTEREST);
627 }
628 return myCategories.getSingularClass(isGross()
629 || !pYear.isTaxCreditRequired()
630 ? MoneyWiseTransCategoryClass.GROSSINTEREST
631 : MoneyWiseTransCategoryClass.TAXEDINTEREST);
632 case LOYALTYBONUS:
633 if (isTaxFree()) {
634 return myCategories.getSingularClass(MoneyWiseTransCategoryClass.TAXFREELOYALTYBONUS);
635 }
636 return myCategories.getSingularClass(isGross()
637 || !pYear.isTaxCreditRequired()
638 ? MoneyWiseTransCategoryClass.GROSSLOYALTYBONUS
639 : MoneyWiseTransCategoryClass.TAXEDLOYALTYBONUS);
640 default:
641 return pCategory;
642 }
643 }
644
645 @Override
646 public void touchUnderlyingItems() {
647
648 getCategory().touchItem(this);
649 getAssetCurrency().touchItem(this);
650
651
652 getParent().touchItem(this);
653
654
655 theInfoSet.touchUnderlyingItems();
656 }
657
658 @Override
659 public void touchOnUpdate() {
660
661 clearTouches(MoneyWiseBasicDataType.DEPOSITRATE);
662 clearTouches(MoneyWiseBasicDataType.PORTFOLIO);
663
664
665 getParent().touchItem(this);
666 }
667
668
669
670
671
672
673
674 @Override
675 public boolean applyChanges(final PrometheusDataItem pDeposit) {
676
677 if (!(pDeposit instanceof MoneyWiseDeposit myDeposit)) {
678 return false;
679 }
680
681
682 pushHistory();
683
684
685 applyBasicChanges(myDeposit);
686
687
688 return checkForHistory();
689 }
690
691 @Override
692 public void adjustMapForItem() {
693 final MoneyWiseDepositList myList = getList();
694 final MoneyWiseDepositDataMap myMap = myList.getDataMap();
695 myMap.adjustForItem(this);
696 }
697
698 @Override
699 public void removeItem() {
700 theInfoSet.removeItems();
701 super.removeItem();
702 }
703
704
705
706
707 public static class MoneyWiseDepositList
708 extends MoneyWiseAssetBaseList<MoneyWiseDeposit> {
709
710
711
712 private static final MetisFieldSet<MoneyWiseDepositList> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseDepositList.class);
713
714
715
716
717 private MoneyWiseDepositInfoList theInfoList;
718
719
720
721
722 private MoneyWiseAccountInfoTypeList theInfoTypeList;
723
724
725
726
727
728
729 public MoneyWiseDepositList(final PrometheusDataSet pData) {
730 super(pData, MoneyWiseDeposit.class, MoneyWiseBasicDataType.DEPOSIT);
731 }
732
733
734
735
736
737
738 protected MoneyWiseDepositList(final MoneyWiseDepositList pSource) {
739 super(pSource);
740 }
741
742 @Override
743 public MetisFieldSet<MoneyWiseDepositList> getDataFieldSet() {
744 return FIELD_DEFS;
745 }
746
747 @Override
748 public String listName() {
749 return LIST_NAME;
750 }
751
752 @Override
753 public MetisFieldSetDef getItemFields() {
754 return MoneyWiseDeposit.FIELD_DEFS;
755 }
756
757 @Override
758 protected MoneyWiseDepositDataMap getDataMap() {
759 return (MoneyWiseDepositDataMap) super.getDataMap();
760 }
761
762
763
764
765
766
767 public MoneyWiseDepositInfoList getDepositInfo() {
768 if (theInfoList == null) {
769 theInfoList = getDataSet().getDataList(MoneyWiseBasicDataType.DEPOSITINFO, MoneyWiseDepositInfoList.class);
770 }
771 return theInfoList;
772 }
773
774
775
776
777
778
779 public MoneyWiseAccountInfoTypeList getActInfoTypes() {
780 if (theInfoTypeList == null) {
781 theInfoTypeList = getEditSet() == null
782 ? getDataSet().getDataList(MoneyWiseStaticDataType.ACCOUNTINFOTYPE, MoneyWiseAccountInfoTypeList.class)
783 : getEditSet().getDataList(MoneyWiseStaticDataType.ACCOUNTINFOTYPE, MoneyWiseAccountInfoTypeList.class);
784 }
785 return theInfoTypeList;
786 }
787
788 @Override
789 protected MoneyWiseDepositList getEmptyList(final PrometheusListStyle pStyle) {
790 final MoneyWiseDepositList myList = new MoneyWiseDepositList(this);
791 myList.setStyle(pStyle);
792 return myList;
793 }
794
795
796
797
798
799
800
801
802 public MoneyWiseDepositList deriveEditList(final PrometheusEditSet pEditSet) throws OceanusException {
803
804 final MoneyWiseDepositList myList = getEmptyList(PrometheusListStyle.EDIT);
805 final MoneyWisePayeeList myPayees = pEditSet.getDataList(MoneyWiseBasicDataType.PAYEE, MoneyWisePayeeList.class);
806 myList.ensureMap(myPayees);
807 pEditSet.setEditEntryList(MoneyWiseBasicDataType.DEPOSIT, myList);
808 myList.getValidator().setEditSet(pEditSet);
809
810
811 myList.theInfoTypeList = pEditSet.getDataList(MoneyWiseStaticDataType.ACCOUNTINFOTYPE, MoneyWiseAccountInfoTypeList.class);
812
813
814 final MoneyWiseDepositInfoList myDepInfo = getDepositInfo();
815 myList.theInfoList = myDepInfo.getEmptyList(PrometheusListStyle.EDIT);
816 pEditSet.setEditEntryList(MoneyWiseBasicDataType.DEPOSITINFO, myList.theInfoList);
817
818
819 myList.setEditSet(pEditSet);
820
821
822 final Iterator<MoneyWiseDeposit> myIterator = iterator();
823 while (myIterator.hasNext()) {
824 final MoneyWiseDeposit myCurr = myIterator.next();
825
826
827 if (myCurr.isDeleted()) {
828 continue;
829 }
830
831
832 final MoneyWiseDeposit myDeposit = new MoneyWiseDeposit(myList, myCurr);
833 myList.add(myDeposit);
834 myDeposit.resolveEditSetLinks();
835
836
837 myDeposit.adjustMapForItem();
838 }
839
840
841 return myList;
842 }
843
844 @Override
845 public MoneyWiseDeposit findItemByName(final String pName) {
846
847 return getDataMap().findItemByName(pName);
848 }
849
850 @Override
851 public boolean checkAvailableName(final String pName) {
852
853 return getDataMap().availableName(pName);
854 }
855
856 @Override
857 public boolean validNameCount(final String pName) {
858
859 return getDataMap().validNameCount(pName);
860 }
861
862 @Override
863 public MoneyWiseDeposit addCopyItem(final PrometheusDataItem pDeposit) {
864
865 if (!(pDeposit instanceof MoneyWiseDeposit)) {
866 throw new UnsupportedOperationException();
867 }
868
869 final MoneyWiseDeposit myDeposit = new MoneyWiseDeposit(this, (MoneyWiseDeposit) pDeposit);
870 add(myDeposit);
871 return myDeposit;
872 }
873
874 @Override
875 public MoneyWiseDeposit addNewItem() {
876 final MoneyWiseDeposit myDeposit = new MoneyWiseDeposit(this);
877 add(myDeposit);
878 return myDeposit;
879 }
880
881 @Override
882 public MoneyWiseDeposit addValuesItem(final PrometheusDataValues pValues) throws OceanusException {
883
884 final MoneyWiseDeposit myDeposit = new MoneyWiseDeposit(this, pValues);
885
886
887 if (!isIdUnique(myDeposit.getIndexedId())) {
888 myDeposit.addError(ERROR_DUPLICATE, MetisDataResource.DATA_ID);
889 throw new MoneyWiseDataException(myDeposit, ERROR_VALIDATION);
890 }
891
892
893 add(myDeposit);
894
895
896 if (pValues.hasInfoItems()) {
897
898 final Iterator<PrometheusInfoItem> myIterator = pValues.infoIterator();
899 while (myIterator.hasNext()) {
900 final PrometheusInfoItem myItem = myIterator.next();
901
902
903 final PrometheusDataValues myValues = myItem.getValues(myDeposit);
904 theInfoList.addValuesItem(myValues);
905 }
906 }
907
908
909 return myDeposit;
910 }
911
912
913
914
915
916
917
918
919 public MoneyWiseDeposit getDefaultHolding(final MoneyWisePayee pParent,
920 final boolean isTaxFree) {
921
922 final Iterator<MoneyWiseDeposit> myIterator = iterator();
923 while (myIterator.hasNext()) {
924 final MoneyWiseDeposit myDeposit = myIterator.next();
925
926
927 boolean bIgnore = myDeposit.isDeleted() || myDeposit.isClosed();
928 bIgnore |= !pParent.equals(myDeposit.getParent());
929 bIgnore |= !isTaxFree == myDeposit.isTaxFree();
930 if (!bIgnore) {
931 return myDeposit;
932 }
933 }
934
935
936 return null;
937 }
938
939
940
941
942
943
944 private void ensureMap(final MoneyWisePayeeList pPayees) {
945 setDataMap(new MoneyWiseDepositDataMap(pPayees));
946 }
947
948 @Override
949 protected MoneyWiseDepositDataMap allocateDataMap() {
950 return new MoneyWiseDepositDataMap(getDataSet().getDataList(MoneyWiseBasicDataType.PAYEE, MoneyWisePayeeList.class));
951 }
952
953 @Override
954 public void postProcessOnLoad() throws OceanusException {
955
956 super.resolveDataSetLinks();
957 reSort();
958 }
959 }
960
961
962
963
964 protected static class MoneyWiseDepositDataMap
965 implements PrometheusDataMapItem, MetisFieldItem {
966
967
968
969 private static final MetisFieldSet<MoneyWiseDepositDataMap> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseDepositDataMap.class);
970
971
972
973
974 static {
975 FIELD_DEFS.declareLocalField(MoneyWiseBasicResource.MONEYWISEDATA_MAP_UNDERLYING, MoneyWiseDepositDataMap::getUnderlyingMap);
976 }
977
978
979
980
981 private final MoneyWiseAssetDataMap theUnderlyingMap;
982
983
984
985
986
987
988 protected MoneyWiseDepositDataMap(final MoneyWisePayeeList pPayees) {
989 theUnderlyingMap = pPayees.getDataMap().getUnderlyingMap();
990 }
991
992 @Override
993 public MetisFieldSet<MoneyWiseDepositDataMap> getDataFieldSet() {
994 return FIELD_DEFS;
995 }
996
997 @Override
998 public String formatObject(final OceanusDataFormatter pFormatter) {
999 return FIELD_DEFS.getName();
1000 }
1001
1002
1003
1004
1005
1006
1007 private MoneyWiseAssetDataMap getUnderlyingMap() {
1008 return theUnderlyingMap;
1009 }
1010
1011 @Override
1012 public void resetMap() {
1013
1014 }
1015
1016 @Override
1017 public void adjustForItem(final PrometheusDataItem pItem) {
1018
1019 theUnderlyingMap.adjustForItem(pItem);
1020 }
1021
1022
1023
1024
1025
1026
1027
1028 public MoneyWiseDeposit findItemByName(final String pName) {
1029 final MoneyWiseAssetBase myAsset = theUnderlyingMap.findAssetByName(pName);
1030 return myAsset instanceof MoneyWiseDeposit myDeposit
1031 ? myDeposit
1032 : null;
1033 }
1034
1035
1036
1037
1038
1039
1040
1041 public boolean validNameCount(final String pName) {
1042 return theUnderlyingMap.validNameCount(pName);
1043 }
1044
1045
1046
1047
1048
1049
1050
1051 public boolean availableName(final String pName) {
1052 return theUnderlyingMap.availableKey(pName);
1053 }
1054 }
1055 }