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.
