diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDataTable.html b/src/main/java/com/knowledgepixels/nanodash/component/ExploreDataTable.html deleted file mode 100644 index ef08a78c..00000000 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDataTable.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - -

- -
- -
- - - - \ No newline at end of file diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDataTable.java b/src/main/java/com/knowledgepixels/nanodash/component/ExploreDataTable.java deleted file mode 100644 index 70da823d..00000000 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDataTable.java +++ /dev/null @@ -1,217 +0,0 @@ -package com.knowledgepixels.nanodash.component; - -import com.knowledgepixels.nanodash.ApiCache; -import com.knowledgepixels.nanodash.QueryApiAccess; -import com.knowledgepixels.nanodash.domain.User; -import com.knowledgepixels.nanodash.Utils; -import org.apache.wicket.Component; -import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxNavigationToolbar; -import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; -import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState; -import org.apache.wicket.extensions.markup.html.repeater.data.table.*; -import org.apache.wicket.extensions.markup.html.repeater.util.SingleSortState; -import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.markup.repeater.Item; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.nanopub.Nanopub; -import org.nanopub.extra.services.ApiResponse; -import org.nanopub.extra.services.ApiResponseEntry; -import org.nanopub.extra.services.QueryRef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; - -/** - * A component that displays a data table of nanopublication references. - */ -public class ExploreDataTable extends Panel { - - private static final Logger logger = LoggerFactory.getLogger(ExploreDataTable.class); - - private ExploreDataTable(String id, String ref, ApiResponse response) { - super(id); - setOutputMarkupId(true); - - List> columns = new ArrayList<>(); - DataProvider dp; - try { - columns.add(new Column("Nanopublication", "np", ref)); - columns.add(new Column("Part", "graphpred", ref)); - columns.add(new Column("Subject", "subj", ref)); - columns.add(new Column("Predicate", "pred", ref)); - columns.add(new Column("Object", "obj", ref)); - columns.add(new Column("Published By", "pubkey", ref)); - columns.add(new Column("Published On", "date", ref)); - dp = new DataProvider(filterData(response.getData(), ref)); - DataTable table = new DataTable<>("datatable", columns, dp, 10); - table.addBottomToolbar(new AjaxNavigationToolbar(table)); - table.addBottomToolbar(new NoRecordsToolbar(table)); - table.addTopToolbar(new HeadersToolbar(table, dp)); - table.setOutputMarkupId(true); - add(table); - add(new Label("message", "").setVisible(false)); - } catch (Exception ex) { - logger.error("Could not create data table for reference: {}", ref, ex); - add(new Label("datatable", "").setVisible(false)); - add(new Label("message", "Could not load data table.")); - add(new Label("show-all").setVisible(false)); - } - } - - - private List filterData(List data, String nanopubUri) { - List filteredList = new ArrayList<>(); - Nanopub np = Utils.getAsNanopub(nanopubUri); - if (np == null) return data; - for (ApiResponseEntry e : data) { - if (np == null || !nanopubUri.equals(e.get("np"))) { - filteredList.add(e); - } - } - return filteredList; - } - - - private class Column extends AbstractColumn { - - private String key, current; - - /** - * Constructor for a column in the data table. - * - * @param title The title of the column. - * @param key The key used to retrieve data from ApiResponseEntry. - * @param current The current value to highlight in the column. - */ - public Column(String title, String key, String current) { - super(new Model(title), key); - this.key = key; - this.current = current; - } - - @Override - public void populateItem(Item> cellItem, String componentId, IModel rowModel) { - String value = rowModel.getObject().get(key); - if (value.equals(current)) { - cellItem.add(new Label(componentId, "" + Utils.getShortNameFromURI(value) + "").setEscapeModelStrings(false)); - } else if (value.matches("https?://.+")) { - cellItem.add(new NanodashLink(componentId, value)); - } else { - if (key.equals("pubkey")) { - cellItem.add(new Label(componentId, User.getShortDisplayNameForPubkeyhash(null, Utils.createSha256HexHash(value)))); - } else { - cellItem.add(new Label(componentId, value)); - } - } - } - - } - - - private class DataProvider implements ISortableDataProvider { - - private List data = new ArrayList<>(); - private SingleSortState sortState = new SingleSortState<>(); - - /** - * Default constructor that initializes the sort state. - */ - public DataProvider() { - sortState.setSort(new SortParam("date", false)); - } - - /** - * Constructor that initializes the data provider with a list of ApiResponseEntry. - * - * @param data The list of ApiResponseEntry to be used in the data provider. - */ - public DataProvider(List data) { - this(); - this.data = data; - } - - @Override - public Iterator iterator(long first, long count) { - List copy = new ArrayList<>(data); - ApiResponseComparator comparator = new ApiResponseComparator(sortState.getSort()); - copy.sort(comparator); - return Utils.subList(copy, first, first + count).iterator(); - } - - @Override - public IModel model(ApiResponseEntry object) { - return new Model(object); - } - - @Override - public long size() { - return data.size(); - } - - @Override - public ISortState getSortState() { - return sortState; - } - - @Override - public void detach() { - } - - } - - private class ApiResponseComparator implements Comparator, Serializable { - - private SortParam sortParam; - - /** - * Constructor that initializes the comparator with a sort parameter. - * - * @param sortParam The sort parameter defining the property and order for comparison. - */ - public ApiResponseComparator(SortParam sortParam) { - this.sortParam = sortParam; - } - - @Override - public int compare(ApiResponseEntry o1, ApiResponseEntry o2) { - String p = sortParam.getProperty(); - int result = o1.get(p).compareTo(o2.get(p)); - if (!sortParam.isAscending()) result = -result; - return result; - } - - } - - /** - * Creates a new ExploreDataTable component. - * - * @param markupId the Wicket markup ID for the component - * @param ref the reference URI to be displayed in the table - * @return a new ExploreDataTable component or an ApiResultComponent if the data is not cached - */ - public static Component createComponent(final String markupId, final String ref) { - QueryRef queryRef = new QueryRef(QueryApiAccess.FIND_URI_REFERENCES, "ref", ref); - ApiResponse response = ApiCache.retrieveResponseAsync(queryRef); - if (response != null) { - return new ExploreDataTable(markupId, ref, response); - } else { - return new ApiResultComponent(markupId, queryRef) { - - @Override - public Component getApiResultComponent(String markupId, ApiResponse response) { - return new ExploreDataTable(markupId, ref, response); - } - - }; - } - } - -} diff --git a/src/main/java/com/knowledgepixels/nanodash/page/ReferencesPage.html b/src/main/java/com/knowledgepixels/nanodash/page/ReferencesPage.html index a119f904..000f5274 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/ReferencesPage.html +++ b/src/main/java/com/knowledgepixels/nanodash/page/ReferencesPage.html @@ -16,8 +16,8 @@

🔗 References for

back to explore

-
+
diff --git a/src/main/java/com/knowledgepixels/nanodash/page/ReferencesPage.java b/src/main/java/com/knowledgepixels/nanodash/page/ReferencesPage.java index 63815464..4c64ca12 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/ReferencesPage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/ReferencesPage.java @@ -1,18 +1,23 @@ package com.knowledgepixels.nanodash.page; import com.knowledgepixels.nanodash.Utils; -import com.knowledgepixels.nanodash.component.ExploreDataTable; +import com.knowledgepixels.nanodash.View; +import com.knowledgepixels.nanodash.ViewDisplay; import com.knowledgepixels.nanodash.component.ExternalLinkWithActionsPanel; +import com.knowledgepixels.nanodash.component.QueryResultTableBuilder; import com.knowledgepixels.nanodash.component.TitleBar; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.nanopub.extra.services.QueryRef; public class ReferencesPage extends NanodashPage { public static final String MOUNT_PATH = "/references"; + private static final String REFERENCES_VIEW = "https://w3id.org/np/RAZ0EGsBlca8unLqQzGl5kVapGgllKvDbGFlTA_FFD7oM/references-view"; + @Override public String getMountPath() { return MOUNT_PATH; @@ -37,7 +42,10 @@ public ReferencesPage(final PageParameters parameters) { add(new Label("termname", shortName)); add(new ExternalLinkWithActionsPanel("urilink", Model.of(ref))); add(new BookmarkablePageLink("back-link", ExplorePage.class, new PageParameters().set("id", ref))); - add(ExploreDataTable.createComponent("reftable", ref)); + + View view = View.get(REFERENCES_VIEW); + QueryRef queryRef = new QueryRef(view.getQuery().getQueryId(), "ref", ref); + add(QueryResultTableBuilder.create("reftable", queryRef, new ViewDisplay(view)).build()); } }