• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kit-data-manager / ro-crate-java / #348

15 Apr 2025 08:24AM UTC coverage: 86.955%. First build
#348

Pull #233

github

web-flow
Merge pull request #244 from kit-data-manager/renovate/commons-io-commons-io-2.x

chore(deps): update dependency commons-io:commons-io to v2.19.0
Pull Request #233: Version 2.1.0

521 of 659 new or added lines in 18 files covered. (79.06%)

1873 of 2154 relevant lines covered (86.95%)

0.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/edu/kit/datamanager/ro_crate/util/JsonLdExpander.java
1
/*
2
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
3
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
4
 */
5
package edu.kit.datamanager.ro_crate.util;
6

7
/**
8
 *
9
 * @author jejkal
10
 */
11
import com.fasterxml.jackson.databind.*;
12
import com.fasterxml.jackson.databind.node.*;
13

14
import java.util.*;
15

16
import java.io.File;
17

NEW
18
public class JsonLdExpander {
×
19

20
    public static JsonNode expandAndPrune(File jsonLdFile) throws Exception {
NEW
21
        ObjectMapper mapper = new ObjectMapper();
×
NEW
22
        JsonNode root = mapper.readTree(jsonLdFile);
×
NEW
23
        return expandAndPrune(root);
×
24
    }
25

26
    public static JsonNode expandAndPrune(JsonNode root) throws Exception {
NEW
27
        ArrayNode graph = (ArrayNode) root.get("@graph");
×
NEW
28
        ObjectMapper mapper = new ObjectMapper();
×
29
        // Index all items by @id
NEW
30
        Map<String, JsonNode> idMap = new HashMap<>();
×
NEW
31
        for (JsonNode node : graph) {
×
NEW
32
            if (node.has("@id")) {
×
NEW
33
                idMap.put(node.get("@id").asText(), node);
×
34
            }
NEW
35
        }
×
36

37
        // Track which ids were directly referenced and expanded
NEW
38
        Set<String> expandedIds = new HashSet<>();
×
39

NEW
40
        ArrayNode expandedGraph = mapper.createArrayNode();
×
NEW
41
        for (JsonNode node : graph) {
×
42
            // Include only if it's NOT a referenced/expanded object
NEW
43
            if (node.has("@id") && expandedIds.contains(node.get("@id").asText())) {
×
NEW
44
                continue; // skip referenced/expanded nodes
×
45
            }
46

NEW
47
            JsonNode expandedNode = expandNode(node, idMap, expandedIds, mapper, new HashSet<>());
×
NEW
48
            expandedGraph.add(expandedNode);
×
NEW
49
        }
×
50

51
        // Rebuild root
NEW
52
        ObjectNode newRoot = mapper.createObjectNode();
×
NEW
53
        newRoot.set("@context", root.get("@context"));
×
NEW
54
        newRoot.set("@graph", expandedGraph);
×
NEW
55
        return newRoot;
×
56
    }
57

58
    private static JsonNode expandNode(JsonNode node, Map<String, JsonNode> idMap, Set<String> expandedIds, ObjectMapper mapper, Set<String> visited) {
NEW
59
        if (!node.isObject()) {
×
NEW
60
            return node;
×
61
        }
62

NEW
63
        ObjectNode result = mapper.createObjectNode();
×
NEW
64
        Iterator<Map.Entry<String, JsonNode>> fields = node.fields();
×
65

NEW
66
        while (fields.hasNext()) {
×
NEW
67
            Map.Entry<String, JsonNode> entry = fields.next();
×
NEW
68
            String key = entry.getKey();
×
NEW
69
            JsonNode value = entry.getValue();
×
70

NEW
71
            if (value.isObject() && value.has("@id")) {
×
NEW
72
                String refId = value.get("@id").asText();
×
NEW
73
                if (!visited.contains(refId) && idMap.containsKey(refId)) {
×
NEW
74
                    visited.add(refId);
×
NEW
75
                    expandedIds.add(refId);
×
NEW
76
                    result.set(key, expandNode(idMap.get(refId), idMap, expandedIds, mapper, new HashSet<>(visited)));
×
77
                } else {
NEW
78
                    result.set(key, value);
×
79
                }
NEW
80
            } else if (value.isArray()) {
×
NEW
81
                ArrayNode newArray = mapper.createArrayNode();
×
NEW
82
                for (JsonNode element : value) {
×
NEW
83
                    if (element.isObject() && element.has("@id")) {
×
NEW
84
                        String refId = element.get("@id").asText();
×
NEW
85
                        if (!visited.contains(refId) && idMap.containsKey(refId)) {
×
NEW
86
                            visited.add(refId);
×
NEW
87
                            expandedIds.add(refId);
×
NEW
88
                            newArray.add(expandNode(idMap.get(refId), idMap, expandedIds, mapper, new HashSet<>(visited)));
×
89
                        } else {
NEW
90
                            newArray.add(element);
×
91
                        }
NEW
92
                    } else {
×
NEW
93
                        newArray.add(expandNode(element, idMap, expandedIds, mapper, visited));
×
94
                    }
NEW
95
                }
×
NEW
96
                result.set(key, newArray);
×
NEW
97
            } else if (value.isObject()) {
×
NEW
98
                result.set(key, expandNode(value, idMap, expandedIds, mapper, visited));
×
99
            } else {
NEW
100
                result.set(key, value);
×
101
            }
NEW
102
        }
×
103

NEW
104
        return result;
×
105
    }
106
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc