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.MoneyWiseDataSet;
21 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseExchangeRate;
22 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseExchangeRate.MoneyWiseExchangeRateBaseList;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseExchangeRate.MoneyWiseExchangeRateDataMap;
24 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
25 import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
26 import io.github.tonywasher.joceanus.oceanus.date.OceanusDateRange;
27 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusRatio;
28 import io.github.tonywasher.joceanus.prometheus.data.PrometheusData.PrometheusDataItemCtl;
29 import io.github.tonywasher.joceanus.prometheus.data.PrometheusData.PrometheusDataValidator;
30 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
31
32
33
34
35 public class MoneyWiseValidateXchangeRate
36 implements PrometheusDataValidator {
37
38 @Override
39 public void validate(final PrometheusDataItemCtl pRate) {
40 final MoneyWiseExchangeRate myRate = (MoneyWiseExchangeRate) pRate;
41 final MoneyWiseExchangeRateBaseList<? extends MoneyWiseExchangeRate> myList = myRate.getList();
42 final MoneyWiseCurrency myFrom = myRate.getFromCurrency();
43 final MoneyWiseCurrency myTo = myRate.getToCurrency();
44 final OceanusDate myDate = myRate.getDate();
45 final OceanusRatio myXchgRate = myRate.getExchangeRate();
46 final OceanusDateRange myRange = ((MoneyWiseDataSet) myRate.getDataSet()).getDateRange();
47
48
49 if (myDate == null) {
50 myRate.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_DATE);
51
52
53 } else {
54
55 final MoneyWiseExchangeRateDataMap myMap = myList.getDataMap();
56 if (!myMap.validRateCount(myRate)) {
57 myRate.addError(PrometheusDataItem.ERROR_DUPLICATE, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_DATE);
58 }
59
60
61 if (myRange.compareToDate(myDate) != 0) {
62 myRate.addError(PrometheusDataItem.ERROR_RANGE, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_DATE);
63 }
64 }
65
66
67 if (myFrom == null) {
68 myRate.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.XCHGRATE_FROM);
69 } else if (!myFrom.getEnabled()) {
70 myRate.addError(PrometheusDataItem.ERROR_DISABLED, MoneyWiseBasicResource.XCHGRATE_FROM);
71 }
72
73
74 if (myTo == null) {
75 myRate.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.XCHGRATE_TO);
76 } else if (!myTo.getEnabled()) {
77 myRate.addError(PrometheusDataItem.ERROR_DISABLED, MoneyWiseBasicResource.XCHGRATE_TO);
78 }
79
80
81 if (myFrom != null && myTo != null) {
82
83 if (myFrom.equals(myTo)) {
84 myRate.addError(MoneyWiseExchangeRate.ERROR_CIRCLE, MoneyWiseBasicResource.XCHGRATE_TO);
85 }
86
87
88 final MoneyWiseCurrency myDefault = ((MoneyWiseDataSet) myRate.getDataSet()).getReportingCurrency();
89 if (!myFrom.equals(myDefault)) {
90 myRate.addError(MoneyWiseExchangeRate.ERROR_DEF, MoneyWiseBasicResource.XCHGRATE_FROM);
91 }
92 }
93
94
95 if (myXchgRate == null) {
96 myRate.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.XCHGRATE_RATE);
97 } else if (!myXchgRate.isNonZero()) {
98 myRate.addError(PrometheusDataItem.ERROR_ZERO, MoneyWiseBasicResource.XCHGRATE_RATE);
99 } else if (!myXchgRate.isPositive()) {
100 myRate.addError(PrometheusDataItem.ERROR_NEGATIVE, MoneyWiseBasicResource.XCHGRATE_RATE);
101 }
102
103
104 if (!myRate.hasErrors()) {
105 myRate.setValidEdit();
106 }
107 }
108 }