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

knowledgepixels / nanodash / 18715370422

22 Oct 2025 11:58AM UTC coverage: 13.159% (-0.7%) from 13.858%
18715370422

push

github

tkuhn
feat(ResourceView): Implement configurable actions

454 of 4396 branches covered (10.33%)

Branch coverage included in aggregate %.

1206 of 8219 relevant lines covered (14.67%)

0.65 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.List;
7
import java.util.Map;
8

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

18
import com.knowledgepixels.nanodash.template.Template;
19
import com.knowledgepixels.nanodash.template.TemplateData;
20

21
public class ResourceView implements Serializable {
22

23
    private static final Logger logger = LoggerFactory.getLogger(ResourceView.class);
×
24

25
    private static final IRI RESOURCE_VIEW = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/ResourceView");
×
26
    private static final IRI HAS_VIEW_QUERY = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewQuery");
×
27
    private static final IRI HAS_VIEW_QUERY_TARGET_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewQueryTargetField");
×
28
    private static final IRI HAS_VIEW_ACTION = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewAction");
×
29
    private static final IRI HAS_ACTION_TEMPLATE = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplate");
×
30
    private static final IRI HAS_ACTION_TEMPLATE_TARGET_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplateTargetField");
×
31

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

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

46
    private String id;
47
    private Nanopub nanopub;
48
    private String label;
49
    private String title = "View";
×
50
    private GrlcQuery query;
51
    private String queryField = "resource";
×
52
    private List<IRI> actionList = new ArrayList<>();
×
53
    private Map<IRI,Template> actionTemplateMap = new HashMap<>();
×
54
    private Map<IRI,String> actionTemplateFieldMap = new HashMap<>();
×
55
    private Map<IRI,String> labelMap = new HashMap<>();
×
56

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

91
    public String getId() {
92
        return id;
×
93
    }
94

95
    public Nanopub getNanopub() {
96
        return nanopub;
×
97
    }
98

99
    public String getLabel() {
100
        return label;
×
101
    }
102

103
    public String getTitle() {
104
        return title;
×
105
    }
106

107
    public GrlcQuery getQuery() {
108
        return query;
×
109
    }
110

111
    public String getQueryField() {
112
        return queryField;
×
113
    }
114

115
    public List<IRI> getActionList() {
116
        return actionList;
×
117
    }
118

119
    public Template getTemplateForAction(IRI actionIri) {
120
        return actionTemplateMap.get(actionIri);
×
121
    }
122

123
    public String getTemplateFieldForAction(IRI actionIri) {
124
        return actionTemplateFieldMap.get(actionIri);
×
125
    }
126

127
    public String getLabelForAction(IRI actionIri) {
128
        return labelMap.get(actionIri);
×
129
    }
130

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