1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.ui.dialog;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataFieldId;
21 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicDataType;
22 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicResource;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseLoanCategory;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseLoanCategory.MoneyWiseLoanCategoryList;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryClass;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryType;
27 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryType.MoneyWiseLoanCategoryTypeList;
28 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
29 import io.github.tonywasher.joceanus.moneywise.ui.base.MoneyWiseBaseTable;
30 import io.github.tonywasher.joceanus.moneywise.ui.base.MoneyWiseItemPanel;
31 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
32 import io.github.tonywasher.joceanus.prometheus.ui.fieldset.PrometheusFieldSet;
33 import io.github.tonywasher.joceanus.prometheus.ui.fieldset.PrometheusFieldSetEvent;
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.field.TethysUIDataEditField.TethysUIScrollButtonField;
37 import io.github.tonywasher.joceanus.tethys.api.field.TethysUIDataEditField.TethysUIStringEditField;
38 import io.github.tonywasher.joceanus.tethys.api.field.TethysUIFieldFactory;
39 import io.github.tonywasher.joceanus.tethys.api.menu.TethysUIScrollItem;
40 import io.github.tonywasher.joceanus.tethys.api.menu.TethysUIScrollMenu;
41
42 import java.util.Iterator;
43
44
45
46
47 public class MoneyWiseLoanCategoryDialog
48 extends MoneyWiseItemPanel<MoneyWiseLoanCategory> {
49
50
51
52
53
54
55
56 public MoneyWiseLoanCategoryDialog(final TethysUIFactory<?> pFactory,
57 final PrometheusEditSet pEditSet,
58 final MoneyWiseBaseTable<MoneyWiseLoanCategory> pOwner) {
59
60 super(pFactory, pEditSet, pOwner);
61
62
63 final PrometheusFieldSet<MoneyWiseLoanCategory> myFieldSet = getFieldSet();
64
65
66 final TethysUIFieldFactory myFields = pFactory.fieldFactory();
67 final TethysUIStringEditField myName = myFields.newStringField();
68 final TethysUIStringEditField mySubName = myFields.newStringField();
69 final TethysUIStringEditField myDesc = myFields.newStringField();
70
71
72 final TethysUIScrollButtonField<MoneyWiseLoanCategoryType> myTypeButton = myFields.newScrollField(MoneyWiseLoanCategoryType.class);
73 final TethysUIScrollButtonField<MoneyWiseLoanCategory> myParentButton = myFields.newScrollField(MoneyWiseLoanCategory.class);
74
75
76 myFieldSet.addField(PrometheusDataResource.DATAITEM_FIELD_NAME, myName, MoneyWiseLoanCategory::getName);
77 myFieldSet.addField(MoneyWiseBasicResource.CATEGORY_SUBCAT, mySubName, MoneyWiseLoanCategory::getSubCategory);
78 myFieldSet.addField(PrometheusDataResource.DATAITEM_FIELD_DESC, myDesc, MoneyWiseLoanCategory::getDesc);
79 myFieldSet.addField(MoneyWiseStaticDataType.LOANTYPE, myTypeButton, MoneyWiseLoanCategory::getCategoryType);
80 myFieldSet.addField(PrometheusDataResource.DATAGROUP_PARENT, myParentButton, MoneyWiseLoanCategory::getParentCategory);
81
82
83 myTypeButton.setMenuConfigurator(c -> buildCategoryTypeMenu(c, getItem()));
84 myParentButton.setMenuConfigurator(c -> buildParentMenu(c, getItem()));
85
86
87 mySubName.setValidator(this::isValidName);
88 mySubName.setReporter(pOwner::showValidateError);
89
90
91 myDesc.setValidator(this::isValidDesc);
92 myDesc.setReporter(pOwner::showValidateError);
93 }
94
95 @Override
96 public void refreshData() {
97
98 final MoneyWiseLoanCategory myItem = getItem();
99 if (myItem != null) {
100 final MoneyWiseLoanCategoryList myCategories = getDataList(MoneyWiseBasicDataType.LOANCATEGORY, MoneyWiseLoanCategoryList.class);
101 setItem(myCategories.findItemById(myItem.getIndexedId()));
102 }
103
104
105 setEditable(false);
106 }
107
108 @Override
109 protected void adjustFields(final boolean isEditable) {
110
111 final PrometheusFieldSet<MoneyWiseLoanCategory> myFieldSet = getFieldSet();
112
113
114 final MoneyWiseLoanCategory myCategory = getItem();
115 final MoneyWiseLoanCategoryType myType = myCategory.getCategoryType();
116 final boolean isParent = myType.isLoanCategory(MoneyWiseLoanCategoryClass.PARENT);
117
118
119 final boolean bShowDesc = isEditable || myCategory.getDesc() != null;
120 myFieldSet.setFieldVisible(PrometheusDataResource.DATAITEM_FIELD_DESC, bShowDesc);
121
122
123 myFieldSet.setFieldVisible(PrometheusDataResource.DATAGROUP_PARENT, !isParent);
124 myFieldSet.setFieldVisible(MoneyWiseBasicResource.CATEGORY_SUBCAT, !isParent);
125
126
127 boolean canEdit = isEditable && !myCategory.isActive();
128
129
130 canEdit &= !isParent;
131 myFieldSet.setFieldEditable(MoneyWiseStaticDataType.LOANTYPE, canEdit);
132
133
134 myFieldSet.setFieldEditable(PrometheusDataResource.DATAITEM_FIELD_NAME, isEditable && isParent);
135 }
136
137 @Override
138 protected void updateField(final PrometheusFieldSetEvent pUpdate) throws OceanusException {
139
140 final MetisDataFieldId myField = pUpdate.getFieldId();
141 final MoneyWiseLoanCategory myCategory = getItem();
142
143
144 if (PrometheusDataResource.DATAITEM_FIELD_NAME.equals(myField)) {
145
146 myCategory.setSubCategoryName(pUpdate.getValue(String.class));
147 } else if (MoneyWiseBasicResource.CATEGORY_SUBCAT.equals(myField)) {
148
149 myCategory.setSubCategoryName(pUpdate.getValue(String.class));
150 } else if (PrometheusDataResource.DATAGROUP_PARENT.equals(myField)) {
151
152 myCategory.setParentCategory(pUpdate.getValue(MoneyWiseLoanCategory.class));
153 } else if (PrometheusDataResource.DATAITEM_FIELD_DESC.equals(myField)) {
154
155 myCategory.setDescription(pUpdate.getValue(String.class));
156 } else if (MoneyWiseStaticDataType.LOANTYPE.equals(myField)) {
157
158 myCategory.setCategoryType(pUpdate.getValue(MoneyWiseLoanCategoryType.class));
159 }
160 }
161
162 @Override
163 protected void declareGoToItems(final boolean pUpdates) {
164 final MoneyWiseLoanCategory myItem = getItem();
165 final MoneyWiseLoanCategory myParent = myItem.getParentCategory();
166 if (!pUpdates) {
167 final MoneyWiseLoanCategoryType myType = myItem.getCategoryType();
168 declareGoToItem(myType);
169 }
170 declareGoToItem(myParent);
171 }
172
173
174
175
176
177
178
179 public void buildCategoryTypeMenu(final TethysUIScrollMenu<MoneyWiseLoanCategoryType> pMenu,
180 final MoneyWiseLoanCategory pCategory) {
181
182 pMenu.removeAllItems();
183
184
185 final MoneyWiseLoanCategoryType myCurr = pCategory.getCategoryType();
186 TethysUIScrollItem<MoneyWiseLoanCategoryType> myActive = null;
187
188
189 final MoneyWiseLoanCategoryTypeList myCategoryTypes = getDataList(MoneyWiseStaticDataType.LOANTYPE, MoneyWiseLoanCategoryTypeList.class);
190
191
192 final Iterator<MoneyWiseLoanCategoryType> myIterator = myCategoryTypes.iterator();
193 while (myIterator.hasNext()) {
194 final MoneyWiseLoanCategoryType myType = myIterator.next();
195
196
197 boolean bIgnore = myType.isDeleted() || !myType.getEnabled();
198
199
200 bIgnore |= myType.getLoanClass().isParentCategory();
201 if (bIgnore) {
202 continue;
203 }
204
205
206 final TethysUIScrollItem<MoneyWiseLoanCategoryType> myItem = pMenu.addItem(myType);
207
208
209 if (myType.equals(myCurr)) {
210
211 myActive = myItem;
212 }
213 }
214
215
216 if (myActive != null) {
217 myActive.scrollToItem();
218 }
219 }
220
221
222
223
224
225
226
227 private static void buildParentMenu(final TethysUIScrollMenu<MoneyWiseLoanCategory> pMenu,
228 final MoneyWiseLoanCategory pCategory) {
229
230 pMenu.removeAllItems();
231
232
233 final MoneyWiseLoanCategory myCurr = pCategory.getParentCategory();
234 TethysUIScrollItem<MoneyWiseLoanCategory> myActive = null;
235
236
237 final MoneyWiseLoanCategoryList myCategories = pCategory.getList();
238 final Iterator<MoneyWiseLoanCategory> myIterator = myCategories.iterator();
239 while (myIterator.hasNext()) {
240 final MoneyWiseLoanCategory myCat = myIterator.next();
241
242
243 final MoneyWiseLoanCategoryClass myClass = myCat.getCategoryTypeClass();
244 if (myCat.isDeleted() || !myClass.isParentCategory()) {
245 continue;
246 }
247
248
249 final TethysUIScrollItem<MoneyWiseLoanCategory> myItem = pMenu.addItem(myCat);
250
251
252 if (myCat.equals(myCurr)) {
253
254 myActive = myItem;
255 }
256 }
257
258
259 if (myActive != null) {
260 myActive.scrollToItem();
261 }
262 }
263 }