1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.data.validate;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicResource;
21 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseCategoryBase;
22 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTransCategory;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTransCategory.MoneyWiseTransCategoryDataMap;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTransCategory.MoneyWiseTransCategoryList;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseTransCategoryClass;
27 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseTransCategoryType;
28 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseTransCategoryType.MoneyWiseTransCategoryTypeList;
29 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
30 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
31
32
33
34
35 public class MoneyWiseValidateTransCategory
36 extends MoneyWiseValidateCategory<MoneyWiseTransCategory> {
37
38
39
40 private static final String ERROR_DIFFPARENT = MoneyWiseBasicResource.TRANSCATEGORY_ERROR_DIFFPARENT.getValue();
41
42 @Override
43 public void validate(final PrometheusDataItem pCategory) {
44
45 super.validate(pCategory);
46
47
48 final MoneyWiseTransCategory myCategory = (MoneyWiseTransCategory) pCategory;
49 final MoneyWiseTransCategoryList myList = myCategory.getList();
50 final MoneyWiseTransCategoryType myCatType = myCategory.getCategoryType();
51 final MoneyWiseTransCategory myParent = myCategory.getParentCategory();
52 final String myName = myCategory.getName();
53
54
55 if (myCatType == null) {
56 pCategory.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseStaticDataType.TRANSTYPE);
57 } else {
58
59 final MoneyWiseTransCategoryClass myClass = myCatType.getCategoryClass();
60
61
62 if (!myCatType.getEnabled()) {
63 pCategory.addError(PrometheusDataItem.ERROR_DISABLED, MoneyWiseStaticDataType.TRANSTYPE);
64 }
65
66
67 if (myClass.isSingular()) {
68
69 final MoneyWiseTransCategoryDataMap myMap = myList.getDataMap();
70 if (!myMap.validSingularCount(myClass)) {
71 pCategory.addError(PrometheusDataItem.ERROR_MULT, MoneyWiseStaticDataType.TRANSTYPE);
72 }
73 }
74
75
76 switch (myClass) {
77 case TOTALS:
78
79 if (myParent != null) {
80 pCategory.addError(PrometheusDataItem.ERROR_EXIST, PrometheusDataResource.DATAGROUP_PARENT);
81 }
82 break;
83 case INCOMETOTALS:
84 case EXPENSETOTALS:
85 case SECURITYPARENT:
86
87 if (myParent == null) {
88 pCategory.addError(PrometheusDataItem.ERROR_MISSING, PrometheusDataResource.DATAGROUP_PARENT);
89 } else if (!myParent.isCategoryClass(MoneyWiseTransCategoryClass.TOTALS)) {
90 pCategory.addError(ERROR_BADPARENT, PrometheusDataResource.DATAGROUP_PARENT);
91 }
92 break;
93 default:
94
95 final boolean isTransfer = myClass == MoneyWiseTransCategoryClass.TRANSFER;
96 final boolean hasParent = myParent != null;
97 if (hasParent == isTransfer) {
98 if (isTransfer) {
99 pCategory.addError(PrometheusDataItem.ERROR_EXIST, PrometheusDataResource.DATAGROUP_PARENT);
100 } else {
101 pCategory.addError(PrometheusDataItem.ERROR_MISSING, PrometheusDataResource.DATAGROUP_PARENT);
102 }
103 } else if (hasParent) {
104
105 final MoneyWiseTransCategoryClass myParentClass = myParent.getCategoryTypeClass();
106 if (!myParentClass.canParentCategory()) {
107 pCategory.addError(ERROR_BADPARENT, PrometheusDataResource.DATAGROUP_PARENT);
108 }
109 if (myParentClass.isIncome() != myClass.isIncome()
110 || myParentClass.isSecurityTransfer() != myClass.isSecurityTransfer()) {
111 pCategory.addError(ERROR_DIFFPARENT, PrometheusDataResource.DATAGROUP_PARENT);
112 }
113
114
115 if (myName != null && !myName.startsWith(myParent.getName() + MoneyWiseCategoryBase.STR_SEP)) {
116 pCategory.addError(ERROR_MATCHPARENT, PrometheusDataResource.DATAGROUP_PARENT);
117 }
118 }
119 break;
120 }
121 }
122
123
124 if (!pCategory.hasErrors()) {
125 pCategory.setValidEdit();
126 }
127 }
128
129 @Override
130 public void setDefaults(final MoneyWiseTransCategory pParent,
131 final MoneyWiseTransCategory pCategory) throws OceanusException {
132
133 final MoneyWiseTransCategoryList myList = pCategory.getList();
134 final MoneyWiseTransCategoryTypeList myTypes
135 = getEditSet().getDataList(MoneyWiseStaticDataType.TRANSTYPE, MoneyWiseTransCategoryTypeList.class);
136 final MoneyWiseTransCategoryClass myParentClass = pParent == null ? null : pParent.getCategoryTypeClass();
137 final MoneyWiseTransCategoryClass myNewClass;
138 if (myParentClass == null || myParentClass.isTotals()) {
139 myNewClass = MoneyWiseTransCategoryClass.EXPENSETOTALS;
140 } else if (myParentClass.isIncome()) {
141 myNewClass = MoneyWiseTransCategoryClass.TAXEDINCOME;
142 } else if (myParentClass.isTransfer()) {
143 myNewClass = MoneyWiseTransCategoryClass.STOCKSPLIT;
144 } else {
145 myNewClass = MoneyWiseTransCategoryClass.EXPENSE;
146 }
147 pCategory.setCategoryType(myTypes.findItemByClass(myNewClass));
148 pCategory.setParentCategory(pParent);
149 pCategory.setSubCategoryName(getUniqueName(myList, pParent));
150 }
151 }