From cf89cb3fc130953bb028469bd6b151344b81884e Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 11 Apr 2023 13:51:56 +0200 Subject: [PATCH] Implementing solution based on FreeMarker --- .../grsf/publisher/freemarker/FreeMarker.java | 75 +++++++++++++++++++ .../gcube/grsf/freemarker/FreeMarkerTest.java | 62 --------------- .../publisher/freemarker/FreeMarkerTest.java | 40 ++++++++++ 3 files changed, 115 insertions(+), 62 deletions(-) create mode 100644 src/main/java/org/gcube/grsf/publisher/freemarker/FreeMarker.java delete mode 100644 src/test/java/org/gcube/grsf/freemarker/FreeMarkerTest.java create mode 100644 src/test/java/org/gcube/grsf/publisher/freemarker/FreeMarkerTest.java diff --git a/src/main/java/org/gcube/grsf/publisher/freemarker/FreeMarker.java b/src/main/java/org/gcube/grsf/publisher/freemarker/FreeMarker.java new file mode 100644 index 0000000..cb72289 --- /dev/null +++ b/src/main/java/org/gcube/grsf/publisher/freemarker/FreeMarker.java @@ -0,0 +1,75 @@ +package org.gcube.grsf.publisher.freemarker; + +import java.io.File; +import java.io.StringWriter; +import java.io.Writer; +import java.net.URL; +import java.util.Map; + +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; + +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateExceptionHandler; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class FreeMarker { + + protected static Configuration configuration; + protected static File freemarkerDirectory; + + public static File getResourcesDirectory() throws Exception { + URL logbackFileURL = FreeMarker.class.getClassLoader().getResource("config.properties"); + File logbackFile = new File(logbackFileURL.toURI()); + File resourcesDirectory = logbackFile.getParentFile(); + return resourcesDirectory; + } + + public static File getFreemarkerDirectory() throws Exception { + if(freemarkerDirectory==null) { + File resourcesDirectory = getResourcesDirectory(); + freemarkerDirectory = new File(resourcesDirectory, "freemarker"); + } + return freemarkerDirectory; + } + + public static Configuration getConfiguration() throws Exception { + if(configuration ==null) { + configuration = new Configuration(Configuration.VERSION_2_3_23); + configuration.setDirectoryForTemplateLoading(getFreemarkerDirectory()); + configuration.setDefaultEncoding("UTF-8"); + configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + } + return configuration; + } + + public Template getTemplate(String templateName) throws Exception { + Configuration configuration = getConfiguration(); + Template template = configuration.getTemplate(templateName); + return template; + } + + public Map getMap(String json) throws Exception { + ObjectMapper mapper = new ObjectMapper(); + @SuppressWarnings("unchecked") + Map map = mapper.readValue(json, Map.class); + return map; + } + + public String generateJson(String templateName, String dataAsJsonString) throws Exception { + Template template = getTemplate(templateName); + Map map = getMap(dataAsJsonString); + StringWriter writer = new StringWriter(); + generateJson(template, map, writer); + return writer.toString(); + } + + public void generateJson(Template template, Map map, Writer writer) throws Exception { + template.process(map, writer); + writer.flush(); + writer.close(); + } + +} diff --git a/src/test/java/org/gcube/grsf/freemarker/FreeMarkerTest.java b/src/test/java/org/gcube/grsf/freemarker/FreeMarkerTest.java deleted file mode 100644 index 22d32e2..0000000 --- a/src/test/java/org/gcube/grsf/freemarker/FreeMarkerTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.gcube.grsf.freemarker; - -import java.io.File; -import java.io.FileWriter; -import java.io.Writer; -import java.net.URL; -import java.util.Map; - -import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Test; - -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateExceptionHandler; - -public class FreeMarkerTest { - - public File getResourcesDirectory() throws Exception { - URL logbackFileURL = this.getClass().getClassLoader().getResource("logback-test.xml"); - File logbackFile = new File(logbackFileURL.toURI()); - File resourcesDirectory = logbackFile.getParentFile(); - return resourcesDirectory; - } - - public File getTraceabilityUnitExampleDirectory() throws Exception { - File resourcesDirectory = getResourcesDirectory(); - return new File(resourcesDirectory, "examples/AssessmentUnit"); - } - - public File getFreemarkerDirectory() throws Exception { - File resourcesDirectory = getResourcesDirectory(); - return new File(resourcesDirectory, "freemarker"); - } - - public Configuration getConfiguration() throws Exception { - Configuration cfg = new Configuration(Configuration.VERSION_2_3_23); - cfg.setDirectoryForTemplateLoading(getFreemarkerDirectory()); - cfg.setDefaultEncoding("UTF-8"); - cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); - return cfg; - } - - @Test - public void testIt() throws Exception { - Configuration cfg = getConfiguration(); - Template template = cfg.getTemplate("example.ftl"); - - File json = new File(getTraceabilityUnitExampleDirectory(), "00a1f849-1b43-3fd1-9255-1d1134c969bb.json"); - ObjectMapper mapper = new ObjectMapper(); - Map map = mapper.readValue(json, Map.class); - - File out = new File(getFreemarkerDirectory(), "output.json"); - out.delete(); - - Writer writer = new FileWriter(out); - template.process(map, writer); - writer.flush(); - writer.close(); - - } - -} diff --git a/src/test/java/org/gcube/grsf/publisher/freemarker/FreeMarkerTest.java b/src/test/java/org/gcube/grsf/publisher/freemarker/FreeMarkerTest.java new file mode 100644 index 0000000..067a79e --- /dev/null +++ b/src/test/java/org/gcube/grsf/publisher/freemarker/FreeMarkerTest.java @@ -0,0 +1,40 @@ +package org.gcube.grsf.publisher.freemarker; + +import java.io.File; +import java.io.FileWriter; +import java.io.Writer; +import java.util.Map; + +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Test; + +import freemarker.template.Template; + +public class FreeMarkerTest { + + public File getTraceabilityUnitExampleDirectory() throws Exception { + File resourcesDirectory = FreeMarker.getResourcesDirectory(); + return new File(resourcesDirectory, "examples/AssessmentUnit"); + } + + @Test + public void testIt() throws Exception { + FreeMarker freeMarker = new FreeMarker(); + + Template template = freeMarker.getTemplate("example.ftl"); + + File json = new File(getTraceabilityUnitExampleDirectory(), "00a1f849-1b43-3fd1-9255-1d1134c969bb.json"); + ObjectMapper mapper = new ObjectMapper(); + Map map = mapper.readValue(json, Map.class); + + File out = new File(FreeMarker.getResourcesDirectory(), "output.json"); + out.delete(); + + Writer writer = new FileWriter(out); + template.process(map, writer); + writer.flush(); + writer.close(); + + } + +}