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

knowledgepixels / nanodash / 19132632084

06 Nov 2025 10:29AM UTC coverage: 14.255% (-0.05%) from 14.306%
19132632084

push

github

tkuhn
feat: Add gen:hasActionTemplatePartField for pre-setting namespace

514 of 4530 branches covered (11.35%)

Branch coverage included in aggregate %.

1332 of 8420 relevant lines covered (15.82%)

0.71 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_VIEW_ACTION = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasViewAction");
×
34
    public static final IRI HAS_ACTION_TEMPLATE = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplate");
×
35
    public static final IRI HAS_ACTION_TEMPLATE_TARGET_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplateTargetField");
×
36
    public static final IRI HAS_ACTION_TEMPLATE_PART_FIELD = Utils.vf.createIRI("https://w3id.org/kpxl/gen/terms/hasActionTemplatePartField");
×
37

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

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

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

65
    private ResourceView(String id, Nanopub nanopub) {
×
66
        this.id = id;
×
67
        this.nanopub = nanopub;
×
68
        boolean resourceViewTypeFound = false;
×
69
        for (Statement st : nanopub.getAssertion()) {
×
70
            if (st.getSubject().stringValue().equals(id)) {
×
71
                if (st.getPredicate().equals(RDF.TYPE)) {
×
72
                    if (st.getObject().equals(RESOURCE_VIEW)) {
×
73
                        resourceViewTypeFound = true;
×
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
                actionTemplateTargetFieldMap.put((IRI) st.getSubject(), st.getObject().stringValue());
×
93
            } else if (st.getPredicate().equals(HAS_ACTION_TEMPLATE_PART_FIELD)) {
×
94
                actionTemplatePartFieldMap.put((IRI) st.getSubject(), st.getObject().stringValue());
×
95
            } else if (st.getPredicate().equals(RDFS.LABEL)) {
×
96
                labelMap.put((IRI) st.getSubject(), st.getObject().stringValue());
×
97
            }
98
        }
×
99
        if (!resourceViewTypeFound) throw new IllegalArgumentException("Not a proper resource view nanopub: " + id);
×
100
        if (query == null) throw new IllegalArgumentException("Query not found: " + id);
×
101
    }
×
102

103
    public String getId() {
104
        return id;
×
105
    }
106

107
    public Nanopub getNanopub() {
108
        return nanopub;
×
109
    }
110

111
    public String getLabel() {
112
        return label;
×
113
    }
114

115
    public String getTitle() {
116
        return title;
×
117
    }
118

119
    public GrlcQuery getQuery() {
120
        return query;
×
121
    }
122

123
    public String getQueryField() {
124
        return queryField;
×
125
    }
126

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

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

135
    public String getTemplateTargetFieldForAction(IRI actionIri) {
136
        return actionTemplateTargetFieldMap.get(actionIri);
×
137
    }
138

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

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

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

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

155
    @Override
156
    public String toString() {
157
        return id;
×
158
    }
159

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