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.MoneyWiseDepositCategory;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDepositCategory.MoneyWiseDepositCategoryList;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseDepositCategoryClass;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseDepositCategoryType;
27 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseDepositCategoryType.MoneyWiseDepositCategoryTypeList;
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 MoneyWiseDepositCategoryDialog
48 extends MoneyWiseItemPanel<MoneyWiseDepositCategory> {
49
50
51
52
53
54
55
56 public MoneyWiseDepositCategoryDialog(final TethysUIFactory<?> pFactory,
57 final PrometheusEditSet pEditSet,
58 final MoneyWiseBaseTable<MoneyWiseDepositCategory> pOwner) {
59
60 super(pFactory, pEditSet, pOwner);
61
62
63 final PrometheusFieldSet<MoneyWiseDepositCategory> 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<MoneyWiseDepositCategoryType> myTypeButton = myFields.newScrollField(MoneyWiseDepositCategoryType.class);
73 final TethysUIScrollButtonField<MoneyWiseDepositCategory> myParentButton = myFields.newScrollField(MoneyWiseDepositCategory.class);
74
75
76 myFieldSet.addField(PrometheusDataResource.DATAITEM_FIELD_NAME, myName, MoneyWiseDepositCategory::getName);
77 myFieldSet.addField(MoneyWiseBasicResource.CATEGORY_SUBCAT, mySubName, MoneyWiseDepositCategory::getSubCategory);
78 myFieldSet.addField(PrometheusDataResource.DATAITEM_FIELD_DESC, myDesc, MoneyWiseDepositCategory::getDesc);
79 myFieldSet.addField(MoneyWiseStaticDataType.DEPOSITTYPE, myTypeButton, MoneyWiseDepositCategory::getCategoryType);
80 myFieldSet.addField(PrometheusDataResource.DATAGROUP_PARENT, myParentButton, MoneyWiseDepositCategory::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 MoneyWiseDepositCategory myItem = getItem();
99 if (myItem != null) {
100 final MoneyWiseDepositCategoryList myCategories = getDataList(MoneyWiseBasicDataType.DEPOSITCATEGORY, MoneyWiseDepositCategoryList.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<MoneyWiseDepositCategory> myFieldSet = getFieldSet();
112
113
114 final MoneyWiseDepositCategory myCategory = getItem();
115 final MoneyWiseDepositCategoryType myType = myCategory.getCategoryType();
116 final boolean isParent = myType.isDepositCategory(MoneyWiseDepositCategoryClass.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.DEPOSITTYPE, 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 MoneyWiseDepositCategory 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(MoneyWiseDepositCategory.class));
153 } else if (PrometheusDataResource.DATAITEM_FIELD_DESC.equals(myField)) {
154
155 myCategory.setDescription(pUpdate.getValue(String.class));
156 } else if (MoneyWiseStaticDataType.DEPOSITTYPE.equals(myField)) {
157
158 myCategory.setCategoryType(pUpdate.getValue(MoneyWiseDepositCategoryType.class));
159 }
160 }
161
162 @Override
163 protected void declareGoToItems(final boolean pUpdates) {
164 final MoneyWiseDepositCategory myItem = getItem();
165 final MoneyWiseDepositCategory myParent = myItem.getParentCategory();
166 if (!pUpdates) {
167 final MoneyWiseDepositCategoryType myType = myItem.getCategoryType();
168 declareGoToItem(myType);
169 }
170 declareGoToItem(myParent);
171 }
172
173
174
175
176
177
178
179 public void buildCategoryTypeMenu(final TethysUIScrollMenu<MoneyWiseDepositCategoryType> pMenu,
180 final MoneyWiseDepositCategory pCategory) {
181
182 pMenu.removeAllItems();
183
184
185 final MoneyWiseDepositCategoryType myCurr = pCategory.getCategoryType();
186 TethysUIScrollItem<MoneyWiseDepositCategoryType> myActive = null;
187
188
189 final MoneyWiseDepositCategoryTypeList myCategoryTypes = getDataList(MoneyWiseStaticDataType.DEPOSITTYPE, MoneyWiseDepositCategoryTypeList.class);
190
191
192 final Iterator<MoneyWiseDepositCategoryType> myIterator = myCategoryTypes.iterator();
193 while (myIterator.hasNext()) {
194 final MoneyWiseDepositCategoryType myType = myIterator.next();
195
196
197 boolean bIgnore = myType.isDeleted() || !myType.getEnabled();
198
199
200 bIgnore |= myType.getDepositClass().isParentCategory();
201 if (bIgnore) {
202 continue;
203 }
204
205
206 final TethysUIScrollItem<MoneyWiseDepositCategoryType> 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<MoneyWiseDepositCategory> pMenu,
228 final MoneyWiseDepositCategory pCategory) {
229
230 pMenu.removeAllItems();
231
232
233 final MoneyWiseDepositCategory myCurr = pCategory.getParentCategory();
234 TethysUIScrollItem<MoneyWiseDepositCategory> myActive = null;
235
236
237 final MoneyWiseDepositCategoryList myCategories = pCategory.getList();
238 final Iterator<MoneyWiseDepositCategory> myIterator = myCategories.iterator();
239 while (myIterator.hasNext()) {
240 final MoneyWiseDepositCategory myCat = myIterator.next();
241
242
243 final MoneyWiseDepositCategoryClass myClass = myCat.getCategoryTypeClass();
244 if (myCat.isDeleted() || !myClass.isParentCategory()) {
245 continue;
246 }
247
248
249 final TethysUIScrollItem<MoneyWiseDepositCategory> 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 }