1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.metaschema.core.metapath.item.atomic;
28
29 import gov.nist.secauto.metaschema.core.datatype.adapter.DecimalAdapter;
30 import gov.nist.secauto.metaschema.core.datatype.adapter.MetaschemaDataTypeProvider;
31
32 import java.math.BigDecimal;
33 import java.math.BigInteger;
34 import java.math.RoundingMode;
35
36 import edu.umd.cs.findbugs.annotations.NonNull;
37
38 class DecimalItemImpl
39 extends AbstractNumericItem<BigDecimal>
40 implements IDecimalItem {
41 public DecimalItemImpl(@NonNull BigDecimal value) {
42 super(value);
43 }
44
45 @Override
46 public DecimalAdapter getJavaTypeAdapter() {
47 return MetaschemaDataTypeProvider.DECIMAL;
48 }
49
50 @SuppressWarnings("null")
51 @Override
52 public String asString() {
53 BigDecimal decimal = getValue();
54
55 return decimal.scale() <= 0 ? decimal.toBigIntegerExact().toString() : decimal.toPlainString();
56 }
57
58 @Override
59 public boolean toEffectiveBoolean() {
60 return !BigDecimal.ZERO.equals(getValue());
61 }
62
63 @Override
64 public BigDecimal asDecimal() {
65 return getValue();
66 }
67
68 @SuppressWarnings("null")
69 @Override
70 public BigInteger asInteger() {
71 return getValue().toBigInteger();
72 }
73
74 @SuppressWarnings("null")
75 @Override
76 public INumericItem abs() {
77 return new DecimalItemImpl(getValue().abs());
78 }
79
80 @SuppressWarnings("null")
81 @Override
82 public IIntegerItem ceiling() {
83 return IIntegerItem.valueOf(getValue().setScale(0, RoundingMode.CEILING).toBigIntegerExact());
84 }
85
86 @SuppressWarnings("null")
87 @Override
88 public IIntegerItem floor() {
89 return IIntegerItem.valueOf(getValue().setScale(0, RoundingMode.FLOOR).toBigIntegerExact());
90 }
91
92 @Override
93 public int hashCode() {
94 final int prime = 31;
95 int result = 1;
96 result = prime * result + getValue().hashCode();
97 return result;
98 }
99
100 @Override
101 public boolean equals(Object obj) {
102 if (this == obj) {
103 return true;
104 } else if (obj == null) {
105 return false;
106 } else if (getClass() != obj.getClass()) {
107 return false;
108 }
109 DecimalItemImpl other = (DecimalItemImpl) obj;
110 return getValue().equals(other.getValue());
111 }
112
113 }