@Test public void testItemBinding() throws Exception { ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("foo.contains('World');", "javascript"); scriptItemProcessor.setItemBindingVariableName("foo"); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", true, scriptItemProcessor.process("Hello World")); }
/** * Returns a fully constructed {@link ScriptItemProcessor}. * * @return a new {@link ScriptItemProcessor} */ public ScriptItemProcessor<I, O> build() { if (this.scriptResource == null && !StringUtils.hasText(this.scriptSource)) { throw new IllegalArgumentException("scriptResource or scriptSource is required."); } if (StringUtils.hasText(this.scriptSource)) { Assert.hasText(this.language, "language is required when using scriptSource."); } ScriptItemProcessor<I, O> processor = new ScriptItemProcessor<>(); if (StringUtils.hasText(this.itemBindingVariableName)) { processor.setItemBindingVariableName(this.itemBindingVariableName); } if (this.scriptResource != null) { processor.setScript(this.scriptResource); } if (this.scriptSource != null) { processor.setScriptSource(this.scriptSource, this.language); } return processor; } }
@Override @SuppressWarnings("unchecked") public O process(I item) throws Exception { Map<String, Object> arguments = new HashMap<>(); arguments.put(itemBindingVariableName, item); return (O) scriptEvaluator.evaluate(getScriptSource(), arguments); }
@Test(expected = IllegalArgumentException.class) public void testScriptSourceWithNoLanguage() throws Exception { ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("function process(item) { return item.toUpperCase(); } process(item);", null); scriptItemProcessor.afterPropertiesSet(); }
@Test(expected = IllegalStateException.class) public void testScriptSourceAndScriptResourceSet() throws Exception { ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("blah", "blah"); scriptItemProcessor.setScript(new ClassPathResource("blah")); scriptItemProcessor.afterPropertiesSet(); }
@Test public void testJavascriptScriptSimple() throws Exception { assumeTrue(languageExists("javascript")); Resource resource = new ClassPathResource("org/springframework/batch/item/support/processor-test-simple.js"); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScript(resource); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "SS", scriptItemProcessor.process("ss")); }
@Test(expected = IllegalStateException.class) public void testNoScriptSet() throws Exception { ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.afterPropertiesSet(); }
@Test(expected = IllegalStateException.class) public void testNoScriptSetWithoutInitBean() throws Exception { ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.process("blah"); }
@Test public void testScriptResource() throws Exception { Resource resource = new ClassPathResource("org/springframework/batch/item/support/processor-test-simple.js"); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessorBuilder<String, Object>() .scriptResource(resource) .build(); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "BB", scriptItemProcessor.process("bb")); }
@Test public void testScriptSource() throws Exception { ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessorBuilder<String, Object>() .scriptSource("item.toUpperCase();") .language("javascript") .build(); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "AA", scriptItemProcessor.process("aa")); }
@Test public void testItemBindingNameChange() throws Exception { assumeTrue(languageExists("javascript")); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setItemBindingVariableName("someOtherVarName"); scriptItemProcessor.setScriptSource("function process(param) { return param.toUpperCase(); } process(someOtherVarName);", "javascript"); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "SS", scriptItemProcessor.process("ss")); }
/** * Returns a fully constructed {@link ScriptItemProcessor}. * * @return a new {@link ScriptItemProcessor} */ public ScriptItemProcessor<I, O> build() { if (this.scriptResource == null && !StringUtils.hasText(this.scriptSource)) { throw new IllegalArgumentException("scriptResource or scriptSource is required."); } if (StringUtils.hasText(this.scriptSource)) { Assert.hasText(this.language, "language is required when using scriptSource."); } ScriptItemProcessor<I, O> processor = new ScriptItemProcessor<>(); if (StringUtils.hasText(this.itemBindingVariableName)) { processor.setItemBindingVariableName(this.itemBindingVariableName); } if (this.scriptResource != null) { processor.setScript(this.scriptResource); } if (this.scriptSource != null) { processor.setScriptSource(this.scriptSource, this.language); } return processor; } }
@Test public void testItemBinding() throws Exception { ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessorBuilder<String, Object>() .scriptSource("foo.contains('World');") .language("javascript") .itemBindingVariableName("foo") .build(); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", true, scriptItemProcessor.process("Hello World")); }
@Override @SuppressWarnings("unchecked") public O process(I item) throws Exception { Map<String, Object> arguments = new HashMap<String, Object>(); arguments.put(itemBindingVariableName, item); return (O) scriptEvaluator.evaluate(getScriptSource(), arguments); }
@Test public void testGroovyScriptSourceSimple() throws Exception { assumeTrue(languageExists("groovy")); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("item.toUpperCase();", "groovy"); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "SS", scriptItemProcessor.process("ss")); }
@Test public void testJavascriptScriptSourceSimple() throws Exception { assumeTrue(languageExists("javascript")); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("item.toUpperCase();", "javascript"); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "SS", scriptItemProcessor.process("ss")); }
@Test public void testJavascriptScriptSourceFunction() throws Exception { assumeTrue(languageExists("javascript")); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("function process(item) { return item.toUpperCase(); } process(item);", "javascript"); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "SS", scriptItemProcessor.process("ss")); }
@Test public void testJRubyScriptSourceSimple() throws Exception { assumeTrue(languageExists("jruby")); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("$item.upcase", "jruby"); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "SS", scriptItemProcessor.process("ss")); }
@Test public void testJRubyScriptSourceMethod() throws Exception { assumeTrue(languageExists("jruby")); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("def process(item) $item.upcase end \n process($item)", "jruby"); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "SS", scriptItemProcessor.process("ss")); }
@Test public void testBeanShellScriptSourceSimple() throws Exception { assumeTrue(languageExists("bsh")); ScriptItemProcessor<String, Object> scriptItemProcessor = new ScriptItemProcessor<>(); scriptItemProcessor.setScriptSource("item.toUpperCase();", "bsh"); scriptItemProcessor.afterPropertiesSet(); assertEquals("Incorrect transformed value", "SS", scriptItemProcessor.process("ss")); }