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

knowledgepixels / nanodash / 22618039211

03 Mar 2026 10:05AM UTC coverage: 16.058% (+0.2%) from 15.884%
22618039211

Pull #365

github

web-flow
Merge 1e7e700f0 into a8c4b4a77
Pull Request #365: Refactor of `ResourceWithProfile` and related classes

699 of 5287 branches covered (13.22%)

Branch coverage included in aggregate %.

1721 of 9783 relevant lines covered (17.59%)

2.41 hits per line

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

0.0
src/main/java/com/knowledgepixels/nanodash/page/ProjectPage.java
1
package com.knowledgepixels.nanodash.page;
2

3
import com.knowledgepixels.nanodash.*;
4
import com.knowledgepixels.nanodash.component.*;
5
import com.knowledgepixels.nanodash.domain.Project;
6
import com.knowledgepixels.nanodash.domain.User;
7
import com.knowledgepixels.nanodash.repository.SpaceRepository;
8
import com.knowledgepixels.nanodash.template.Template;
9
import org.apache.commons.lang3.tuple.Pair;
10
import org.apache.wicket.RestartResponseException;
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.link.ExternalLink;
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.Nanopub;
20
import org.nanopub.extra.services.QueryRef;
21

22
import java.util.ArrayList;
23
import java.util.Collections;
24
import java.util.List;
25

26
/**
27
 * The ProjectPage class represents a project page in the Nanodash application.
28
 */
29
public class ProjectPage extends NanodashPage {
30

31
    /**
32
     * The mount path for this page.
33
     */
34
    public static final String MOUNT_PATH = "/project";
35

36
    /**
37
     * {@inheritDoc}
38
     */
39
    @Override
40
    public String getMountPath() {
41
        return MOUNT_PATH;
×
42
    }
43

44
    /**
45
     * Project object with the data shown on this page.
46
     */
47
    private Project project;
48

49
    /**
50
     * Constructor for the ProjectPage.
51
     *
52
     * @param parameters the page parameters
53
     */
54
    public ProjectPage(final PageParameters parameters) {
55
        super(parameters);
×
56

57
        String projectId = parameters.get("id").toString();
×
58
        if (SpaceRepository.get().findById(projectId) != null) {
×
59
            throw new RestartResponseException(SpacePage.class, parameters);
×
60
        }
61
        project = Project.get(projectId);
×
62
        Nanopub np = project.getRootNanopub();
×
63

64
        add(new TitleBar("titlebar", this, null));
×
65

66
        add(new Label("pagetitle", project.getLabel() + " (project) | nanodash"));
×
67
        add(new Label("projectname", project.getLabel()));
×
68
        add(new ExternalLink("id", project.getId(), project.getId()));
×
69
        add(new BookmarkablePageLink<Void>("np", ExplorePage.class, new PageParameters().set("id", np.getUri())));
×
70
        add(new Label("description", "<span class=\"internal\">" + Utils.sanitizeHtml(project.getDescription()) + "</span>").setEscapeModelStrings(false));
×
71

72
        final PageParameters params = new PageParameters();
×
73
        if (project.getDefaultProvenance() != null) {
×
74
            params.set("prtemplate", project.getDefaultProvenance().stringValue());
×
75
        }
76
        List<Pair<String, List<Template>>> templateLists = new ArrayList<>();
×
77
        List<String> templateTagList = new ArrayList<>(project.getTemplateTags());
×
78
        Collections.sort(templateTagList);
×
79
        List<Template> templates = new ArrayList<>(project.getTemplates());
×
80
        for (String tag : templateTagList) {
×
81
            for (Template t : project.getTemplatesPerTag().get(tag)) {
×
82
                templates.remove(t);
×
83
            }
×
84
            templateLists.add(Pair.of(tag, project.getTemplatesPerTag().get(tag)));
×
85
        }
×
86
        if (!templates.isEmpty()) {
×
87
            String l = templateLists.isEmpty() ? "Templates" : "Other Templates";
×
88
            templateLists.add(Pair.of(l, templates));
×
89
        }
90
        add(new DataView<Pair<String, List<Template>>>("template-lists", new ListDataProvider<>(templateLists)) {
×
91

92
            @Override
93
            protected void populateItem(Item<Pair<String, List<Template>>> item) {
94
                item.add(new ItemListPanel<Template>(
×
95
                        "templates",
96
                        item.getModelObject().getLeft(),
×
97
                        item.getModelObject().getRight(),
×
98
                        (template) -> new TemplateItem("item", template, params, false)
×
99
                ));
100
            }
×
101

102
        });
103
        add(new ItemListPanel<Template>(
×
104
                "templates",
105
                "Templates",
106
                templates,
107
                (template) -> new TemplateItem("item", template, params, false)
×
108
        ));
109

110
        add(new ItemListPanel<IRI>(
×
111
                "owners",
112
                "Owners",
113
                () -> project.isDataInitialized(),
×
114
                () -> project.getOwners(),
×
115
                (userIri) -> {
116
                    return new ItemListElement("item", UserPage.class, new PageParameters().add("id", userIri), User.getShortDisplayName(userIri));
×
117
                }
118
        ));
119

120
        add(new ItemListPanel<IRI>(
×
121
                "members",
122
                "Members",
123
                () -> project.isDataInitialized(),
×
124
                () -> project.getMembers(),
×
125
                (userIri) -> {
126
                    return new ItemListElement("item", UserPage.class, new PageParameters().set("id", userIri), User.getShortDisplayName(userIri));
×
127
                }
128
        ));
129

130
        add(new DataView<IRI>("queries", new ListDataProvider<IRI>(project.getQueryIds())) {
×
131

132
            @Override
133
            protected void populateItem(Item<IRI> item) {
134
                String queryId = QueryApiAccess.getQueryId(item.getModelObject());
×
135
                item.add(QueryResultTableBuilder.create("query", new QueryRef(queryId), new ViewDisplay(20)).build());
×
136
            }
×
137

138
        });
139
    }
×
140

141
    /**
142
     * Checks if auto-refresh is enabled for this page.
143
     *
144
     * @return true if auto-refresh is enabled, false otherwise
145
     */
146
    protected boolean hasAutoRefreshEnabled() {
147
        return true;
×
148
    }
149

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