1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.views;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.oceanus.date.OceanusDateRange;
21 import io.github.tonywasher.joceanus.oceanus.profile.OceanusProfile;
22 import io.github.tonywasher.joceanus.metis.viewer.MetisViewerEntry;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDataSet;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTax.MoneyWiseTaxFactory;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
26 import io.github.tonywasher.joceanus.moneywise.data.validate.MoneyWiseValidatorFactory;
27 import io.github.tonywasher.joceanus.moneywise.database.MoneyWiseDataStore;
28 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.analyse.MoneyWiseAnalysisTransAnalyser;
29 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysis;
30 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisManager;
31 import io.github.tonywasher.joceanus.moneywise.sheets.MoneyWiseSheet;
32 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataSet;
33 import io.github.tonywasher.joceanus.prometheus.database.PrometheusDBConfig;
34 import io.github.tonywasher.joceanus.prometheus.database.PrometheusDataStore;
35 import io.github.tonywasher.joceanus.prometheus.database.PrometheusDatabase.PrometheusDatabasePreferenceKey;
36 import io.github.tonywasher.joceanus.prometheus.database.PrometheusDatabase.PrometheusDatabasePreferences;
37 import io.github.tonywasher.joceanus.prometheus.sheets.PrometheusSpreadSheet;
38 import io.github.tonywasher.joceanus.prometheus.toolkit.PrometheusToolkit;
39 import io.github.tonywasher.joceanus.prometheus.views.PrometheusDataControl;
40 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
41 import io.github.tonywasher.joceanus.prometheus.views.PrometheusViewerEntryId;
42
43
44
45
46 public class MoneyWiseView
47 extends PrometheusDataControl {
48
49
50
51 private final MoneyWiseTaxFactory theTaxFactory;
52
53
54
55
56 private final MoneyWiseMaps theMaps;
57
58
59
60
61 private MoneyWiseDataSet theData;
62
63
64
65
66 private MoneyWiseAnalysisManager theAnalysisMgr;
67
68
69
70
71 private boolean hasActiveSecurities;
72
73
74
75
76 private boolean hasMultiCurrency;
77
78
79
80
81
82
83
84 public MoneyWiseView(final PrometheusToolkit pUtilitySet,
85 final MoneyWiseTaxFactory pTaxFactory) {
86
87 super(pUtilitySet);
88
89
90 theTaxFactory = pTaxFactory;
91
92
93 setValidatorFactory(new MoneyWiseValidatorFactory());
94
95
96 setData(getNewData());
97
98
99 theMaps = new MoneyWiseMaps(this);
100 }
101
102
103
104
105
106
107 public OceanusDateRange getRange() {
108 return theTaxFactory.getDateRange();
109 }
110
111
112
113
114
115
116 public MoneyWiseAnalysisManager getAnalysisManager() {
117 return theAnalysisMgr;
118 }
119
120
121
122
123
124
125 public boolean hasActiveSecurities() {
126 return hasActiveSecurities;
127 }
128
129
130
131
132
133
134 public boolean hasMultipleCurrencies() {
135 return hasMultiCurrency;
136 }
137
138
139
140
141
142
143 @Override
144 public final MoneyWiseDataSet getNewData() {
145 final MoneyWiseDataSet myDataSet = new MoneyWiseDataSet(getToolkit(), theTaxFactory);
146 myDataSet.setValidatorFactory(getValidatorFactory());
147 return myDataSet;
148 }
149
150 @Override
151 public String getDatabaseName() {
152 final PrometheusDatabasePreferences myPrefs = getPreferenceManager().getPreferenceSet(PrometheusDatabasePreferences.class);
153 return myPrefs.getStringValue(PrometheusDatabasePreferenceKey.DBNAME);
154 }
155
156 @Override
157 public PrometheusDataStore getDatabase() throws OceanusException {
158 final PrometheusDatabasePreferences myPrefs = getPreferenceManager().getPreferenceSet(PrometheusDatabasePreferences.class);
159 final PrometheusDBConfig myConfig = PrometheusDBConfig.fromPrefs(myPrefs);
160 return new MoneyWiseDataStore(myPrefs.getStringValue(PrometheusDatabasePreferenceKey.DBNAME), myConfig);
161 }
162
163 @Override
164 public PrometheusDataStore getNullDatabase() throws OceanusException {
165 final PrometheusDatabasePreferences myPrefs = getPreferenceManager().getPreferenceSet(PrometheusDatabasePreferences.class);
166 final PrometheusDBConfig myConfig = PrometheusDBConfig.fromPrefs(myPrefs);
167 return new MoneyWiseDataStore(myConfig);
168 }
169
170
171
172
173
174
175 @Override
176 public PrometheusSpreadSheet getSpreadSheet() {
177 return new MoneyWiseSheet(getGuiFactory());
178 }
179
180
181
182
183
184
185 @Override
186 public final void setData(final PrometheusDataSet pData) {
187
188 theData = (MoneyWiseDataSet) pData;
189 super.setData(pData);
190
191 if (theMaps != null) {
192 theMaps.adjustForDataSet(pData);
193 }
194 }
195
196 @Override
197 public MoneyWiseDataSet getData() {
198 return theData;
199 }
200
201
202
203
204
205
206
207
208 public final MoneyWiseAnalysisTransAnalyser analyseData(final MoneyWiseDataSet pData) throws OceanusException {
209
210 OceanusProfile myTask = getActiveTask();
211 myTask = myTask.startTask("analyseData");
212
213
214 myTask.startTask("updateMaps");
215 pData.updateMaps();
216
217
218 final PrometheusEditSet myEditSet = new PrometheusEditSet(this);
219 final MoneyWiseAnalysisTransAnalyser myAnalyser = new MoneyWiseAnalysisTransAnalyser(myTask, myEditSet, getPreferenceManager());
220
221
222 myAnalyser.postProcessAnalysis();
223
224
225 myTask.end();
226
227
228 return myAnalyser;
229 }
230
231 @Override
232 protected boolean analyseData(final boolean bPreserve) {
233
234 OceanusProfile myTask = getActiveTask();
235 myTask = myTask.startTask("analyseTheData");
236
237
238 if (!bPreserve) {
239 clearErrors();
240 }
241
242
243 try {
244
245 final MoneyWiseAnalysisTransAnalyser myAnalyser = analyseData(theData);
246 final MoneyWiseAnalysis myAnalysis = myAnalyser.getAnalysis();
247 theAnalysisMgr = new MoneyWiseAnalysisManager(myAnalysis);
248
249
250 myTask.startTask("AnalyseBase");
251 theAnalysisMgr.analyseBase();
252 hasMultiCurrency = theAnalysisMgr.haveForeignCurrency();
253 hasActiveSecurities = theAnalysisMgr.haveActiveSecurities();
254
255
256 final MetisViewerEntry myData = getViewerEntry(PrometheusViewerEntryId.ANALYSIS);
257 myData.setTreeObject(theAnalysisMgr);
258
259
260 myTask.startTask("deriveUpdates");
261 deriveUpdates();
262
263
264 } catch (OceanusException e) {
265 if (!bPreserve) {
266 addError(e);
267 }
268 }
269
270
271 myTask.end();
272
273
274 return getErrors().isEmpty();
275 }
276
277
278
279
280
281
282 public void setReportingCurrency(final MoneyWiseCurrency pCurrency) {
283
284 theData.getAccountCurrencies().setReportingCurrency(pCurrency);
285
286
287 theData.getExchangeRates().setReportingCurrency(pCurrency);
288
289
290 incrementVersion();
291 }
292 }