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