org.mozilla.javascript.commonjs.module.RequireBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rhino-runtime Show documentation
Show all versions of rhino-runtime Show documentation
Rhino JavaScript runtime jar, excludes tools & JSR-223 Script Engine wrapper.
The newest version!
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.javascript.commonjs.module;
import java.io.Serializable;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Script;
import org.mozilla.javascript.Scriptable;
/**
* A builder for {@link Require} instances. Useful when you're creating many instances of {@link
* Require} that are identical except for their top-level scope and current {@link Context}. Also
* useful if you prefer configuring it using named setters instead of passing many parameters in a
* constructor. Every setter returns "this", so you can easily chain their invocations for
* additional convenience.
*
* @author Attila Szegedi
* @version $Id: RequireBuilder.java,v 1.4 2011/04/07 20:26:11 hannes%helma.at Exp $
*/
public class RequireBuilder implements Serializable {
private static final long serialVersionUID = 1L;
private boolean sandboxed = true;
private ModuleScriptProvider moduleScriptProvider;
private Script preExec;
private Script postExec;
/**
* Sets the {@link ModuleScriptProvider} for the {@link Require} instances that this builder
* builds.
*
* @param moduleScriptProvider the module script provider for the {@link Require} instances that
* this builder builds.
* @return this, so you can chain ("fluidize") setter invocations
*/
public RequireBuilder setModuleScriptProvider(ModuleScriptProvider moduleScriptProvider) {
this.moduleScriptProvider = moduleScriptProvider;
return this;
}
/**
* Sets the script that should execute in every module's scope after the module's own script has
* executed.
*
* @param postExec the post-exec script.
* @return this, so you can chain ("fluidize") setter invocations
*/
public RequireBuilder setPostExec(Script postExec) {
this.postExec = postExec;
return this;
}
/**
* Sets the script that should execute in every module's scope before the module's own script
* has executed.
*
* @param preExec the pre-exec script.
* @return this, so you can chain ("fluidize") setter invocations
*/
public RequireBuilder setPreExec(Script preExec) {
this.preExec = preExec;
return this;
}
/**
* Sets whether the created require() instances will be sandboxed. See {@link
* Require#Require(Context, Scriptable, ModuleScriptProvider, Script, Script, boolean)} for
* explanation.
*
* @param sandboxed true if the created require() instances will be sandboxed.
* @return this, so you can chain ("fluidize") setter invocations
*/
public RequireBuilder setSandboxed(boolean sandboxed) {
this.sandboxed = sandboxed;
return this;
}
/**
* Creates a new require() function. You are still responsible for invoking either {@link
* Require#install(Scriptable)} or {@link Require#requireMain(Context, String)} to effectively
* make it available to its JavaScript program.
*
* @param cx the current context
* @param globalScope the global scope containing the JS standard natives.
* @return a new Require instance.
*/
public Require createRequire(Context cx, Scriptable globalScope) {
return new Require(cx, globalScope, moduleScriptProvider, preExec, postExec, sandboxed);
}
}