01: package hero.hook;
02:
03: /*
04: *
05: * TCLHook.java -
06: * Copyright (C) 2003 Ecoo Team
07: * charoy@loria.fr
08: *
09: *
10: * This program is free software; you can redistribute it and/or
11: * modify it under the terms of the GNU Lesser General Public License
12: * as published by the Free Software Foundation; either version 2
13: * of the License, or (at your option) any later version.
14: *
15: * This program is distributed in the hope that it will be useful,
16: * but WITHOUT ANY WARRANTY; without even the implied warranty of
17: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18: * GNU Lesser General Public License for more details.
19: *
20: * You should have received a copy of the GNU Lesser General Public License
21: * along with this program; if not, write to the Free Software
22: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23: */
24:
25: import hero.interfaces.BnNodeLocal;
26: import hero.util.HeroHookException;
27: import tcl.lang.Interp;
28: import tcl.lang.ReflectObject;
29: import tcl.lang.TclObject;
30:
31: public class TclHook extends Hook {
32:
33: public TclHook(String name, String event, int type) {
34: super (name, event, type);
35: }
36:
37: public void execute(Object bean, String eventName, BnNodeLocal node)
38: throws HeroHookException {
39: try {
40: Interp interp = new Interp();
41: interp.evalResource("/" + this .getName() + ".tcl");
42: TclObject tclNode = ReflectObject.newInstance(interp,
43: BnNodeLocal.class, node);
44: TclObject tclEJB = ReflectObject.newInstance(interp,
45: Object.class, bean);
46: interp.setVar("node", tclNode, 1);
47: interp.setVar("bean", tclEJB, 1);
48: interp.eval(this .getName() + "::" + eventName
49: + " $bean $node");
50: } catch (Exception t) {
51: throw new HeroHookException("Cannot execute tcl hook "
52: + t.getMessage());
53: }
54: }
55:
56: }
|