1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.ui.panel;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.oceanus.profile.OceanusProfile;
21 import io.github.tonywasher.joceanus.metis.data.MetisDataDifference;
22 import io.github.tonywasher.joceanus.metis.ui.MetisErrorPanel;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicDataType;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDataSet;
25 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDeposit;
26 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDeposit.MoneyWiseDepositList;
27 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDepositRate;
28 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDepositRate.MoneyWiseDepositRateList;
29 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePayee;
30 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAssetCategory;
31 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
32 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
33 import io.github.tonywasher.joceanus.moneywise.ui.base.MoneyWiseAssetTable;
34 import io.github.tonywasher.joceanus.moneywise.ui.dialog.MoneyWiseDepositDialog;
35 import io.github.tonywasher.joceanus.moneywise.views.MoneyWiseView;
36 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
37 import io.github.tonywasher.joceanus.prometheus.views.PrometheusDataEvent;
38 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditEntry;
39 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
40 import io.github.tonywasher.joceanus.tethys.api.factory.TethysUIFactory;
41 import io.github.tonywasher.joceanus.tethys.api.menu.TethysUIScrollMenu;
42
43 import java.util.Iterator;
44
45
46
47
48 public class MoneyWiseDepositTable
49 extends MoneyWiseAssetTable<MoneyWiseDeposit> {
50
51
52
53 private final PrometheusEditEntry<MoneyWiseDepositRate> theRateEntry;
54
55
56
57
58 private final MoneyWiseDepositDialog theActiveDeposit;
59
60
61
62
63 private MoneyWiseDepositList theDeposits;
64
65
66
67
68
69
70
71
72 MoneyWiseDepositTable(final MoneyWiseView pView,
73 final PrometheusEditSet pEditSet,
74 final MetisErrorPanel pError) {
75
76 super(pView, pEditSet, pError, MoneyWiseBasicDataType.DEPOSIT);
77
78
79 getEditSet().registerType(MoneyWiseBasicDataType.DEPOSITINFO);
80 theRateEntry = getEditSet().registerType(MoneyWiseBasicDataType.DEPOSITRATE);
81
82
83 final TethysUIFactory<?> myGuiFactory = pView.getGuiFactory();
84
85
86 theActiveDeposit = new MoneyWiseDepositDialog(myGuiFactory, pView, pEditSet, this);
87 declareItemPanel(theActiveDeposit);
88
89
90 finishTable(true, true, true);
91
92
93 theActiveDeposit.getEventRegistrar().addEventListener(PrometheusDataEvent.ADJUSTVISIBILITY, e -> handlePanelState());
94 }
95
96 @Override
97 protected boolean isItemEditing() {
98 return theActiveDeposit.isEditing();
99 }
100
101 @Override
102 protected void refreshData() throws OceanusException {
103
104 OceanusProfile myTask = getView().getActiveTask();
105 myTask = myTask.startTask("Deposits");
106
107
108 final MoneyWiseDataSet myData = getView().getData();
109 final MoneyWiseDepositList myBase = myData.getDeposits();
110 theDeposits = myBase.deriveEditList(getEditSet());
111 getTable().setItems(theDeposits.getUnderlyingList());
112
113
114 MoneyWiseDepositRateList myRates = myData.getDepositRates();
115 myRates = myRates.deriveEditList(getEditSet());
116 theRateEntry.setDataList(myRates);
117
118
119 theActiveDeposit.refreshData();
120 restoreSelected();
121
122
123 myTask.end();
124 }
125
126 @Override
127 public void cancelEditing() {
128 super.cancelEditing();
129 theActiveDeposit.setEditable(false);
130 }
131
132
133
134
135
136
137 void selectDeposit(final MoneyWiseDeposit pDeposit) {
138
139 checkShowAll(pDeposit);
140
141
142 final MoneyWiseDeposit myCurrent = theActiveDeposit.getSelectedItem();
143 if (!MetisDataDifference.isEqual(myCurrent, pDeposit)) {
144
145 getTable().selectRow(pDeposit);
146 }
147 }
148
149 @Override
150 protected void handleRewind() {
151
152 if (!theActiveDeposit.isEditing()) {
153
154 setEnabled(true);
155 super.handleRewind();
156 }
157
158
159 notifyChanges();
160 }
161
162
163
164
165 private void handlePanelState() {
166
167 if (!theActiveDeposit.isEditing()) {
168
169 setEnabled(true);
170 final MoneyWiseDeposit myDeposit = theActiveDeposit.getSelectedItem();
171 updateTableData();
172 if (myDeposit != null) {
173 getTable().selectRow(myDeposit);
174 } else {
175 restoreSelected();
176 }
177 } else {
178 getTable().cancelEditing();
179 }
180
181
182 notifyChanges();
183 }
184
185 @Override
186 protected void buildCategoryMenu(final MoneyWiseDeposit pDeposit,
187 final TethysUIScrollMenu<MoneyWiseAssetCategory> pMenu) {
188
189 theActiveDeposit.buildCategoryMenu(pMenu, pDeposit);
190 }
191
192 @Override
193 protected void buildParentMenu(final MoneyWiseDeposit pDeposit,
194 final TethysUIScrollMenu<MoneyWisePayee> pMenu) {
195
196 theActiveDeposit.buildParentMenu(pMenu, pDeposit);
197 }
198
199 @Override
200 protected void buildCurrencyMenu(final MoneyWiseDeposit pDeposit,
201 final TethysUIScrollMenu<MoneyWiseCurrency> pMenu) {
202
203 theActiveDeposit.buildCurrencyMenu(pMenu, pDeposit);
204 }
205
206 @Override
207 protected void addNewItem() {
208
209 try {
210
211 cancelEditing();
212
213
214 final OceanusProfile myTask = getView().getNewProfile("addNewItem");
215
216
217 myTask.startTask("buildItem");
218 final MoneyWiseDeposit myDeposit = theDeposits.addNewItem();
219 myDeposit.setDefaults();
220
221
222 myTask.startTask("incrementVersion");
223 myDeposit.setNewVersion();
224 myDeposit.adjustMapForItem();
225 getEditSet().incrementVersion();
226
227
228 myTask.startTask("validate");
229 myDeposit.validate();
230
231
232 myTask.startTask("setItem");
233 theActiveDeposit.setNewItem(myDeposit);
234
235
236 setTableEnabled(false);
237 myTask.end();
238
239
240 } catch (OceanusException e) {
241
242 final OceanusException myError = new MoneyWiseDataException("Failed to create new deposit", e);
243
244
245 setError(myError);
246 }
247 }
248
249 @Override
250 protected Iterator<PrometheusDataItem> nameSpaceIterator() {
251 return assetNameSpaceIterator();
252 }
253 }
254