1 16 package nl.hippo.spring; 17 18 import java.util.Collections ; 19 import java.util.Iterator ; 20 import java.util.Map ; 21 import org.mozilla.javascript.Context; 22 import org.mozilla.javascript.Scriptable; 23 import org.mozilla.javascript.ScriptableObject; 24 import org.mozilla.javascript.WrappedException; 25 26 public class JavaScriptFactory 27 { 28 29 private static final String SCRIPT_PREFIX = "var result = null;"; 30 31 private static final String SCRIPT_SUFFIX = "result;"; 32 33 public JavaScriptFactory() 34 { 35 super(); 36 } 37 38 public static Object create(String script, Map parameters) throws Throwable 39 { 40 Object result; 41 42 if (parameters == null) 43 { 44 parameters = Collections.EMPTY_MAP; 45 } 46 47 try 48 { 49 Context javaScriptContext = Context.enter(); 50 Scriptable scope = javaScriptContext.initStandardObjects(null); 51 52 for (Iterator parameterNamesIterator = parameters.keySet().iterator(); parameterNamesIterator.hasNext();) 53 { 54 String parameterName = (String ) parameterNamesIterator.next(); 55 Object parameter = Context.toObject(parameters.get(parameterName), scope); 56 ScriptableObject.putProperty(scope, parameterName, parameter); 57 } 58 59 StringBuffer wrappedScript = new StringBuffer (script.length() + SCRIPT_PREFIX.length() + SCRIPT_SUFFIX.length()); 60 wrappedScript.append(SCRIPT_PREFIX); 61 wrappedScript.append(script); 62 wrappedScript.append(SCRIPT_SUFFIX); 63 result = javaScriptContext.evaluateString(scope, wrappedScript.toString(), "JavaScriptFactory script", 1, null); 64 } 65 catch (WrappedException e) 66 { 67 throw e.getCause(); 68 } 69 finally 70 { 71 Context.exit(); 72 } 73 74 return result; 75 } 76 77 } | Popular Tags |