Skip to content

Commit

Permalink
Merge branch 'main' into feature/rename-avaje-json-core
Browse files Browse the repository at this point in the history
  • Loading branch information
rbygrave authored Dec 12, 2024
2 parents 6a610f3 + ebba8d1 commit 53ff713
Show file tree
Hide file tree
Showing 17 changed files with 134 additions and 0 deletions.
9 changes: 9 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,15 @@ public JsonArray copy() {
return new JsonArray(newList);
}

@Override
public List<Object> toPlain() {
final var newList = new ArrayList<>(children.size());
for (JsonNode child : children) {
newList.add(child.toPlain());
}
return newList;
}

@Override
public Type type() {
return Type.ARRAY;
Expand Down
5 changes: 5 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonBoolean.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ public JsonBoolean copy() {
return this;
}

@Override
public Boolean toPlain() {
return value;
}

@Override
public Type type() {
return Type.BOOLEAN;
Expand Down
5 changes: 5 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonDecimal.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ public JsonDecimal copy() {
return this;
}

@Override
public BigDecimal toPlain() {
return value;
}

@Override
public Type type() {
return Type.NUMBER;
Expand Down
5 changes: 5 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonDouble.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ public JsonDouble copy() {
return this;
}

@Override
public Double toPlain() {
return value;
}

@Override
public Type type() {
return Type.NUMBER;
Expand Down
5 changes: 5 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonInteger.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ public JsonInteger copy() {
return this;
}

@Override
public Integer toPlain() {
return value;
}

@Override
public Type type() {
return Type.NUMBER;
Expand Down
5 changes: 5 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonLong.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ public JsonLong copy() {
return this;
}

@Override
public Long toPlain() {
return value;
}

@Override
public Type type() {
return Type.NUMBER;
Expand Down
5 changes: 5 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ public boolean isObject() {
*/
JsonNode copy();

/**
* Return the JsonNode as its plain Java value ({@code String, Integer, List, Map etc}).
*/
Object toPlain();

/**
* Find a node given a path using dot notation.
*
Expand Down
20 changes: 20 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,15 @@ public JsonObject copy() {
return new JsonObject(mapCopy);
}

@Override
public Map<String, Object> toPlain() {
final var mapCopy = new LinkedHashMap<String, Object>();
for (Map.Entry<String, JsonNode> entry : children.entrySet()) {
mapCopy.put(entry.getKey(), entry.getValue().toPlain());
}
return mapCopy;
}

/**
* Return true if the json object contains no elements.
*/
Expand Down Expand Up @@ -159,6 +168,17 @@ public JsonObject add(String key, long value) {
return add(key, JsonLong.of(value));
}

/**
* Remove the node for the given key returning the removed value.
*
* @param key The key to remove.
* @return The node that has been removed.
*/
@Nullable
public JsonNode remove(String key) {
return children.remove(key);
}

/**
* Return the direct element at the given path throwing IllegalArgumentException
* if it is missing.
Expand Down
5 changes: 5 additions & 0 deletions json-node/src/main/java/io/avaje/json/node/JsonString.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ public JsonString copy() {
return this;
}

@Override
public String toPlain() {
return value;
}

@Override
public Type type() {
return Type.STRING;
Expand Down
13 changes: 13 additions & 0 deletions json-node/src/test/java/io/avaje/json/node/JsonArrayTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static org.assertj.core.api.Assertions.assertThat;
Expand Down Expand Up @@ -132,4 +133,16 @@ void unmodifiable() {
.isInstanceOf(UnsupportedOperationException.class);
}

@Test
void toPlain() {
final JsonArray source = JsonArray.create()
.add("foo")
.add(JsonObject.create().add("b", 42));

List<Object> plain = source.toPlain();
assertThat(plain).hasSize(2);
assertThat(plain.get(0)).isEqualTo("foo");
assertThat(plain.get(1)).isEqualTo(Map.of("b", 42));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ void copy() {
assertThat(jsonBoolean.copy()).isSameAs(jsonBoolean);
}

@Test
void toPlain() {
assertThat(jsonBoolean.toPlain()).isTrue();
assertThat(JsonBoolean.of(false).toPlain()).isFalse();
}

@Test
void unmodifiable() {
assertThat(jsonBoolean.unmodifiable()).isSameAs(jsonBoolean);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ void unmodifiable() {
assertThat(jsonDecimal.unmodifiable()).isSameAs(jsonDecimal);
}

@Test
void toPlain() {
assertThat(jsonDecimal.toPlain()).isEqualTo(new BigDecimal("42.3"));
}

@Test
void value() {
assertThat(jsonDecimal.doubleValue()).isEqualTo(42.3D);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ void unmodifiable() {
assertThat(jsonDouble.unmodifiable()).isSameAs(jsonDouble);
}

@Test
void toPlain() {
assertThat(jsonDouble.toPlain()).isEqualTo(42.3D);
}

@Test
void value() {
assertThat(jsonDouble.intValue()).isEqualTo(42);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ void unmodifiable() {
assertThat(jsonInteger.unmodifiable()).isSameAs(jsonInteger);
}

@Test
void toPlain() {
assertThat(jsonInteger.toPlain()).isEqualTo(42);
}

@Test
void value() {
assertThat(jsonInteger.intValue()).isEqualTo(42);
Expand Down
5 changes: 5 additions & 0 deletions json-node/src/test/java/io/avaje/json/node/JsonLongTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ void unmodifiable() {
assertThat(jsonLong.unmodifiable()).isSameAs(jsonLong);
}

@Test
void toPlain() {
assertThat(jsonLong.toPlain()).isEqualTo(42L);
}

@Test
void value() {
assertThat(jsonLong.intValue()).isEqualTo(42);
Expand Down
26 changes: 26 additions & 0 deletions json-node/src/test/java/io/avaje/json/node/JsonObjectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,20 @@ void add() {
assertThat(obj.size()).isEqualTo(1);
}

@Test
void remove() {
var obj = JsonObject.create().add("one", 1).add("two", 2).add("three", 3);
assertThat(obj.elements().keySet()).containsExactly("one", "two", "three");

JsonNode two = obj.remove("two");
assertThat(two).isNotNull();
assertThat(two).isInstanceOf(JsonInteger.class);
assertThat(two.text()).isEqualTo("2");

assertThat(obj.elements().keySet()).containsExactly("one", "three");
assertThat(obj.toString()).isEqualTo("{one=1, three=3}");
}

@Test
void get() {
JsonNode name = basicObject.get("name");
Expand Down Expand Up @@ -164,4 +178,16 @@ void unmodifiable() {
assertThatThrownBy(() -> copy.add("canMutate", true))
.isInstanceOf(UnsupportedOperationException.class);
}

@Test
void toPlain() {
final var source = JsonObject.create()
.add("name", "foo")
.add("other", JsonObject.create().add("b", 42));

Map<String, Object> plainMap = source.toPlain();
assertThat(plainMap).containsOnlyKeys("name", "other");
assertThat(plainMap.get("name")).isEqualTo("foo");
assertThat(plainMap.get("other")).isEqualTo(Map.of("b", 42));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ void unmodifiable() {
assertThat(jsonString.unmodifiable()).isSameAs(jsonString);
}

@Test
void toPlain() {
assertThat(jsonString.toPlain()).isEqualTo("foo");
}

@Test
void value() {
assertThat(jsonString.value()).isEqualTo("foo");
Expand Down

0 comments on commit 53ff713

Please sign in to comment.