package br.gov.frameworkdemoiselle.behave.regression.report.imagemagick.report.html; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.InputStream; import java.io.Writer; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import br.gov.frameworkdemoiselle.behave.regression.report.imagemagick.report.ReportBuilder; import br.gov.frameworkdemoiselle.behave.regression.report.imagemagick.report.ResultRow; import freemarker.template.Configuration; import freemarker.template.Template; public class HTMLReportBuilder extends ReportBuilder { private List<ResultRow> resultRows = new ArrayList<ResultRow>(); private List<String> columnHeaders = new ArrayList<String>(); public HTMLReportBuilder(String pathToHtmlReport) { super(pathToHtmlReport); } public void build(String reportPath) { Writer file = null; Configuration configuration = new Configuration(); try { ClassLoader loader = Thread.currentThread().getContextClassLoader(); Enumeration<URL> urls = loader.getResources("htmlreport.ftl"); while (urls.hasMoreElements()) { URL url = (URL) urls.nextElement(); InputStream initialStream = url.openStream(); byte[] buffer = new byte[initialStream.available()]; initialStream.read(buffer); File targetFile = new File("target/dbehave/htmlreport.ftl"); FileOutputStream outStream = new FileOutputStream(targetFile); outStream.write(buffer); outStream.close(); } configuration.setDirectoryForTemplateLoading(new File(reportPath)); Template template = configuration.getTemplate("htmlreport.ftl"); Map<String, Object> input = new HashMap<String, Object>(); input.put("columnHeaders", columnHeaders); input.put("resultRows", resultRows); file = new FileWriter(new File(pathToReport)); // ("REPORT: " + pathToReport); template.process(input, file); file.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (file != null) { try { file.close(); } catch (Exception fileException) { } } } } @Override public void addResultRow(final ResultRow resultRow) { resultRows.add(resultRow); Map<String, String> columnValues = resultRow.getResultsAsMap(); if (columnHeaders.size() == 0) { for (String headerValue : columnValues.keySet()) { columnHeaders.add(headerValue); } } } }