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