org.apache.bsf.util

Class BSFEngineImpl

Implemented Interfaces:
BSFEngine, PropertyChangeListener
Known Direct Subclasses:
ActiveScriptEngine, JaclEngine, JavaClassEngine, JavaScriptEngine, JPythonEngine, JythonEngine, NetRexxEngine, XSLTEngine

public abstract class BSFEngineImpl
extends java.lang.Object
implements BSFEngine

This is a base implementation of the BSFEngine interface which engine implementations may choose to extend to get the basic methods of the interface implemented.

Authors:
Sanjiva Weerawarana
Olivier Gruber (adding debugging support)

Field Summary

protected ClassLoader
classLoader
protected String
classPath
protected BSFDebugManagerImpl
dbgmgr
protected Vector
declaredBeans
protected String
lang
protected BSFManager
mgr
protected String
tempDir

Constructor Summary

BSFEngineImpl()
Get the debug manager in the constructor, not in initialize.

Method Summary

Object
apply(String source, int lineNo, int columnNo, Object funcBody, Vector paramNames, Vector arguments)
Default impl of apply - calls eval ignorning parameters and returns the result.
void
compileApply(String source, int lineNo, int columnNo, Object funcBody, Vector paramNames, Vector arguments, CodeBuffer cb)
Default impl of compileApply - calls compileExpr ignorning parameters.
void
compileExpr(String source, int lineNo, int columnNo, Object expr, CodeBuffer cb)
Default impl of compileExpr - generates code that'll create a new manager, evaluate the expression, and return the value.
void
compileScript(String source, int lineNo, int columnNo, Object script, CodeBuffer cb)
Default impl of compileScript - generates code that'll create a new manager, and execute the script.
void
declareBean(BSFDeclaredBean bean)
void
disconnectedDebuggerNotify()
Basic engines are not supporting breakpoints for the meaning and support is something that is language-specific.
void
exec(String source, int lineNo, int columnNo, Object script)
Default impl of execute - calls eval and ignores the result.
Object
getSpecificDebuggingInterface()
By default, an engine does not support debugging.
void
initialize(BSFManager mgr, String lang, Vector declaredBeans)
initialize the engine; called right after construction by the manager.
void
placeBreakpointAtLine(int brkptid, String docname, int lineno)
void
placeBreakpointAtOffset(int brkptid, String docname, int offset)
void
propertyChange(PropertyChangeEvent e)
Receive property change events from the manager and update my fields as needed.
void
removeBreakpoint(String docname, int brkptid)
void
setEntryExit(String docname, boolean on)
void
terminate()
void
undeclareBean(BSFDeclaredBean bean)

Field Details

classLoader

protected ClassLoader classLoader

classPath

protected String classPath

dbgmgr

protected BSFDebugManagerImpl dbgmgr

declaredBeans

protected Vector declaredBeans

lang

protected String lang

mgr

protected BSFManager mgr

tempDir

protected String tempDir

Constructor Details

BSFEngineImpl

public BSFEngineImpl()
Get the debug manager in the constructor, not in initialize. First, this is ok since the debug manager is not BSFManager dependent. Second, the debug manager needs to be known sooner than "initialize" for the JavaScript engine.

Method Details

apply

public Object apply(String source,
                    int lineNo,
                    int columnNo,
                    Object funcBody,
                    Vector paramNames,
                    Vector arguments)
            throws BSFException
Default impl of apply - calls eval ignorning parameters and returns the result.
Specified by:
apply in interface BSFEngine

compileApply

public void compileApply(String source,
                         int lineNo,
                         int columnNo,
                         Object funcBody,
                         Vector paramNames,
                         Vector arguments,
                         CodeBuffer cb)
            throws BSFException
Default impl of compileApply - calls compileExpr ignorning parameters.
Specified by:
compileApply in interface BSFEngine

compileExpr

public void compileExpr(String source,
                        int lineNo,
                        int columnNo,
                        Object expr,
                        CodeBuffer cb)
            throws BSFException
Default impl of compileExpr - generates code that'll create a new manager, evaluate the expression, and return the value.
Specified by:
compileExpr in interface BSFEngine

compileScript

public void compileScript(String source,
                          int lineNo,
                          int columnNo,
                          Object script,
                          CodeBuffer cb)
            throws BSFException
Default impl of compileScript - generates code that'll create a new manager, and execute the script.
Specified by:
compileScript in interface BSFEngine

declareBean

public void declareBean(BSFDeclaredBean bean)
            throws BSFException
Specified by:
declareBean in interface BSFEngine

disconnectedDebuggerNotify

public void disconnectedDebuggerNotify()
Basic engines are not supporting breakpoints for the meaning and support is something that is language-specific.
Specified by:
disconnectedDebuggerNotify in interface BSFEngine

exec

public void exec(String source,
                 int lineNo,
                 int columnNo,
                 Object script)
            throws BSFException
Default impl of execute - calls eval and ignores the result.
Specified by:
exec in interface BSFEngine

getSpecificDebuggingInterface

public Object getSpecificDebuggingInterface()
By default, an engine does not support debugging. Subclasses will need to redefine this method in order to provide debuggers with their language-specific interface for debugging.
Specified by:
getSpecificDebuggingInterface in interface BSFEngine

initialize

public void initialize(BSFManager mgr,
                       String lang,
                       Vector declaredBeans)
            throws BSFException
initialize the engine; called right after construction by the manager. Declared beans are simply kept in a vector and that's it. Subclasses must do whatever they want with it.
Specified by:
initialize in interface BSFEngine

placeBreakpointAtLine

public void placeBreakpointAtLine(int brkptid,
                                  String docname,
                                  int lineno)
            throws BSFException
Specified by:
placeBreakpointAtLine in interface BSFEngine

placeBreakpointAtOffset

public void placeBreakpointAtOffset(int brkptid,
                                    String docname,
                                    int offset)
            throws BSFException
Specified by:
placeBreakpointAtOffset in interface BSFEngine

propertyChange

public void propertyChange(PropertyChangeEvent e)
Receive property change events from the manager and update my fields as needed.
Parameters:
e - PropertyChange event with the change data

removeBreakpoint

public void removeBreakpoint(String docname,
                             int brkptid)
            throws BSFException
Specified by:
removeBreakpoint in interface BSFEngine

setEntryExit

public void setEntryExit(String docname,
                         boolean on)
            throws BSFException
Specified by:
setEntryExit in interface BSFEngine

terminate

public void terminate()
Specified by:
terminate in interface BSFEngine

undeclareBean

public void undeclareBean(BSFDeclaredBean bean)
            throws BSFException
Specified by:
undeclareBean in interface BSFEngine