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.date.OceanusDate;
21 import io.github.tonywasher.joceanus.oceanus.date.OceanusDateFormatter;
22 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusRate;
23 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
24 import io.github.tonywasher.joceanus.metis.data.MetisDataDifference;
25 import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataFieldId;
26 import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataList;
27 import io.github.tonywasher.joceanus.metis.data.MetisDataResource;
28 import io.github.tonywasher.joceanus.metis.field.MetisFieldItem;
29 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
30 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDeposit.MoneyWiseDepositList;
31 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
32 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataInstanceMap;
33 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
34 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataMapItem;
35 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataValues;
36 import io.github.tonywasher.joceanus.prometheus.data.PrometheusEncryptedDataItem;
37 import io.github.tonywasher.joceanus.prometheus.data.PrometheusEncryptedFieldSet;
38 import io.github.tonywasher.joceanus.prometheus.data.PrometheusEncryptedPair;
39 import io.github.tonywasher.joceanus.prometheus.data.PrometheusEncryptedValues;
40 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
41
42 import java.util.ArrayList;
43 import java.util.HashMap;
44 import java.util.Iterator;
45 import java.util.List;
46 import java.util.ListIterator;
47 import java.util.Map;
48
49
50
51
52
53
54 public class MoneyWiseDepositRate
55 extends PrometheusEncryptedDataItem {
56
57
58
59 public static final String OBJECT_NAME = MoneyWiseBasicDataType.DEPOSITRATE.getItemName();
60
61
62
63
64 public static final String LIST_NAME = MoneyWiseBasicDataType.DEPOSITRATE.getListName();
65
66
67
68
69 private static final PrometheusEncryptedFieldSet<MoneyWiseDepositRate> FIELD_DEFS = PrometheusEncryptedFieldSet.newEncryptedFieldSet(MoneyWiseDepositRate.class);
70
71
72
73
74 static {
75 FIELD_DEFS.declareLinkField(MoneyWiseBasicDataType.DEPOSIT);
76 FIELD_DEFS.declareEncryptedRateField(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE);
77 FIELD_DEFS.declareEncryptedRateField(MoneyWiseBasicResource.DEPOSITRATE_BONUS);
78 FIELD_DEFS.declareDateField(MoneyWiseBasicResource.DEPOSITRATE_ENDDATE);
79 }
80
81
82
83
84 public static final String ERROR_NULLDATE = MoneyWiseBasicResource.DEPOSITRATE_ERROR_NULLDATE.getValue();
85
86
87
88
89
90
91
92 protected MoneyWiseDepositRate(final MoneyWiseDepositRateList pList,
93 final MoneyWiseDepositRate pPeriod) {
94
95 super(pList, pPeriod);
96 }
97
98
99
100
101
102
103 public MoneyWiseDepositRate(final MoneyWiseDepositRateList pList) {
104 super(pList, 0);
105 }
106
107
108
109
110
111
112
113
114 private MoneyWiseDepositRate(final MoneyWiseDepositRateList pList,
115 final PrometheusDataValues pValues) throws OceanusException {
116
117 super(pList, pValues);
118
119
120 final OceanusDataFormatter myFormatter = getDataSet().getDataFormatter();
121
122
123 try {
124
125 Object myValue = pValues.getValue(MoneyWiseBasicDataType.DEPOSIT);
126 if (myValue instanceof Integer i) {
127 setValueDeposit(i);
128 } else if (myValue instanceof String s) {
129 setValueDeposit(s);
130 }
131
132
133 myValue = pValues.getValue(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE);
134 if (myValue instanceof OceanusRate r) {
135 setValueRate(r);
136 } else if (myValue instanceof byte[] ba) {
137 setValueRate(ba);
138 } else if (myValue instanceof String myString) {
139 setValueRate(myString);
140 setValueRate(myFormatter.parseValue(myString, OceanusRate.class));
141 }
142
143
144 myValue = pValues.getValue(MoneyWiseBasicResource.DEPOSITRATE_BONUS);
145 if (myValue instanceof OceanusRate r) {
146 setValueBonus(r);
147 } else if (myValue instanceof byte[] ba) {
148 setValueBonus(ba);
149 } else if (myValue instanceof String myString) {
150 setValueBonus(myString);
151 setValueBonus(myFormatter.parseValue(myString, OceanusRate.class));
152 }
153
154
155 myValue = pValues.getValue(MoneyWiseBasicResource.DEPOSITRATE_ENDDATE);
156 if (myValue instanceof OceanusDate d) {
157 setValueEndDate(d);
158 } else if (myValue instanceof String s) {
159 final OceanusDateFormatter myParser = myFormatter.getDateFormatter();
160 setValueEndDate(myParser.parseDate(s));
161 }
162
163
164 } catch (IllegalArgumentException
165 | OceanusException e) {
166
167 throw new MoneyWiseDataException(this, ERROR_CREATEITEM, e);
168 }
169 }
170
171 @Override
172 public MetisFieldSetDef getDataFieldSet() {
173 return FIELD_DEFS;
174 }
175
176 @Override
177 public boolean includeXmlField(final MetisDataFieldId pField) {
178
179 if (MoneyWiseBasicDataType.DEPOSIT.equals(pField)) {
180 return true;
181 }
182 if (MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE.equals(pField)) {
183 return true;
184 }
185 if (MoneyWiseBasicResource.DEPOSITRATE_BONUS.equals(pField)) {
186 return getBonus() != null;
187 }
188 if (MoneyWiseBasicResource.DEPOSITRATE_ENDDATE.equals(pField)) {
189 return getEndDate() != null;
190 }
191
192
193 return super.includeXmlField(pField);
194 }
195
196 @Override
197 public String formatObject(final OceanusDataFormatter pFormatter) {
198 return toString();
199 }
200
201 @Override
202 public String toString() {
203
204 final PrometheusEncryptedValues myValues = getValues();
205 final Object myDeposit = myValues.getValue(MoneyWiseBasicDataType.DEPOSIT);
206 final Object myRate = myValues.getValue(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE);
207 final Object myEndDate = myValues.getValue(MoneyWiseBasicResource.DEPOSITRATE_ENDDATE);
208
209
210 final OceanusDataFormatter myFormatter = getDataSet().getDataFormatter();
211
212
213 final StringBuilder myBuilder = new StringBuilder();
214 myBuilder.append(myFormatter.formatObject(myDeposit));
215 myBuilder.append('@');
216 myBuilder.append(myFormatter.formatObject(myRate));
217 if (myEndDate != null) {
218 myBuilder.append("->");
219 myBuilder.append(myFormatter.formatObject(myEndDate));
220 }
221
222
223 return myBuilder.toString();
224 }
225
226
227
228
229
230
231 public OceanusRate getRate() {
232 return getValues().getValue(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE, OceanusRate.class);
233 }
234
235
236
237
238
239
240 public byte[] getRateBytes() {
241 return getValues().getEncryptedBytes(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE);
242 }
243
244
245
246
247
248
249 private PrometheusEncryptedPair getRateField() {
250 return getValues().getEncryptedPair(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE);
251 }
252
253
254
255
256
257
258 public OceanusRate getBonus() {
259 return getValues().getValue(MoneyWiseBasicResource.DEPOSITRATE_BONUS, OceanusRate.class);
260 }
261
262
263
264
265
266
267 public byte[] getBonusBytes() {
268 return getValues().getEncryptedBytes(MoneyWiseBasicResource.DEPOSITRATE_BONUS);
269 }
270
271
272
273
274
275
276 private PrometheusEncryptedPair getBonusField() {
277 return getValues().getEncryptedPair(MoneyWiseBasicResource.DEPOSITRATE_BONUS);
278 }
279
280
281
282
283
284
285 public OceanusDate getDate() {
286 return getEndDate();
287 }
288
289
290
291
292
293
294 public OceanusDate getEndDate() {
295 return getValues().getValue(MoneyWiseBasicResource.DEPOSITRATE_ENDDATE, OceanusDate.class);
296 }
297
298
299
300
301
302
303 public MoneyWiseDeposit getDeposit() {
304 return getValues().getValue(MoneyWiseBasicDataType.DEPOSIT, MoneyWiseDeposit.class);
305 }
306
307
308
309
310
311
312 public Integer getDepositId() {
313 final MoneyWiseDeposit myDeposit = getDeposit();
314 return myDeposit == null
315 ? null
316 : myDeposit.getIndexedId();
317 }
318
319
320
321
322
323
324 public String getDepositName() {
325 final MoneyWiseDeposit myDeposit = getDeposit();
326 return myDeposit == null
327 ? null
328 : myDeposit.getName();
329 }
330
331
332
333
334
335
336 private void setValueDeposit(final MoneyWiseDeposit pValue) {
337 getValues().setUncheckedValue(MoneyWiseBasicDataType.DEPOSIT, pValue);
338 }
339
340
341
342
343
344
345 private void setValueDeposit(final Integer pId) {
346 getValues().setUncheckedValue(MoneyWiseBasicDataType.DEPOSIT, pId);
347 }
348
349
350
351
352
353
354 private void setValueDeposit(final String pName) {
355 getValues().setUncheckedValue(MoneyWiseBasicDataType.DEPOSIT, pName);
356 }
357
358
359
360
361
362
363
364 private void setValueRate(final OceanusRate pValue) throws OceanusException {
365 setEncryptedValue(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE, pValue);
366 }
367
368
369
370
371
372
373
374 private void setValueRate(final byte[] pBytes) throws OceanusException {
375 setEncryptedValue(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE, pBytes, OceanusRate.class);
376 }
377
378
379
380
381
382
383 private void setValueRate(final PrometheusEncryptedPair pValue) {
384 getValues().setUncheckedValue(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE, pValue);
385 }
386
387
388
389
390
391
392 private void setValueRate(final String pValue) {
393 getValues().setUncheckedValue(MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE, pValue);
394 }
395
396
397
398
399
400
401
402 private void setValueBonus(final OceanusRate pValue) throws OceanusException {
403 setEncryptedValue(MoneyWiseBasicResource.DEPOSITRATE_BONUS, pValue);
404 }
405
406
407
408
409
410
411
412 private void setValueBonus(final byte[] pBytes) throws OceanusException {
413 setEncryptedValue(MoneyWiseBasicResource.DEPOSITRATE_BONUS, pBytes, OceanusRate.class);
414 }
415
416
417
418
419
420
421 private void setValueBonus(final PrometheusEncryptedPair pValue) {
422 getValues().setUncheckedValue(MoneyWiseBasicResource.DEPOSITRATE_BONUS, pValue);
423 }
424
425
426
427
428
429
430 private void setValueBonus(final String pValue) {
431 getValues().setUncheckedValue(MoneyWiseBasicResource.DEPOSITRATE_BONUS, pValue);
432 }
433
434
435
436
437
438
439 private void setValueEndDate(final OceanusDate pValue) {
440 getValues().setUncheckedValue(MoneyWiseBasicResource.DEPOSITRATE_ENDDATE, pValue);
441 }
442
443 @Override
444 public MoneyWiseDataSet getDataSet() {
445 return (MoneyWiseDataSet) super.getDataSet();
446 }
447
448 @Override
449 public MoneyWiseDepositRate getBase() {
450 return (MoneyWiseDepositRate) super.getBase();
451 }
452
453 @Override
454 public MoneyWiseDepositRateList getList() {
455 return (MoneyWiseDepositRateList) super.getList();
456 }
457
458
459
460
461
462
463
464
465 @Override
466 public int compareValues(final PrometheusDataItem pThat) {
467
468 final MoneyWiseDepositRate myThat = (MoneyWiseDepositRate) pThat;
469
470
471 if (isHeader() != pThat.isHeader()) {
472 return isHeader()
473 ? -1
474 : 1;
475 }
476
477
478 final int iDiff = MetisDataDifference.compareObject(getDate(), myThat.getDate());
479 if (iDiff != 0) {
480
481 return -iDiff;
482 }
483
484
485 return getDeposit().compareTo(myThat.getDeposit());
486 }
487
488 @Override
489 public void resolveDataSetLinks() throws OceanusException {
490
491 super.resolveDataSetLinks();
492
493
494 final MoneyWiseDataSet myData = getDataSet();
495 resolveDataLink(MoneyWiseBasicDataType.DEPOSIT, myData.getDeposits());
496 }
497
498
499
500
501
502
503
504 private void resolveEditSetLinks(final PrometheusEditSet pEditSet) throws OceanusException {
505
506 final MoneyWiseDepositList myDeposits = pEditSet.getDataList(MoneyWiseBasicDataType.DEPOSIT, MoneyWiseDepositList.class);
507 resolveDataLink(MoneyWiseBasicDataType.DEPOSIT, myDeposits);
508 }
509
510
511
512
513
514
515 public void setDeposit(final MoneyWiseDeposit pValue) {
516 setValueDeposit(pValue);
517 }
518
519
520
521
522
523
524
525 public void setRate(final OceanusRate pRate) throws OceanusException {
526 setValueRate(pRate);
527 }
528
529
530
531
532
533
534
535 public void setBonus(final OceanusRate pBonus) throws OceanusException {
536 setValueBonus(pBonus);
537 }
538
539
540
541
542
543
544 public void setEndDate(final OceanusDate pDate) {
545 setValueEndDate(pDate == null
546 ? null
547 : new OceanusDate(pDate));
548 }
549
550 @Override
551 public void touchUnderlyingItems() {
552
553 getDeposit().touchItem(this);
554 }
555
556 @Override
557 public void touchOnUpdate() {
558
559 getDeposit().touchItem(this);
560 }
561
562
563
564
565
566
567
568 @Override
569 public boolean applyChanges(final PrometheusDataItem pRate) {
570
571 if (!(pRate instanceof MoneyWiseDepositRate)) {
572 return false;
573 }
574 final MoneyWiseDepositRate myRate = (MoneyWiseDepositRate) pRate;
575
576
577 pushHistory();
578
579
580 if (!MetisDataDifference.isEqual(getRate(), myRate.getRate())) {
581 setValueRate(myRate.getRateField());
582 }
583
584
585 if (!MetisDataDifference.isEqual(getBonus(), myRate.getBonus())) {
586 setValueBonus(myRate.getBonusField());
587 }
588
589
590 if (!MetisDataDifference.isEqual(getEndDate(), myRate.getEndDate())) {
591 setValueEndDate(myRate.getEndDate());
592 }
593
594
595 return checkForHistory();
596 }
597
598 @Override
599 public void adjustMapForItem() {
600 final MoneyWiseDepositRateList myList = getList();
601 final MoneyWiseDepositRateDataMap myMap = myList.getDataMap();
602 myMap.adjustForItem(this);
603 }
604
605
606
607
608 public static class MoneyWiseDepositRateList
609 extends PrometheusEncryptedList<MoneyWiseDepositRate> {
610
611
612
613 private static final MetisFieldSet<MoneyWiseDepositRateList> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseDepositRateList.class);
614
615
616
617
618
619
620 protected MoneyWiseDepositRateList(final MoneyWiseDataSet pData) {
621 super(MoneyWiseDepositRate.class, pData, MoneyWiseBasicDataType.DEPOSITRATE);
622 }
623
624
625
626
627
628
629 private MoneyWiseDepositRateList(final MoneyWiseDepositRateList pSource) {
630 super(pSource);
631 }
632
633 @Override
634 protected MoneyWiseDepositRateList getEmptyList(final PrometheusListStyle pStyle) {
635 final MoneyWiseDepositRateList myList = new MoneyWiseDepositRateList(this);
636 myList.setStyle(pStyle);
637 return myList;
638 }
639
640 @Override
641 public MetisFieldSet<MoneyWiseDepositRateList> getDataFieldSet() {
642 return FIELD_DEFS;
643 }
644
645 @Override
646 public MetisFieldSetDef getItemFields() {
647 return MoneyWiseDepositRate.FIELD_DEFS;
648 }
649
650 @Override
651 public String listName() {
652 return LIST_NAME;
653 }
654
655 @Override
656 public MoneyWiseDataSet getDataSet() {
657 return (MoneyWiseDataSet) super.getDataSet();
658 }
659
660 @Override
661 public MoneyWiseDepositRateDataMap getDataMap() {
662 return (MoneyWiseDepositRateDataMap) super.getDataMap();
663 }
664
665
666
667
668
669
670
671
672 public MoneyWiseDepositRateList deriveEditList(final PrometheusEditSet pEditSet) throws OceanusException {
673
674 final MoneyWiseDepositRateList myList = getEmptyList(PrometheusListStyle.EDIT);
675 myList.ensureMap();
676 pEditSet.setEditEntryList(MoneyWiseBasicDataType.DEPOSITRATE, myList);
677
678
679 final Iterator<MoneyWiseDepositRate> myIterator = iterator();
680 while (myIterator.hasNext()) {
681 final MoneyWiseDepositRate myCurr = myIterator.next();
682
683
684 final MoneyWiseDepositRate myItem = new MoneyWiseDepositRate(myList, myCurr);
685 myItem.resolveEditSetLinks(pEditSet);
686 myList.add(myItem);
687
688
689 myItem.adjustMapForItem();
690 }
691
692
693 return myList;
694 }
695
696
697
698
699
700
701
702 @Override
703 public MoneyWiseDepositRate addCopyItem(final PrometheusDataItem pRate) {
704
705 if (!(pRate instanceof MoneyWiseDepositRate)) {
706 throw new UnsupportedOperationException();
707 }
708
709 final MoneyWiseDepositRate myRate = new MoneyWiseDepositRate(this, (MoneyWiseDepositRate) pRate);
710 add(myRate);
711 return myRate;
712 }
713
714
715
716
717
718
719 @Override
720 public MoneyWiseDepositRate addNewItem() {
721 final MoneyWiseDepositRate myRate = new MoneyWiseDepositRate(this);
722 add(myRate);
723 return myRate;
724 }
725
726 @Override
727 public MoneyWiseDepositRate addValuesItem(final PrometheusDataValues pValues) throws OceanusException {
728
729 final MoneyWiseDepositRate myRate = new MoneyWiseDepositRate(this, pValues);
730
731
732 if (!isIdUnique(myRate.getIndexedId())) {
733 myRate.addError(ERROR_DUPLICATE, MetisDataResource.DATA_ID);
734 throw new MoneyWiseDataException(myRate, ERROR_VALIDATION);
735 }
736
737
738 add(myRate);
739
740
741 return myRate;
742 }
743
744 @Override
745 protected MoneyWiseDepositRateDataMap allocateDataMap() {
746 return new MoneyWiseDepositRateDataMap();
747 }
748 }
749
750
751
752
753 public static class MoneyWiseDepositRateDataMap
754 implements PrometheusDataMapItem, MetisFieldItem {
755
756
757
758 private static final MetisFieldSet<MoneyWiseDepositRateDataMap> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseDepositRateDataMap.class);
759
760
761
762
763 static {
764 FIELD_DEFS.declareLocalField(MoneyWiseBasicResource.MONEYWISEDATA_MAP_MAPOFMAPS, MoneyWiseDepositRateDataMap::getMapOfMaps);
765 FIELD_DEFS.declareLocalField(MoneyWiseBasicResource.DEPOSITRATE_MAP_MAPOFRATES, MoneyWiseDepositRateDataMap::getMapOfRates);
766 }
767
768
769
770
771 private final Map<MoneyWiseDeposit, Map<OceanusDate, Integer>> theMapOfMaps;
772
773
774
775
776 private final Map<MoneyWiseDeposit, MoneyWiseRateList> theMapOfRates;
777
778
779
780
781 public MoneyWiseDepositRateDataMap() {
782
783 theMapOfMaps = new HashMap<>();
784 theMapOfRates = new HashMap<>();
785 }
786
787 @Override
788 public MetisFieldSet<MoneyWiseDepositRateDataMap> getDataFieldSet() {
789 return FIELD_DEFS;
790 }
791
792 @Override
793 public String formatObject(final OceanusDataFormatter pFormatter) {
794 return FIELD_DEFS.getName();
795 }
796
797
798
799
800
801
802 private Map<MoneyWiseDeposit, Map<OceanusDate, Integer>> getMapOfMaps() {
803 return theMapOfMaps;
804 }
805
806
807
808
809
810
811 private Map<MoneyWiseDeposit, MoneyWiseRateList> getMapOfRates() {
812 return theMapOfRates;
813 }
814
815 @Override
816 public void resetMap() {
817 theMapOfMaps.clear();
818 theMapOfRates.clear();
819 }
820
821 @Override
822 public void adjustForItem(final PrometheusDataItem pItem) {
823
824 final MoneyWiseDepositRate myItem = (MoneyWiseDepositRate) pItem;
825 final MoneyWiseDeposit myDeposit = myItem.getDeposit();
826 if (myDeposit == null) {
827 return;
828 }
829
830
831 final Map<OceanusDate, Integer> myMap = theMapOfMaps.computeIfAbsent(myDeposit, m -> new HashMap<>());
832
833
834 final OceanusDate myDate = myItem.getEndDate();
835 final Integer myCount = myMap.get(myDate);
836 if (myCount == null) {
837 myMap.put(myDate, PrometheusDataInstanceMap.ONE);
838 } else {
839 myMap.put(myDate, myCount + 1);
840 }
841
842
843 final MoneyWiseRateList myList = theMapOfRates.computeIfAbsent(myDeposit, MoneyWiseRateList::new);
844
845
846 myList.add(myItem);
847 }
848
849
850
851
852
853
854
855 public boolean validRateCount(final MoneyWiseDepositRate pItem) {
856
857 final MoneyWiseDeposit myDeposit = pItem.getDeposit();
858 final OceanusDate myDate = pItem.getEndDate();
859
860
861 final Map<OceanusDate, Integer> myMap = theMapOfMaps.get(myDeposit);
862 if (myMap != null) {
863 final Integer myResult = myMap.get(myDate);
864 return PrometheusDataInstanceMap.ONE.equals(myResult);
865 }
866 return false;
867 }
868
869
870
871
872
873
874
875
876 public boolean availableDate(final MoneyWiseDeposit pDeposit,
877 final OceanusDate pDate) {
878
879 final Map<OceanusDate, Integer> myMap = theMapOfMaps.get(pDeposit);
880 return myMap == null
881 || myMap.get(pDate) == null;
882 }
883
884
885
886
887
888
889
890
891 public MoneyWiseDepositRate getRateForDate(final MoneyWiseDeposit pDeposit,
892 final OceanusDate pDate) {
893
894 final MoneyWiseRateList myList = theMapOfRates.get(pDeposit);
895 if (myList != null) {
896
897 final ListIterator<MoneyWiseDepositRate> myIterator = myList.listIterator(myList.size());
898 while (myIterator.hasPrevious()) {
899 final MoneyWiseDepositRate myCurr = myIterator.previous();
900
901
902 final OceanusDate myDate = myCurr.getDate();
903
904
905 if (myDate == null
906 || myDate.compareTo(pDate) >= 0) {
907 return myCurr;
908 }
909 }
910 }
911
912
913 return null;
914 }
915
916
917
918
919 private static final class MoneyWiseRateList
920 implements MetisFieldItem, MetisDataList<MoneyWiseDepositRate> {
921
922
923
924 private static final MetisFieldSet<MoneyWiseRateList> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseRateList.class);
925
926
927
928
929 static {
930 FIELD_DEFS.declareLocalField(MetisDataResource.LIST_SIZE, MoneyWiseRateList::size);
931 }
932
933
934
935
936 private final List<MoneyWiseDepositRate> theList;
937
938
939
940
941 private final MoneyWiseDeposit theDeposit;
942
943
944
945
946
947
948 private MoneyWiseRateList(final MoneyWiseDeposit pDeposit) {
949 theDeposit = pDeposit;
950 theList = new ArrayList<>();
951 }
952
953 @Override
954 public MetisFieldSet<MoneyWiseRateList> getDataFieldSet() {
955 return FIELD_DEFS;
956 }
957
958 @Override
959 public String formatObject(final OceanusDataFormatter pFormatter) {
960 return theDeposit.formatObject(pFormatter)
961 + "("
962 + size()
963 + ")";
964 }
965
966 @Override
967 public String toString() {
968 return theDeposit.toString()
969 + "("
970 + size()
971 + ")";
972 }
973
974 @Override
975 public List<MoneyWiseDepositRate> getUnderlyingList() {
976 return theList;
977 }
978 }
979 }
980 }