/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.regression; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.util.Map; import org.fudgemsg.FudgeMsg; import org.fudgemsg.mapping.FudgeDeserializer; import org.fudgemsg.wire.FudgeMsgReader; import org.fudgemsg.wire.xml.FudgeXMLStreamReader; import com.google.common.collect.ImmutableMap; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; import freemarker.template.Configuration; import freemarker.template.Template; /** * */ public class ReportGenerator { // TODO does this to be extensible? enum Format { TEXT("/regression", "plain-text-report.ftl"); private final String _templateLocation; private final String _templateName; Format(String templateLocation, String templateName) { _templateLocation = templateLocation; _templateName = templateName; } public String getTemplateLocation() { return _templateLocation; } private String getTemplateName() { return _templateName; } } public static String generateReport(RegressionTestResults results) { StringWriter writer = new StringWriter(); generateReport(results, Format.TEXT, writer); return writer.toString(); } public static void generateReport(RegressionTestResults results, Format format, Writer writer) { Configuration cfg = new Configuration(); try { cfg.setClassForTemplateLoading(ReportGenerator.class, format.getTemplateLocation()); Template template = cfg.getTemplate(format.getTemplateName()); Map<String, Object> input = ImmutableMap.<String, Object>of("results", results); template.process(input, writer); writer.flush(); } catch (Exception e) { throw new OpenGammaRuntimeException("Error generating report", e); } } public static void main(String[] args) throws IOException { RegressionTestResults results; try (BufferedReader reader = new BufferedReader(new FileReader("/Users/chris/tmp/regression/results.xml"))) { FudgeDeserializer deserializer = new FudgeDeserializer(OpenGammaFudgeContext.getInstance()); FudgeXMLStreamReader streamReader = new FudgeXMLStreamReader(OpenGammaFudgeContext.getInstance(), reader); FudgeMsgReader fudgeMsgReader = new FudgeMsgReader(streamReader); FudgeMsg msg = fudgeMsgReader.nextMessage(); results = deserializer.fudgeMsgToObject(RegressionTestResults.class, msg); } System.out.println(generateReport(results)); System.exit(0); } }