1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.atlas.reports;
18
19 import io.github.tonywasher.joceanus.metis.report.MetisReportBase;
20 import io.github.tonywasher.joceanus.metis.report.MetisReportManager;
21 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysis;
22 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysisSecurityBucket;
23 import io.github.tonywasher.joceanus.moneywise.atlas.views.MoneyWiseXAnalysisFilter;
24 import org.w3c.dom.Document;
25
26 import java.util.EnumMap;
27 import java.util.Map;
28
29
30
31
32
33
34 public class MoneyWiseXReportBuilder {
35
36
37
38 private final MetisReportManager<MoneyWiseXAnalysisFilter<?, ?>> theManager;
39
40
41
42
43 private final Map<MoneyWiseXReportType, MetisReportBase<MoneyWiseXAnalysis, MoneyWiseXAnalysisFilter<?, ?>>> theReportMap;
44
45
46
47
48
49
50 public MoneyWiseXReportBuilder(final MetisReportManager<MoneyWiseXAnalysisFilter<?, ?>> pManager) {
51
52 theManager = pManager;
53
54
55 theReportMap = new EnumMap<>(MoneyWiseXReportType.class);
56 }
57
58
59
60
61
62
63
64
65
66 public Document createReport(final MoneyWiseXAnalysis pAnalysis,
67 final MoneyWiseXReportType pType,
68 final MoneyWiseXAnalysisSecurityBucket pSecurity) {
69
70 MetisReportBase<MoneyWiseXAnalysis, MoneyWiseXAnalysisFilter<?, ?>> myReport = theReportMap.get(pType);
71
72
73 if (myReport == null) {
74
75 myReport = switch (pType) {
76 case NETWORTH -> new MoneyWiseXReportNetWorth(theManager);
77 case BALANCESHEET -> new MoneyWiseXReportBalanceSheet(theManager);
78 case CASHFLOW -> new MoneyWiseXReportCashFlow(theManager);
79 case INCOMEEXPENSE -> new MoneyWiseXReportIncomeExpense(theManager);
80 case PORTFOLIO -> new MoneyWiseXReportPortfolioView(theManager);
81 case MARKETGROWTH -> new MoneyWiseXReportMarketGrowth(theManager);
82 case TAXBASIS -> new MoneyWiseXReportTaxationBasis(theManager);
83 case TAXCALC -> new MoneyWiseXReportTaxCalculation(theManager);
84 case ASSETGAINS -> new MoneyWiseXReportAssetGains(theManager);
85 case CAPITALGAINS -> new MoneyWiseXReportCapitalGains(theManager);
86 default -> null;
87 };
88
89
90 if (myReport == null) {
91 return null;
92 }
93
94
95 theReportMap.put(pType, myReport);
96 }
97
98
99 if (myReport instanceof MoneyWiseXReportCapitalGains myCapGains) {
100 myCapGains.setSecurity(pSecurity);
101 }
102
103
104 theManager.setReport(myReport);
105
106
107 return myReport.createReport(pAnalysis);
108 }
109 }