summaryrefslogtreecommitdiff
path: root/modules/lang-mustache/src/main
diff options
context:
space:
mode:
authorRyan Ernst <ryan@iernst.net>2017-06-02 13:41:26 -0700
committerGitHub <noreply@github.com>2017-06-02 13:41:26 -0700
commit0d8216d5afe66d1360ef06cab2c640180489d300 (patch)
tree13aa218f65b9b9657825f03149ad5a67666a5dc7 /modules/lang-mustache/src/main
parenta926ace2e1e9c20dd93d94d129c616097e788e2f (diff)
Scripting: Convert CompiledTemplate to a ScriptContext (#25032)
This commit creates TemplateScript and associated classes so that templates no longer need a special ScriptService.compileTemplate method. The execute() method is equivalent to the old run() method. relates #20426
Diffstat (limited to 'modules/lang-mustache/src/main')
-rw-r--r--modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngine.java37
-rw-r--r--modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestPutSearchTemplateAction.java8
-rw-r--r--modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TransportSearchTemplateAction.java8
3 files changed, 22 insertions, 31 deletions
diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngine.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngine.java
index 3363db47b4..65e23ef87a 100644
--- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngine.java
+++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngine.java
@@ -27,17 +27,16 @@ import org.apache.logging.log4j.util.Supplier;
import org.elasticsearch.SpecialPermission;
import org.elasticsearch.common.io.FastStringReader;
import org.elasticsearch.common.logging.ESLoggerFactory;
-import org.elasticsearch.script.ExecutableScript;
import org.elasticsearch.script.GeneralScriptException;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptContext;
import org.elasticsearch.script.ScriptEngine;
+import org.elasticsearch.script.TemplateScript;
import java.io.Reader;
import java.io.StringWriter;
import java.security.AccessController;
import java.security.PrivilegedAction;
-import java.util.Collections;
import java.util.Map;
/**
@@ -61,22 +60,22 @@ public final class MustacheScriptEngine implements ScriptEngine {
* @return a compiled template object for later execution.
* */
@Override
- public <T> T compile(String templateName, String templateSource, ScriptContext<T> context, Map<String, String> params) {
- if (context.instanceClazz.equals(ExecutableScript.class) == false) {
+ public <T> T compile(String templateName, String templateSource, ScriptContext<T> context, Map<String, String> options) {
+ if (context.instanceClazz.equals(TemplateScript.class) == false) {
throw new IllegalArgumentException("mustache engine does not know how to handle context [" + context.name + "]");
}
- final MustacheFactory factory = createMustacheFactory(params);
+ final MustacheFactory factory = createMustacheFactory(options);
Reader reader = new FastStringReader(templateSource);
Mustache template = factory.compile(reader, "query-template");
- ExecutableScript.Factory compiled = p -> new MustacheExecutableScript(template, p);
+ TemplateScript.Factory compiled = params -> new MustacheExecutableScript(template, params);
return context.factoryClazz.cast(compiled);
}
- private CustomMustacheFactory createMustacheFactory(Map<String, String> params) {
- if (params == null || params.isEmpty() || params.containsKey(Script.CONTENT_TYPE_OPTION) == false) {
+ private CustomMustacheFactory createMustacheFactory(Map<String, String> options) {
+ if (options == null || options.isEmpty() || options.containsKey(Script.CONTENT_TYPE_OPTION) == false) {
return new CustomMustacheFactory();
}
- return new CustomMustacheFactory(params.get(Script.CONTENT_TYPE_OPTION));
+ return new CustomMustacheFactory(options.get(Script.CONTENT_TYPE_OPTION));
}
@Override
@@ -87,34 +86,28 @@ public final class MustacheScriptEngine implements ScriptEngine {
/**
* Used at query execution time by script service in order to execute a query template.
* */
- private class MustacheExecutableScript implements ExecutableScript {
+ private class MustacheExecutableScript implements TemplateScript {
/** Factory template. */
private Mustache template;
- /** Parameters to fill above object with. */
- private Map<String, Object> vars;
+
+ private Map<String, Object> params;
/**
* @param template the compiled template object wrapper
- * @param vars the parameters to fill above object with
**/
- MustacheExecutableScript(Mustache template, Map<String, Object> vars) {
+ MustacheExecutableScript(Mustache template, Map<String, Object> params) {
this.template = template;
- this.vars = vars == null ? Collections.emptyMap() : vars;
- }
-
- @Override
- public void setNextVar(String name, Object value) {
- this.vars.put(name, value);
+ this.params = params;
}
@Override
- public Object run() {
+ public String execute() {
final StringWriter writer = new StringWriter();
try {
// crazy reflection here
SpecialPermission.check();
AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
- template.execute(writer, vars);
+ template.execute(writer, params);
return null;
});
} catch (Exception e) {
diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestPutSearchTemplateAction.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestPutSearchTemplateAction.java
index ecee7f67c8..751e58aeeb 100644
--- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestPutSearchTemplateAction.java
+++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestPutSearchTemplateAction.java
@@ -18,6 +18,8 @@
*/
package org.elasticsearch.script.mustache;
+import java.io.IOException;
+
import org.elasticsearch.action.admin.cluster.storedscripts.PutStoredScriptRequest;
import org.elasticsearch.client.node.NodeClient;
import org.elasticsearch.common.bytes.BytesReference;
@@ -26,10 +28,8 @@ import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.action.AcknowledgedRestListener;
-import org.elasticsearch.script.ExecutableScript;
import org.elasticsearch.script.Script;
-
-import java.io.IOException;
+import org.elasticsearch.script.TemplateScript;
import static org.elasticsearch.rest.RestRequest.Method.POST;
import static org.elasticsearch.rest.RestRequest.Method.PUT;
@@ -53,7 +53,7 @@ public class RestPutSearchTemplateAction extends BaseRestHandler {
String id = request.param("id");
BytesReference content = request.content();
- PutStoredScriptRequest put = new PutStoredScriptRequest(id, Script.DEFAULT_TEMPLATE_LANG, ExecutableScript.CONTEXT.name,
+ PutStoredScriptRequest put = new PutStoredScriptRequest(id, Script.DEFAULT_TEMPLATE_LANG, TemplateScript.CONTEXT.name,
content, request.getXContentType());
return channel -> client.admin().cluster().putStoredScript(put, new AcknowledgedRestListener<>(channel));
}
diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TransportSearchTemplateAction.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TransportSearchTemplateAction.java
index faf543e2a0..d1e6377b69 100644
--- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TransportSearchTemplateAction.java
+++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TransportSearchTemplateAction.java
@@ -37,16 +37,14 @@ import org.elasticsearch.index.query.QueryParseContext;
import org.elasticsearch.script.ExecutableScript;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptService;
+import org.elasticsearch.script.TemplateScript;
import org.elasticsearch.search.builder.SearchSourceBuilder;
-import org.elasticsearch.template.CompiledTemplate;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.TransportService;
import java.io.IOException;
import java.util.Collections;
-import static org.elasticsearch.script.ExecutableScript.CONTEXT;
-
public class TransportSearchTemplateAction extends HandledTransportAction<SearchTemplateRequest, SearchTemplateResponse> {
private static final String TEMPLATE_LANG = MustacheScriptEngine.NAME;
@@ -101,8 +99,8 @@ public class TransportSearchTemplateAction extends HandledTransportAction<Search
NamedXContentRegistry xContentRegistry) throws IOException {
Script script = new Script(searchTemplateRequest.getScriptType(), TEMPLATE_LANG, searchTemplateRequest.getScript(),
searchTemplateRequest.getScriptParams() == null ? Collections.emptyMap() : searchTemplateRequest.getScriptParams());
- CompiledTemplate compiledScript = scriptService.compileTemplate(script, ExecutableScript.CONTEXT);
- String source = compiledScript.run(script.getParams());
+ TemplateScript compiledScript = scriptService.compile(script, TemplateScript.CONTEXT).newInstance(script.getParams());
+ String source = compiledScript.execute();
response.setSource(new BytesArray(source));
SearchRequest searchRequest = searchTemplateRequest.getRequest();