From b45317e61e7529f4e851a810b49fb6f692893983 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20Sch=C3=A4rtl?= <andreas@schaertl.me>
Date: Wed, 30 Sep 2020 15:38:45 +0200
Subject: [PATCH] app: add explore links for use references

---
 .../mathhub/uloapi/html/PrintableIRI.java     | 59 +++++++++++++++++++
 .../java/info/mathhub/uloapi/html/Routes.java |  4 +-
 .../freemarker/explore_contributor.flt        |  4 +-
 .../template/freemarker/explore_node.flt      |  4 +-
 4 files changed, 67 insertions(+), 4 deletions(-)
 create mode 100644 src/ulo-storage-applications/src/main/java/info/mathhub/uloapi/html/PrintableIRI.java

diff --git a/src/ulo-storage-applications/src/main/java/info/mathhub/uloapi/html/PrintableIRI.java b/src/ulo-storage-applications/src/main/java/info/mathhub/uloapi/html/PrintableIRI.java
new file mode 100644
index 0000000..7ef356c
--- /dev/null
+++ b/src/ulo-storage-applications/src/main/java/info/mathhub/uloapi/html/PrintableIRI.java
@@ -0,0 +1,59 @@
+package info.mathhub.uloapi.html;
+
+import org.eclipse.rdf4j.model.IRI;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Wrapper around {@link IRI} that provides additional
+ * methods for use in Freemarker templates.
+ */
+public class PrintableIRI implements IRI {
+    private final IRI original;
+
+    public PrintableIRI(IRI original) {
+        this.original = original;
+    }
+
+    /**
+     * Convert a list of {@link IRI} to {@link PrintableIRI}.
+     */
+    public static List<PrintableIRI> convert(List<IRI> originals) {
+        return originals.stream().map(PrintableIRI::new).collect(Collectors.toList());
+    }
+
+    @Override
+    public String toString() {
+        return this.original.toString();
+    }
+
+    @Override
+    public String getNamespace() {
+        return this.original.getNamespace();
+    }
+
+    @Override
+    public String getLocalName() {
+        return this.original.getLocalName();
+    }
+
+    @Override
+    public String stringValue() {
+        return this.original.stringValue();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        return this.original.equals(o);
+    }
+
+    @Override
+    public int hashCode() {
+        return this.original.hashCode();
+    }
+
+    public String toBase64() {
+        return Base64.encode(this.toString());
+    }
+}
diff --git a/src/ulo-storage-applications/src/main/java/info/mathhub/uloapi/html/Routes.java b/src/ulo-storage-applications/src/main/java/info/mathhub/uloapi/html/Routes.java
index a4fa55f..9f1d9a6 100644
--- a/src/ulo-storage-applications/src/main/java/info/mathhub/uloapi/html/Routes.java
+++ b/src/ulo-storage-applications/src/main/java/info/mathhub/uloapi/html/Routes.java
@@ -67,7 +67,7 @@ public class Routes {
         final Query query = Query.getSingleton();
 
         final String contributor = request.params("contributor");
-        final List<IRI> contributions = query.getContributions(contributor);
+        final List<PrintableIRI> contributions = PrintableIRI.convert(query.getContributions(contributor));
 
         final Map<String, Object> model = new HashMap<>();
         model.put("contributor", contributor);
@@ -82,7 +82,7 @@ public class Routes {
         final String base64uri = request.params("base64uri");
         final String uri = Base64.decode(base64uri);
 
-        final List<IRI> uses = query.getUses(uri);
+        final List<PrintableIRI> uses = PrintableIRI.convert(query.getUses(uri));
 
         final Map<String, Object> model = new HashMap<>();
         model.put("uri", uri);
diff --git a/src/ulo-storage-applications/src/main/resources/spark/template/freemarker/explore_contributor.flt b/src/ulo-storage-applications/src/main/resources/spark/template/freemarker/explore_contributor.flt
index 8bb396b..1c0c2d7 100644
--- a/src/ulo-storage-applications/src/main/resources/spark/template/freemarker/explore_contributor.flt
+++ b/src/ulo-storage-applications/src/main/resources/spark/template/freemarker/explore_contributor.flt
@@ -16,7 +16,9 @@
     <ul>
         <#list contributions as contribution>
             <li>
-                <code>${contribution}</code>
+                <a href="/explore/node/${contribution.toBase64()?url}">
+                    <code>${contribution}</code>
+                </a>
             </li>
         </#list>
     </ul>
diff --git a/src/ulo-storage-applications/src/main/resources/spark/template/freemarker/explore_node.flt b/src/ulo-storage-applications/src/main/resources/spark/template/freemarker/explore_node.flt
index 61beef2..7d2caae 100644
--- a/src/ulo-storage-applications/src/main/resources/spark/template/freemarker/explore_node.flt
+++ b/src/ulo-storage-applications/src/main/resources/spark/template/freemarker/explore_node.flt
@@ -24,7 +24,9 @@
     <ul>
         <#list uses as use>
             <li>
-                <code>${use}</code>
+                <a href="/explore/node/${use.toBase64()?url}">
+                    <code>${use}</code>
+                </a>
             </li>
         </#list>
     </ul>
-- 
GitLab