/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.core.tool.plugindoc;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
/**
* @author Ian Springer
*/
public class VelocityTemplateProcessor {
private VelocityContext context;
private Template template;
public VelocityTemplateProcessor(String templateResourcePath, String macroLibrary, Class referenceInsertionClass) {
this.context = new VelocityContext();
Properties config = createVelocityConfiguration(macroLibrary, referenceInsertionClass);
try
{
VelocityEngine engine = new VelocityEngine(config);
this.template = engine.getTemplate(templateResourcePath);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
private Properties createVelocityConfiguration(String macroLibrary, Class referenceInsertionClass) {
Properties velocityConfig = new Properties();
// Velocity configuration syntax reference:
// http://velocity.apache.org/engine/releases/velocity-1.6/developer-guide.html
velocityConfig.setProperty("resource.loader", "class");
velocityConfig.setProperty("class.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
if (referenceInsertionClass != null) {
velocityConfig.setProperty("eventhandler.referenceinsertion.class", referenceInsertionClass.getName());
}
String macroLibraries = "common-macros.vm";
if (macroLibrary != null) {
macroLibraries += ", " + macroLibrary;
}
velocityConfig.setProperty("velocimacro.library", macroLibraries);
return velocityConfig;
}
public VelocityContext getContext() {
return this.context;
}
public void processTemplate(File outputFile) {
try {
Writer writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile)));
this.template.merge(this.context, writer);
} finally {
if (writer != null) {
writer.close();
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}