Velocity 101
// containing key-value pairs and the name of a Velocity template file. It
// returns a string containing the boilerplate text generated from combining
// the two.
// Copyright (c) 2002, John Munsch // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // * Neither the name of the John Munsch nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // // To learn more about open source licenses, please visit: // http://opensource.org/index.php package com.johnmunsch.util; import java.io.StringWriter; import org.apache.log4j.*; import org.apache.velocity.*; import org.apache.velocity.app.Velocity; import org.apache.velocity.exception.*; /** * Boilerplate puts together context information and a template and produces an * output string that has all the replacements done in it. */ public class Boilerplate { private static Logger log = Logger.getLogger(Boilerplate.class.getName()); public static String apply(VelocityContext context, String templateFilename) throws Exception { Template template = null; StringWriter sw = new StringWriter(); Velocity.init(); try { template = Velocity.getTemplate(templateFilename); template.merge(context, sw); } catch (ResourceNotFoundException rnfe) { log.error("Could not find the named template file.", rnfe); throw rnfe; } catch (ParseErrorException pee) { log.error("Error in the template file.", pee); throw pee; } catch (MethodInvocationException mie) { log.error("Error in function called by the template file.", mie); throw mie; } return sw.toString(); } }