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

knowledgepixels / nanodash / 17548013916

08 Sep 2025 10:38AM UTC coverage: 11.91% (-0.01%) from 11.923%
17548013916

push

github

tkuhn
Add paging for query list

334 of 3884 branches covered (8.6%)

Branch coverage included in aggregate %.

960 of 6981 relevant lines covered (13.75%)

0.61 hits per line

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

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

3
import com.knowledgepixels.nanodash.GrlcQuery;
4
import com.knowledgepixels.nanodash.User;
5
import com.knowledgepixels.nanodash.Utils;
6
import com.knowledgepixels.nanodash.page.QueryPage;
7

8
import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
9
import org.apache.wicket.extensions.markup.html.repeater.data.table.NavigatorLabel;
10
import org.apache.wicket.markup.html.WebMarkupContainer;
11
import org.apache.wicket.markup.html.basic.Label;
12
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
13
import org.apache.wicket.markup.html.panel.Panel;
14
import org.apache.wicket.markup.repeater.Item;
15
import org.apache.wicket.markup.repeater.data.DataView;
16
import org.apache.wicket.markup.repeater.data.ListDataProvider;
17
import org.apache.wicket.request.mapper.parameter.PageParameters;
18
import org.eclipse.rdf4j.model.IRI;
19
import org.nanopub.SimpleTimestampPattern;
20
import org.nanopub.extra.security.NanopubSignatureElement;
21
import org.nanopub.extra.security.SignatureUtils;
22
import org.nanopub.extra.services.ApiResponse;
23
import org.nanopub.extra.services.ApiResponseEntry;
24
import org.slf4j.Logger;
25
import org.slf4j.LoggerFactory;
26

27
import java.text.SimpleDateFormat;
28
import java.util.ArrayList;
29
import java.util.Calendar;
30
import java.util.List;
31

32
/**
33
 * A component that displays a list of queries.
34
 * Each query is linked to its corresponding QueryPage.
35
 */
36
public class QueryList extends Panel {
37

38
    private static final long serialVersionUID = 1L;
39
    private static final Logger logger = LoggerFactory.getLogger(QueryList.class);
×
40

41
    /**
42
     * Constructor for QueryList.
43
     *
44
     * @param id   the component ID
45
     * @param resp the API response containing query data
46
     */
47
    public QueryList(String id, ApiResponse resp) {
48
        super(id);
×
49
        setOutputMarkupId(true);
×
50

51
        List<GrlcQuery> queries = new ArrayList<>();
×
52
        for (ApiResponseEntry e : resp.getData()) {
×
53
            try {
54
                queries.add(GrlcQuery.get(e.get("np")));
×
55
            } catch (Exception ex) {
×
56
                logger.error("Error processing query nanopub: {}", ex.getMessage());
×
57
            }
×
58
        }
×
59

60
        DataView<GrlcQuery> dataView = new DataView<>("querylist", new ListDataProvider<GrlcQuery>(queries)) {
×
61

62
            private static final long serialVersionUID = 1L;
63

64
            @Override
65
            protected void populateItem(Item<GrlcQuery> item) {
66
                GrlcQuery q = item.getModelObject();
×
67
                PageParameters params = new PageParameters();
×
68
                params.add("id", q.getQueryId());
×
69
                BookmarkablePageLink<Void> l = new BookmarkablePageLink<Void>("querylink", QueryPage.class, params);
×
70
                l.add(new Label("linktext", q.getLabel()));
×
71
                item.add(l);
×
72

73
                String userString = "somebody";
×
74
                try {
75
                    NanopubSignatureElement se = SignatureUtils.getSignatureElement(q.getNanopub());
×
76
                    if (se != null) {
×
77
                        IRI signer = (se.getSigners().isEmpty() ? null : se.getSigners().iterator().next());
×
78
                        String pubkeyhash = Utils.createSha256HexHash(se.getPublicKeyString());
×
79
                        userString = User.getShortDisplayNameForPubkeyhash(signer, pubkeyhash);
×
80
                    }
81
                } catch (Exception ex) {
×
82
                    logger.error("Error retrieving signature info: {}", ex.getMessage());
×
83
                }
×
84
                item.add(new Label("user", userString));
×
85
                String timeString = "unknown date";
×
86
                Calendar c = SimpleTimestampPattern.getCreationTime(q.getNanopub());
×
87
                if (c != null) {
×
88
                    timeString = (new SimpleDateFormat("yyyy-MM-dd")).format(c.getTime());
×
89
                }
90
                item.add(new Label("timestamp", timeString));
×
91
            }
×
92

93
        };
94
        dataView.setItemsPerPage(10);
×
95
        dataView.setOutputMarkupId(true);
×
96
        add(dataView);
×
97

98
        WebMarkupContainer navigation = new WebMarkupContainer("navigation");
×
99
        navigation.add(new NavigatorLabel("navigatorLabel", dataView));
×
100
        AjaxPagingNavigator pagingNavigator = new AjaxPagingNavigator("navigator", dataView);
×
101
        navigation.setVisible(dataView.getPageCount() > 1);
×
102
        navigation.add(pagingNavigator);
×
103
        add(navigation);
×
104
    }
×
105

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