diff options
author | Jack Conradson <osjdconrad@gmail.com> | 2016-11-10 09:59:13 -0800 |
---|---|---|
committer | Jack Conradson <osjdconrad@gmail.com> | 2016-11-10 09:59:13 -0800 |
commit | aeb97ff41298e26b107a733837dfe17f123c0c9b (patch) | |
tree | 8d37fa8c7365df2ce52626b003c1838572a62d88 /modules/lang-mustache | |
parent | 2e531902ffb776e6ea9d15e99ab904aa4cb256dc (diff) |
Clean up of Script.
Closes #21321
Diffstat (limited to 'modules/lang-mustache')
7 files changed, 32 insertions, 25 deletions
diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/CustomMustacheFactory.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/CustomMustacheFactory.java index 95bae3732e..662cd86f79 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/CustomMustacheFactory.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/CustomMustacheFactory.java @@ -30,7 +30,6 @@ import com.github.mustachejava.TemplateContext; import com.github.mustachejava.codes.DefaultMustache; import com.github.mustachejava.codes.IterableCode; import com.github.mustachejava.codes.WriteCode; -import org.elasticsearch.common.Strings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentType; @@ -54,6 +53,7 @@ public class CustomMustacheFactory extends DefaultMustacheFactory { static final String CONTENT_TYPE_PARAM = "content_type"; + static final String JSON_MIME_TYPE_WITH_CHARSET = "application/json; charset=UTF-8"; static final String JSON_MIME_TYPE = "application/json"; static final String PLAIN_TEXT_MIME_TYPE = "text/plain"; static final String X_WWW_FORM_URLENCODED_MIME_TYPE = "application/x-www-form-urlencoded"; @@ -63,6 +63,7 @@ public class CustomMustacheFactory extends DefaultMustacheFactory { private static final Map<String, Supplier<Encoder>> ENCODERS; static { Map<String, Supplier<Encoder>> encoders = new HashMap<>(); + encoders.put(JSON_MIME_TYPE_WITH_CHARSET, JsonEscapeEncoder::new); encoders.put(JSON_MIME_TYPE, JsonEscapeEncoder::new); encoders.put(PLAIN_TEXT_MIME_TYPE, DefaultEncoder::new); encoders.put(X_WWW_FORM_URLENCODED_MIME_TYPE, UrlEncoder::new); diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngineService.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngineService.java index b2bc514327..08c0e1643b 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngineService.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustacheScriptEngineService.java @@ -83,8 +83,7 @@ public final class MustacheScriptEngineService extends AbstractComponent impleme * Compile a template string to (in this case) a Mustache object than can * later be re-used for execution to fill in missing parameter values. * - * @param templateSource - * a string representing the template to compile. + * @param templateSource a string representing the template to compile. * @return a compiled template object for later execution. * */ @Override diff --git a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TemplateQueryBuilder.java b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TemplateQueryBuilder.java index 731659c4b7..3744416a4e 100644 --- a/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TemplateQueryBuilder.java +++ b/modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/TemplateQueryBuilder.java @@ -39,6 +39,7 @@ import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptType; import java.io.IOException; +import java.util.Collections; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -57,11 +58,12 @@ public class TemplateQueryBuilder extends AbstractQueryBuilder<TemplateQueryBuil private final Script template; public TemplateQueryBuilder(String template, ScriptType scriptType, Map<String, Object> params) { - this(new Script(template, scriptType, "mustache", params)); + this(new Script(scriptType, "mustache", template, params)); } public TemplateQueryBuilder(String template, ScriptType scriptType, Map<String, Object> params, XContentType ct) { - this(new Script(template, scriptType, "mustache", params, ct)); + this(new Script(scriptType, "mustache", template, + ct == null ? Collections.emptyMap() : Collections.singletonMap(Script.CONTENT_TYPE_OPTION, ct.mediaType()), params)); } TemplateQueryBuilder(Script template) { 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 f323fcf450..e366b34e3d 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 @@ -40,7 +40,8 @@ import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.transport.TransportService; -import static java.util.Collections.emptyMap; +import java.util.Collections; + import static org.elasticsearch.script.ScriptContext.Standard.SEARCH; public class TransportSearchTemplateAction extends HandledTransportAction<SearchTemplateRequest, SearchTemplateResponse> { @@ -66,8 +67,9 @@ public class TransportSearchTemplateAction extends HandledTransportAction<Search protected void doExecute(SearchTemplateRequest request, ActionListener<SearchTemplateResponse> listener) { final SearchTemplateResponse response = new SearchTemplateResponse(); try { - Script script = new Script(request.getScript(), request.getScriptType(), TEMPLATE_LANG, request.getScriptParams()); - ExecutableScript executable = scriptService.executable(script, SEARCH, emptyMap()); + Script script = new Script(request.getScriptType(), TEMPLATE_LANG, request.getScript(), + request.getScriptParams() == null ? Collections.emptyMap() : request.getScriptParams()); + ExecutableScript executable = scriptService.executable(script, SEARCH); BytesReference source = (BytesReference) executable.run(); response.setSource(source); diff --git a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/CustomMustacheFactoryTests.java b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/CustomMustacheFactoryTests.java index f2f0d6d80f..c1cba140ff 100644 --- a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/CustomMustacheFactoryTests.java +++ b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/CustomMustacheFactoryTests.java @@ -51,6 +51,8 @@ public class CustomMustacheFactoryTests extends ESTestCase { e = expectThrows(IllegalArgumentException.class, () -> CustomMustacheFactory.createEncoder("test")); assertThat(e.getMessage(), equalTo("No encoder found for MIME type [test]")); + assertThat(CustomMustacheFactory.createEncoder(CustomMustacheFactory.JSON_MIME_TYPE_WITH_CHARSET), + instanceOf(CustomMustacheFactory.JsonEscapeEncoder.class)); assertThat(CustomMustacheFactory.createEncoder(CustomMustacheFactory.JSON_MIME_TYPE), instanceOf(CustomMustacheFactory.JsonEscapeEncoder.class)); assertThat(CustomMustacheFactory.createEncoder(CustomMustacheFactory.PLAIN_TEXT_MIME_TYPE), diff --git a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MustacheScriptEngineTests.java b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MustacheScriptEngineTests.java index ca4a6de716..20211e3935 100644 --- a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MustacheScriptEngineTests.java +++ b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MustacheScriptEngineTests.java @@ -84,7 +84,7 @@ public class MustacheScriptEngineTests extends ESTestCase { XContentParser parser = XContentFactory.xContent(templateString).createParser(templateString); Script script = Script.parse(parser, new ParseFieldMatcher(false)); CompiledScript compiledScript = new CompiledScript(ScriptType.INLINE, null, "mustache", - qe.compile(null, script.getScript(), Collections.emptyMap())); + qe.compile(null, script.getIdOrCode(), Collections.emptyMap())); ExecutableScript executableScript = qe.executable(compiledScript, script.getParams()); assertThat(((BytesReference) executableScript.run()).utf8ToString(), equalTo("{\"match_all\":{}}")); } @@ -95,7 +95,7 @@ public class MustacheScriptEngineTests extends ESTestCase { XContentParser parser = XContentFactory.xContent(templateString).createParser(templateString); Script script = Script.parse(parser, new ParseFieldMatcher(false)); CompiledScript compiledScript = new CompiledScript(ScriptType.INLINE, null, "mustache", - qe.compile(null, script.getScript(), Collections.emptyMap())); + qe.compile(null, script.getIdOrCode(), Collections.emptyMap())); ExecutableScript executableScript = qe.executable(compiledScript, script.getParams()); assertThat(((BytesReference) executableScript.run()).utf8ToString(), equalTo("{ \"match_all\":{} }")); } diff --git a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/TemplateQueryBuilderTests.java b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/TemplateQueryBuilderTests.java index 41242a693d..7bff3f5984 100644 --- a/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/TemplateQueryBuilderTests.java +++ b/modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/TemplateQueryBuilderTests.java @@ -22,7 +22,6 @@ package org.elasticsearch.script.mustache; import org.apache.lucene.index.memory.MemoryIndex; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.Query; -import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; @@ -50,6 +49,8 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Function; +import static org.hamcrest.Matchers.containsString; + public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQueryBuilder> { /** @@ -114,7 +115,7 @@ public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQue @Override protected TemplateQueryBuilder doCreateTestQueryBuilder() { - return new TemplateQueryBuilder(new Script(templateBase.toString(), ScriptType.INLINE, "mustache", null, null)); + return new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mustache", templateBase.toString(), Collections.emptyMap())); } @Override @@ -138,9 +139,9 @@ public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQue String queryAsString = testQueryAsString.replace("inline", "bogusField"); try { parseQuery(queryAsString); - fail("ScriptParseException expected."); - } catch (ElasticsearchParseException e) { - assertTrue(e.getMessage().contains("bogusField")); + fail("IllegalArgumentException expected"); + } catch (IllegalArgumentException e) { + assertThat(e.getMessage(), containsString("[script] unknown field [bogusField], parser not found")); } } @@ -178,8 +179,8 @@ public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQue @Override public void testMustRewrite() throws IOException { String query = "{ \"match_all\" : {}}"; - QueryBuilder builder = new TemplateQueryBuilder(new Script(query, ScriptType.INLINE, "mockscript", - Collections.emptyMap(), XContentType.JSON)); + QueryBuilder builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query, + Collections.singletonMap(Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap())); try { builder.toQuery(createShardContext()); fail(); @@ -191,24 +192,24 @@ public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQue public void testRewriteWithInnerName() throws IOException { final String query = "{ \"match_all\" : {\"_name\" : \"foobar\"}}"; - QueryBuilder builder = new TemplateQueryBuilder(new Script(query, ScriptType.INLINE, "mockscript", - Collections.emptyMap(), XContentType.JSON)); + QueryBuilder builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query, + Collections.singletonMap(Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap())); assertEquals(new MatchAllQueryBuilder().queryName("foobar"), builder.rewrite(createShardContext())); - builder = new TemplateQueryBuilder(new Script(query, ScriptType.INLINE, "mockscript", - Collections.emptyMap(), XContentType.JSON)).queryName("outer"); + builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query, Collections.singletonMap( + Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap())).queryName("outer"); assertEquals(new BoolQueryBuilder().must(new MatchAllQueryBuilder().queryName("foobar")).queryName("outer"), builder.rewrite(createShardContext())); } public void testRewriteWithInnerBoost() throws IOException { final TermQueryBuilder query = new TermQueryBuilder("foo", "bar").boost(2); - QueryBuilder builder = new TemplateQueryBuilder(new Script(query.toString(), ScriptType.INLINE, "mockscript", - Collections.emptyMap(), XContentType.JSON)); + QueryBuilder builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query.toString(), + Collections.singletonMap(Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap())); assertEquals(query, builder.rewrite(createShardContext())); - builder = new TemplateQueryBuilder(new Script(query.toString(), ScriptType.INLINE, "mockscript", - Collections.emptyMap(), XContentType.JSON)).boost(3); + builder = new TemplateQueryBuilder(new Script(ScriptType.INLINE, "mockscript", query.toString(), + Collections.singletonMap(Script.CONTENT_TYPE_OPTION, XContentType.JSON.mediaType()), Collections.emptyMap())).boost(3); assertEquals(new BoolQueryBuilder().must(query).boost(3), builder.rewrite(createShardContext())); } |