package com.nominanuda.rhino.host; import static org.mozilla.javascript.RhinoHelper.RHINO; import java.io.StringReader; import java.util.HashMap; import java.util.Map; import org.mozilla.javascript.Context; import org.mozilla.javascript.Scriptable; public class DefinedClassModuleFactory implements ModuleFactory { private Map<String,String> map = new HashMap<String,String>(); public DefinedClassModuleFactory(Map<String,String> map){ this.map.putAll(map); } public Object create(String key, Scriptable thisObj, Scriptable scope, Context context) throws Exception { String defClass = map.get(key); if (defClass == null) { return null; } else { @SuppressWarnings("unchecked") Object res = RHINO.buildClassCtor(scope,(Class<? extends Scriptable>)Class.forName(defClass.trim()),false,false); if(res instanceof JavaJsHostObject) { String script = ((JavaJsHostObject)res).getJsScript(); RHINO.evaluateReader(context, new StringReader(script), defClass, scope); } return res; } } }