package message.template.resource; import message.utils.FileUtils; import message.utils.StringUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.io.IOUtils; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import java.io.*; import java.util.Map; /** * Velocity模板引擎生成的Resource<br/>. * * @author sunhao(sunhao.java@gmail.com) * @version V1.0, 14-9-1 上午12:18 */ public class VelocityTemplateResource extends AbstractTemplateResource { public VelocityTemplateResource(String template, Map<String, String> context) { super(template, context, "resource load by Velocity!"); } @Override public String renderTemplate() { String result = StringUtils.EMPTY; InputStream is = null; try { is = FileUtils.openInputStream(new File(super.template)); VelocityContext context = buildContext(); StringWriter sw = new StringWriter(); Reader reader = new InputStreamReader(is, "UTF-8"); Velocity.evaluate(context, sw, super.template, reader); result = sw.toString(); } catch (Exception e) { e.printStackTrace(); } finally { if(is != null) { IOUtils.closeQuietly(is); } } return result; } private VelocityContext buildContext(){ VelocityContext context = new VelocityContext(); if(MapUtils.isNotEmpty(super.context)) { for(Map.Entry<String, ?> entry : super.context.entrySet()) { context.put(entry.getKey(), entry.getValue()); } } return context; } }