use of org.jaggeryjs.scriptengine.engine.JaggeryContext in project jaggery by wso2.
the class WebAppManager method createJaggeryContext.
private static JaggeryContext createJaggeryContext(Context cx, OutputStream out, String scriptPath, HttpServletRequest request, HttpServletResponse response) {
ServletContext servletContext = request.getServletContext();
JaggeryContext context = clonedJaggeryContext(servletContext);
CommonManager.setJaggeryContext(context);
context.addProperty(SERVLET_REQUEST, request);
context.addProperty(SERVLET_RESPONSE, response);
CommonManager.getCallstack(context).push(scriptPath);
CommonManager.getIncludes(context).put(scriptPath, true);
context.addProperty(CommonManager.JAGGERY_OUTPUT_STREAM, out);
defineProperties(cx, context, context.getScope());
return context;
}
use of org.jaggeryjs.scriptengine.engine.JaggeryContext in project jaggery by wso2.
the class WebAppManager method deploy.
public static void deploy(org.apache.catalina.Context context) throws ScriptException {
ServletContext ctx = context.getServletContext();
JaggeryContext sharedContext = new JaggeryContext();
Context cx = Context.getCurrentContext();
CommonManager.initContext(sharedContext);
sharedContext.addProperty(Constants.SERVLET_CONTEXT, ctx);
sharedContext.addProperty(FileHostObject.JAVASCRIPT_FILE_MANAGER, new WebAppFileManager(ctx));
sharedContext.addProperty(Constants.JAGGERY_REQUIRED_MODULES, new HashMap<String, ScriptableObject>());
String logLevel = (String) ctx.getAttribute(LogHostObject.LOG_LEVEL);
if (logLevel != null) {
sharedContext.addProperty(LogHostObject.LOG_LEVEL, logLevel);
}
ScriptableObject sharedScope = sharedContext.getScope();
JavaScriptProperty application = new JavaScriptProperty("application");
application.setValue(cx.newObject(sharedScope, "Application", new Object[] { ctx }));
application.setAttribute(ScriptableObject.READONLY);
RhinoEngine.defineProperty(sharedScope, application);
ctx.setAttribute(SHARED_JAGGERY_CONTEXT, sharedContext);
}
use of org.jaggeryjs.scriptengine.engine.JaggeryContext in project jaggery by wso2.
the class WebAppManager method clearInterval.
public static void clearInterval(final Context cx, final Scriptable thisObj, Object[] args, Function funObj) throws ScriptException {
JaggeryContext context = CommonManager.getJaggeryContext();
ServletContext servletContext = (ServletContext) context.getProperty(Constants.SERVLET_CONTEXT);
String contextPath = servletContext.getContextPath();
RhinoTopLevel.clearTimeout(cx, thisObj, args, funObj);
List<String> taskIds = intervals.get(contextPath);
taskIds.remove(String.valueOf(args[0]));
}
use of org.jaggeryjs.scriptengine.engine.JaggeryContext in project jaggery by wso2.
the class WebAppManager method clonedJaggeryContext.
public static JaggeryContext clonedJaggeryContext(ServletContext context) {
JaggeryContext shared = sharedJaggeryContext(context);
RhinoEngine engine = shared.getEngine();
Scriptable sharedScope = shared.getScope();
Context cx = Context.getCurrentContext();
ScriptableObject instanceScope = (ScriptableObject) cx.newObject(sharedScope);
instanceScope.setPrototype(sharedScope);
instanceScope.setParentScope(null);
JaggeryContext clone = new JaggeryContext();
clone.setEngine(engine);
clone.setTenantDomain(shared.getTenantDomain());
clone.setScope(instanceScope);
clone.addProperty(Constants.SERVLET_CONTEXT, shared.getProperty(Constants.SERVLET_CONTEXT));
clone.addProperty(LogHostObject.LOG_LEVEL, shared.getProperty(LogHostObject.LOG_LEVEL));
clone.addProperty(FileHostObject.JAVASCRIPT_FILE_MANAGER, shared.getProperty(FileHostObject.JAVASCRIPT_FILE_MANAGER));
clone.addProperty(Constants.JAGGERY_CORE_MANAGER, shared.getProperty(Constants.JAGGERY_CORE_MANAGER));
clone.addProperty(Constants.JAGGERY_INCLUDED_SCRIPTS, new HashMap<String, Boolean>());
clone.addProperty(Constants.JAGGERY_INCLUDES_CALLSTACK, new Stack<String>());
clone.addProperty(Constants.JAGGERY_REQUIRED_MODULES, new HashMap<String, ScriptableObject>());
return clone;
}
use of org.jaggeryjs.scriptengine.engine.JaggeryContext in project jaggery by wso2.
the class WebAppManager method require.
public static ScriptableObject require(Context cx, Scriptable thisObj, Object[] args, Function funObj) throws ScriptException, IOException {
String functionName = "require";
int argsCount = args.length;
if (argsCount != 1) {
HostObjectUtil.invalidNumberOfArgs(CommonManager.HOST_OBJECT_NAME, functionName, argsCount, false);
}
if (!(args[0] instanceof String)) {
HostObjectUtil.invalidArgsError(CommonManager.HOST_OBJECT_NAME, functionName, "1", "string", args[0], false);
}
String moduleId = (String) args[0];
int dotIndex = moduleId.lastIndexOf(".");
if (moduleId.length() == dotIndex + 1) {
String msg = "Invalid file path for require method : " + moduleId;
log.error(msg);
throw new ScriptException(msg);
}
JaggeryContext jaggeryContext = CommonManager.getJaggeryContext();
Map<String, ScriptableObject> requiredModules = (Map<String, ScriptableObject>) jaggeryContext.getProperty(Constants.JAGGERY_REQUIRED_MODULES);
ScriptableObject object = requiredModules.get(moduleId);
if (object != null) {
return object;
}
if (dotIndex == -1) {
object = CommonManager.require(cx, thisObj, args, funObj);
initModule(cx, jaggeryContext, moduleId, object);
} else {
object = (ScriptableObject) cx.newObject(thisObj);
object.setPrototype(thisObj);
object.setParentScope(thisObj);
//sharedJaggeryContext((ServletContext) jaggeryContext.getProperty(Constants.SERVLET_CONTEXT)).getScope()
//object.setParentScope(sharedJaggeryContext((ServletContext) jaggeryContext.getProperty(Constants.SERVLET_CONTEXT)).getScope());
String ext = moduleId.substring(dotIndex + 1);
if (ext.equalsIgnoreCase("json")) {
object = executeScript(jaggeryContext, object, moduleId, true, true, false);
} else if (ext.equalsIgnoreCase("js")) {
object = executeScript(jaggeryContext, object, moduleId, false, true, false);
} else if (ext.equalsIgnoreCase("jag")) {
object = executeScript(jaggeryContext, object, moduleId, false, false, false);
} else {
String msg = "Unsupported file type for require() method : ." + ext;
log.error(msg);
throw new ScriptException(msg);
}
}
requiredModules.put(moduleId, object);
return object;
}
Aggregations