package com.raycloud.util.daogen.util; import java.io.BufferedWriter; import java.io.FileWriter; import org.apache.log4j.Logger; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; public class VelocityTemplate { /** 日志记录 */ private final static Logger logger = Logger.getLogger(VelocityTemplate.class); /**通过类静态方法初始化模版配置*/ static { try { String velocityConf = ClassLoader.getSystemResource("velocity.properties").getPath(); Velocity.init(velocityConf); logger.info("初始化Velocity成功,配置路径为:"+velocityConf); } catch (Exception e) { logger.error("初始化Velocity时发生异常!", e); } } /** * 根据模版和参数生成指定的文件 * @param template * @param outfileName * @param context * @throws Exception */ private static void mergeTemplate(Template template, String outfileName, VelocityContext context) throws Exception { /* * Now have the template engine process your template using the data * placed into the context. Think of it as a 'merge' of the template and * the data to produce the output stream. */ BufferedWriter writer = new BufferedWriter(new FileWriter(outfileName)); if (template != null) template.merge(context, writer); /* * flush and cleanup */ writer.flush(); writer.close(); } /** * 获取并解析模版 * @param templateFile * @return template * @throws Exception */ private static Template buildTemplate(String templateFile) { Template template = null; try { template = Velocity.getTemplate(templateFile); } catch (ResourceNotFoundException rnfe) { logger.error("buildTemplate error : cannot find template " + templateFile); } catch (ParseErrorException pee) { logger.error("buildTemplate error in template " + templateFile + ":" + pee); } catch (Exception e) { logger.error("buildTemplate error in template " + templateFile + ":" + e); } return template; } /** * 根据模版名称和参数生成指定的文件 * @param templateName * @param outfileName * @param context * @throws Exception */ public static void mergeTemplate(String templateName, String outfileName, VelocityContext context) { Template t = buildTemplate(templateName); try { mergeTemplate(t, outfileName, context); } catch (Exception e) { logger.error("mergeTemplate[" + outfileName + "] error in template " + templateName + ":" + e); } } }