package edu.asu.spring.quadriga.velocity.impl; import java.io.StringWriter; import java.util.Map; import javax.annotation.PostConstruct; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; import org.apache.velocity.runtime.RuntimeConstants; import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import edu.asu.spring.quadriga.velocity.IVelocityBuilder; @Service @PropertySource(value = "classpath:/settings.properties") public class VelocityBuilder implements IVelocityBuilder { private VelocityEngine engine; @Autowired private Environment env; @PostConstruct public void init() throws Exception { engine = new VelocityEngine(); engine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); engine.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); engine.setProperty( RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute" ); engine.setProperty("runtime.log.logsystem.log4j.logger","velocity"); engine.init(); } /* (non-Javadoc) * @see edu.asu.spring.quadriga.velocity.impl.IVelocityBuilder#getRenderedTemplate(java.lang.String, java.util.Map) */ @Override public String getRenderedTemplate(String templateName, Map<String, Object> contextProperties) throws ResourceNotFoundException, ParseErrorException, Exception { Template template = engine.getTemplate(templateName); VelocityContext context = new VelocityContext(); for (String key : contextProperties.keySet()) { context.put(key, contextProperties.get(key)); } context.put("quadriga_url", env.getProperty("quadriga.baseurl")); StringWriter writer = new StringWriter(); template.merge(context, writer); return writer.toString(); } }