1 package com.fasterxml.jackson.databind.node;
2
3 import java.io.IOException;
4 import java.math.BigDecimal;
5 import java.math.BigInteger;
6
7 import com.fasterxml.jackson.core.*;
8 import com.fasterxml.jackson.databind.*;
9
10
14 @SuppressWarnings("serial")
15 public class DecimalNode
16 extends NumericNode
17 {
18 public static final DecimalNode ZERO = new DecimalNode(BigDecimal.ZERO);
19
20 private final static BigDecimal MIN_INTEGER = BigDecimal.valueOf(Integer.MIN_VALUE);
21 private final static BigDecimal MAX_INTEGER = BigDecimal.valueOf(Integer.MAX_VALUE);
22 private final static BigDecimal MIN_LONG = BigDecimal.valueOf(Long.MIN_VALUE);
23 private final static BigDecimal MAX_LONG = BigDecimal.valueOf(Long.MAX_VALUE);
24
25 final protected BigDecimal _value;
26
27
32
33 public DecimalNode(BigDecimal v) { _value = v; }
34
35 public static DecimalNode valueOf(BigDecimal d) { return new DecimalNode(d); }
36
37
42
43 @Override public JsonToken asToken() { return JsonToken.VALUE_NUMBER_FLOAT; }
44
45 @Override
46 public JsonParser.NumberType numberType() { return JsonParser.NumberType.BIG_DECIMAL; }
47
48
53
54 @Override
55 public boolean isFloatingPointNumber() { return true; }
56
57 @Override
58 public boolean isBigDecimal() { return true; }
59
60 @Override public boolean canConvertToInt() {
61 return (_value.compareTo(MIN_INTEGER) >= 0) && (_value.compareTo(MAX_INTEGER) <= 0);
62 }
63 @Override public boolean canConvertToLong() {
64 return (_value.compareTo(MIN_LONG) >= 0) && (_value.compareTo(MAX_LONG) <= 0);
65 }
66
67 @Override
68 public Number numberValue() { return _value; }
69
70 @Override
71 public short shortValue() { return _value.shortValue(); }
72
73 @Override
74 public int intValue() { return _value.intValue(); }
75
76 @Override
77 public long longValue() { return _value.longValue(); }
78
79
80 @Override
81 public BigInteger bigIntegerValue() { return _value.toBigInteger(); }
82
83 @Override
84 public float floatValue() { return _value.floatValue(); }
85
86 @Override
87 public double doubleValue() { return _value.doubleValue(); }
88
89 @Override
90 public BigDecimal decimalValue() { return _value; }
91
92 @Override
93 public String asText() {
94 return _value.toString();
95 }
96
97 @Override
98 public final void serialize(JsonGenerator jgen, SerializerProvider provider)
99 throws IOException, JsonProcessingException
100 {
101
102
103
111 jgen.writeNumber(_value);
112 }
113
114 @Override
115 public boolean equals(Object o)
116 {
117 if (o == this) return true;
118 if (o == null) return false;
119 if (o instanceof DecimalNode) {
120 return ((DecimalNode) o)._value.compareTo(_value) == 0;
121 }
122 return false;
123 }
124
125 @Override
126 public int hashCode() { return Double.valueOf(doubleValue()).hashCode(); }
127 }
128