• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.databind.node;
2 
3 import java.math.BigDecimal;
4 import java.math.BigInteger;
5 
6 import com.fasterxml.jackson.core.*;
7 import com.fasterxml.jackson.databind.JsonNode;
8 import com.fasterxml.jackson.databind.util.RawValue;
9 
10 /**
11  * This intermediate base class is used for all container nodes,
12  * specifically, array and object nodes.
13  */
14 public abstract class ContainerNode<T extends ContainerNode<T>>
15     extends BaseJsonNode
16     implements JsonNodeCreator
17 {
18     private static final long serialVersionUID = 1L;
19 
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      */
25     protected final JsonNodeFactory _nodeFactory;
26 
ContainerNode(JsonNodeFactory nc)27     protected ContainerNode(JsonNodeFactory nc) {
28         _nodeFactory = nc;
29     }
30 
ContainerNode()31     protected ContainerNode() { _nodeFactory = null; } // only for JDK ser
32 
33     // all containers are mutable: can't define:
34 //    @Override public abstract <T extends JsonNode> T deepCopy();
35 
36     @Override
asToken()37     public abstract JsonToken asToken();
38 
39     @Override
asText()40     public String asText() { return ""; }
41 
42     /*
43     /**********************************************************
44     /* Methods reset as abstract to force real implementation
45     /**********************************************************
46      */
47 
48     @Override
size()49     public abstract int size();
50 
51     @Override
get(int index)52     public abstract JsonNode get(int index);
53 
54     @Override
get(String fieldName)55     public abstract JsonNode get(String fieldName);
56 
57     /*
58     /**********************************************************
59     /* JsonNodeCreator implementation, Enumerated/singleton types
60     /**********************************************************
61      */
62 
63     @Override
booleanNode(boolean v)64     public final BooleanNode booleanNode(boolean v) { return _nodeFactory.booleanNode(v); }
65 
missingNode()66     public JsonNode missingNode() {
67         return _nodeFactory.missingNode();
68     }
69 
70     @Override
nullNode()71     public final NullNode nullNode() { return _nodeFactory.nullNode(); }
72 
73     /*
74     /**********************************************************
75     /* JsonNodeCreator implementation, just dispatch to real creator
76     /**********************************************************
77      */
78 
79     /**
80      * Factory method that constructs and returns an empty {@link ArrayNode}
81      * Construction is done using registered {@link JsonNodeFactory}.
82      */
83     @Override
arrayNode()84     public final ArrayNode arrayNode() { return _nodeFactory.arrayNode(); }
85 
86     /**
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
arrayNode(int capacity)92     public final ArrayNode arrayNode(int capacity) { return _nodeFactory.arrayNode(capacity); }
93 
94     /**
95      * Factory method that constructs and returns an empty {@link ObjectNode}
96      * Construction is done using registered {@link JsonNodeFactory}.
97      */
98     @Override
objectNode()99     public final ObjectNode objectNode() { return _nodeFactory.objectNode(); }
100 
101     @Override
numberNode(byte v)102     public final NumericNode numberNode(byte v) { return _nodeFactory.numberNode(v); }
103     @Override
numberNode(short v)104     public final NumericNode numberNode(short v) { return _nodeFactory.numberNode(v); }
105     @Override
numberNode(int v)106     public final NumericNode numberNode(int v) { return _nodeFactory.numberNode(v); }
107     @Override
numberNode(long v)108     public final NumericNode numberNode(long v) {
109         return _nodeFactory.numberNode(v);
110     }
111 
112     @Override
numberNode(float v)113     public final NumericNode numberNode(float v) { return _nodeFactory.numberNode(v); }
114     @Override
numberNode(double v)115     public final NumericNode numberNode(double v) { return _nodeFactory.numberNode(v); }
116 
117     @Override
numberNode(BigInteger v)118     public final ValueNode numberNode(BigInteger v) { return _nodeFactory.numberNode(v); }
119     @Override
numberNode(BigDecimal v)120     public final ValueNode numberNode(BigDecimal v) { return (_nodeFactory.numberNode(v)); }
121 
122     @Override
numberNode(Byte v)123     public final ValueNode numberNode(Byte v) { return _nodeFactory.numberNode(v); }
124     @Override
numberNode(Short v)125     public final ValueNode numberNode(Short v) { return _nodeFactory.numberNode(v); }
126     @Override
numberNode(Integer v)127     public final ValueNode numberNode(Integer v) { return _nodeFactory.numberNode(v); }
128     @Override
numberNode(Long v)129     public final ValueNode numberNode(Long v) { return _nodeFactory.numberNode(v); }
130 
131     @Override
numberNode(Float v)132     public final ValueNode numberNode(Float v) { return _nodeFactory.numberNode(v); }
133     @Override
numberNode(Double v)134     public final ValueNode numberNode(Double v) { return _nodeFactory.numberNode(v); }
135 
136     @Override
textNode(String text)137     public final TextNode textNode(String text) { return _nodeFactory.textNode(text); }
138 
139     @Override
binaryNode(byte[] data)140     public final BinaryNode binaryNode(byte[] data) { return _nodeFactory.binaryNode(data); }
141     @Override
binaryNode(byte[] data, int offset, int length)142     public final BinaryNode binaryNode(byte[] data, int offset, int length) { return _nodeFactory.binaryNode(data, offset, length); }
143 
144     @Override
pojoNode(Object pojo)145     public final ValueNode pojoNode(Object pojo) { return _nodeFactory.pojoNode(pojo); }
146 
147     @Override
rawValueNode(RawValue value)148     public final ValueNode rawValueNode(RawValue value) { return _nodeFactory.rawValueNode(value); }
149 
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)
160      */
removeAll()161     public abstract T removeAll();
162 }
163