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.SerializerProvider; 9 10 /** 11 * Numeric node that contains simple 64-bit integer values. 12 */ 13 @SuppressWarnings("serial") 14 public class BigIntegerNode 15 extends NumericNode 16 { 17 private final static BigInteger MIN_INTEGER = BigInteger.valueOf(Integer.MIN_VALUE); 18 private final static BigInteger MAX_INTEGER = BigInteger.valueOf(Integer.MAX_VALUE); 19 private final static BigInteger MIN_LONG = BigInteger.valueOf(Long.MIN_VALUE); 20 private final static BigInteger MAX_LONG = BigInteger.valueOf(Long.MAX_VALUE); 21 22 final protected BigInteger _value; 23 24 /* 25 /********************************************************** 26 /* Construction 27 /********************************************************** 28 */ 29 BigIntegerNode(BigInteger v)30 public BigIntegerNode(BigInteger v) { _value = v; } 31 valueOf(BigInteger v)32 public static BigIntegerNode valueOf(BigInteger v) { return new BigIntegerNode(v); } 33 34 /* 35 /********************************************************** 36 /* Overrridden JsonNode methods 37 /********************************************************** 38 */ 39 40 @Override asToken()41 public JsonToken asToken() { return JsonToken.VALUE_NUMBER_INT; } 42 43 @Override numberType()44 public JsonParser.NumberType numberType() { return JsonParser.NumberType.BIG_INTEGER; } 45 46 @Override isIntegralNumber()47 public boolean isIntegralNumber() { return true; } 48 49 @Override isBigInteger()50 public boolean isBigInteger() { return true; } 51 canConvertToInt()52 @Override public boolean canConvertToInt() { 53 return (_value.compareTo(MIN_INTEGER) >= 0) && (_value.compareTo(MAX_INTEGER) <= 0); 54 } canConvertToLong()55 @Override public boolean canConvertToLong() { 56 return (_value.compareTo(MIN_LONG) >= 0) && (_value.compareTo(MAX_LONG) <= 0); 57 } 58 59 @Override numberValue()60 public Number numberValue() { 61 return _value; 62 } 63 64 @Override shortValue()65 public short shortValue() { return _value.shortValue(); } 66 67 @Override intValue()68 public int intValue() { return _value.intValue(); } 69 70 @Override longValue()71 public long longValue() { return _value.longValue(); } 72 73 @Override bigIntegerValue()74 public BigInteger bigIntegerValue() { return _value; } 75 76 @Override floatValue()77 public float floatValue() { return _value.floatValue(); } 78 79 @Override doubleValue()80 public double doubleValue() { return _value.doubleValue(); } 81 82 @Override decimalValue()83 public BigDecimal decimalValue() { return new BigDecimal(_value); } 84 85 /* 86 /********************************************************** 87 /* General type coercions 88 /********************************************************** 89 */ 90 91 @Override asText()92 public String asText() { 93 return _value.toString(); 94 } 95 96 @Override asBoolean(boolean defaultValue)97 public boolean asBoolean(boolean defaultValue) { 98 return !BigInteger.ZERO.equals(_value); 99 } 100 101 @Override serialize(JsonGenerator jg, SerializerProvider provider)102 public final void serialize(JsonGenerator jg, SerializerProvider provider) 103 throws IOException, JsonProcessingException 104 { 105 jg.writeNumber(_value); 106 } 107 108 @Override equals(Object o)109 public boolean equals(Object o) 110 { 111 if (o == this) return true; 112 if (o == null) return false; 113 if (!(o instanceof BigIntegerNode)) { 114 return false; 115 } 116 return ((BigIntegerNode) o)._value.equals(_value); 117 } 118 119 @Override hashCode()120 public int hashCode() { 121 return _value.hashCode(); 122 } 123 } 124