/* * JBoss, Home of Professional Open Source * Copyright [2011], Red Hat, Inc., and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and limitations under the License. */ package org.modeshape.report; import freemarker.cache.URLTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.net.URL; import java.util.Map; /** * Class which uses Freemarker (http://fmpp.sourceforge.net/) to process a given template into an output file. * * @author Horia Chiorean */ final class FreemarkerTemplateProcessor { private static final Configuration FREEMARKER_CONFIG; private final String templateName; private final File reportFile; static { FREEMARKER_CONFIG = new Configuration(); FREEMARKER_CONFIG.setDefaultEncoding("UTF-8"); FREEMARKER_CONFIG.setNumberFormat("0.######"); FREEMARKER_CONFIG.setTemplateLoader(new URLTemplateLoader() { @Override protected URL getURL( String name ) { return this.getClass().getClassLoader().getResource(name); } }); FREEMARKER_CONFIG.setWhitespaceStripping(true); } FreemarkerTemplateProcessor( File reportFile, String templateName ) { this.templateName = templateName; this.reportFile = reportFile; } void processTemplate( Map<String, ?> templateModel ) throws IOException, TemplateException { Template reportTemplate = FREEMARKER_CONFIG.getTemplate(templateName); reportTemplate.process(templateModel, new PrintWriter(reportFile)); } }