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