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