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