1
1
package io .burt .jmespath .jacksonjr ;
2
2
3
3
import com .fasterxml .jackson .core .JsonToken ;
4
- import com .fasterxml .jackson .core .TreeNode ;
5
4
import com .fasterxml .jackson .jr .ob .JSON ;
6
5
import com .fasterxml .jackson .jr .stree .JacksonJrsTreeCodec ;
7
6
import com .fasterxml .jackson .jr .stree .JrsArray ;
15
14
import io .burt .jmespath .JmesPathType ;
16
15
import io .burt .jmespath .RuntimeConfiguration ;
17
16
import java .io .IOException ;
17
+ import java .io .UncheckedIOException ;
18
18
import java .util .AbstractList ;
19
19
import java .util .ArrayList ;
20
20
import java .util .Collection ;
24
24
import java .util .List ;
25
25
import java .util .Map ;
26
26
27
- public class JacksonJrRuntime extends BaseRuntime <TreeNode > {
27
+ public class JacksonJrRuntime extends BaseRuntime <JrsValue > {
28
28
private final JSON json ;
29
+
29
30
public JacksonJrRuntime () {
30
31
this (RuntimeConfiguration .defaultConfiguration ());
31
32
}
@@ -35,29 +36,30 @@ public JacksonJrRuntime(RuntimeConfiguration configuration) {
35
36
.treeCodec (new JacksonJrsTreeCodec ())
36
37
.build ());
37
38
}
39
+
38
40
public JacksonJrRuntime (RuntimeConfiguration configuration , JSON json ) {
39
41
super (configuration );
40
42
this .json = json ;
41
43
}
42
44
43
45
@ Override
44
- public TreeNode parseString (String str ) {
46
+ public JrsValue parseString (String str ) {
45
47
try {
46
48
return json .treeFrom (str );
47
49
} catch (IOException e ) {
48
50
throw new IllegalStateException (e );
49
51
}
50
52
}
51
53
52
- private static class JrsArrayListWrapper extends AbstractList <TreeNode > {
54
+ private static class JrsArrayListWrapper extends AbstractList <JrsValue > {
53
55
private final JrsArray array ;
54
56
55
57
JrsArrayListWrapper (JrsArray array ) {
56
58
this .array = array ;
57
59
}
58
60
59
61
@ Override
60
- public TreeNode get (int index ) {
62
+ public JrsValue get (int index ) {
61
63
return array .get (index );
62
64
}
63
65
@@ -68,19 +70,18 @@ public int size() {
68
70
}
69
71
70
72
@ Override
71
- public List <TreeNode > toList (TreeNode value ) {
73
+ public List <JrsValue > toList (JrsValue value ) {
72
74
if (value == null ) {
73
75
return Collections .emptyList ();
74
- }
75
- if (value .isArray ()) {
76
+ } else if (value .isArray ()) {
76
77
return new JrsArrayListWrapper ((JrsArray ) value );
77
78
} else if (value .isObject ()) {
78
79
JrsObject object = (JrsObject ) value ;
79
- List <TreeNode > list = new ArrayList <>(object .size ());
80
+ List <JrsValue > list = new ArrayList <>(object .size ());
80
81
Iterator <Map .Entry <String , JrsValue >> iterator = object .fields ();
81
82
82
83
while (iterator .hasNext ()) {
83
- Map .Entry <String , TreeNode > entry = ( Map . Entry ) iterator .next ();
84
+ Map .Entry <String , JrsValue > entry = iterator .next ();
84
85
list .add (entry .getValue ());
85
86
}
86
87
return list ;
@@ -90,50 +91,54 @@ public List<TreeNode> toList(TreeNode value) {
90
91
}
91
92
92
93
@ Override
93
- public String toString (TreeNode value ) {
94
- if (value . asToken () .equals (JsonToken . VALUE_STRING )) {
95
- return (( JrsString ) value ) .asText ();
94
+ public String toString (JrsValue value ) {
95
+ if (JsonToken . VALUE_STRING .equals (value . asToken () )) {
96
+ return value .asText ();
96
97
} else {
97
98
try {
98
99
return json .asString (value );
99
100
} catch (IOException e ) {
100
- return "" ;
101
+ throw new UncheckedIOException ( e ) ;
101
102
}
102
103
}
103
104
}
104
105
105
106
@ Override
106
- public Number toNumber (TreeNode value ) {
107
- if (value .isValueNode () && (( JrsValue ) value ) .isNumber ()) {
107
+ public Number toNumber (JrsValue value ) {
108
+ if (value .isValueNode () && value .isNumber ()) {
108
109
JrsNumber number = (JrsNumber ) value ;
109
110
return number .getValue ();
110
- } else return null ;
111
+ } else {
112
+ return null ;
113
+ }
111
114
}
112
115
113
116
@ Override
114
- public boolean isTruthy (TreeNode value ) {
115
- // false, null, empty lists, empty objects, empty strings.
117
+ public boolean isTruthy (JrsValue value ) {
116
118
if (value .isContainerNode ()) {
117
119
return value .size () > 0 ;
118
120
} else if (value .isValueNode ()) {
119
- if (value .asToken ().equals (JsonToken .VALUE_STRING )) {
120
- return !((JrsString ) value ).asText ().isEmpty ();
121
- } else return !value .asToken ().equals (JsonToken .VALUE_FALSE ) &&
122
- !value .asToken ().equals (JsonToken .VALUE_NULL );
121
+ switch (value .asToken ()) {
122
+ case VALUE_STRING :
123
+ return !value .asText ().isEmpty ();
124
+ case VALUE_FALSE :
125
+ case VALUE_NULL :
126
+ return false ;
127
+ default :
128
+ return true ;
129
+ }
123
130
} else {
124
131
return !value .isMissingNode ();
125
132
}
126
133
}
127
134
128
135
@ Override
129
- public JmesPathType typeOf (TreeNode value ) {
136
+ public JmesPathType typeOf (JrsValue value ) {
130
137
switch (value .asToken ()) {
131
138
case START_ARRAY :
132
- case END_ARRAY :
133
139
return JmesPathType .ARRAY ;
134
140
case VALUE_EMBEDDED_OBJECT :
135
141
case START_OBJECT :
136
- case END_OBJECT :
137
142
return JmesPathType .OBJECT ;
138
143
case VALUE_STRING :
139
144
return JmesPathType .STRING ;
@@ -152,19 +157,19 @@ public JmesPathType typeOf(TreeNode value) {
152
157
}
153
158
154
159
@ Override
155
- public TreeNode getProperty (TreeNode value , TreeNode name ) {
156
- if (value == null || value . asToken () .equals (JsonToken . VALUE_NULL )) {
160
+ public JrsValue getProperty (JrsValue value , JrsValue name ) {
161
+ if (JsonToken . VALUE_NULL .equals (value . asToken () )) {
157
162
return JrsNull .instance ();
158
163
} else {
159
- TreeNode node = value .get ((( JrsString ) name ) .asText ());
164
+ JrsValue node = value .get (name .asText ());
160
165
return node != null ? node : createNull ();
161
166
}
162
167
}
163
168
164
169
@ Override
165
- public Collection <TreeNode > getPropertyNames (TreeNode value ) {
166
- if (value != null && value .isObject ()) {
167
- List <TreeNode > names = new ArrayList <>(value .size ());
170
+ public Collection <JrsValue > getPropertyNames (JrsValue value ) {
171
+ if (value .isObject ()) {
172
+ List <JrsValue > names = new ArrayList <>(value .size ());
168
173
Iterator <String > fieldNames = value .fieldNames ();
169
174
while (fieldNames .hasNext ()) {
170
175
names .add (createString (fieldNames .next ()));
@@ -176,50 +181,50 @@ public Collection<TreeNode> getPropertyNames(TreeNode value) {
176
181
}
177
182
178
183
@ Override
179
- public TreeNode createNull () {
184
+ public JrsValue createNull () {
180
185
return JrsNull .instance ();
181
186
}
182
187
183
188
@ Override
184
- public TreeNode createArray (Collection <TreeNode > elements ) {
189
+ public JrsValue createArray (Collection <JrsValue > elements ) {
185
190
List <JrsValue > values = new ArrayList <>();
186
- for (TreeNode node : elements ) {
191
+ for (JrsValue node : elements ) {
187
192
if (node == null ) {
188
193
values .add (JrsNull .instance ());
189
194
} else {
190
- values .add (( JrsValue ) node );
195
+ values .add (node );
191
196
}
192
197
}
193
198
return new JrsArray (values );
194
199
195
200
}
196
201
197
202
@ Override
198
- public TreeNode createString (String str ) {
203
+ public JrsValue createString (String str ) {
199
204
return new JrsString (str );
200
205
}
201
206
202
207
@ Override
203
- public TreeNode createBoolean (boolean b ) {
208
+ public JrsValue createBoolean (boolean b ) {
204
209
return b ? JrsBoolean .TRUE : JrsBoolean .FALSE ;
205
210
}
206
211
207
212
@ Override
208
- public TreeNode createObject (Map <TreeNode , TreeNode > obj ) {
213
+ public JrsValue createObject (Map <JrsValue , JrsValue > obj ) {
209
214
Map <String , JrsValue > values = new HashMap <>();
210
- for (Map .Entry <TreeNode , TreeNode > entry : obj .entrySet ()) {
211
- values .put ((( JrsString ) entry .getKey ()) .asText (), ( JrsValue ) entry .getValue ());
215
+ for (Map .Entry <JrsValue , JrsValue > entry : obj .entrySet ()) {
216
+ values .put (entry .getKey ().asText (), entry .getValue ());
212
217
}
213
218
return new JrsObject (values );
214
219
}
215
220
216
221
@ Override
217
- public TreeNode createNumber (double n ) {
222
+ public JrsValue createNumber (double n ) {
218
223
return new JrsNumber (n );
219
224
}
220
225
221
226
@ Override
222
- public TreeNode createNumber (long n ) {
227
+ public JrsValue createNumber (long n ) {
223
228
return new JrsNumber (n );
224
229
}
225
230
}
0 commit comments