com.clickntap.tool.script.FreemarkerScriptEngine Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Stripecube Show documentation
Show all versions of Stripecube Show documentation
Stripecube is an open source Java framework for Web Applications
package com.clickntap.tool.script;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.core.io.Resource;
import com.clickntap.utils.ConstUtils;
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.FileTemplateLoader;
import freemarker.cache.MultiTemplateLoader;
import freemarker.cache.TemplateLoader;
import freemarker.core.Environment;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.Version;
public class FreemarkerScriptEngine implements ScriptEngine {
class MyTemplateExceptionHandler implements TemplateExceptionHandler {
public void handleTemplateException(TemplateException te, Environment env, java.io.Writer out) throws TemplateException {
try {
out.write("SMART FRAMEWORK 1.171 © 2009-2011 Click'nTap
" + te.getMessage() + "");
} catch (IOException e) {
}
}
};
private static final String EXTENSION_DOTFTL = ".ftl";
private Configuration ftl;
private Resource templateDir;
private String classLoader;
private String extension;
public String getExtension() {
return extension;
}
public void setExtension(String extension) {
this.extension = extension;
}
public void start() throws Exception {
Version version = Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS;
ftl = new Configuration(version);
ftl.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);
ftl.setDefaultEncoding(ConstUtils.UTF_8);
ftl.setObjectWrapper(new BeansWrapper(version));
ftl.setNumberFormat("computer");
ftl.setURLEscapingCharset(ConstUtils.UTF_8);
ftl.setOutputEncoding(ConstUtils.UTF_8);
// ftl.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
List loaders = new ArrayList();
if (templateDir != null)
loaders.add(new FileTemplateLoader(templateDir.getFile()));
if (classLoader != null)
loaders.add(new ClassTemplateLoader(Class.forName(classLoader), ConstUtils.EMPTY));
if (loaders.size() > 0) {
MultiTemplateLoader mtl = new MultiTemplateLoader(loaders.toArray((new TemplateLoader[loaders.size()])));
ftl.setTemplateLoader(mtl);
}
}
public void setClassLoader(String classLoader) {
this.classLoader = classLoader;
}
public void setTemplateDir(Resource templateDir) {
this.templateDir = templateDir;
}
public String eval(Map ctx, String templateName) throws Exception {
StringWriter w = new StringWriter();
ftl.getTemplate(getTemplateName(templateName)).process(ctx, w);
return w.toString();
}
private String getTemplateName(String templateName) {
if (extension != null) {
return templateName + extension;
} else {
if (templateName.endsWith(EXTENSION_DOTFTL))
return templateName;
else
return templateName + EXTENSION_DOTFTL;
}
}
public void eval(Map ctx, String templateName, OutputStream out) throws Exception {
StringWriter w = new StringWriter();
ftl.getTemplate(getTemplateName(templateName)).process(ctx, w);
out.write(w.toString().getBytes(ConstUtils.UTF_8));
}
public boolean evalRule(Map context, String templateName) throws Exception {
throw new Exception();
}
public boolean evalRuleScript(Map context, String rule) throws Exception {
rule = "<#if " + rule + ">true<#else>false#if>";
return Boolean.valueOf(evalScript(context, rule));
}
public String evalScript(Map ctx, String script) throws Exception {
Template t = new Template(script, new StringReader(script), ftl);
StringWriter w = new StringWriter();
t.process(ctx, w);
return w.toString();
}
public void evalScript(Map ctx, String script, OutputStream out) throws Exception {
throw new Exception();
}
}