BAEL-2899: adding some more case scenarios
This commit is contained in:
@@ -1,12 +1,20 @@
|
||||
package com.baeldung;
|
||||
|
||||
import groovy.lang.Binding;
|
||||
import groovy.lang.GroovyClassLoader;
|
||||
import groovy.lang.GroovyShell;
|
||||
import groovy.lang.*;
|
||||
import groovy.util.GroovyScriptEngine;
|
||||
import groovy.util.ResourceException;
|
||||
import groovy.util.ScriptException;
|
||||
import org.codehaus.groovy.control.CompilerConfiguration;
|
||||
import org.codehaus.groovy.jsr223.GroovyScriptEngineFactory;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.script.Compilable;
|
||||
import javax.script.ScriptEngine;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* Hello world!
|
||||
*
|
||||
@@ -15,40 +23,84 @@ public class App {
|
||||
private final static Logger LOG = LoggerFactory.getLogger(App.class);
|
||||
private final GroovyClassLoader loader;
|
||||
private final GroovyShell shell;
|
||||
private final GroovyScriptEngine engine;
|
||||
|
||||
private App() {
|
||||
private App() throws IOException {
|
||||
loader = new GroovyClassLoader(this.getClass().getClassLoader());
|
||||
CompilerConfiguration config = new CompilerConfiguration();
|
||||
config.setScriptBaseClass("com.baeldung.CalcScript");
|
||||
shell = new GroovyShell(loader, new Binding(), config);
|
||||
engine = new GroovyScriptEngine(new URL[] { new File("src/main/groovy/com/baeldung/").toURI().toURL() }, this.getClass().getClassLoader());
|
||||
}
|
||||
|
||||
private void runScript(int x, int y) {
|
||||
Object script = shell.parse(String.format("calcSum(%d,%d)", x, y));
|
||||
private void runCompiledClasses(int x, int y) {
|
||||
Object result1 = new CalcScript().calcSum(x, y);
|
||||
LOG.info("Result of calcSum() method is {}", result1);
|
||||
|
||||
Object result2 = new CalcMath().calcSum(x, y);
|
||||
LOG.info("Result of calcSum() method is {}", result2);
|
||||
}
|
||||
|
||||
private void runShellScript(int x, int y) {
|
||||
Script script = shell.parse(String.format("calcSum(%d,%d)", x, y));
|
||||
assert script instanceof CalcScript;
|
||||
Object result = ((CalcScript) script).run();
|
||||
Object result = script.run();
|
||||
LOG.info("Result of run() method is {}", result);
|
||||
|
||||
Object script2 = shell.parse("CalcScript");
|
||||
assert script2 instanceof CalcScript;
|
||||
Object result2 = ((CalcScript) script2).calcSum(x + 7, y + 7);
|
||||
LOG.info("Result of calcSum() method is {}", result2);
|
||||
|
||||
Script script3 = shell.parse("");
|
||||
assert script3 instanceof CalcScript;
|
||||
Object result3 = script3.invokeMethod("calcSum", new Object[] { x + 14, y + 14 });
|
||||
LOG.info("Result of run() method is {}", result3);
|
||||
|
||||
}
|
||||
|
||||
private void runClass(int x, int y) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
|
||||
private void runClassWithLoader(int x, int y) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
|
||||
Class calcClass = loader.loadClass("com.baeldung.CalcMath");
|
||||
Object calc = calcClass.newInstance();
|
||||
assert calc instanceof CalcMath;
|
||||
|
||||
Object result = ((CalcMath) calc).calcSum(x, y);
|
||||
LOG.info("Result is {}", result);
|
||||
|
||||
Object result2 = ((GroovyObject) calc).invokeMethod("calcSum", new Object[] { x + 14, y + 14 });
|
||||
LOG.info("Result is {}", result2);
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
|
||||
private void runClassWithEngine(int x, int y) throws ClassNotFoundException, IllegalAccessException, InstantiationException, ResourceException, ScriptException {
|
||||
|
||||
Class<GroovyObject> calcClass = engine.loadScriptByName("CalcMath.groovy");
|
||||
GroovyObject calc = calcClass.newInstance();
|
||||
Object result = calc.invokeMethod("calcSum", new Object[] { x, y });
|
||||
//WARNING the following will throw a ClassCastException
|
||||
//((CalcMath)calc).calcSum(1,2);
|
||||
LOG.info("Result is {}", result);
|
||||
}
|
||||
|
||||
private void runClassWithEngineFactory(int x, int y) throws ClassNotFoundException, IllegalAccessException, InstantiationException, ResourceException, ScriptException, javax.script.ScriptException {
|
||||
ScriptEngine engine = new GroovyScriptEngineFactory().getScriptEngine();
|
||||
Class calcClass = (Class) ((Compilable) engine).compile("com.baeldung.CalcMath").eval();
|
||||
Object calc = calcClass.newInstance();
|
||||
Object result = ((CalcMath) calc).calcSum(1, 20);
|
||||
LOG.info("Result is {}", result);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, ResourceException, ScriptException, IOException, javax.script.ScriptException {
|
||||
App app = new App();
|
||||
LOG.info("Running an already compiled groovy class instance...");
|
||||
app.runCompiledClasses(5, 10);
|
||||
LOG.info("Running a groovy script...");
|
||||
app.runScript(5, 10);
|
||||
app.runShellScript(5, 10);
|
||||
LOG.info("Running a groovy class...");
|
||||
app.runClass(1, 3);
|
||||
app.runClassWithLoader(1, 3);
|
||||
LOG.info("Running a groovy class using the engine...");
|
||||
app.runClassWithEngine(10, 30);
|
||||
LOG.info("Running a groovy class using the engine factory...");
|
||||
app.runClassWithEngineFactory(10, 30);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user