diff --git a/src/FESI/Data/ESLoader.java b/src/FESI/Data/ESLoader.java index 7566809a..e4be2fae 100644 --- a/src/FESI/Data/ESLoader.java +++ b/src/FESI/Data/ESLoader.java @@ -261,10 +261,10 @@ public abstract class ESLoader extends ESObject { } else if (obj.getClass().isArray()) { return new ESArrayWrapper(obj, evaluator); } // else if (obj instanceof helma.framework.IPathElement) { // Hannes Wallnoefer, 13. Aug 2001 - // return evaluator.reval.getElementWrapper ((helma.framework.IPathElement) obj); + // return evaluator.engine.getElementWrapper ((helma.framework.IPathElement) obj); // } // return new ESWrapper(obj, evaluator); - return evaluator.reval.getObjectWrapper (obj); + return evaluator.engine.getObjectWrapper (obj); } /** diff --git a/src/FESI/Interpreter/Evaluator.java b/src/FESI/Interpreter/Evaluator.java index 21f13952..5457dd79 100644 --- a/src/FESI/Interpreter/Evaluator.java +++ b/src/FESI/Interpreter/Evaluator.java @@ -45,7 +45,7 @@ public class Evaluator { // used to stop thread, 06.12.99 Hannes Wallnoefer public volatile Thread thread; // used to retrieve wrappers with correct Prototype for path elements in ESLoader - public helma.scripting.fesi.FesiEvaluator reval; + public helma.scripting.fesi.FesiEngine engine; private static String eol = System.getProperty("line.separator", "\n"); diff --git a/src/helma/scripting/ScriptingEngine.java b/src/helma/scripting/ScriptingEngine.java index b01c0762..c7a01c8c 100644 --- a/src/helma/scripting/ScriptingEngine.java +++ b/src/helma/scripting/ScriptingEngine.java @@ -12,9 +12,17 @@ import java.io.File; /** * This is the interface that must be implemented to make a scripting environment * usable by the Helma application server. + * + * Implementations of this interface must have a public zero-argument constructor + * to be usable by the Helma framework. */ public interface ScriptingEngine { + /** + * Init the scripting engine with an application and a request evaluator + */ + public void init (Application app, RequestEvaluator reval); + /** * This method is called before an execution context for a request * evaluation is entered to let the Engine know it should update diff --git a/src/helma/scripting/fesi/ESBeanWrapper.java b/src/helma/scripting/fesi/ESBeanWrapper.java index f8f14bc0..35055157 100644 --- a/src/helma/scripting/fesi/ESBeanWrapper.java +++ b/src/helma/scripting/fesi/ESBeanWrapper.java @@ -18,26 +18,26 @@ import FESI.Data.ESWrapper; public class ESBeanWrapper extends ESWrapper { - FesiEvaluator eval; + FesiEngine engine; - public ESBeanWrapper (Object object, FesiEvaluator eval) { - super (object, eval.getEvaluator(),true); - this.eval = eval; - } + public ESBeanWrapper (Object object, FesiEngine engine) { + super (object, engine.getEvaluator(),true); + this.engine = engine; + } - /** - * Wrap getProperty, return ESNode if INode would be returned, - * ESMapWrapper if Map would be returned. - */ + /** + * Wrap getProperty, return ESNode if INode would be returned, + * ESMapWrapper if Map would be returned. + */ public ESValue getProperty(String propertyName, int hash) throws EcmaScriptException { try { ESValue val = super.getProperty (propertyName, hash); if (val instanceof ESWrapper) { Object theObject = ((ESWrapper)val).getJavaObject (); if (val instanceof ESWrapper && theObject instanceof INode) { - return eval.getNodeWrapper ((INode) theObject); + return engine.getNodeWrapper ((INode) theObject); } else if (val instanceof ESWrapper && theObject instanceof Map) { - ESMapWrapper wrapper = new ESMapWrapper(eval, (Map) theObject); + ESMapWrapper wrapper = new ESMapWrapper(engine, (Map) theObject); if (theObject instanceof SystemProperties && super.getJavaObject () instanceof ApplicationBean) wrapper.setReadonly(true); return wrapper; @@ -57,7 +57,7 @@ public class ESBeanWrapper extends ESWrapper { throw new EcmaScriptException("can't set property " + propertyName + " to this value on " + getJavaObject().toString() ); } - } + } } diff --git a/src/helma/scripting/fesi/ESMapWrapper.java b/src/helma/scripting/fesi/ESMapWrapper.java index 9b81dd5d..e2f1b96d 100644 --- a/src/helma/scripting/fesi/ESMapWrapper.java +++ b/src/helma/scripting/fesi/ESMapWrapper.java @@ -20,17 +20,17 @@ import java.util.*; public class ESMapWrapper extends ESWrapper { private Map data; - private FesiEvaluator fesi; + private FesiEngine engine; private boolean readonly = false; - public ESMapWrapper (FesiEvaluator fesi) { - super (new Object(), fesi.getEvaluator ()); - this.fesi = fesi; + public ESMapWrapper (FesiEngine engine) { + super (new Object(), engine.getEvaluator ()); + this.engine = engine; } - public ESMapWrapper (FesiEvaluator fesi, Map data) { - super (new Object(), fesi.getEvaluator ()); - this.fesi = fesi; + public ESMapWrapper (FesiEngine engine, Map data) { + super (new Object(), engine.getEvaluator ()); + this.engine = engine; this.data = data; } @@ -76,9 +76,9 @@ public class ESMapWrapper extends ESWrapper { if (val instanceof String) return new ESString ((String) val); else if (val instanceof INode) - return fesi.getNodeWrapper ((INode) val); + return engine.getNodeWrapper ((INode) val); else if (val instanceof Map) - return new ESMapWrapper (fesi, (Map)val); + return new ESMapWrapper (engine, (Map)val); else if (val instanceof ESValue) return (ESValue) val; return ESLoader.normalizeValue(val, evaluator); diff --git a/src/helma/scripting/fesi/ESNode.java b/src/helma/scripting/fesi/ESNode.java index 401b363b..2f6db357 100644 --- a/src/helma/scripting/fesi/ESNode.java +++ b/src/helma/scripting/fesi/ESNode.java @@ -35,14 +35,14 @@ public class ESNode extends ObjectPrototype { NodeHandle handle; DbMapping dbmap; Throwable lastError = null; - FesiEvaluator eval; + FesiEngine engine; /** * Constructor used to create transient cache nodes */ - public ESNode (INode node, FesiEvaluator eval) { - super (eval.getPrototype("hopobject"), eval.getEvaluator()); - this.eval = eval; + public ESNode (INode node, FesiEngine engine) { + super (engine.getPrototype("hopobject"), engine.getEvaluator()); + this.engine = engine; this.node = node; cache = null; cacheWrapper = null; @@ -51,10 +51,10 @@ public class ESNode extends ObjectPrototype { handle = null; } - public ESNode (ESObject prototype, Evaluator evaluator, Object obj, FesiEvaluator eval) { + public ESNode (ESObject prototype, Evaluator evaluator, Object obj, FesiEngine engine) { super (prototype, evaluator); // eval.app.logEvent ("in ESNode constructor: "+o.getClass ()); - this.eval = eval; + this.engine = engine; if (obj == null) node = new TransientNode (null); else if (obj instanceof ESWrapper) @@ -80,7 +80,7 @@ public class ESNode extends ObjectPrototype { */ protected void checkNode () { if (node.getState () == INode.INVALID) try { - node = handle.getNode (eval.app.getWrappedNodeManager ()); + node = handle.getNode (engine.app.getWrappedNodeManager ()); } catch (Exception nx) {} } @@ -137,7 +137,7 @@ public class ESNode extends ObjectPrototype { if (e != null) { theArray.setSize(l); for (int i = 0; i 0 && arguments[0] != null) nodeName = arguments[0].toString(); Node n = new Node (nodeName, (String) null, app.getWrappedNodeManager ()); - node = new ESNode (fesi.getPrototype ("hopobject"), this.evaluator, n, fesi); - fesi.putNodeWrapper (node.getNode (), node); + node = new ESNode (engine.getPrototype ("hopobject"), this.evaluator, n, engine); + engine.putNodeWrapper (node.getNode (), node); } else { // Typed nodes are instantiated as helma.objectmodel.db.Node from the beginning // even if we don't know yet if they are going to be stored in a database. The reason // is that we want to be able to use the specail features like subnode relations even for // transient nodes. - ObjectPrototype op = fesi.getPrototype (typename); + ObjectPrototype op = engine.getPrototype (typename); Node n = new Node (typename, typename, app.getWrappedNodeManager ()); - node = new ESNode (op, fesi.getEvaluator (), n, fesi); + node = new ESNode (op, engine.getEvaluator (), n, engine); node.setPrototype (typename); node.getNode ().setDbMapping (app.getDbMapping (typename)); try { @@ -55,9 +55,9 @@ public class NodeConstructor extends BuiltinFunctionObject { // HACK: There is an incompatibility problem here, because the property // constructor is defined as the constructor of the object by EcmaScript. if (op.getProperty ("constructor", "constructor".hashCode()) instanceof ConstructedFunctionObject) - node.doIndirectCall (fesi.getEvaluator(), node, "constructor", arguments); + node.doIndirectCall (engine.getEvaluator(), node, "constructor", arguments); else - node.doIndirectCall (fesi.getEvaluator(), node, typename, arguments); + node.doIndirectCall (engine.getEvaluator(), node, typename, arguments); } catch (Exception ignore) {} } return node; @@ -69,7 +69,7 @@ public class NodeConstructor extends BuiltinFunctionObject { public ESValue getProperty(String propertyName, int hash) throws EcmaScriptException { if ("prototype".equals (propertyName)) - return fesi.getPrototype (typename); + return engine.getPrototype (typename); return super.getProperty(propertyName, hash); } diff --git a/src/helma/scripting/fesi/extensions/DomExtension.java b/src/helma/scripting/fesi/extensions/DomExtension.java index db224bce..3fe7910e 100644 --- a/src/helma/scripting/fesi/extensions/DomExtension.java +++ b/src/helma/scripting/fesi/extensions/DomExtension.java @@ -76,7 +76,7 @@ public class DomExtension extends Extension { writer.close(); File finalFile = new File(arguments[1].toString()); tmpFile.renameTo (finalFile); - this.evaluator.reval.app.logEvent("wrote xml to " + finalFile.getAbsolutePath() ); + this.evaluator.engine.getApplication().logEvent("wrote xml to " + finalFile.getAbsolutePath() ); } catch (IOException io) { throw new EcmaScriptException (io.toString()); } @@ -132,7 +132,7 @@ public class DomExtension extends Extension { node = ((ESNode)arguments[1]).getNode(); } catch ( Exception e ) { //classcast, arrayindex etc // make sure we have a node, even if 2nd arg doesn't exist or is not a node - node = new Node ( (String)null, (String)null, this.evaluator.reval.app.getWrappedNodeManager() ); + node = new Node ( (String)null, (String)null, this.evaluator.engine.getApplication().getWrappedNodeManager() ); } try { XmlReader reader = new XmlReader (); @@ -141,7 +141,7 @@ public class DomExtension extends Extension { result = reader.read (new StringReader (arguments[0].toString()),node); else result = reader.read (new File(arguments[0].toString()),node); - return this.evaluator.reval.getNodeWrapper (result); + return this.evaluator.engine.getNodeWrapper (result); } catch ( NoClassDefFoundError e ) { throw new EcmaScriptException ("Can't load XML parser:"+e); } catch ( Exception f ) { @@ -164,9 +164,9 @@ public class DomExtension extends Extension { } else { converter = new XmlConverter (); } - INode node = new helma.objectmodel.db.Node ( (String)null, (String)null, this.evaluator.reval.app.getWrappedNodeManager() ); + INode node = new helma.objectmodel.db.Node ( (String)null, (String)null, this.evaluator.engine.getApplication().getWrappedNodeManager() ); INode result = converter.convert (arguments[0].toString(),node); - return this.evaluator.reval.getNodeWrapper(result); + return this.evaluator.engine.getNodeWrapper(result); } catch ( NoClassDefFoundError e ) { throw new EcmaScriptException("Can't load dom-capable xml parser."); } catch ( RuntimeException f ) { diff --git a/src/helma/scripting/fesi/extensions/ESMail.java b/src/helma/scripting/fesi/extensions/ESMail.java index f5adb422..4feb0b7e 100644 --- a/src/helma/scripting/fesi/extensions/ESMail.java +++ b/src/helma/scripting/fesi/extensions/ESMail.java @@ -63,7 +63,7 @@ public class ESMail extends ESObject implements Serializable { Session session = Session.getDefaultInstance(props, null); message = new MimeMessage (session); } catch (Throwable t) { - this.evaluator.reval.app.logEvent ("Error in mail constructor: "+t); + this.evaluator.engine.getApplication().logEvent ("Error in mail constructor: "+t); } } diff --git a/src/helma/scripting/fesi/extensions/MailExtension.java b/src/helma/scripting/fesi/extensions/MailExtension.java index 57bd04c6..65978766 100644 --- a/src/helma/scripting/fesi/extensions/MailExtension.java +++ b/src/helma/scripting/fesi/extensions/MailExtension.java @@ -242,7 +242,7 @@ public class MailExtension extends Extension { try { mail.send (); } catch (Exception x) { - this.evaluator.reval.app.logEvent ("Error sending mail: "+x); + evaluator.engine.getApplication().logEvent ("Error sending mail: "+x); mail.setStatus (ESMail.SEND); return ESBoolean.makeBoolean(false); } diff --git a/src/helma/scripting/fesi/extensions/XmlRpcExtension.java b/src/helma/scripting/fesi/extensions/XmlRpcExtension.java index 56c959d9..40cd0887 100644 --- a/src/helma/scripting/fesi/extensions/XmlRpcExtension.java +++ b/src/helma/scripting/fesi/extensions/XmlRpcExtension.java @@ -5,7 +5,7 @@ package helma.scripting.fesi.extensions; import org.apache.xmlrpc.*; -import helma.scripting.fesi.FesiEvaluator; +import helma.scripting.fesi.FesiEngine; import FESI.Interpreter.*; import FESI.Exceptions.*; @@ -100,14 +100,14 @@ public class XmlRpcExtension extends Extension { public ESValue doIndirectCall(Evaluator evaluator, ESObject target, String functionName, ESValue arguments[]) throws EcmaScriptException, NoSuchMethodException { - // System.out.println ("doIndirectCall called with "+functionName); + // System.out.println ("doIndirectCall called with "+remoteObject+"."+functionName); XmlRpcClient client = new XmlRpcClient (url); // long now = System.currentTimeMillis (); Object retval = null; int l = arguments.length; Vector v = new Vector (); for (int i=0; i