Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit c5925bc

Browse files
committed
#315 Extracted mergeObjectNodes
1 parent d4776b6 commit c5925bc

File tree

1 file changed

+56
-44
lines changed

1 file changed

+56
-44
lines changed

src/main/java/com/marklogic/rest/util/JsonNodeUtil.java

Lines changed: 56 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,49 +10,61 @@
1010

1111
public class JsonNodeUtil {
1212

13-
public static JsonNode mergeJsonFiles(List<File> files) {
14-
List<JsonNode> nodes = new ArrayList<>();
15-
Set<String> fieldNames = new HashSet<>();
16-
for (File f : files) {
17-
if (f.exists()) {
18-
JsonNode node = null;
19-
try {
20-
node = ObjectMapperFactory.getObjectMapper().readTree(f);
21-
} catch (Exception e) {
22-
throw new RuntimeException("Unable to read JSON from file: " + f.getAbsolutePath(), e);
23-
}
24-
nodes.add(node);
25-
Iterator<String> names = node.fieldNames();
26-
while (names.hasNext()) {
27-
fieldNames.add(names.next());
28-
}
29-
}
30-
}
31-
32-
if (nodes.isEmpty()) {
33-
return null;
34-
}
35-
36-
// Merge each node back into the previous one
37-
for (int i = 1; i < nodes.size(); i++) {
38-
ObjectNode target = (ObjectNode) nodes.get(i);
39-
ObjectNode source = (ObjectNode) nodes.get(i - 1);
40-
for (String name : fieldNames) {
41-
JsonNode targetField = target.get(name);
42-
JsonNode sourceField = source.get(name);
43-
if (sourceField == null) {
44-
continue;
45-
} else if (targetField == null) {
46-
target.set(name, sourceField);
47-
} else if (sourceField.isArray()) {
48-
ArrayNode sourceArray = (ArrayNode) sourceField;
49-
ArrayNode targetArray = (ArrayNode) targetField;
50-
targetArray.addAll(sourceArray);
51-
}
52-
}
53-
}
54-
55-
return nodes.get(nodes.size() - 1);
56-
}
13+
public static JsonNode mergeJsonFiles(List<File> files) {
14+
List<JsonNode> nodes = new ArrayList<>();
15+
for (File f : files) {
16+
if (f.exists()) {
17+
ObjectNode node = null;
18+
try {
19+
node = (ObjectNode) ObjectMapperFactory.getObjectMapper().readTree(f);
20+
} catch (Exception e) {
21+
throw new RuntimeException("Unable to read JSON from file: " + f.getAbsolutePath(), e);
22+
}
23+
nodes.add(node);
24+
}
25+
}
5726

27+
if (nodes.isEmpty()) {
28+
return null;
29+
}
30+
31+
return mergeObjectNodes(nodes.toArray(new ObjectNode[]{}));
32+
}
33+
34+
public static ObjectNode mergeObjectNodes(ObjectNode... nodes) {
35+
List<ObjectNode> nodeList = new ArrayList<>();
36+
Set<String> fieldNames = new HashSet<>();
37+
for (ObjectNode node : nodes) {
38+
nodeList.add(node);
39+
Iterator<String> names = node.fieldNames();
40+
while (names.hasNext()) {
41+
fieldNames.add(names.next());
42+
}
43+
}
44+
45+
if (nodeList.isEmpty()) {
46+
return null;
47+
}
48+
49+
// Merge each node back into the previous one
50+
for (int i = 1; i < nodeList.size(); i++) {
51+
ObjectNode target = nodeList.get(i);
52+
ObjectNode source = nodeList.get(i - 1);
53+
for (String name : fieldNames) {
54+
JsonNode targetField = target.get(name);
55+
JsonNode sourceField = source.get(name);
56+
if (sourceField == null) {
57+
continue;
58+
} else if (targetField == null) {
59+
target.set(name, sourceField);
60+
} else if (sourceField.isArray()) {
61+
ArrayNode sourceArray = (ArrayNode) sourceField;
62+
ArrayNode targetArray = (ArrayNode) targetField;
63+
targetArray.addAll(sourceArray);
64+
}
65+
}
66+
}
67+
68+
return nodeList.get(nodeList.size() - 1);
69+
}
5870
}

0 commit comments

Comments
 (0)