You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bsf-dev@jakarta.apache.org by ro...@apache.org on 2006/10/29 17:27:51 UTC
svn commit: r468930 -
/jakarta/bsf/trunk/src/org/apache/bsf/engines/jython/JythonEngine.java
Author: rony
Date: Sun Oct 29 08:27:51 2006
New Revision: 468930
URL: http://svn.apache.org/viewvc?view=rev&rev=468930
Log:
20061029 1726 Checked in Sonny To's patch to ease class loading.
Modified:
jakarta/bsf/trunk/src/org/apache/bsf/engines/jython/JythonEngine.java
Modified: jakarta/bsf/trunk/src/org/apache/bsf/engines/jython/JythonEngine.java
URL: http://svn.apache.org/viewvc/jakarta/bsf/trunk/src/org/apache/bsf/engines/jython/JythonEngine.java?view=diff&rev=468930&r1=468929&r2=468930
==============================================================================
--- jakarta/bsf/trunk/src/org/apache/bsf/engines/jython/JythonEngine.java (original)
+++ jakarta/bsf/trunk/src/org/apache/bsf/engines/jython/JythonEngine.java Sun Oct 29 08:27:51 2006
@@ -16,8 +16,11 @@
package org.apache.bsf.engines.jython;
+import java.beans.PropertyChangeEvent;
import java.io.ByteArrayInputStream;
import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.bsf.BSFDeclaredBean;
import org.apache.bsf.BSFException;
@@ -28,6 +31,7 @@
import org.python.core.PyException;
import org.python.core.PyJavaInstance;
import org.python.core.PyObject;
+import org.python.core.PySystemState;
import org.python.util.InteractiveInterpreter;
/**
@@ -37,10 +41,12 @@
* @author Sanjiva Weerawarana
* @author Finn Bock <bc...@worldonline.dk>
* @author Chuck Murcko
+ * @author Sonny To" <so...@gmail.com>, 2006-10-30
*/
public class JythonEngine extends BSFEngineImpl {
BSFPythonInterpreter interp;
+ private final static Pattern fromRegExp = Pattern.compile("from ([.^\\S]*)");
/**
* call the named method of the given object.
@@ -105,8 +111,10 @@
}
index++;
}
-
- interp.exec (script.toString ());
+
+ String scriptStr = script.toString ();
+ importPackage(scriptStr);
+ interp.exec (scriptStr);
Object result = interp.eval ("bsf_temp_fn()");
@@ -125,7 +133,9 @@
public Object eval (String source, int lineNo, int columnNo,
Object script) throws BSFException {
try {
- Object result = interp.eval (byteify(script.toString ()));
+ String scriptStr = byteify(script.toString ());
+ importPackage(scriptStr);
+ Object result = interp.eval (scriptStr);
if (result != null && result instanceof PyJavaInstance)
result = ((PyJavaInstance)result).__tojava__(Object.class);
return result;
@@ -141,19 +151,30 @@
public void exec (String source, int lineNo, int columnNo,
Object script) throws BSFException {
try {
- interp.exec (byteify(script.toString ()));
+ String scriptStr = byteify(script.toString());
+ importPackage(scriptStr);
+ interp.exec (scriptStr);
} catch (PyException e) {
throw new BSFException (BSFException.REASON_EXECUTION_ERROR,
"exception from Jython:\n" + e, e);
}
}
+ private void importPackage(String script) {
+ Matcher matcher = fromRegExp.matcher(script);
+ while (matcher.find()) {
+ String packageName = matcher.group(1);
+ PySystemState.add_package(packageName);
+ }
+ }
+
/**
* Execute script code, emulating console interaction.
*/
public void iexec (String source, int lineNo, int columnNo,
Object script) throws BSFException {
String scriptStr = byteify(script.toString());
+ importPackage(scriptStr);
int newline = scriptStr.indexOf("\n");
if (newline > -1)
@@ -240,5 +261,16 @@
throw exc;
}
}
+ }
+
+
+ public void propertyChange(PropertyChangeEvent e) {
+ super.propertyChange(e);
+ String name = e.getPropertyName();
+ Object value = e.getNewValue();
+ if (name.equals("classLoader")) {
+ Py.getSystemState().setClassLoader((ClassLoader) value);
+ }
+
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bsf-dev-help@jakarta.apache.org