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 java.util.EnumMap;
20 import java.util.Map;
21
22 import org.w3c.dom.Document;
23
24 import io.github.tonywasher.joceanus.metis.report.MetisReportBase;
25 import io.github.tonywasher.joceanus.metis.report.MetisReportManager;
26 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysis;
27 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisDataResource;
28 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisSecurityBucket;
29 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.values.MoneyWiseAnalysisValuesResource;
30 import io.github.tonywasher.joceanus.moneywise.lethe.views.MoneyWiseAnalysisFilter;
31
32
33
34
35
36
37 public class MoneyWiseReportBuilder {
38
39
40
41 protected static final String TEXT_TOTAL = MoneyWiseAnalysisDataResource.ANALYSIS_TOTALS.getValue();
42
43
44
45
46 protected static final String TEXT_PROFIT = MoneyWiseAnalysisValuesResource.SECURITYATTR_PROFIT.getValue();
47
48
49
50
51 protected static final String TEXT_INCOME = MoneyWiseAnalysisValuesResource.PAYEEATTR_INCOME.getValue();
52
53
54
55
56 protected static final String TEXT_EXPENSE = MoneyWiseAnalysisValuesResource.PAYEEATTR_EXPENSE.getValue();
57
58
59
60
61 private final MetisReportManager<MoneyWiseAnalysisFilter<?, ?>> theManager;
62
63
64
65
66 private final Map<MoneyWiseReportType, MetisReportBase<MoneyWiseAnalysis, MoneyWiseAnalysisFilter<?, ?>>> theReportMap;
67
68
69
70
71
72
73 public MoneyWiseReportBuilder(final MetisReportManager<MoneyWiseAnalysisFilter<?, ?>> pManager) {
74
75 theManager = pManager;
76
77
78 theReportMap = new EnumMap<>(MoneyWiseReportType.class);
79 }
80
81
82
83
84
85
86
87
88
89 public Document createReport(final MoneyWiseAnalysis pAnalysis,
90 final MoneyWiseReportType pType,
91 final MoneyWiseAnalysisSecurityBucket pSecurity) {
92
93 MetisReportBase<MoneyWiseAnalysis, MoneyWiseAnalysisFilter<?, ?>> myReport = theReportMap.get(pType);
94
95
96 if (myReport == null) {
97
98 switch (pType) {
99 case NETWORTH:
100 myReport = new MoneyWiseReportNetWorth(theManager);
101 break;
102 case BALANCESHEET:
103 myReport = new MoneyWiseReportBalanceSheet(theManager);
104 break;
105 case CASHFLOW:
106 myReport = new MoneyWiseReportCashFlow(theManager);
107 break;
108 case INCOMEEXPENSE:
109 myReport = new MoneyWiseReportIncomeExpense(theManager);
110 break;
111 case PORTFOLIO:
112 myReport = new MoneyWiseReportPortfolioView(theManager);
113 break;
114 case MARKETGROWTH:
115 myReport = new MoneyWiseReportMarketGrowth(theManager);
116 break;
117 case TAXBASIS:
118 myReport = new MoneyWiseReportTaxationBasis(theManager);
119 break;
120 case TAXCALC:
121 myReport = new MoneyWiseReportTaxCalculation(theManager);
122 break;
123 case ASSETGAINS:
124 myReport = new MoneyWiseReportAssetGains(theManager);
125 break;
126 case CAPITALGAINS:
127 myReport = new MoneyWiseReportCapitalGains(theManager);
128 break;
129 default:
130 return null;
131 }
132
133
134 theReportMap.put(pType, myReport);
135 }
136
137
138 if (myReport instanceof MoneyWiseReportCapitalGains) {
139 ((MoneyWiseReportCapitalGains) myReport).setSecurity(pSecurity);
140 }
141
142
143 theManager.setReport(myReport);
144
145
146 return myReport.createReport(pAnalysis);
147 }
148 }