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

knowledgepixels / nanopub-query / 22309839160

23 Feb 2026 02:14PM UTC coverage: 70.629% (-0.3%) from 70.899%
22309839160

push

github

tkuhn
Adjust Accept header Media types for Construct queries

215 of 328 branches covered (65.55%)

Branch coverage included in aggregate %.

593 of 816 relevant lines covered (72.67%)

10.94 hits per line

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

68.06
src/main/java/com/knowledgepixels/query/OpenApiSpecPage.java
1
package com.knowledgepixels.query;
2

3
import com.knowledgepixels.query.GrlcSpec.InvalidGrlcSpecException;
4
import io.vertx.core.MultiMap;
5
import org.yaml.snakeyaml.DumperOptions;
6
import org.yaml.snakeyaml.Yaml;
7

8
import java.util.*;
9

10
/**
11
 * Page for Open API compliant specification.
12
 */
13
public class OpenApiSpecPage {
14

15
    private Map<String, Object> dataMap = new LinkedHashMap<>();
15✔
16

17
    /**
18
     * Creates a new page instance.
19
     *
20
     * @param requestUrl The request URL
21
     * @param parameters The URL request parameters
22
     * @throws InvalidGrlcSpecException If the GRLC specification is invalid
23
     */
24
    public OpenApiSpecPage(String requestUrl, MultiMap parameters) throws InvalidGrlcSpecException {
6✔
25
        GrlcSpec grlcSpec = new GrlcSpec(requestUrl, parameters);
18✔
26

27

28
        dataMap.put("openapi", "3.0.4");
18✔
29

30
        Map<String, Object> infoMap = new LinkedHashMap<>();
12✔
31
        infoMap.put("title", grlcSpec.getLabel());
18✔
32
        infoMap.put("description", "API definition source: <a target=\"_blank\" href=\"" + grlcSpec.getNanopub().getUri() +
27✔
33
                                   "\"><svg height=\"0.8em\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 8 8\"><path d=\"M5,8H8L3,0H0M8,4.8V0H5M0,3.2V8H3\"/></svg> " +
34
                                   grlcSpec.getArtifactCode().substring(0, 10) + "</a>");
15✔
35
        infoMap.put("version", grlcSpec.getArtifactCode().substring(0, 10));
27✔
36
        dataMap.put("info", infoMap);
18✔
37

38
        List<Object> serversList = new ArrayList<>();
12✔
39
        Map<String, Object> serverMap = new LinkedHashMap<>();
12✔
40
        serverMap.put("url", Utils.getEnvString("NANOPUB_QUERY_URL", "http://localhost:9393/") + "api/" + grlcSpec.getArtifactCode());
30✔
41
        serverMap.put("description", "This Nanopub Query instance");
15✔
42
        serversList.add(serverMap);
12✔
43
        dataMap.put("servers", serversList);
18✔
44

45
        Map<String, Object> pathsMap = new LinkedHashMap<>();
12✔
46
        Map<String, Object> rootPathMap = new LinkedHashMap<>();
12✔
47
        Map<String, Object> getOpMap = new LinkedHashMap<>();
12✔
48
        //getOpMap.put("summary", label);
49
        getOpMap.put("description", grlcSpec.getDescription());
18✔
50
        Map<String, Object> responsesMap = new LinkedHashMap<>();
12✔
51
        Map<String, Object> successrespMap = new LinkedHashMap<>();
12✔
52
        Map<String, Object> contentMap = new LinkedHashMap<>();
12✔
53
        if (grlcSpec.isConstructQuery()) {
9!
54
            contentMap.put("text/turtle", new HashMap<>());
×
55
            contentMap.put("application/ld+json", new HashMap<>());
×
56
            contentMap.put("application/n-triples", new HashMap<>());
×
57
            contentMap.put("application/trix", new HashMap<>());
×
58
            contentMap.put("application/xml", new HashMap<>());
×
59
        } else {
60
            contentMap.put("text/csv", new HashMap<>());
21✔
61
            contentMap.put("application/json", new HashMap<>());
21✔
62
            contentMap.put("application/xml", new HashMap<>());
21✔
63
        }
64
        successrespMap.put("content", contentMap);
15✔
65
        successrespMap.put("description", "result table");
15✔
66
        responsesMap.put("200", successrespMap);
15✔
67
        List<Object> parametersList = new ArrayList<>();
12✔
68

69
        final Map<String, Object> stringType = new LinkedHashMap<>();
12✔
70
        stringType.put("type", "string");
15✔
71
        final Map<String, Object> stringListType = new LinkedHashMap<>();
12✔
72
        stringListType.put("type", "array");
15✔
73
        stringListType.put("items", stringType);
15✔
74

75
        for (String p : grlcSpec.getPlaceholdersList()) {
21!
76
            Map<String, Object> paramMap = new LinkedHashMap<>();
×
77
            paramMap.put("in", "query");
×
78
            String name = GrlcSpec.getParamName(p);
×
79
            paramMap.put("name", name);
×
80
            paramMap.put("required", !GrlcSpec.isOptionalPlaceholder(p));
×
81
            if (GrlcSpec.isMultiPlaceholder(p)) {
×
82
                paramMap.put("style", "form");
×
83
                paramMap.put("explde", "true");
×
84
                paramMap.put("schema", stringListType);
×
85
            } else {
86
                paramMap.put("schema", stringType);
×
87
            }
88
            parametersList.add(paramMap);
×
89
        }
×
90
        getOpMap.put("parameters", parametersList);
15✔
91
        getOpMap.put("responses", responsesMap);
15✔
92
        rootPathMap.put("get", getOpMap);
15✔
93
        pathsMap.put("/" + grlcSpec.getQueryName(), rootPathMap);
21✔
94
        dataMap.put("paths", pathsMap);
18✔
95
    }
3✔
96

97
    /**
98
     * Returns the Open API spec as a string.
99
     *
100
     * @return Open API specification string
101
     */
102
    public String getSpec() {
103
        final DumperOptions options = new DumperOptions();
12✔
104
        options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
9✔
105
        options.setPrettyFlow(true);
9✔
106
        return new Yaml(options).dump(dataMap);
24✔
107
    }
108

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