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

knowledgepixels / nanodash / 19170532844

07 Nov 2025 01:56PM UTC coverage: 14.148% (-0.8%) from 14.95%
19170532844

push

github

tkuhn
feat(Space): Part-level elements for Spaces, also namespace-declared

518 of 4596 branches covered (11.27%)

Branch coverage included in aggregate %.

1335 of 8501 relevant lines covered (15.7%)

0.7 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
    public static final IRI RESOURCE_VIEW = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/ResourceView");
×
28
    public static final IRI TOP_LEVEL_VIEW_DISPLAY = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/TopLevelViewDisplay");
×
29
    public static final IRI PART_LEVEL_VIEW_DISPLAY = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/PartLevelViewDisplay");
×
30
    public static final IRI HAS_VIEW_QUERY = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewQuery");
×
31
    public static final IRI HAS_VIEW_QUERY_TARGET_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewQueryTargetField");
×
32
    public static final IRI HAS_VIEW_TARGET_CLASS = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewTargetClass");
×
33
    public static final IRI HAS_ELEMENT_NAMESPACE = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasElementNamespace");
×
34
    public static final IRI HAS_VIEW_ACTION = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewAction");
×
35
    public static final IRI HAS_ACTION_TEMPLATE = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplate");
×
36
    public static final IRI HAS_ACTION_TEMPLATE_TARGET_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplateTargetField");
×
37
    public static final IRI HAS_ACTION_TEMPLATE_PART_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplatePartField");
×
38

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

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

53
    private String id;
54
    private Nanopub nanopub;
55
    private String label;
56
    private String title = "View";
×
57
    private GrlcQuery query;
58
    private String queryField = "resource";
×
59
    private List<IRI> actionList = new ArrayList<>();
×
60
    private Set<IRI> targetClasses = new HashSet<>();
×
61
    private Set<IRI> elementNamespaces = new HashSet<>();
×
62
    private Map<IRI,Template> actionTemplateMap = new HashMap<>();
×
63
    private Map<IRI,String> actionTemplateTargetFieldMap = new HashMap<>();
×
64
    private Map<IRI,String> actionTemplatePartFieldMap = new HashMap<>();
×
65
    private Map<IRI,String> labelMap = new HashMap<>();
×
66

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

107
    public String getId() {
108
        return id;
×
109
    }
110

111
    public Nanopub getNanopub() {
112
        return nanopub;
×
113
    }
114

115
    public String getLabel() {
116
        return label;
×
117
    }
118

119
    public String getTitle() {
120
        return title;
×
121
    }
122

123
    public GrlcQuery getQuery() {
124
        return query;
×
125
    }
126

127
    public String getQueryField() {
128
        return queryField;
×
129
    }
130

131
    public List<IRI> getActionList() {
132
        return actionList;
×
133
    }
134

135
    public Template getTemplateForAction(IRI actionIri) {
136
        return actionTemplateMap.get(actionIri);
×
137
    }
138

139
    public String getTemplateTargetFieldForAction(IRI actionIri) {
140
        return actionTemplateTargetFieldMap.get(actionIri);
×
141
    }
142

143
    public String getTemplatePartFieldForAction(IRI actionIri) {
144
        return actionTemplatePartFieldMap.get(actionIri);
×
145
    }
146

147
    public String getLabelForAction(IRI actionIri) {
148
        return labelMap.get(actionIri);
×
149
    }
150

151
    public boolean coversElement(String elementId) {
152
        for (IRI namespace : elementNamespaces) {
×
153
            if (elementId.startsWith(namespace.stringValue())) return true;
×
154
        }
×
155
        return false;
×
156
    }
157

158
    public boolean hasTargetClasses() {
159
        return !targetClasses.isEmpty();
×
160
    }
161

162
    public boolean hasTargetClass(IRI targetClass) {
163
        return targetClasses.contains(targetClass);
×
164
    }
165

166
    @Override
167
    public String toString() {
168
        return id;
×
169
    }
170

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