com.github.mustachejava.JavascriptObjectHandler Maven / Gradle / Ivy
package com.github.mustachejava;
import com.github.mustachejava.reflect.ReflectionObjectHandler;
import jdk.nashorn.api.scripting.JSObject;
import java.util.ArrayList;
import java.util.Map;
/**
* Uses Nashorn to support Javascript scope objects
*/
public class JavascriptObjectHandler extends ReflectionObjectHandler {
@Override
public String stringify(Object object) {
if (object instanceof JSObject) {
final JSObject jso = (JSObject) object;
if (jso.isFunction()) {
Object call = jso.call(jso);
return stringify(coerce(call));
}
}
return super.stringify(object);
}
@Override
public Object coerce(Object object) {
if (object instanceof JSObject) {
final JSObject jso = (JSObject) object;
if (jso.isFunction()) {
return new TemplateFunction() {
@Override
public String apply(String s) {
Object call = jso.call(jso, s);
return call == null ? null : call.toString();
}
};
} else if (jso.isArray()) {
// Let's see what it is really. Maybe it is a list.
return new ArrayList(((Map) jso).values());
}
}
return super.coerce(object);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy