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

knowledgepixels / nanodash / 18868860701

28 Oct 2025 08:37AM UTC coverage: 13.485% (+0.4%) from 13.1%
18868860701

push

github

tkuhn
feat(MaintainedResource): Add support for resource part views

477 of 4476 branches covered (10.66%)

Branch coverage included in aggregate %.

1255 of 8368 relevant lines covered (15.0%)

0.67 hits per line

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

0.0
src/main/java/com/knowledgepixels/nanodash/ResourceView.java
1
package com.knowledgepixels.nanodash;
2

3
import java.io.Serializable;
4
import java.util.ArrayList;
5
import java.util.HashMap;
6
import java.util.HashSet;
7
import java.util.List;
8
import java.util.Map;
9
import java.util.Set;
10

11
import org.eclipse.rdf4j.model.IRI;
12
import org.eclipse.rdf4j.model.Statement;
13
import org.eclipse.rdf4j.model.vocabulary.DCTERMS;
14
import org.eclipse.rdf4j.model.vocabulary.RDF;
15
import org.eclipse.rdf4j.model.vocabulary.RDFS;
16
import org.nanopub.Nanopub;
17
import org.slf4j.Logger;
18
import org.slf4j.LoggerFactory;
19

20
import com.knowledgepixels.nanodash.template.Template;
21
import com.knowledgepixels.nanodash.template.TemplateData;
22

23
public class ResourceView implements Serializable {
24

25
    private static final Logger logger = LoggerFactory.getLogger(ResourceView.class);
×
26

27
    private static final IRI RESOURCE_VIEW = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/ResourceView");
×
28
    private static final IRI PART_LEVEL_VIEW = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/PartLevelView");
×
29
    private static final IRI HAS_VIEW_QUERY = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewQuery");
×
30
    private static final IRI HAS_VIEW_QUERY_TARGET_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewQueryTargetField");
×
31
    private static final IRI HAS_VIEW_TARGET_CLASS = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewTargetClass");
×
32
    private static final IRI HAS_VIEW_ACTION = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewAction");
×
33
    private static final IRI HAS_ACTION_TEMPLATE = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplate");
×
34
    private static final IRI HAS_ACTION_TEMPLATE_TARGET_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplateTargetField");
×
35

36
    private static Map<String, ResourceView> resourceViews = new HashMap<>();
×
37

38
    public static ResourceView get(String id) {
39
        if (!resourceViews.containsKey(id)) {
×
40
            try {
41
                Nanopub np = Utils.getAsNanopub(id.replaceFirst("^(.*[^A-Za-z0-9-_])?(RA[A-Za-z0-9-_]{43})[^A-Za-z0-9-_].*$", "$2"));
×
42
                resourceViews.put(id, new ResourceView(id, np));
×
43
            } catch (Exception ex) {
×
44
                logger.error("Couldn't load nanopub for resource: " + id, ex);
×
45
            }
×
46
        }
47
        return resourceViews.get(id);
×
48
    }
49

50
    private String id;
51
    private Nanopub nanopub;
52
    private String label;
53
    private String title = "View";
×
54
    private GrlcQuery query;
55
    private String queryField = "resource";
×
56
    private List<IRI> actionList = new ArrayList<>();
×
57
    private Set<IRI> types = new HashSet<>();
×
58
    private Set<IRI> targetClasses = new HashSet<>();
×
59
    private Map<IRI,Template> actionTemplateMap = new HashMap<>();
×
60
    private Map<IRI,String> actionTemplateFieldMap = new HashMap<>();
×
61
    private Map<IRI,String> labelMap = new HashMap<>();
×
62

63
    private ResourceView(String id, Nanopub nanopub) {
×
64
        this.id = id;
×
65
        this.nanopub = nanopub;
×
66
        boolean resourceViewTypeFound = false;
×
67
        for (Statement st : nanopub.getAssertion()) {
×
68
            if (st.getSubject().stringValue().equals(id)) {
×
69
                if (st.getPredicate().equals(RDF.TYPE)) {
×
70
                    if (st.getObject().equals(RESOURCE_VIEW)) {
×
71
                        resourceViewTypeFound = true;
×
72
                    } else if (st.getObject() instanceof IRI objIri) {
×
73
                        types.add(objIri);
×
74
                    }
75
                } else if (st.getPredicate().equals(RDFS.LABEL)) {
×
76
                    label = st.getObject().stringValue();
×
77
                } else if (st.getPredicate().equals(DCTERMS.TITLE)) {
×
78
                    title = st.getObject().stringValue();
×
79
                } else if (st.getPredicate().equals(HAS_VIEW_QUERY)) {
×
80
                    query = GrlcQuery.get(st.getObject().stringValue());
×
81
                } else if (st.getPredicate().equals(HAS_VIEW_QUERY_TARGET_FIELD)) {
×
82
                    queryField = st.getObject().stringValue();
×
83
                } else if (st.getPredicate().equals(HAS_VIEW_ACTION) && st.getObject() instanceof IRI objIri) {
×
84
                    actionList.add(objIri);
×
85
                } else if (st.getPredicate().equals(HAS_VIEW_TARGET_CLASS) && st.getObject() instanceof IRI objIri) {
×
86
                    targetClasses.add(objIri);
×
87
                }
88
            } else if (st.getPredicate().equals(HAS_ACTION_TEMPLATE)) {
×
89
                Template template = TemplateData.get().getTemplate(st.getObject().stringValue());
×
90
                actionTemplateMap.put((IRI) st.getSubject(), template);
×
91
            } else if (st.getPredicate().equals(HAS_ACTION_TEMPLATE_TARGET_FIELD)) {
×
92
                actionTemplateFieldMap.put((IRI) st.getSubject(), st.getObject().stringValue());
×
93
            } else if (st.getPredicate().equals(RDFS.LABEL)) {
×
94
                labelMap.put((IRI) st.getSubject(), st.getObject().stringValue());
×
95
            }
96
        }
×
97
        if (!resourceViewTypeFound) throw new IllegalArgumentException("Not a proper resource view nanopub: " + id);
×
98
        if (query == null) throw new IllegalArgumentException("Query not found: " + id);
×
99
    }
×
100

101
    public String getId() {
102
        return id;
×
103
    }
104

105
    public Nanopub getNanopub() {
106
        return nanopub;
×
107
    }
108

109
    public String getLabel() {
110
        return label;
×
111
    }
112

113
    public String getTitle() {
114
        return title;
×
115
    }
116

117
    public GrlcQuery getQuery() {
118
        return query;
×
119
    }
120

121
    public String getQueryField() {
122
        return queryField;
×
123
    }
124

125
    public List<IRI> getActionList() {
126
        return actionList;
×
127
    }
128

129
    public Template getTemplateForAction(IRI actionIri) {
130
        return actionTemplateMap.get(actionIri);
×
131
    }
132

133
    public String getTemplateFieldForAction(IRI actionIri) {
134
        return actionTemplateFieldMap.get(actionIri);
×
135
    }
136

137
    public String getLabelForAction(IRI actionIri) {
138
        return labelMap.get(actionIri);
×
139
    }
140

141
    public boolean hasType(IRI type) {
142
        return types.contains(type);
×
143
    }
144

145
    public boolean isTopLevelView() {
146
        return !hasType(PART_LEVEL_VIEW);
×
147
    }
148

149
    public boolean hasTargetClasses() {
150
        return !targetClasses.isEmpty();
×
151
    }
152

153
    public boolean hasTargetClass(IRI targetClass) {
154
        return targetClasses.contains(targetClass);
×
155
    }
156

157
}
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

© 2026 Coveralls, Inc