View Javadoc
1   /*
2    * MoneyWise: Finance Application
3    * Copyright 2012-2026. Tony Washer
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6    * use this file except in compliance with the License.  You may obtain a copy
7    * of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
14   * License for the specific language governing permissions and limitations under
15   * the License.
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.MoneyWiseCategoryBase;
21  import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseLoanCategory;
22  import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseLoanCategory.MoneyWiseLoanCategoryList;
23  import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryClass;
24  import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryType;
25  import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseLoanCategoryType.MoneyWiseLoanCategoryTypeList;
26  import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
27  import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
28  import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
29  
30  /**
31   * Validator for LoanCategory.
32   */
33  public class MoneyWiseValidateLoanCategory
34          extends MoneyWiseValidateCategory<MoneyWiseLoanCategory> {
35  
36      @Override
37      public void validate(final PrometheusDataItem pCategory) {
38          /* Validate the base */
39          super.validate(pCategory);
40  
41          /* Access details */
42          final MoneyWiseLoanCategory myCategory = (MoneyWiseLoanCategory) pCategory;
43          final MoneyWiseLoanCategoryType myCatType = myCategory.getCategoryType();
44          final MoneyWiseLoanCategory myParent = myCategory.getParentCategory();
45  
46          /* LoanCategoryType must be non-null */
47          if (myCatType == null) {
48              pCategory.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseStaticDataType.DEPOSITTYPE);
49          } else {
50              /* Access the class */
51              final MoneyWiseLoanCategoryClass myClass = myCatType.getLoanClass();
52  
53              /* LoanCategoryType must be enabled */
54              if (!myCatType.getEnabled()) {
55                  pCategory.addError(PrometheusDataItem.ERROR_DISABLED, MoneyWiseStaticDataType.DEPOSITTYPE);
56              }
57  
58              /* Switch on the account class */
59              if (MoneyWiseLoanCategoryClass.PARENT.equals(myClass)) {
60                  /* If parent exists */
61                  if (myParent != null) {
62                      pCategory.addError(PrometheusDataItem.ERROR_EXIST, PrometheusDataResource.DATAGROUP_PARENT);
63                  }
64              } else {
65                  /* Check parent */
66                  if (myParent == null) {
67                      pCategory.addError(PrometheusDataItem.ERROR_MISSING, PrometheusDataResource.DATAGROUP_PARENT);
68                  } else if (!myParent.isCategoryClass(MoneyWiseLoanCategoryClass.PARENT)) {
69                      pCategory.addError(ERROR_BADPARENT, PrometheusDataResource.DATAGROUP_PARENT);
70                  } else {
71                      final String myName = myCategory.getName();
72  
73                      /* Check validity of parent */
74                      final MoneyWiseLoanCategoryClass myParentClass = myParent.getCategoryTypeClass();
75                      if (!MoneyWiseLoanCategoryClass.PARENT.equals(myParentClass)) {
76                          pCategory.addError(ERROR_BADPARENT, PrometheusDataResource.DATAGROUP_PARENT);
77                      }
78                      /* Check that name reflects parent */
79                      if ((myName != null) && !myName.startsWith(myParent.getName() + MoneyWiseCategoryBase.STR_SEP)) {
80                          pCategory.addError(ERROR_MATCHPARENT, PrometheusDataResource.DATAGROUP_PARENT);
81                      }
82                  }
83              }
84          }
85  
86          /* Set validation flag */
87          if (!pCategory.hasErrors()) {
88              pCategory.setValidEdit();
89          }
90      }
91  
92      @Override
93      public void setDefaults(final MoneyWiseLoanCategory pParent,
94                              final MoneyWiseLoanCategory pCategory) throws OceanusException {
95          /* Set values */
96          final MoneyWiseLoanCategoryList myList = pCategory.getList();
97          final MoneyWiseLoanCategoryTypeList myTypes
98                  = getEditSet().getDataList(MoneyWiseStaticDataType.LOANTYPE, MoneyWiseLoanCategoryTypeList.class);
99          pCategory.setCategoryType(myTypes.findItemByClass(pParent == null
100                 ? MoneyWiseLoanCategoryClass.PARENT
101                 : MoneyWiseLoanCategoryClass.LOAN));
102         pCategory.setParentCategory(pParent);
103         pCategory.setSubCategoryName(getUniqueName(myList, pParent));
104     }
105 }