Skip to content

Commit 2dc2684

Browse files
committed
Implemented deep query methods for AbstractObject and AbstractArray (issue #3)
1 parent e96888f commit 2dc2684

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

src/main/java/org/javawebstack/abstractdata/AbstractArray.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,28 @@ public AbstractElement get(int i) {
133133
return elements.get(i);
134134
}
135135

136+
public AbstractElement get(int index, AbstractElement orElse) {
137+
AbstractElement value = get(index);
138+
return (index >= 0 && index < size() && !value.isNull()) ? value : orElse;
139+
}
140+
141+
public AbstractElement query(String query) {
142+
String[] q = query.split("\\.", 2);
143+
try {
144+
int index = Integer.parseInt(q[0]);
145+
AbstractElement e = get(index);
146+
if(e == null || q.length == 1)
147+
return e;
148+
if(e.isObject())
149+
return e.object().query(q[1]);
150+
if(e.isArray())
151+
return e.array().query(q[1]);
152+
return null;
153+
} catch (NumberFormatException nfe) {
154+
return null;
155+
}
156+
}
157+
136158
public Stream<AbstractElement> stream() {
137159
return elements.stream();
138160
}

src/main/java/org/javawebstack/abstractdata/AbstractObject.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,18 @@ public AbstractElement get(String key, AbstractElement orElse) {
7070
return (has(key) && !value.isNull()) ? value : orElse;
7171
}
7272

73+
public AbstractElement query(String query) {
74+
String[] q = query.split("\\.", 2);
75+
AbstractElement e = get(q[0]);
76+
if(e == null || q.length == 1)
77+
return e;
78+
if(e.isObject())
79+
return e.object().query(q[1]);
80+
if(e.isArray())
81+
return e.array().query(q[1]);
82+
return null;
83+
}
84+
7385
public boolean has(String key) {
7486
return entries.containsKey(key);
7587
}

0 commit comments

Comments
 (0)