package org.molgenis.dataexplorer.freemarker; import freemarker.core.Environment; import freemarker.template.*; import org.molgenis.data.DataConverter; import org.molgenis.data.DataService; import org.molgenis.dataexplorer.controller.DataExplorerController; import org.molgenis.framework.ui.MolgenisPlugin; import org.molgenis.framework.ui.MolgenisPluginRegistry; import java.io.IOException; import java.io.Writer; import java.net.URLEncoder; import java.util.Map; /** * Creates a link to the dataexplorer for a dataset * <p> * usage: <@dataExplorerLink dataset='celiacsprue' class='btn'>Explore data</@dataExplorerLink> * <p> * created html: <a href='/menu/main/dataexplorer' class='btn'>Explore data</a> */ public class DataExplorerHyperlinkDirective implements TemplateDirectiveModel { private final MolgenisPluginRegistry molgenisPluginRegistry; private final DataService dataService; public DataExplorerHyperlinkDirective(MolgenisPluginRegistry molgenisPluginRegistry, DataService dataService) { this.molgenisPluginRegistry = molgenisPluginRegistry; this.dataService = dataService; } @Override public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { if (!params.containsKey("entityName")) throw new TemplateModelException("Missing 'entityName' parameter"); String dataset = DataConverter.toString(params.get("entityName")); MolgenisPlugin dataexplorer = molgenisPluginRegistry.getPlugin(DataExplorerController.ID); Writer w = env.getOut(); if (dataService.hasRepository(dataset) && (dataexplorer != null)) { String cssClass = DataConverter.toString(params.get("class")); String dataexplorerPageUri = String .format("%s?entity=%s", dataexplorer.getFullUri(), URLEncoder.encode(dataset, "UTF-8")); w.write("<a href='"); w.write(dataexplorerPageUri); w.write("' "); if (cssClass != null) { w.write("class='" + cssClass + "' "); } w.write(">"); body.render(w); w.write("</a>"); } else if (params.containsKey("alternativeText")) { w.write(DataConverter.toString(params.get("alternativeText"))); } } }