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.MoneyWiseCash;
25 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseCash.MoneyWiseCashList;
26 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDataSet;
27 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAssetCategory;
28 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
29 import io.github.tonywasher.joceanus.moneywise.exc.MoneyWiseDataException;
30 import io.github.tonywasher.joceanus.moneywise.ui.base.MoneyWiseAssetTable;
31 import io.github.tonywasher.joceanus.moneywise.ui.dialog.MoneyWiseCashDialog;
32 import io.github.tonywasher.joceanus.moneywise.views.MoneyWiseView;
33 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
34 import io.github.tonywasher.joceanus.prometheus.views.PrometheusDataEvent;
35 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
36 import io.github.tonywasher.joceanus.tethys.api.factory.TethysUIFactory;
37 import io.github.tonywasher.joceanus.tethys.api.menu.TethysUIScrollMenu;
38
39 import java.util.Iterator;
40
41
42
43
44 public class MoneyWiseCashTable
45 extends MoneyWiseAssetTable<MoneyWiseCash> {
46
47
48
49 private final MoneyWiseCashDialog theActiveCash;
50
51
52
53
54 private MoneyWiseCashList theCash;
55
56
57
58
59
60
61
62
63 MoneyWiseCashTable(final MoneyWiseView pView,
64 final PrometheusEditSet pEditSet,
65 final MetisErrorPanel pError) {
66
67 super(pView, pEditSet, pError, MoneyWiseBasicDataType.CASH);
68
69
70 getEditSet().registerType(MoneyWiseBasicDataType.CASHINFO);
71
72
73 final TethysUIFactory<?> myGuiFactory = pView.getGuiFactory();
74
75
76 theActiveCash = new MoneyWiseCashDialog(myGuiFactory, pEditSet, this);
77 declareItemPanel(theActiveCash);
78
79
80 finishTable(false, true, true);
81
82
83 theActiveCash.getEventRegistrar().addEventListener(PrometheusDataEvent.ADJUSTVISIBILITY, e -> handlePanelState());
84 }
85
86 @Override
87 protected boolean isItemEditing() {
88 return theActiveCash.isEditing();
89 }
90
91 @Override
92 protected void refreshData() throws OceanusException {
93
94 OceanusProfile myTask = getView().getActiveTask();
95 myTask = myTask.startTask("Cashs");
96
97
98 final MoneyWiseDataSet myData = getView().getData();
99 final MoneyWiseCashList myBase = myData.getCash();
100 theCash = myBase.deriveEditList(getEditSet());
101 getTable().setItems(theCash.getUnderlyingList());
102
103
104 theActiveCash.refreshData();
105 restoreSelected();
106
107
108 myTask.end();
109 }
110
111 @Override
112 public void cancelEditing() {
113 super.cancelEditing();
114 theActiveCash.setEditable(false);
115 }
116
117
118
119
120
121
122 void selectCash(final MoneyWiseCash pCash) {
123
124 checkShowAll(pCash);
125
126
127 final MoneyWiseCash myCurrent = theActiveCash.getSelectedItem();
128 if (!MetisDataDifference.isEqual(myCurrent, pCash)) {
129
130 getTable().selectRow(pCash);
131 }
132 }
133
134 @Override
135 protected void handleRewind() {
136
137 if (!theActiveCash.isEditing()) {
138
139 setEnabled(true);
140 super.handleRewind();
141 }
142
143
144 notifyChanges();
145 }
146
147
148
149
150 private void handlePanelState() {
151
152 if (!theActiveCash.isEditing()) {
153
154 setEnabled(true);
155 final MoneyWiseCash myCash = theActiveCash.getSelectedItem();
156 updateTableData();
157 if (myCash != null) {
158 getTable().selectRow(myCash);
159 } else {
160 restoreSelected();
161 }
162 } else {
163 getTable().cancelEditing();
164 }
165
166
167 notifyChanges();
168 }
169
170 @Override
171 protected void buildCategoryMenu(final MoneyWiseCash pCash,
172 final TethysUIScrollMenu<MoneyWiseAssetCategory> pMenu) {
173
174 theActiveCash.buildCategoryMenu(pMenu, pCash);
175 }
176
177 @Override
178 protected void buildCurrencyMenu(final MoneyWiseCash pCash,
179 final TethysUIScrollMenu<MoneyWiseCurrency> pMenu) {
180
181 theActiveCash.buildCurrencyMenu(pMenu, pCash);
182 }
183
184 @Override
185 protected void addNewItem() {
186
187 try {
188
189 cancelEditing();
190
191
192 final OceanusProfile myTask = getView().getNewProfile("addNewItem");
193
194
195 myTask.startTask("buildItem");
196 final MoneyWiseCash myCash = theCash.addNewItem();
197 myCash.setDefaults();
198
199
200 myTask.startTask("incrementVersion");
201 myCash.setNewVersion();
202 myCash.adjustMapForItem();
203 getEditSet().incrementVersion();
204
205
206 myTask.startTask("validate");
207 myCash.validate();
208
209
210 myTask.startTask("setItem");
211 theActiveCash.setNewItem(myCash);
212
213
214 setTableEnabled(false);
215 myTask.end();
216
217
218 } catch (OceanusException e) {
219
220 final OceanusException myError = new MoneyWiseDataException("Failed to create new cash", e);
221
222
223 setError(myError);
224 }
225 }
226
227 @Override
228 protected Iterator<PrometheusDataItem> nameSpaceIterator() {
229 return assetNameSpaceIterator();
230 }
231 }
232