/**
* MVEL 2.0
* Copyright (C) 2007 The Codehaus
* Mike Brock, Dhanji Prasanna, John Graham, Mark Proctor
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mvel2.templates;
import org.mvel2.integration.VariableResolverFactory;
import org.mvel2.integration.impl.ImmutableDefaultFactory;
import org.mvel2.integration.impl.MapVariableResolverFactory;
import org.mvel2.templates.res.Node;
import org.mvel2.templates.util.TemplateOutputStream;
import org.mvel2.templates.util.TemplateTools;
import org.mvel2.templates.util.io.StandardOutputStream;
import org.mvel2.templates.util.io.StringAppenderStream;
import org.mvel2.templates.util.io.StringBuilderStream;
import org.mvel2.util.ExecutionStack;
import org.mvel2.util.StringAppender;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import static org.mvel2.templates.TemplateCompiler.compileTemplate;
/**
* This is the root of the template runtime, and contains various utility methods for executing templates.
*/
public class TemplateRuntime {
private char[] template;
private TemplateRegistry namedTemplateRegistry;
private Node rootNode;
private String baseDir;
private ExecutionStack relPath;
public TemplateRuntime(char[] template, TemplateRegistry namedTemplateRegistry, Node rootNode, String baseDir) {
this.template = template;
this.namedTemplateRegistry = namedTemplateRegistry;
this.rootNode = rootNode;
this.baseDir = baseDir;
}
public static Object eval(File file, Object ctx, VariableResolverFactory vars, TemplateRegistry registry) {
return execute(compileTemplate(TemplateTools.readInFile(file)), ctx, vars, registry);
}
public static Object eval(InputStream instream) {
return eval(instream, null, new ImmutableDefaultFactory(), null);
}
public static Object eval(InputStream instream, Object ctx) {
return eval(instream, ctx, new ImmutableDefaultFactory(), null);
}
public static Object eval(InputStream instream, Object ctx, VariableResolverFactory vars) {
return eval(instream, ctx, vars);
}
public static Object eval(InputStream instream, Object ctx, Map vars) {
return eval(instream, ctx, new MapVariableResolverFactory(vars), null);
}
public static Object eval(InputStream instream, Object ctx, Map vars, TemplateRegistry registry) {
return execute(compileTemplate(TemplateTools.readStream(instream)), ctx, new MapVariableResolverFactory(vars), registry);
}
public static Object eval(InputStream instream, Object ctx, VariableResolverFactory vars, TemplateRegistry registry) {
return execute(compileTemplate(TemplateTools.readStream(instream)), ctx, vars, registry);
}
public static void eval(InputStream instream, Object ctx, VariableResolverFactory vars, TemplateRegistry register, OutputStream stream) {
execute(compileTemplate(TemplateTools.readStream(instream)), ctx, vars, register, stream);
}
public static Object eval(String template, Map vars) {
return execute(compileTemplate(template), null, new MapVariableResolverFactory(vars));
}
public static void eval(String template, Map vars, OutputStream stream) {
execute(compileTemplate(template), null, new MapVariableResolverFactory(vars), null, stream);
}
public static Object eval(String template, Object ctx) {
return execute(compileTemplate(template), ctx);
}
public static Object eval(String template, Object ctx, Map vars) {
return execute(compileTemplate(template), ctx, new MapVariableResolverFactory(vars));
}
public static void eval(String template, Object ctx, Map vars, OutputStream stream) {
execute(compileTemplate(template), ctx, new MapVariableResolverFactory(vars), null, stream);
}
public static Object eval(String template, Object ctx, VariableResolverFactory vars) {
return execute(compileTemplate(template), ctx, vars);
}
public static void eval(String template, Object ctx, VariableResolverFactory vars, TemplateOutputStream stream) {
execute(compileTemplate(template), ctx, vars, null, stream);
}
public static void eval(String template, Object ctx, VariableResolverFactory vars, OutputStream stream) {
execute(compileTemplate(template), ctx, vars, null, stream);
}
public static Object eval(String template, Map vars, TemplateRegistry registry) {
return execute(compileTemplate(template), null, new MapVariableResolverFactory(vars), registry);
}
public static void eval(String template, Map vars, TemplateRegistry registry, TemplateOutputStream stream) {
execute(compileTemplate(template), null, new MapVariableResolverFactory(vars), registry, stream);
}
public static void eval(String template, Map vars, TemplateRegistry registry, OutputStream stream) {
execute(compileTemplate(template), null, new MapVariableResolverFactory(vars), registry, stream);
}
public static Object eval(String template, Object ctx, Map vars, TemplateRegistry registry) {
return execute(compileTemplate(template), ctx, new MapVariableResolverFactory(vars), registry);
}
public static void eval(String template, Object ctx, Map vars, TemplateRegistry registry, OutputStream stream) {
execute(compileTemplate(template), ctx, new MapVariableResolverFactory(vars), registry, stream);
}
public static Object eval(String template, Object ctx, VariableResolverFactory vars, TemplateRegistry registry) {
return execute(compileTemplate(template), ctx, vars, registry);
}
public static void eval(String template, Object ctx, VariableResolverFactory vars, TemplateRegistry registry, OutputStream stream) {
execute(compileTemplate(template), ctx, vars, registry, stream);
}
public static void eval(String template, Object ctx, VariableResolverFactory vars, TemplateRegistry registry, TemplateOutputStream stream) {
execute(compileTemplate(template), ctx, vars, registry, stream);
}
public static Object execute(CompiledTemplate compiled) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringAppender(), null, new ImmutableDefaultFactory(), null);
}
public static void execute(CompiledTemplate compiled, OutputStream stream) {
execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), null, new ImmutableDefaultFactory(), null);
}
public static Object execute(CompiledTemplate compiled, Object context) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringAppender(), context, new ImmutableDefaultFactory(), null);
}
public static void execute(CompiledTemplate compiled, Object context, OutputStream stream) {
execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), context, new ImmutableDefaultFactory(), null);
}
public static Object execute(CompiledTemplate compiled, Map vars) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringBuilder(), null, new MapVariableResolverFactory(vars), null);
}
public static void execute(CompiledTemplate compiled, Map vars, OutputStream stream) {
execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), null, new MapVariableResolverFactory(vars), null);
}
public static Object execute(CompiledTemplate compiled, Object context, Map vars) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringBuilder(), context, new MapVariableResolverFactory(vars), null);
}
public static void execute(CompiledTemplate compiled, Object context, Map vars, OutputStream stream) {
execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), context, new MapVariableResolverFactory(vars), null);
}
public static Object execute(CompiledTemplate compiled, Object context, TemplateRegistry registry) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringBuilder(), context, null, registry);
}
public static void execute(CompiledTemplate compiled, Object context, TemplateRegistry registry, OutputStream stream) {
execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), context, null, registry);
}
public static Object execute(CompiledTemplate compiled, Object context, Map vars, TemplateRegistry registry) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringBuilder(), context, new MapVariableResolverFactory(vars), registry);
}
public static void execute(CompiledTemplate compiled, Object context, Map vars, TemplateRegistry registry, OutputStream stream) {
execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), context, new MapVariableResolverFactory(vars), registry);
}
public static Object execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringBuilder(), context, factory, null);
}
public static Object execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory, TemplateRegistry registry) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringBuilder(), context, factory, registry);
}
public static Object execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory, String baseDir) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringBuilder(), context, factory, null, baseDir);
}
public static Object execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory, TemplateRegistry registry, String baseDir) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StringBuilder(), context, factory, registry, baseDir);
}
public static void execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory, OutputStream stream) {
execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), context, factory, null);
}
public static void execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory, OutputStream stream, String baseDir) {
execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), context, factory, null, baseDir);
}
public static Object execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory, TemplateRegistry registry, OutputStream stream) {
return execute(compiled.getRoot(), compiled.getTemplate(), new StandardOutputStream(stream), context, factory, registry);
}
public static Object execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory, TemplateRegistry registry, TemplateOutputStream stream) {
return execute(compiled.getRoot(), compiled.getTemplate(), stream, context, factory, registry);
}
public static Object execute(CompiledTemplate compiled, Object context, VariableResolverFactory factory, TemplateRegistry registry, TemplateOutputStream stream, String basedir) {
return execute(compiled.getRoot(), compiled.getTemplate(), stream, context, factory, registry, basedir);
}
public static Object execute(Node root, char[] template,
StringAppender appender, Object context,
VariableResolverFactory factory, TemplateRegistry registry) {
return new TemplateRuntime(template, registry, root, ".").execute(appender, context, factory);
}
public Object execute(StringBuilder appender, Object context, VariableResolverFactory factory) {
return execute(new StringBuilderStream(appender), context, factory);
}
public static Object execute(Node root, char[] template,
StringBuilder appender, Object context,
VariableResolverFactory factory, TemplateRegistry registry) {
return new TemplateRuntime(template, registry, root, ".").execute(appender, context, factory);
}
public static Object execute(Node root, char[] template,
StringBuilder appender, Object context,
VariableResolverFactory factory, TemplateRegistry registry, String baseDir) {
return new TemplateRuntime(template, registry, root, baseDir).execute(appender, context, factory);
}
public static Object execute(Node root, char[] template,
TemplateOutputStream appender, Object context,
VariableResolverFactory factory, TemplateRegistry registry) {
return new TemplateRuntime(template, registry, root, ".").execute(appender, context, factory);
}
public static Object execute(Node root, char[] template,
TemplateOutputStream appender, Object context,
VariableResolverFactory factory, TemplateRegistry registry, String baseDir) {
return new TemplateRuntime(template, registry, root, baseDir).execute(appender, context, factory);
}
public Object execute(StringAppender appender, Object context, VariableResolverFactory factory) {
return execute(new StringAppenderStream(appender), context, factory);
}
public Object execute(TemplateOutputStream stream, Object context, VariableResolverFactory factory) {
return rootNode.eval(this, stream, context, factory);
}
public Node getRootNode() {
return rootNode;
}
public void setRootNode(Node rootNode) {
this.rootNode = rootNode;
}
public char[] getTemplate() {
return template;
}
public void setTemplate(char[] template) {
this.template = template;
}
public TemplateRegistry getNamedTemplateRegistry() {
return namedTemplateRegistry;
}
public void setNamedTemplateRegistry(TemplateRegistry namedTemplateRegistry) {
this.namedTemplateRegistry = namedTemplateRegistry;
}
public ExecutionStack getRelPath() {
if (relPath == null) {
relPath = new ExecutionStack();
relPath.push(baseDir);
}
return relPath;
}
}