• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.databind.node;
2 
3 import java.io.IOException;
4 import java.util.List;
5 
6 import com.fasterxml.jackson.core.*;
7 import com.fasterxml.jackson.core.type.WritableTypeId;
8 import com.fasterxml.jackson.databind.JsonNode;
9 import com.fasterxml.jackson.databind.SerializerProvider;
10 import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
11 
12 /**
13  * This intermediate base class is used for all leaf nodes, that is,
14  * all non-container (array or object) nodes, except for the
15  * "missing node".
16  */
17 public abstract class ValueNode
18     extends BaseJsonNode
19 {
20     private static final long serialVersionUID = 1L;
21 
ValueNode()22     protected ValueNode() { }
23 
24     @Override
_at(JsonPointer ptr)25     protected JsonNode _at(JsonPointer ptr) {
26         // will only allow direct matches, but no traversal through
27         // (base class checks for direct match)
28         return MissingNode.getInstance();
29     }
30 
31     /**
32      * All current value nodes are immutable, so we can just return
33      * them as is.
34      */
35     @SuppressWarnings("unchecked")
36     @Override
deepCopy()37     public <T extends JsonNode> T deepCopy() { return (T) this; }
38 
asToken()39     @Override public abstract JsonToken asToken();
40 
41     @Override
serializeWithType(JsonGenerator g, SerializerProvider provider, TypeSerializer typeSer)42     public void serializeWithType(JsonGenerator g, SerializerProvider provider,
43             TypeSerializer typeSer)
44         throws IOException
45     {
46         WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
47                 typeSer.typeId(this, asToken()));
48         serialize(g, provider);
49         typeSer.writeTypeSuffix(g, typeIdDef);
50     }
51 
52     /*
53     /**********************************************************************
54     /* Basic property access
55     /**********************************************************************
56      */
57 
58     @Override
isEmpty()59     public boolean isEmpty() { return true; }
60 
61     /*
62     /**********************************************************************
63     /* Navigation methods
64     /**********************************************************************
65      */
66 
67     @Override
get(int index)68     public final JsonNode get(int index) { return null; }
69 
70     @Override
path(int index)71     public final JsonNode path(int index) { return MissingNode.getInstance(); }
72 
73     @Override
has(int index)74     public final boolean has(int index) { return false; }
75 
76     @Override
hasNonNull(int index)77     public final boolean hasNonNull(int index) { return false; }
78 
79     @Override
get(String fieldName)80     public final JsonNode get(String fieldName) { return null; }
81 
82     @Override
path(String fieldName)83     public final JsonNode path(String fieldName) { return MissingNode.getInstance(); }
84 
85     @Override
has(String fieldName)86     public final boolean has(String fieldName) { return false; }
87 
88     @Override
hasNonNull(String fieldName)89     public final boolean hasNonNull(String fieldName) { return false; }
90 
91     /*
92      **********************************************************************
93      * Find methods: all "leaf" nodes return the same for these
94      **********************************************************************
95      */
96 
97     @Override
findValue(String fieldName)98     public final JsonNode findValue(String fieldName) {
99         return null;
100     }
101 
102     // note: co-variant return type
103     @Override
findParent(String fieldName)104     public final ObjectNode findParent(String fieldName) {
105         return null;
106     }
107 
108     @Override
findValues(String fieldName, List<JsonNode> foundSoFar)109     public final List<JsonNode> findValues(String fieldName, List<JsonNode> foundSoFar) {
110         return foundSoFar;
111     }
112 
113     @Override
findValuesAsText(String fieldName, List<String> foundSoFar)114     public final List<String> findValuesAsText(String fieldName, List<String> foundSoFar) {
115         return foundSoFar;
116     }
117 
118     @Override
findParents(String fieldName, List<JsonNode> foundSoFar)119     public final List<JsonNode> findParents(String fieldName, List<JsonNode> foundSoFar) {
120         return foundSoFar;
121     }
122 }
123