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 0000000000000000000000000000000000000000..7ef356c2039ca053544d4b17dcca475ed25f5540 --- /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 a4fa55fe53094b4aed9ccee33eee75e5cb0eb4ae..9f1d9a6f56036776e9714d089f6b0f84d4c667a1 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 8bb396b12a3507f8a9b4754e5994a559ffa377aa..1c0c2d7d3593c2c09b29e701c24066fbca5d0b7a 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 61beef28689ea2d95e72a8c34cc19a497c051e48..7d2caae0d490b73c03c7f430bfed2e361b1060b3 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>