script
Modify Java object in script
With this example we are going to demonstrate how to modify a Java object in script. In short, to modify a Java object using script we have followed the steps below:
- Create a new ScriptEngineManager. The ScriptEngineManager implements a discovery and instantiation mechanism for ScriptEngine classes and also maintains a collection of key/value pairs storing state shared by all engines created by the Manager.
- Use the
getEngineByExtension(String extension)
API method to look up and create a ScriptEngine for the js extension. - Use
put(String key, Object value)
API method of ScriptEngine to set a key/value pair in the state of the ScriptEngine that may either create a Java Language Binding to be used in the execution of scripts or be used in some other way, depending on whether the key is reserved. The value set here is a list of String car names, with the key"brandList"
. - Create a new String script to print the list and then add new elements in the list.
- Use the
eval(String script)
method to execute the script. - After executing the script print the list elements again. The list now has the new elements added to it by the script.
Let’s take a look at the code snippet that follows:
package com.javacodegeeks.snippets.core; import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; import java.util.Date; import java.util.List; import java.util.ArrayList; public class ModifyObjectFromScript { public static void main(String[] args) { // Create a List of car brands List<String> brands = new ArrayList<String>(); brands.add("Audi"); brands.add("Mercedes"); brands.add("Renault"); brands.add("Ford"); brands.add("Seat"); // Obtain a ScriptEngine instance ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByExtension("js"); // Set List into the engine engine.put("brandList", brands); try { engine.eval(getScript()); // Redisplay the modified version of brands list object. for (String brand : brands) { System.out.println("Brand = " + brand); } } catch (ScriptException e) { e.printStackTrace(); } } private static String getScript() { // Script that reads and adds brands String script = "var index; " + "var brands = brandList.toArray(); " + " " + "for (index in brands) { " + " println(brands[index]); " + "}" + " " + "brandList.add("BMW"); " + "brandList.add("KIA"); " + "brandList.add("Smart"); "; return script; } }
Output:
Audi
Mercedes
Renault
Ford
Seat
Brand = Audi
Brand = Mercedes
Brand = Renault
Brand = Ford
Brand = Seat
Brand = BMW
Brand = KIA
Brand = Smart
This was an example of how to modify a Java object in script in Java.