Tatu Saloranta | 2f82344 | 2011-12-23 20:25:27 -0800 | [diff] [blame] | 1 | package com.fasterxml.jackson.databind.node; |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 2 | |
| 3 | import java.math.BigDecimal; |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 4 | import java.math.BigInteger; |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 5 | |
| 6 | import com.fasterxml.jackson.core.*; |
Tatu Saloranta | f0e232d | 2012-01-29 16:44:28 -0800 | [diff] [blame] | 7 | import com.fasterxml.jackson.databind.JsonNode; |
Tatu Saloranta | 04c9cf5 | 2015-04-01 20:37:16 -0700 | [diff] [blame] | 8 | import com.fasterxml.jackson.databind.util.RawValue; |
Tatu Saloranta | f0e232d | 2012-01-29 16:44:28 -0800 | [diff] [blame] | 9 | |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 10 | /** |
| 11 | * This intermediate base class is used for all container nodes, |
| 12 | * specifically, array and object nodes. |
| 13 | */ |
Tatu | b471a04 | 2012-01-27 11:51:39 -0800 | [diff] [blame] | 14 | public abstract class ContainerNode<T extends ContainerNode<T>> |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 15 | extends BaseJsonNode |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 16 | implements JsonNodeCreator |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 17 | { |
Tatu Saloranta | ab9413a | 2019-08-19 19:12:06 -0700 | [diff] [blame] | 18 | private static final long serialVersionUID = 1L; |
| 19 | |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 20 | /** |
| 21 | * We will keep a reference to the Object (usually TreeMapper) |
| 22 | * that can construct instances of nodes to add to this container |
| 23 | * node. |
| 24 | */ |
Tatu | b471a04 | 2012-01-27 11:51:39 -0800 | [diff] [blame] | 25 | protected final JsonNodeFactory _nodeFactory; |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 26 | |
Tatu Saloranta | 04c9cf5 | 2015-04-01 20:37:16 -0700 | [diff] [blame] | 27 | protected ContainerNode(JsonNodeFactory nc) { |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 28 | _nodeFactory = nc; |
| 29 | } |
| 30 | |
Tatu Saloranta | 92ca9f4 | 2019-06-04 22:15:47 -0700 | [diff] [blame] | 31 | protected ContainerNode() { _nodeFactory = null; } // only for JDK ser |
| 32 | |
Tatu Saloranta | e3ae58e | 2012-01-28 23:08:16 -0800 | [diff] [blame] | 33 | // all containers are mutable: can't define: |
| 34 | // @Override public abstract <T extends JsonNode> T deepCopy(); |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 35 | |
| 36 | @Override |
| 37 | public abstract JsonToken asToken(); |
Matt Veitas | f81a3f9 | 2016-04-04 07:45:49 -0400 | [diff] [blame] | 38 | |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 39 | @Override |
| 40 | public String asText() { return ""; } |
| 41 | |
| 42 | /* |
| 43 | /********************************************************** |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 44 | /* Methods reset as abstract to force real implementation |
| 45 | /********************************************************** |
| 46 | */ |
| 47 | |
| 48 | @Override |
| 49 | public abstract int size(); |
| 50 | |
| 51 | @Override |
| 52 | public abstract JsonNode get(int index); |
| 53 | |
| 54 | @Override |
| 55 | public abstract JsonNode get(String fieldName); |
| 56 | |
| 57 | /* |
| 58 | /********************************************************** |
Tatu Saloranta | 8d846ae | 2019-01-11 19:58:51 -0800 | [diff] [blame] | 59 | /* JsonNodeCreator implementation, Enumerated/singleton types |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 60 | /********************************************************** |
| 61 | */ |
| 62 | |
Tatu Saloranta | 8d846ae | 2019-01-11 19:58:51 -0800 | [diff] [blame] | 63 | @Override |
| 64 | public final BooleanNode booleanNode(boolean v) { return _nodeFactory.booleanNode(v); } |
| 65 | |
| 66 | public JsonNode missingNode() { |
| 67 | return _nodeFactory.missingNode(); |
| 68 | } |
| 69 | |
| 70 | @Override |
| 71 | public final NullNode nullNode() { return _nodeFactory.nullNode(); } |
| 72 | |
| 73 | /* |
| 74 | /********************************************************** |
| 75 | /* JsonNodeCreator implementation, just dispatch to real creator |
| 76 | /********************************************************** |
| 77 | */ |
| 78 | |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 79 | /** |
| 80 | * Factory method that constructs and returns an empty {@link ArrayNode} |
| 81 | * Construction is done using registered {@link JsonNodeFactory}. |
| 82 | */ |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 83 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 84 | public final ArrayNode arrayNode() { return _nodeFactory.arrayNode(); } |
| 85 | |
| 86 | /** |
Matt Veitas | f81a3f9 | 2016-04-04 07:45:49 -0400 | [diff] [blame] | 87 | * Factory method that constructs and returns an {@link ArrayNode} with an initial capacity |
| 88 | * Construction is done using registered {@link JsonNodeFactory} |
| 89 | * @param capacity the initial capacity of the ArrayNode |
| 90 | */ |
| 91 | @Override |
| 92 | public final ArrayNode arrayNode(int capacity) { return _nodeFactory.arrayNode(capacity); } |
| 93 | |
| 94 | /** |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 95 | * Factory method that constructs and returns an empty {@link ObjectNode} |
| 96 | * Construction is done using registered {@link JsonNodeFactory}. |
| 97 | */ |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 98 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 99 | public final ObjectNode objectNode() { return _nodeFactory.objectNode(); } |
| 100 | |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 101 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 102 | public final NumericNode numberNode(byte v) { return _nodeFactory.numberNode(v); } |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 103 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 104 | public final NumericNode numberNode(short v) { return _nodeFactory.numberNode(v); } |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 105 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 106 | public final NumericNode numberNode(int v) { return _nodeFactory.numberNode(v); } |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 107 | @Override |
Tatu Saloranta | 2322ce6 | 2013-10-23 22:18:32 -0700 | [diff] [blame] | 108 | public final NumericNode numberNode(long v) { |
| 109 | return _nodeFactory.numberNode(v); |
| 110 | } |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 111 | |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 112 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 113 | public final NumericNode numberNode(float v) { return _nodeFactory.numberNode(v); } |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 114 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 115 | public final NumericNode numberNode(double v) { return _nodeFactory.numberNode(v); } |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 116 | |
Tatu Saloranta | 7eaf599 | 2016-10-27 22:52:48 -0700 | [diff] [blame] | 117 | @Override |
| 118 | public final ValueNode numberNode(BigInteger v) { return _nodeFactory.numberNode(v); } |
| 119 | @Override |
| 120 | public final ValueNode numberNode(BigDecimal v) { return (_nodeFactory.numberNode(v)); } |
| 121 | |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 122 | @Override |
| 123 | public final ValueNode numberNode(Byte v) { return _nodeFactory.numberNode(v); } |
| 124 | @Override |
| 125 | public final ValueNode numberNode(Short v) { return _nodeFactory.numberNode(v); } |
| 126 | @Override |
| 127 | public final ValueNode numberNode(Integer v) { return _nodeFactory.numberNode(v); } |
| 128 | @Override |
| 129 | public final ValueNode numberNode(Long v) { return _nodeFactory.numberNode(v); } |
| 130 | |
| 131 | @Override |
| 132 | public final ValueNode numberNode(Float v) { return _nodeFactory.numberNode(v); } |
| 133 | @Override |
| 134 | public final ValueNode numberNode(Double v) { return _nodeFactory.numberNode(v); } |
Matt Veitas | f81a3f9 | 2016-04-04 07:45:49 -0400 | [diff] [blame] | 135 | |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 136 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 137 | public final TextNode textNode(String text) { return _nodeFactory.textNode(text); } |
| 138 | |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 139 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 140 | public final BinaryNode binaryNode(byte[] data) { return _nodeFactory.binaryNode(data); } |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 141 | @Override |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 142 | public final BinaryNode binaryNode(byte[] data, int offset, int length) { return _nodeFactory.binaryNode(data, offset, length); } |
| 143 | |
Tatu Saloranta | 29552ca | 2013-05-17 20:36:07 -0700 | [diff] [blame] | 144 | @Override |
| 145 | public final ValueNode pojoNode(Object pojo) { return _nodeFactory.pojoNode(pojo); } |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 146 | |
Tatu Saloranta | 04c9cf5 | 2015-04-01 20:37:16 -0700 | [diff] [blame] | 147 | @Override |
| 148 | public final ValueNode rawValueNode(RawValue value) { return _nodeFactory.rawValueNode(value); } |
| 149 | |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 150 | /* |
| 151 | /********************************************************** |
| 152 | /* Common mutators |
| 153 | /********************************************************** |
| 154 | */ |
| 155 | |
| 156 | /** |
| 157 | * Method for removing all children container has (if any) |
| 158 | * |
| 159 | * @return Container node itself (to allow method call chaining) |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 160 | */ |
Tatu | b471a04 | 2012-01-27 11:51:39 -0800 | [diff] [blame] | 161 | public abstract T removeAll(); |
Tatu Saloranta | e4f23bb | 2011-12-23 00:31:35 -0800 | [diff] [blame] | 162 | } |