From 608c4f3fc01e0be2a5572fa15d3e40409aab84d0 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Wed, 2 Mar 2022 10:56:28 +0200 Subject: [PATCH] Add get Parent values on json Searcher --- .../logic/utilities/json/JsonSearcher.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JsonSearcher.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JsonSearcher.java index e7579d07a..6e53aed30 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JsonSearcher.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JsonSearcher.java @@ -1,10 +1,10 @@ package eu.eudat.logic.utilities.json; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; import java.util.ArrayList; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; public class JsonSearcher { @@ -38,4 +38,32 @@ public class JsonSearcher { } return nodes; } + + public static List getParentValues(JsonNode root, String childValue, String key) { + List values = new LinkedList<>(); + + for (Iterator it = root.elements(); it.hasNext(); ) { + JsonNode node = it.next(); + int found = 0; + for (Iterator iter = node.fieldNames(); iter.hasNext(); ) { + String fieldName = iter.next(); + if (fieldName.equals(key)) { + if (node.get(fieldName).asText().equals(childValue) || node.get(fieldName).asText().startsWith(childValue)) { + values.add(childValue); + found++; + } + } + + } + if (found == 0) { + values.addAll(getParentValues(node, childValue, key)); + if (!values.isEmpty() && node.has(key)) { + values.add(node.get(key).asText()); + values.remove(childValue); + } + } + } + + return values; + } }