package betsy.common.analytics.html; import java.io.IOException; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import betsy.common.analytics.CsvReportLoader; import betsy.common.analytics.model.CsvReport; import betsy.common.tasks.FileTasks; import betsy.common.util.ClasspathHelper; import groovy.lang.Writable; import groovy.text.SimpleTemplateEngine; public class HtmlAnalytics { private final CsvReport report; public HtmlAnalytics(CsvReport report) { this.report = report; } public static void main(String... args) { Path input = Paths.get(args[0]); Path output = input.getParent().resolve("myreport.html").toAbsolutePath(); new HtmlAnalytics(new CsvReportLoader(input, new CsvReport()).load()).toHtmlReport(output); } public void toHtmlReport(Path filename) { SimpleTemplateEngine engine = new SimpleTemplateEngine(); URL templatePath = ClasspathHelper.getURLFromClasspathPath("/betsy/common/analytics/html/HtmlAnalytics.template"); URL cssPath = ClasspathHelper.getURLFromClasspathPath("/betsy/common/analytics/html/bootstrap.min.css"); try { Writable template = engine.createTemplate(templatePath).make(getTemplateBinding()); FileTasks.createFile(filename, template.toString()); FileTasks.copyFileIntoFolderAndOverwrite(cssPath, "bootstrap.min.css", filename.getParent()); } catch (ClassNotFoundException | IOException e) { throw new RuntimeException("could not load template", e); } } private Map<String, Object> getTemplateBinding() { Map<String, Object> binding = new HashMap<>(); binding.put("report", report); return binding; } }