1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.lethe.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.lethe.data.analysis.data.MoneyWiseAnalysis;
22 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisSecurityBucket;
23 import io.github.tonywasher.joceanus.moneywise.lethe.views.MoneyWiseAnalysisFilter;
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 MoneyWiseReportBuilder {
35
36
37
38 private final MetisReportManager<MoneyWiseAnalysisFilter<?, ?>> theManager;
39
40
41
42
43 private final Map<MoneyWiseReportType, MetisReportBase<MoneyWiseAnalysis, MoneyWiseAnalysisFilter<?, ?>>> theReportMap;
44
45
46
47
48
49
50 public MoneyWiseReportBuilder(final MetisReportManager<MoneyWiseAnalysisFilter<?, ?>> pManager) {
51
52 theManager = pManager;
53
54
55 theReportMap = new EnumMap<>(MoneyWiseReportType.class);
56 }
57
58
59
60
61
62
63
64
65
66 public Document createReport(final MoneyWiseAnalysis pAnalysis,
67 final MoneyWiseReportType pType,
68 final MoneyWiseAnalysisSecurityBucket pSecurity) {
69
70 MetisReportBase<MoneyWiseAnalysis, MoneyWiseAnalysisFilter<?, ?>> myReport = theReportMap.get(pType);
71
72
73 if (myReport == null) {
74
75 myReport = switch (pType) {
76 case NETWORTH -> new MoneyWiseReportNetWorth(theManager);
77 case BALANCESHEET -> new MoneyWiseReportBalanceSheet(theManager);
78 case CASHFLOW -> new MoneyWiseReportCashFlow(theManager);
79 case INCOMEEXPENSE -> new MoneyWiseReportIncomeExpense(theManager);
80 case PORTFOLIO -> new MoneyWiseReportPortfolioView(theManager);
81 case MARKETGROWTH -> new MoneyWiseReportMarketGrowth(theManager);
82 case TAXBASIS -> new MoneyWiseReportTaxationBasis(theManager);
83 case TAXCALC -> new MoneyWiseReportTaxCalculation(theManager);
84 case ASSETGAINS -> new MoneyWiseReportAssetGains(theManager);
85 case CAPITALGAINS -> new MoneyWiseReportCapitalGains(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 MoneyWiseReportCapitalGains myCapGains) {
100 myCapGains.setSecurity(pSecurity);
101 }
102
103
104 theManager.setReport(myReport);
105
106
107 return myReport.createReport(pAnalysis);
108 }
109 }