1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets;
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.MetisDataItem.MetisDataList;
22 import io.github.tonywasher.joceanus.metis.field.MetisFieldItem;
23 import io.github.tonywasher.joceanus.metis.field.MetisFieldItem.MetisFieldTableItem;
24 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
25 import io.github.tonywasher.joceanus.metis.list.MetisListIndexed;
26 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysisSecurityBucket.MoneyWiseXAnalysisSecurityBucketList;
27 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisAccountAttr;
28 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisAccountValues;
29 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisSecurityAttr;
30 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisSecurityValues;
31 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicDataType;
32 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePortfolio;
33 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurity;
34 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurityHolding;
35 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
36 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
37 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
38 import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
39 import io.github.tonywasher.joceanus.oceanus.date.OceanusDateRange;
40 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusMoney;
41 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
42
43 import java.util.Comparator;
44 import java.util.Currency;
45 import java.util.Iterator;
46 import java.util.List;
47
48
49
50
51 public final class MoneyWiseXAnalysisPortfolioBucket
52 implements MetisFieldTableItem {
53
54
55
56 private static final MetisFieldSet<MoneyWiseXAnalysisPortfolioBucket> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseXAnalysisPortfolioBucket.class);
57
58
59
60
61 static {
62 FIELD_DEFS.declareLocalField(MoneyWiseBasicDataType.PORTFOLIO, MoneyWiseXAnalysisPortfolioBucket::getPortfolio);
63 FIELD_DEFS.declareLocalField(MoneyWiseXAnalysisBucketResource.BUCKET_BASEVALUES, MoneyWiseXAnalysisPortfolioBucket::getPortfolioCash);
64 FIELD_DEFS.declareLocalField(MoneyWiseBasicDataType.CASH, MoneyWiseXAnalysisPortfolioBucket::getBaseValues);
65 FIELD_DEFS.declareLocalField(MoneyWiseBasicDataType.SECURITY.getListId(), MoneyWiseXAnalysisPortfolioBucket::getSecurities);
66 FIELD_DEFS.declareLocalFieldsForEnum(MoneyWiseXAnalysisSecurityAttr.class, MoneyWiseXAnalysisPortfolioBucket::getValue);
67 }
68
69
70
71
72 private static final MetisDataFieldId NAME_TOTALS = MoneyWiseXAnalysisBucketResource.ANALYSIS_TOTALS;
73
74
75
76
77 private final MoneyWisePortfolio thePortfolio;
78
79
80
81
82 private final MoneyWiseCurrency theCurrency;
83
84
85
86
87 private final MoneyWiseXAnalysisPortfolioCashBucket theCash;
88
89
90
91
92 private final MoneyWiseXAnalysisSecurityBucketList theSecurities;
93
94
95
96
97 private final MoneyWiseXAnalysisSecurityValues theValues;
98
99
100
101
102 private final MoneyWiseXAnalysisSecurityValues theBaseValues;
103
104
105
106
107 private final Boolean isForeignCurrency;
108
109
110
111
112 private boolean hasForeignCurrency;
113
114
115
116
117
118
119
120 private MoneyWiseXAnalysisPortfolioBucket(final MoneyWiseXAnalysisHolder pAnalysis,
121 final MoneyWisePortfolio pPortfolio) {
122
123 thePortfolio = pPortfolio;
124 theCurrency = pAnalysis.getCurrency();
125
126
127 theCash = new MoneyWiseXAnalysisPortfolioCashBucket(pAnalysis, pPortfolio);
128
129
130 theSecurities = pPortfolio != null
131 ? new MoneyWiseXAnalysisSecurityBucketList(pAnalysis)
132 : null;
133
134
135 final Currency myCurrency = theCurrency == null
136 ? MoneyWiseXAnalysisAccountBucket.DEFAULT_CURRENCY
137 : theCurrency.getCurrency();
138 theValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
139 theBaseValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
140
141
142 theValues.setValue(MoneyWiseXAnalysisSecurityAttr.VALUATION, new OceanusMoney(myCurrency));
143 theBaseValues.setValue(MoneyWiseXAnalysisSecurityAttr.VALUATION, new OceanusMoney(myCurrency));
144
145
146 isForeignCurrency = !MetisDataDifference.isEqual(pAnalysis.getCurrency(), theCurrency);
147 hasForeignCurrency = isForeignCurrency;
148 }
149
150
151
152
153
154
155
156
157 private MoneyWiseXAnalysisPortfolioBucket(final MoneyWiseXAnalysisHolder pAnalysis,
158 final MoneyWiseXAnalysisPortfolioBucket pBase,
159 final OceanusDate pDate) {
160
161 thePortfolio = pBase.getPortfolio();
162 theCurrency = pBase.getCurrency();
163 isForeignCurrency = pBase.isForeignCurrency();
164
165
166 theCash = new MoneyWiseXAnalysisPortfolioCashBucket(pAnalysis, pBase.getPortfolioCash(), pDate);
167
168
169 theSecurities = thePortfolio != null
170 ? new MoneyWiseXAnalysisSecurityBucketList(pAnalysis, pBase.getSecurities(), pDate)
171 : null;
172
173
174 final Currency myCurrency = theCurrency.getCurrency();
175 theValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
176 theBaseValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
177 }
178
179
180
181
182
183
184
185
186 private MoneyWiseXAnalysisPortfolioBucket(final MoneyWiseXAnalysisHolder pAnalysis,
187 final MoneyWiseXAnalysisPortfolioBucket pBase,
188 final OceanusDateRange pRange) {
189
190 thePortfolio = pBase.getPortfolio();
191 theCurrency = pBase.getCurrency();
192 isForeignCurrency = pBase.isForeignCurrency();
193
194
195 theCash = new MoneyWiseXAnalysisPortfolioCashBucket(pAnalysis, pBase.getPortfolioCash(), pRange);
196
197
198 theSecurities = thePortfolio != null
199 ? new MoneyWiseXAnalysisSecurityBucketList(pAnalysis, pBase.getSecurities(), pRange)
200 : null;
201
202
203 final Currency myCurrency = theCurrency.getCurrency();
204 theValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
205 theBaseValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
206 }
207
208 @Override
209 public MetisFieldSet<MoneyWiseXAnalysisPortfolioBucket> getDataFieldSet() {
210 return FIELD_DEFS;
211 }
212
213 @Override
214 public String formatObject(final OceanusDataFormatter pFormatter) {
215 return toString();
216 }
217
218 @Override
219 public String toString() {
220 return getName() + theValues;
221 }
222
223
224
225
226
227
228 public Boolean isForeignCurrency() {
229 return isForeignCurrency;
230 }
231
232
233
234
235
236
237 public Boolean hasForeignCurrency() {
238 return hasForeignCurrency;
239 }
240
241
242
243
244
245
246 public String getName() {
247 return thePortfolio == null
248 ? NAME_TOTALS.getId()
249 : thePortfolio.getName();
250 }
251
252 @Override
253 public Integer getIndexedId() {
254 return thePortfolio.getIndexedId();
255 }
256
257
258
259
260
261
262 public MoneyWisePortfolio getPortfolio() {
263 return thePortfolio;
264 }
265
266
267
268
269
270
271 public MoneyWiseCurrency getCurrency() {
272 return theCurrency;
273 }
274
275
276
277
278
279
280 public MoneyWiseXAnalysisPortfolioCashBucket getPortfolioCash() {
281 return theCash;
282 }
283
284
285
286
287
288
289 public MoneyWiseXAnalysisSecurityBucketList getSecurities() {
290 return theSecurities;
291 }
292
293
294
295
296
297
298 public Iterator<MoneyWiseXAnalysisSecurityBucket> securityIterator() {
299 return theSecurities.iterator();
300 }
301
302
303
304
305
306
307 public MoneyWiseXAnalysisSecurityValues getValues() {
308 return theValues;
309 }
310
311
312
313
314
315
316 public MoneyWiseXAnalysisSecurityValues getBaseValues() {
317 return theBaseValues;
318 }
319
320
321
322
323
324
325
326 void setValue(final MoneyWiseXAnalysisSecurityAttr pAttr,
327 final OceanusMoney pValue) {
328
329 theValues.setValue(pAttr, pValue);
330 }
331
332
333
334
335
336
337
338 private Object getValue(final MoneyWiseXAnalysisSecurityAttr pAttr) {
339
340 return theValues.getValue(pAttr);
341 }
342
343
344
345
346
347
348
349 public MoneyWiseXAnalysisSecurityBucket getSecurityBucket(final MoneyWiseSecurityHolding pHolding) {
350
351 return theSecurities.getBucket(pHolding);
352 }
353
354
355
356
357
358
359
360 public MoneyWiseXAnalysisSecurityBucket findSecurityBucket(final MoneyWiseSecurity pSecurity) {
361
362 return theSecurities.findItemById(pSecurity.getIndexedId());
363 }
364
365 @Override
366 public boolean equals(final Object pThat) {
367
368 if (this == pThat) {
369 return true;
370 }
371 if (pThat == null) {
372 return false;
373 }
374 if (!(pThat instanceof MoneyWiseXAnalysisPortfolioBucket myThat)) {
375 return false;
376 }
377
378
379 return getPortfolio().equals(myThat.getPortfolio());
380 }
381
382 @Override
383 public int hashCode() {
384 return getPortfolio().hashCode();
385 }
386
387
388
389
390 void calculateDelta() {
391
392 OceanusMoney myValue = theValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.VALUATION);
393 myValue = new OceanusMoney(myValue);
394
395
396 final OceanusMoney myBase = theBaseValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.VALUATION);
397 myValue.subtractAmount(myBase);
398
399
400 setValue(MoneyWiseXAnalysisSecurityAttr.VALUEDELTA, myValue);
401 }
402
403
404
405
406
407
408 void addValues(final MoneyWiseXAnalysisSecurityBucket pBucket) {
409
410 addValues(theValues, pBucket.getValues());
411
412
413 addValues(theBaseValues, pBucket.getBaseValues());
414
415
416 hasForeignCurrency |= pBucket.isForeignCurrency();
417 }
418
419
420
421
422
423
424 void addValues(final MoneyWiseXAnalysisPortfolioCashBucket pBucket) {
425
426 addValues(theValues, pBucket.getValues());
427
428
429 addValues(theBaseValues, pBucket.getBaseValues());
430 }
431
432
433
434
435
436
437
438 private static void addValues(final MoneyWiseXAnalysisSecurityValues pTotals,
439 final MoneyWiseXAnalysisAccountValues pSource) {
440
441 final OceanusMoney myValue = pTotals.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.VALUATION);
442 final OceanusMoney mySrcValue = pSource.getMoneyValue(MoneyWiseXAnalysisAccountAttr.VALUATION);
443 myValue.addAmount(mySrcValue);
444 }
445
446
447
448
449
450
451
452 private static void addValues(final MoneyWiseXAnalysisSecurityValues pTotals,
453 final MoneyWiseXAnalysisSecurityValues pSource) {
454
455 OceanusMoney myValue = pTotals.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.VALUATION);
456 OceanusMoney mySrcValue = pSource.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.VALUATION);
457 myValue.addAmount(mySrcValue);
458
459
460 myValue = pTotals.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.RESIDUALCOST);
461 mySrcValue = pSource.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.RESIDUALCOST);
462 myValue.addAmount(mySrcValue);
463
464
465 myValue = pTotals.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.REALISEDGAINS);
466 mySrcValue = pSource.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.REALISEDGAINS);
467 myValue.addAmount(mySrcValue);
468
469
470 myValue = pTotals.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.GAINSADJUST);
471 mySrcValue = pSource.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.GAINSADJUST);
472 myValue.addAmount(mySrcValue);
473
474
475 myValue = pTotals.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.DIVIDEND);
476 mySrcValue = pSource.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.DIVIDEND);
477 myValue.addAmount(mySrcValue);
478
479
480 myValue = pTotals.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.MARKETPROFIT);
481 mySrcValue = pSource.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.MARKETPROFIT);
482 if (mySrcValue != null) {
483 myValue.addAmount(mySrcValue);
484 }
485
486
487 myValue = pTotals.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.PROFIT);
488 mySrcValue = pSource.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.PROFIT);
489 if (mySrcValue != null) {
490 myValue.addAmount(mySrcValue);
491 }
492 }
493
494
495
496
497
498
499 public boolean isActive() {
500
501 if (theCash.isActive()) {
502 return true;
503 }
504
505
506 final Iterator<MoneyWiseXAnalysisSecurityBucket> myIterator = securityIterator();
507 while (myIterator.hasNext()) {
508 final MoneyWiseXAnalysisSecurityBucket mySecurity = myIterator.next();
509
510
511 if (mySecurity.isActive()) {
512 return true;
513 }
514 }
515
516
517 return false;
518 }
519
520
521
522
523
524
525 public boolean isIdle() {
526
527 if (!theCash.isIdle()) {
528 return false;
529 }
530
531
532 final Iterator<MoneyWiseXAnalysisSecurityBucket> myIterator = securityIterator();
533 while (myIterator.hasNext()) {
534 final MoneyWiseXAnalysisSecurityBucket mySecurity = myIterator.next();
535
536
537 if (!mySecurity.isIdle()) {
538 return false;
539 }
540 }
541
542
543 return true;
544 }
545
546
547
548
549
550
551
552 public OceanusMoney getCashValue(final boolean pBase) {
553
554 final MoneyWiseXAnalysisAccountValues myCashValues = pBase
555 ? theCash.getBaseValues()
556 : theCash.getValues();
557 return new OceanusMoney(myCashValues.getMoneyValue(MoneyWiseXAnalysisAccountAttr.VALUATION));
558 }
559
560
561
562
563
564
565
566 public OceanusMoney getNonCashValue(final boolean pBase) {
567
568 final MoneyWiseXAnalysisSecurityValues myValues = pBase
569 ? theBaseValues
570 : theValues;
571 final OceanusMoney myValue = new OceanusMoney(myValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.VALUATION));
572 myValue.subtractAmount(getCashValue(pBase));
573 return myValue;
574 }
575
576
577
578
579 public static final class MoneyWiseXAnalysisPortfolioBucketList
580 implements MetisFieldItem, MetisDataList<MoneyWiseXAnalysisPortfolioBucket> {
581
582
583
584 private static final MetisFieldSet<MoneyWiseXAnalysisPortfolioBucketList> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseXAnalysisPortfolioBucketList.class);
585
586
587
588
589 static {
590 FIELD_DEFS.declareLocalField(MoneyWiseXAnalysisBucketResource.ANALYSIS_NAME, MoneyWiseXAnalysisPortfolioBucketList::getAnalysis);
591 FIELD_DEFS.declareLocalField(MoneyWiseXAnalysisBucketResource.ANALYSIS_TOTALS, MoneyWiseXAnalysisPortfolioBucketList::getTotals);
592 }
593
594
595
596
597 private final MoneyWiseXAnalysisHolder theAnalysis;
598
599
600
601
602 private final MetisListIndexed<MoneyWiseXAnalysisPortfolioBucket> theList;
603
604
605
606
607 private final MoneyWiseXAnalysisPortfolioBucket theTotals;
608
609
610
611
612 private Boolean haveForeignCurrency = Boolean.FALSE;
613
614
615
616
617 private Boolean haveActiveSecurities = Boolean.FALSE;
618
619
620
621
622
623
624 MoneyWiseXAnalysisPortfolioBucketList(final MoneyWiseXAnalysisHolder pAnalysis) {
625
626 theAnalysis = pAnalysis;
627 theTotals = allocateTotalsBucket();
628 theList = new MetisListIndexed<>();
629 theList.setComparator(Comparator.comparing(MoneyWiseXAnalysisPortfolioBucket::getPortfolio));
630 }
631
632
633
634
635
636
637
638
639 MoneyWiseXAnalysisPortfolioBucketList(final MoneyWiseXAnalysisHolder pAnalysis,
640 final MoneyWiseXAnalysisPortfolioBucketList pBase,
641 final OceanusDate pDate) {
642
643 this(pAnalysis);
644
645
646 final Iterator<MoneyWiseXAnalysisPortfolioBucket> myIterator = pBase.iterator();
647 while (myIterator.hasNext()) {
648 final MoneyWiseXAnalysisPortfolioBucket myCurr = myIterator.next();
649
650
651 final MoneyWiseXAnalysisPortfolioBucket myBucket = new MoneyWiseXAnalysisPortfolioBucket(pAnalysis, myCurr, pDate);
652
653
654 if (!myBucket.isIdle()) {
655
656 theList.add(myBucket);
657 }
658 }
659 }
660
661
662
663
664
665
666
667
668 MoneyWiseXAnalysisPortfolioBucketList(final MoneyWiseXAnalysisHolder pAnalysis,
669 final MoneyWiseXAnalysisPortfolioBucketList pBase,
670 final OceanusDateRange pRange) {
671
672 this(pAnalysis);
673
674
675 final Iterator<MoneyWiseXAnalysisPortfolioBucket> myIterator = pBase.iterator();
676 while (myIterator.hasNext()) {
677 final MoneyWiseXAnalysisPortfolioBucket myCurr = myIterator.next();
678
679
680 final MoneyWiseXAnalysisPortfolioBucket myBucket = new MoneyWiseXAnalysisPortfolioBucket(pAnalysis, myCurr, pRange);
681
682
683 if (myBucket.isActive() || !myBucket.isIdle()) {
684
685 theList.add(myBucket);
686 }
687 }
688 }
689
690 @Override
691 public MetisFieldSet<MoneyWiseXAnalysisPortfolioBucketList> getDataFieldSet() {
692 return FIELD_DEFS;
693 }
694
695 @Override
696 public List<MoneyWiseXAnalysisPortfolioBucket> getUnderlyingList() {
697 return theList.getUnderlyingList();
698 }
699
700 @Override
701 public String formatObject(final OceanusDataFormatter pFormatter) {
702 return getDataFieldSet().getName();
703 }
704
705
706
707
708
709
710 MoneyWiseXAnalysisHolder getAnalysis() {
711 return theAnalysis;
712 }
713
714
715
716
717
718
719 public MoneyWiseXAnalysisPortfolioBucket getTotals() {
720 return theTotals;
721 }
722
723
724
725
726
727
728 public Boolean haveForeignCurrency() {
729 return haveForeignCurrency;
730 }
731
732
733
734
735
736
737 public Boolean haveActiveSecurities() {
738 return haveActiveSecurities;
739 }
740
741
742
743
744
745
746
747 public MoneyWiseXAnalysisPortfolioBucket findItemById(final Integer pId) {
748
749 return theList.getItemById(pId);
750 }
751
752
753
754
755
756
757
758 public MoneyWiseXAnalysisPortfolioBucket getBucket(final MoneyWisePortfolio pPortfolio) {
759
760 MoneyWiseXAnalysisPortfolioBucket myItem = findItemById(pPortfolio.getIndexedId());
761
762
763 if (myItem == null) {
764
765 myItem = new MoneyWiseXAnalysisPortfolioBucket(theAnalysis, pPortfolio);
766
767
768 theList.add(myItem);
769 }
770
771
772 return myItem;
773 }
774
775
776
777
778
779
780
781 public MoneyWiseXAnalysisPortfolioCashBucket getCashBucket(final MoneyWisePortfolio pPortfolio) {
782
783 final MoneyWiseXAnalysisPortfolioBucket myItem = getBucket(pPortfolio);
784
785
786 return myItem.getPortfolioCash();
787 }
788
789
790
791
792
793
794
795 public MoneyWiseXAnalysisSecurityBucket getBucket(final MoneyWiseSecurityHolding pHolding) {
796
797 final MoneyWisePortfolio myPortfolio = pHolding.getPortfolio();
798 final MoneyWiseXAnalysisPortfolioBucket myBucket = getBucket(myPortfolio);
799
800
801 return myBucket.getSecurityBucket(pHolding);
802 }
803
804
805
806
807
808
809
810 public MoneyWiseXAnalysisPortfolioBucket getMatchingPortfolio(final MoneyWisePortfolio pPortfolio) {
811
812 final MoneyWiseXAnalysisPortfolioBucket myPortfolio = findItemById(pPortfolio.getIndexedId());
813 return myPortfolio != null
814 ? myPortfolio
815 : new MoneyWiseXAnalysisPortfolioBucket(theAnalysis, pPortfolio);
816 }
817
818
819
820
821
822
823
824 public MoneyWiseXAnalysisSecurityBucket getMatchingSecurityHolding(final MoneyWiseSecurityHolding pSecurity) {
825
826 final MoneyWiseXAnalysisPortfolioBucket myPortfolio = findItemById(pSecurity.getPortfolio().getIndexedId());
827 final MoneyWiseXAnalysisSecurityBucket mySecurity = myPortfolio == null
828 ? null
829 : myPortfolio.findSecurityBucket(pSecurity.getSecurity());
830 return mySecurity != null
831 ? mySecurity
832 : new MoneyWiseXAnalysisSecurityBucket(theAnalysis, pSecurity);
833 }
834
835
836
837
838
839
840 public MoneyWiseXAnalysisPortfolioBucket getDefaultPortfolio() {
841
842 return isEmpty()
843 ? null
844 : theList.getUnderlyingList().getFirst();
845 }
846
847
848
849
850
851
852 public MoneyWiseXAnalysisSecurityBucket getDefaultSecurityHolding() {
853
854 final Iterator<MoneyWiseXAnalysisPortfolioBucket> myIterator = iterator();
855 while (myIterator.hasNext()) {
856 final MoneyWiseXAnalysisPortfolioBucket myPortfolio = myIterator.next();
857
858
859 final Iterator<MoneyWiseXAnalysisSecurityBucket> mySecIterator = myPortfolio.securityIterator();
860 if (mySecIterator.hasNext()) {
861
862 return mySecIterator.next();
863 }
864 }
865
866
867 return null;
868 }
869
870
871
872
873
874
875 private MoneyWiseXAnalysisPortfolioBucket allocateTotalsBucket() {
876
877 return new MoneyWiseXAnalysisPortfolioBucket(theAnalysis, null);
878 }
879
880
881
882
883 public void analyseSecurities() {
884
885 final MoneyWiseXAnalysisPortfolioCashBucket myCashTotals = theTotals.getPortfolioCash();
886
887
888 final Iterator<MoneyWiseXAnalysisPortfolioBucket> myPortIterator = iterator();
889 while (myPortIterator.hasNext()) {
890 final MoneyWiseXAnalysisPortfolioBucket myPortfolio = myPortIterator.next();
891
892
893 final Iterator<MoneyWiseXAnalysisSecurityBucket> mySecIterator = myPortfolio.securityIterator();
894 while (mySecIterator.hasNext()) {
895
896 final MoneyWiseXAnalysisSecurityBucket myCurr = mySecIterator.next();
897
898
899 if (myCurr.isIdle() && !myCurr.isActive()) {
900 mySecIterator.remove();
901 continue;
902 }
903
904
905 myPortfolio.addValues(myCurr);
906 theTotals.addValues(myCurr);
907
908
909 haveActiveSecurities = Boolean.TRUE;
910
911
912 if (myCurr.isForeignCurrency()) {
913 haveForeignCurrency = Boolean.TRUE;
914 }
915 }
916
917
918 final MoneyWiseXAnalysisPortfolioCashBucket myCash = myPortfolio.getPortfolioCash();
919
920
921 if (myPortfolio.getSecurities().isEmpty()
922 && myCash.isIdle() && !myCash.isActive()) {
923 myPortIterator.remove();
924 continue;
925 }
926
927
928 if (myCash.isForeignCurrency()) {
929 haveForeignCurrency = Boolean.TRUE;
930 }
931
932
933 myCash.calculateDelta();
934 myPortfolio.addValues(myCash);
935 theTotals.addValues(myCash);
936 myCashTotals.addValues(myCash);
937
938
939 myPortfolio.getSecurities().sortBuckets();
940
941
942 myPortfolio.calculateDelta();
943 }
944
945
946 theList.sortList();
947
948
949 theTotals.calculateDelta();
950 }
951
952
953
954
955
956
957 public void markActiveSecurities() throws OceanusException {
958
959 final Iterator<MoneyWiseXAnalysisPortfolioBucket> myIterator = iterator();
960 while (myIterator.hasNext()) {
961 final MoneyWiseXAnalysisPortfolioBucket myCurr = myIterator.next();
962
963
964 final MoneyWiseXAnalysisSecurityBucketList mySecurities = myCurr.getSecurities();
965 if (mySecurities.markActiveSecurities()) {
966
967 final MoneyWisePortfolio myPortfolio = myCurr.getPortfolio();
968 if (Boolean.TRUE.equals(myPortfolio.isClosed())
969 && theAnalysis.getData().checkClosedAccounts()) {
970
971 throw new MoneyWiseDataException(myCurr, "Illegally closed portfolio");
972 }
973
974
975 myPortfolio.setRelevant();
976 }
977 }
978 }
979 }
980 }