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.MoneyWiseBasicDataType;
20 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicResource;
21 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDataSet;
22 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurity;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurityPrice;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurityPrice.MoneyWiseSecurityPriceBaseList;
25 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurityPrice.MoneyWiseSecurityPriceDataMap;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
27 import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
28 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusPrice;
29 import io.github.tonywasher.joceanus.prometheus.data.PrometheusData.PrometheusDataItemCtl;
30 import io.github.tonywasher.joceanus.prometheus.data.PrometheusData.PrometheusDataValidator;
31 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
32
33
34
35
36 public class MoneyWiseValidateSecurityPrice
37 implements PrometheusDataValidator {
38
39 @Override
40 public void validate(final PrometheusDataItemCtl pPrice) {
41 final MoneyWiseSecurityPrice myPrice = (MoneyWiseSecurityPrice) pPrice;
42 final MoneyWiseSecurity mySecurity = myPrice.getSecurity();
43 final OceanusDate myDate = myPrice.getDate();
44 final OceanusPrice mySecPrice = myPrice.getPrice();
45 final MoneyWiseSecurityPriceBaseList<? extends MoneyWiseSecurityPrice> myList = myPrice.getList();
46 final MoneyWiseDataSet mySet = (MoneyWiseDataSet) myPrice.getDataSet();
47
48
49 if (mySecurity == null) {
50 myPrice.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicDataType.SECURITY);
51
52
53 } else if (mySecurity.getCategoryClass().isOption()) {
54 myPrice.addError("Options are priced by the underlying stock", MoneyWiseBasicDataType.SECURITY);
55 }
56
57
58 if (myDate == null) {
59 myPrice.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_DATE);
60
61
62 } else {
63
64 final MoneyWiseSecurityPriceDataMap myMap = myList.getDataMap();
65 if (!myMap.validPriceCount(myPrice)) {
66 myPrice.addError(PrometheusDataItem.ERROR_DUPLICATE, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_DATE);
67 }
68
69
70 if (mySet.getDateRange().compareToDate(myDate) != 0) {
71 myPrice.addError(PrometheusDataItem.ERROR_RANGE, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_DATE);
72 }
73 }
74
75
76 if (mySecPrice == null) {
77 myPrice.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_PRICE);
78 } else if (mySecPrice.isZero()) {
79 myPrice.addError(PrometheusDataItem.ERROR_ZERO, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_PRICE);
80 } else if (!mySecPrice.isPositive()) {
81 myPrice.addError(PrometheusDataItem.ERROR_NEGATIVE, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_PRICE);
82 } else {
83
84 final MoneyWiseCurrency myCurrency = mySecurity == null
85 ? null
86 : mySecurity.getAssetCurrency();
87 if (myCurrency != null
88 && !mySecPrice.getCurrency().equals(myCurrency.getCurrency())) {
89 myPrice.addError(MoneyWiseSecurityPrice.ERROR_CURRENCY, MoneyWiseBasicResource.MONEYWISEDATA_FIELD_PRICE);
90 }
91 }
92
93
94 if (!myPrice.hasErrors()) {
95 myPrice.setValidEdit();
96 }
97 }
98 }