From: Ludovic D. <ld...@de...> - 2007-04-14 23:49:28
|
Hi ! I'm currently trying to add Jython support in the ZK framework (www.zkoss.org). To make this I need to have a method called, each time the scripting language tried to get the value of a variable. For example the Groovy support in ZK is done this way: ======================================= import groovy.lang.Binding; import groovy.lang.GroovyShell; ... public void init(Page owner, String zslang) { super.init(owner, zslang); _global = new Binding(new Variables()); _ip = new GroovyShell(_global); } //An inner class of GroovyInterpreter private class Variables extends HashMap { public Object get(Object key) { Object val = super.get(key); if (val != null || containsKey(key) || !(key instanceof String)) return val; return getFromNamespace((String)key); //provided by GenericInterpreter } } ======================================= (More can be read here: http://www.zkoss.org/smalltalks/addinterpreter/addinterpreter.dsp) So with groovy, you can register a custom Variables object to intercept accesses. If the object is already set in the scripting language, then return it, but if it is not set, it tries to return a ZK object with the same name (using the ZK method getFromNamespace()). I do not see how it could be done with the Jython API. Any ideas ? Best regards, -- Ludovic Drolez. http://zaurus.palmopensource.com - The Zaurus Open Source Portal http://www.drolez.com - Personal site - Linux and PalmOS stuff |
From: Charlie G. <cha...@gm...> - 2007-04-16 04:03:10
|
Hi Ludovic, >From looking at the Groovy example, it appears that you need to embed an interpreter and then expose its namespace to the ZK framework. You can do that with an instance of org.python.util.PythonInterpreter. It creates a simple python interpreter with which you can execute python code and then access its namespace with its get and set methods. They map directly to what GenericInterpreter is looking for in its get and set methods. Hope this helps, Charlie On 4/14/07, Ludovic Drolez <ld...@de...> wrote: > Hi ! > > I'm currently trying to add Jython support in the ZK framework > (www.zkoss.org). To make this I need to have a method called, each > time the scripting language tried to get the value of a variable. > > For example the Groovy support in ZK is done this way: > > ======================================= > import groovy.lang.Binding; > import groovy.lang.GroovyShell; > ... > public void init(Page owner, String zslang) { > super.init(owner, zslang); > > _global = new Binding(new Variables()); > _ip = new GroovyShell(_global); > } > //An inner class of GroovyInterpreter > private class Variables extends HashMap { > public Object get(Object key) { > Object val = super.get(key); > if (val != null || containsKey(key) || !(key instanceof String)) > return val; > return getFromNamespace((String)key); //provided by GenericInterpreter > } > } > ======================================= > (More can be read here: > http://www.zkoss.org/smalltalks/addinterpreter/addinterpreter.dsp) > > So with groovy, you can register a custom Variables object to intercept > accesses. If the object is already set in the scripting language, then > return it, but if it is not set, it tries to return a ZK object with the > same name (using the ZK method getFromNamespace()). > > I do not see how it could be done with the Jython API. Any ideas ? > > Best regards, > > -- > Ludovic Drolez. > > http://zaurus.palmopensource.com - The Zaurus Open Source Portal > http://www.drolez.com - Personal site - Linux and PalmOS stuff > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > |
From: Updike, C. <Cla...@jh...> - 2007-04-16 12:58:18
|
The PythonInterpreter constructor can take a dictionary object=20 to use for the namespace. I believe you could extend=20 PyStringMap (or generically, PyObject) and supply that=20 to intercept the lookup. -Clark > Subject: [Jython-users] Intercepting the access to the objects >=20 > Hi ! >=20 > I'm currently trying to add Jython support in the ZK=20 > framework (www.zkoss.org). To make this I need to have a=20 > method called, each time the scripting language tried to get=20 > the value of a variable. >=20 > For example the Groovy support in ZK is done this way: >=20 > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > import groovy.lang.Binding; > import groovy.lang.GroovyShell; > ... > public void init(Page owner, String zslang) { > super.init(owner, zslang); >=20 > _global =3D new Binding(new Variables()); > _ip =3D new GroovyShell(_global); > } > //An inner class of GroovyInterpreter > private class Variables extends HashMap { > public Object get(Object key) { > Object val =3D super.get(key); > if (val !=3D null || containsKey(key) || !(key instanceof String)) > return val; > return getFromNamespace((String)key); //provided by=20 > GenericInterpreter > } > } > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > (More can be read here: > http://www.zkoss.org/smalltalks/addinterpreter/addinterpreter.dsp) >=20 > So with groovy, you can register a custom Variables object to=20 > intercept accesses. If the object is already set in the=20 > scripting language, then return it, but if it is not set, it=20 > tries to return a ZK object with the same name (using the ZK=20 > method getFromNamespace()). >=20 > I do not see how it could be done with the Jython API. Any ideas ? >=20 > Best regards, >=20 > -- > Ludovic Drolez. |
From: Ludovic D. <ld...@de...> - 2007-04-17 08:08:06
|
On Mon, Apr 16, 2007 at 08:57:56AM -0400, Updike, Clark wrote: > The PythonInterpreter constructor can take a dictionary object > to use for the namespace. I believe you could extend > PyStringMap (or generically, PyObject) and supply that > to intercept the lookup. Many thanks for your help ! Nice to ear that it can be done with the Jython API. I first tried with BSF/Jython, but there's not such API in BSF... Best regards, Ludovic. > > -Clark > > > > Subject: [Jython-users] Intercepting the access to the objects > > > > Hi ! > > > > I'm currently trying to add Jython support in the ZK > > framework (www.zkoss.org). To make this I need to have a > > method called, each time the scripting language tried to get > > the value of a variable. > > > > For example the Groovy support in ZK is done this way: > > > > ======================================= > > import groovy.lang.Binding; > > import groovy.lang.GroovyShell; > > ... > > public void init(Page owner, String zslang) { > > super.init(owner, zslang); > > > > _global = new Binding(new Variables()); > > _ip = new GroovyShell(_global); > > } > > //An inner class of GroovyInterpreter > > private class Variables extends HashMap { > > public Object get(Object key) { > > Object val = super.get(key); > > if (val != null || containsKey(key) || !(key instanceof String)) > > return val; > > return getFromNamespace((String)key); //provided by > > GenericInterpreter > > } > > } > > ======================================= > > (More can be read here: > > http://www.zkoss.org/smalltalks/addinterpreter/addinterpreter.dsp) > > > > So with groovy, you can register a custom Variables object to > > intercept accesses. If the object is already set in the > > scripting language, then return it, but if it is not set, it > > tries to return a ZK object with the same name (using the ZK > > method getFromNamespace()). > > > > I do not see how it could be done with the Jython API. Any ideas ? > > > > Best regards, > > > > -- > > Ludovic Drolez. > > -- Ludovic Drolez. http://zaurus.palmopensource.com - The Zaurus Open Source Portal http://www.drolez.com - Personal site - Linux, Zaurus and PalmOS stuff |