1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.core.api.criteria;
17
18 import org.apache.commons.lang.builder.EqualsBuilder;
19 import org.apache.commons.lang.builder.HashCodeBuilder;
20 import org.apache.commons.lang.builder.ToStringBuilder;
21
22 import javax.xml.bind.annotation.XmlAccessType;
23 import javax.xml.bind.annotation.XmlAccessorType;
24 import javax.xml.bind.annotation.XmlRootElement;
25 import javax.xml.bind.annotation.XmlType;
26 import javax.xml.bind.annotation.XmlValue;
27 import java.math.BigDecimal;
28
29
30
31
32
33
34
35
36 @XmlRootElement(name = CriteriaDecimalValue.Constants.ROOT_ELEMENT_NAME)
37 @XmlAccessorType(XmlAccessType.NONE)
38 @XmlType(name = CriteriaDecimalValue.Constants.TYPE_NAME)
39 public final class CriteriaDecimalValue implements CriteriaValue<BigDecimal> {
40
41 @XmlValue
42 private final BigDecimal value;
43
44 CriteriaDecimalValue() {
45 this.value = null;
46 }
47
48 CriteriaDecimalValue(BigDecimal value) {
49 validateValue(value);
50 this.value = safeInstance(value);
51 }
52
53 CriteriaDecimalValue(Number value) {
54 validateValue(value);
55 this.value = BigDecimal.valueOf(value.doubleValue());
56 }
57
58 private static void validateValue(Object value) {
59 if (value == null) {
60 throw new IllegalArgumentException("Value cannot be null.");
61 }
62 }
63
64
65
66
67
68
69
70
71
72 private static BigDecimal safeInstance(BigDecimal val) {
73 if (val.getClass() != BigDecimal.class) {
74 return new BigDecimal(val.toPlainString());
75 }
76 return val;
77 }
78
79 @Override
80 public BigDecimal getValue() {
81 return value;
82 }
83
84 @Override
85 public int hashCode() {
86 return HashCodeBuilder.reflectionHashCode(this);
87 }
88
89 @Override
90 public boolean equals(Object obj) {
91 return EqualsBuilder.reflectionEquals(obj, this);
92 }
93
94 @Override
95 public String toString() {
96 return ToStringBuilder.reflectionToString(this);
97 }
98
99
100
101
102 static class Constants {
103 final static String ROOT_ELEMENT_NAME = "decimalValue";
104 final static String TYPE_NAME = "CriteriaDecimalValueType";
105 }
106
107 }