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.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
21 import io.github.tonywasher.joceanus.oceanus.date.OceanusDateRange;
22 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusMoney;
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.field.MetisFieldItem;
28 import io.github.tonywasher.joceanus.metis.field.MetisFieldItem.MetisFieldTableItem;
29 import io.github.tonywasher.joceanus.metis.field.MetisFieldSet;
30 import io.github.tonywasher.joceanus.metis.list.MetisListIndexed;
31 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysisSecurityBucket.MoneyWiseXAnalysisSecurityBucketList;
32 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisAccountAttr;
33 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisAccountValues;
34 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisSecurityAttr;
35 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisSecurityValues;
36 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicDataType;
37 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePortfolio;
38 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurity;
39 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurityHolding;
40 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
41 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
42
43 import java.util.Currency;
44 import java.util.Iterator;
45 import java.util.List;
46
47
48
49
50 public final class MoneyWiseXAnalysisPortfolioBucket
51 implements MetisFieldTableItem {
52
53
54
55 private static final MetisFieldSet<MoneyWiseXAnalysisPortfolioBucket> FIELD_DEFS = MetisFieldSet.newFieldSet(MoneyWiseXAnalysisPortfolioBucket.class);
56
57
58
59
60 static {
61 FIELD_DEFS.declareLocalField(MoneyWiseBasicDataType.PORTFOLIO, MoneyWiseXAnalysisPortfolioBucket::getPortfolio);
62 FIELD_DEFS.declareLocalField(MoneyWiseXAnalysisBucketResource.BUCKET_BASEVALUES, MoneyWiseXAnalysisPortfolioBucket::getPortfolioCash);
63 FIELD_DEFS.declareLocalField(MoneyWiseBasicDataType.CASH, MoneyWiseXAnalysisPortfolioBucket::getBaseValues);
64 FIELD_DEFS.declareLocalField(MoneyWiseBasicDataType.SECURITY.getListId(), MoneyWiseXAnalysisPortfolioBucket::getSecurities);
65 FIELD_DEFS.declareLocalFieldsForEnum(MoneyWiseXAnalysisSecurityAttr.class, MoneyWiseXAnalysisPortfolioBucket::getValue);
66 }
67
68
69
70
71 private static final MetisDataFieldId NAME_TOTALS = MoneyWiseXAnalysisBucketResource.ANALYSIS_TOTALS;
72
73
74
75
76 private final MoneyWisePortfolio thePortfolio;
77
78
79
80
81 private final MoneyWiseCurrency theCurrency;
82
83
84
85
86 private final MoneyWiseXAnalysisPortfolioCashBucket theCash;
87
88
89
90
91 private final MoneyWiseXAnalysisSecurityBucketList theSecurities;
92
93
94
95
96 private final MoneyWiseXAnalysisSecurityValues theValues;
97
98
99
100
101 private final MoneyWiseXAnalysisSecurityValues theBaseValues;
102
103
104
105
106 private final Boolean isForeignCurrency;
107
108
109
110
111 private boolean hasForeignCurrency;
112
113
114
115
116
117
118
119 private MoneyWiseXAnalysisPortfolioBucket(final MoneyWiseXAnalysis pAnalysis,
120 final MoneyWisePortfolio pPortfolio) {
121
122 thePortfolio = pPortfolio;
123 theCurrency = pAnalysis.getCurrency();
124
125
126 theCash = new MoneyWiseXAnalysisPortfolioCashBucket(pAnalysis, pPortfolio);
127
128
129 theSecurities = pPortfolio != null
130 ? new MoneyWiseXAnalysisSecurityBucketList(pAnalysis)
131 : null;
132
133
134 final Currency myCurrency = theCurrency == null
135 ? MoneyWiseXAnalysisAccountBucket.DEFAULT_CURRENCY
136 : theCurrency.getCurrency();
137 theValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
138 theBaseValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
139
140
141 theValues.setValue(MoneyWiseXAnalysisSecurityAttr.VALUATION, new OceanusMoney(myCurrency));
142 theBaseValues.setValue(MoneyWiseXAnalysisSecurityAttr.VALUATION, new OceanusMoney(myCurrency));
143
144
145 isForeignCurrency = !MetisDataDifference.isEqual(pAnalysis.getCurrency(), theCurrency);
146 hasForeignCurrency = isForeignCurrency;
147 }
148
149
150
151
152
153
154
155
156 private MoneyWiseXAnalysisPortfolioBucket(final MoneyWiseXAnalysis pAnalysis,
157 final MoneyWiseXAnalysisPortfolioBucket pBase,
158 final OceanusDate pDate) {
159
160 thePortfolio = pBase.getPortfolio();
161 theCurrency = pBase.getCurrency();
162 isForeignCurrency = pBase.isForeignCurrency();
163
164
165 theCash = new MoneyWiseXAnalysisPortfolioCashBucket(pAnalysis, pBase.getPortfolioCash(), pDate);
166
167
168 theSecurities = thePortfolio != null
169 ? new MoneyWiseXAnalysisSecurityBucketList(pAnalysis, pBase.getSecurities(), pDate)
170 : null;
171
172
173 final Currency myCurrency = theCurrency.getCurrency();
174 theValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
175 theBaseValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
176 }
177
178
179
180
181
182
183
184
185 private MoneyWiseXAnalysisPortfolioBucket(final MoneyWiseXAnalysis pAnalysis,
186 final MoneyWiseXAnalysisPortfolioBucket pBase,
187 final OceanusDateRange pRange) {
188
189 thePortfolio = pBase.getPortfolio();
190 theCurrency = pBase.getCurrency();
191 isForeignCurrency = pBase.isForeignCurrency();
192
193
194 theCash = new MoneyWiseXAnalysisPortfolioCashBucket(pAnalysis, pBase.getPortfolioCash(), pRange);
195
196
197 theSecurities = thePortfolio != null
198 ? new MoneyWiseXAnalysisSecurityBucketList(pAnalysis, pBase.getSecurities(), pRange)
199 : null;
200
201
202 final Currency myCurrency = theCurrency.getCurrency();
203 theValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
204 theBaseValues = new MoneyWiseXAnalysisSecurityValues(myCurrency);
205 }
206
207 @Override
208 public MetisFieldSet<MoneyWiseXAnalysisPortfolioBucket> getDataFieldSet() {
209 return FIELD_DEFS;
210 }
211
212 @Override
213 public String formatObject(final OceanusDataFormatter pFormatter) {
214 return toString();
215 }
216
217 @Override
218 public String toString() {
219 return getName() + theValues;
220 }
221
222
223
224
225
226
227 public Boolean isForeignCurrency() {
228 return isForeignCurrency;
229 }
230
231
232
233
234
235
236 public Boolean hasForeignCurrency() {
237 return hasForeignCurrency;
238 }
239
240
241
242
243
244
245 public String getName() {
246 return thePortfolio == null
247 ? NAME_TOTALS.getId()
248 : thePortfolio.getName();
249 }
250
251 @Override
252 public Integer getIndexedId() {
253 return thePortfolio.getIndexedId();
254 }
255
256
257
258
259
260
261 public MoneyWisePortfolio getPortfolio() {
262 return thePortfolio;
263 }
264
265
266
267
268
269
270 public MoneyWiseCurrency getCurrency() {
271 return theCurrency;
272 }
273
274
275
276
277
278
279 public MoneyWiseXAnalysisPortfolioCashBucket getPortfolioCash() {
280 return theCash;
281 }
282
283
284
285
286
287
288 public MoneyWiseXAnalysisSecurityBucketList getSecurities() {
289 return theSecurities;
290 }
291
292
293
294
295
296
297 public Iterator<MoneyWiseXAnalysisSecurityBucket> securityIterator() {
298 return theSecurities.iterator();
299 }
300
301
302
303
304
305
306 public MoneyWiseXAnalysisSecurityValues getValues() {
307 return theValues;
308 }
309
310
311
312
313
314
315 public MoneyWiseXAnalysisSecurityValues getBaseValues() {
316 return theBaseValues;
317 }
318
319
320
321
322
323
324
325 void setValue(final MoneyWiseXAnalysisSecurityAttr pAttr,
326 final OceanusMoney pValue) {
327
328 theValues.setValue(pAttr, pValue);
329 }
330
331
332
333
334
335
336
337 private Object getValue(final MoneyWiseXAnalysisSecurityAttr pAttr) {
338
339 return theValues.getValue(pAttr);
340 }
341
342
343
344
345
346
347
348 public MoneyWiseXAnalysisSecurityBucket getSecurityBucket(final MoneyWiseSecurityHolding pHolding) {
349
350 return theSecurities.getBucket(pHolding);
351 }
352
353
354
355
356
357
358
359 public MoneyWiseXAnalysisSecurityBucket findSecurityBucket(final MoneyWiseSecurity pSecurity) {
360
361 return theSecurities.findItemById(pSecurity.getIndexedId());
362 }
363
364 @Override
365 public boolean equals(final Object pThat) {
366
367 if (this == pThat) {
368 return true;
369 }
370 if (pThat == null) {
371 return false;
372 }
373 if (!(pThat instanceof MoneyWiseXAnalysisPortfolioBucket)) {
374 return false;
375 }
376
377
378 final MoneyWiseXAnalysisPortfolioBucket myThat = (MoneyWiseXAnalysisPortfolioBucket) pThat;
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 MoneyWiseXAnalysis 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 MoneyWiseXAnalysis pAnalysis) {
625
626 theAnalysis = pAnalysis;
627 theTotals = allocateTotalsBucket();
628 theList = new MetisListIndexed<>();
629 theList.setComparator((l, r) -> l.getPortfolio().compareTo(r.getPortfolio()));
630 }
631
632
633
634
635
636
637
638
639 MoneyWiseXAnalysisPortfolioBucketList(final MoneyWiseXAnalysis 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 MoneyWiseXAnalysis 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 MoneyWiseXAnalysis 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().get(0);
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 }