Introduce Freemarker template support
Change-Id: I69c58e9829995402df263c1eda036081b67e20bf
diff --git a/plugin/pom.xml b/plugin/pom.xml
index fb561f5..d332116 100644
--- a/plugin/pom.xml
+++ b/plugin/pom.xml
@@ -83,6 +83,14 @@
<version>3.10.2</version>
<scope>test</scope>
</dependency>
+
+ <!-- Template engine -->
+ <!-- I wasn't able to get this working with jersey-mvc-freemarker ... -->
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>freemarker</artifactId>
+ <version>2.3.30</version>
+ </dependency>
</dependencies>
<build>
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
index c0ecfef..f670c1a 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
@@ -1,9 +1,11 @@
package de.ids_mannheim.korap.plkexport;
import java.io.IOException;
+import java.io.StringWriter;
import java.lang.Thread;
import java.io.InputStream;
import java.net.URLEncoder;
+import java.util.HashMap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -40,19 +42,20 @@
import static de.ids_mannheim.korap.plkexport.Util.*;
+// Template engine
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+
@Path("/")
public class IdsExportService {
Properties properties = ExWSConf.properties(null);
- // Load export string
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- InputStream is1 = cl.getResourceAsStream("assets/export.html");
- private final String exportStr = streamToString(is1);
-
- InputStream is2 = cl.getResourceAsStream("assets/export.js");
- private final String exportJsStr = streamToString(is2);
+ private final ClassLoader cl = Thread.currentThread().getContextClassLoader();
+
+ InputStream is = cl.getResourceAsStream("assets/export.js");
+ private final String exportJsStr = streamToString(is);
/**
* WebService calls Kustvakt Search Webservices and returns
@@ -102,7 +105,6 @@
String port = properties.getProperty("api.port", "8089");
String host = properties.getProperty("api.host", "localhost");
- // URIBuildernew UriBuilder();
UriBuilder uri = UriBuilder.fromPath("/api/v1.0/search")
.host(host)
.port(Integer.parseInt(port))
@@ -180,8 +182,41 @@
@Path("export")
@Produces(MediaType.TEXT_HTML)
public Response exportHTML () {
+
+ Configuration cfg = new Configuration();
+ cfg.setClassForTemplateLoading(IdsExportService.class, "/assets/templates");
+ cfg.setDefaultEncoding("UTF-8");
+
+ StringWriter out = new StringWriter();
+ HashMap<String, Object> templateData = new HashMap<String, Object>();
+
+ String scheme = properties.getProperty("asset.scheme", "https");
+ String port = properties.getProperty("asset.port", "");
+ String host = properties.getProperty("asset.host", "korap.ids-mannheim.de");
+
+ UriBuilder uri = UriBuilder.fromPath("")
+ .host(host)
+ .scheme(scheme)
+ ;
+
+ if (port != "") {
+ uri = uri.port(Integer.parseInt(port));
+ }
+
+ templateData.put("assetPath", uri.build());
+
+ try {
+ Template template = cfg.getTemplate("export.ftl");
+ template.process(templateData, out);
+ }
+ catch (Exception e) {
+ return Response
+ .ok(new String("Template not found"))
+ .status(Status.INTERNAL_SERVER_ERROR)
+ .build();
+ }
return Response
- .ok(exportStr, MediaType.TEXT_HTML)
+ .ok(out.toString(), "text/html")
.build();
};
@@ -192,8 +227,8 @@
return Response
.ok(exportJsStr, "application/javascript")
.build();
- };
-
+ };
+
public String writeRTF (LinkedList list) {
LinkedList matchlist = list;
RtfTextPara par = p((" "));
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java
index 27fa634..cb5a71c 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java
@@ -12,11 +12,14 @@
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
+import org.glassfish.jersey.servlet.ServletContainer;
+
public class PluginServer {
public static void main (String[] args) throws Exception {
ServletContextHandler contextHandler = new ServletContextHandler(
- ServletContextHandler.NO_SESSIONS);
+ ServletContextHandler.NO_SESSIONS
+ );
contextHandler.setContextPath("/");
Properties properties = ExWSConf.properties(null);
@@ -36,9 +39,12 @@
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { contextHandler, new DefaultHandler()});
jettyServer.setHandler(handlers);
+
+
+ ServletContainer servletContainer = new ServletContainer();
+ ServletHolder servletHolder = new ServletHolder(servletContainer);
+ contextHandler.addServlet(servletHolder, "/*");
- ServletHolder servletHolder = contextHandler.addServlet(
- org.glassfish.jersey.servlet.ServletContainer.class, "/*");
servletHolder.setInitOrder(0);
// Tells the Jersey Servlet which REST service/class to load.
@@ -49,7 +55,13 @@
try {
jettyServer.start();
System.out.println("PluginServer available under: http://" + host+ ":" + portStr);
- System.out.println("ApiServer expected under: " + properties.getProperty("api.scheme") + "://" + properties.getProperty("api.host")+ ":" + properties.getProperty("api.port"));
+ System.out.println(
+ "ApiServer expected under: " +
+ properties.getProperty("api.scheme") +
+ "://" +
+ properties.getProperty("api.host")+ ":" +
+ properties.getProperty("api.port")
+ );
jettyServer.join();
}
finally {
diff --git a/plugin/src/main/resources/assets/export.html b/plugin/src/main/resources/assets/templates/export.ftl
similarity index 85%
rename from plugin/src/main/resources/assets/export.html
rename to plugin/src/main/resources/assets/templates/export.ftl
index 11adb85..d7efd56 100644
--- a/plugin/src/main/resources/assets/export.html
+++ b/plugin/src/main/resources/assets/templates/export.ftl
@@ -4,10 +4,8 @@
<head>
<meta charset="UTF-8">
<title>Export</title>
-
- <!-- This is only for testing purposes -->
- <script src="http://localhost:64543/js/korap-plugin-0.2.1.js"></script>
- <link type="text/css" rel="stylesheet" href="http://localhost:64543/css/kalamar-plugin-0.2.1.css" />
+ <script src="${assetPath}/js/korap-plugin-0.2.1.js"></script>
+ <link href="${assetPath}/css/kalamar-plugin-0.2.1.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div class="banner" data-note="Experimental"></div>
diff --git a/plugin/src/main/resources/exportPlugin.conf b/plugin/src/main/resources/exportPlugin.conf
index 4e8ecbc..3dd58d9 100644
--- a/plugin/src/main/resources/exportPlugin.conf
+++ b/plugin/src/main/resources/exportPlugin.conf
@@ -1,10 +1,13 @@
-#Configuration file for
-
-#Server Configuration
+# Server Configuration
server.port=7777
server.host=localhost
server.scheme=https
+# API Configuration
api.port=80
api.host=korap.ids-mannheim.de
-api.scheme=https
\ No newline at end of file
+api.scheme=https
+
+# Asset Configuration
+asset.host=korap.ids-mannheim.de
+asset.scheme=https
\ No newline at end of file
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/IdsExportServiceTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/IdsExportServiceTest.java
index cc9a96b..f0a89be 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/IdsExportServiceTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/IdsExportServiceTest.java
@@ -149,8 +149,10 @@
Status.OK.getStatusCode(), responsehtml.getStatus());
String str = responsehtml.readEntity(String.class);
assertTrue("HTTP Body", str.contains("<title>Export</title>"));
+ assertTrue("Assets", str.contains("<script src=\"https://korap.ids-mannheim.de/js"));
+ assertTrue("Assets", str.contains("<link href=\"https://korap.ids-mannheim.de/css"));
}
-
+
@Test
public void testJS () {
Response responsejs = target("/export.js").request()