package org.smartly.packages.velocity.impl.vtools; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.smartly.commons.util.StringUtils; import org.smartly.packages.velocity.impl.VLCManager; /** * Template engine exposed */ public class EngineTool { // ------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------ public static final String NAME = "engine"; // ------------------------------------------------------------------------ // f i e l d s // ------------------------------------------------------------------------ private final VelocityEngine _engine; private final VelocityContext _context; private final String _name; // ------------------------------------------------------------------------ // c o n s t r u c t o r // ------------------------------------------------------------------------ public EngineTool(final String templateName, final VelocityEngine engine, final VelocityContext context) { _engine = engine; _context = context; _name = templateName; } // ------------------------------------------------------------------------ // p u b l i c // ------------------------------------------------------------------------ public String eval(final Object text) { try { String original = null != text ? text.toString() : ""; if (StringUtils.hasText(original)) { final String parsed; if (null != _engine) { parsed = VLCManager.getInstance().evaluateText(_engine, _name, original, _context); } else { parsed = VLCManager.getInstance().evaluateText(_name, original, _context); } if(!StringUtils.equalsTrim(original, parsed)){ // need another evaluation return eval(parsed); } else { return parsed; } } return original; } catch (Throwable t) { return t.toString(); } } // ------------------------------------------------------------------------ // p r i v a t e // ------------------------------------------------------------------------ }