1 | package geniusweb.clienttest;
|
---|
2 |
|
---|
3 | import org.python.core.Py;
|
---|
4 | import org.python.core.PyObject;
|
---|
5 | import org.python.core.PySystemState;
|
---|
6 |
|
---|
7 | /**
|
---|
8 | * Jython Object Factory using PySystemState
|
---|
9 | */
|
---|
10 | public class JythonObjectFactory {
|
---|
11 |
|
---|
12 | private final Class interfaceType;
|
---|
13 | private final PyObject klass;
|
---|
14 |
|
---|
15 | // Constructor obtains a reference to the importer, module, and the class
|
---|
16 | // name
|
---|
17 | public JythonObjectFactory(PySystemState state, Class interfaceType, String moduleName, String className) {
|
---|
18 | this.interfaceType = interfaceType;
|
---|
19 | PyObject importer = state.getBuiltins().__getitem__(Py.newString("__import__"));
|
---|
20 | PyObject module = importer.__call__(Py.newString(moduleName));
|
---|
21 | klass = module.__getattr__(className);
|
---|
22 | System.err.println("module=" + module + ",class=" + klass);
|
---|
23 | }
|
---|
24 |
|
---|
25 | // This constructor passes through to the other constructor
|
---|
26 | public JythonObjectFactory(Class interfaceType, String moduleName, String className) {
|
---|
27 | this(new PySystemState(), interfaceType, moduleName, className);
|
---|
28 | }
|
---|
29 |
|
---|
30 | // All of the followng methods return
|
---|
31 | // a coerced Jython object based upon the pieces of information
|
---|
32 | // that were passed into the factory. The differences are
|
---|
33 | // between them are the number of arguments that can be passed
|
---|
34 | // in as arguents to the object.
|
---|
35 |
|
---|
36 | public Object createObject() {
|
---|
37 | return klass.__call__().__tojava__(interfaceType);
|
---|
38 | }
|
---|
39 |
|
---|
40 | public Object createObject(Object arg1) {
|
---|
41 | return klass.__call__(Py.java2py(arg1)).__tojava__(interfaceType);
|
---|
42 | }
|
---|
43 |
|
---|
44 | public Object createObject(Object arg1, Object arg2) {
|
---|
45 | return klass.__call__(Py.java2py(arg1), Py.java2py(arg2)).__tojava__(interfaceType);
|
---|
46 | }
|
---|
47 |
|
---|
48 | public Object createObject(Object arg1, Object arg2, Object arg3) {
|
---|
49 | return klass.__call__(Py.java2py(arg1), Py.java2py(arg2), Py.java2py(arg3)).__tojava__(interfaceType);
|
---|
50 | }
|
---|
51 |
|
---|
52 | public Object createObject(Object args[], String keywords[]) {
|
---|
53 | PyObject convertedArgs[] = new PyObject[args.length];
|
---|
54 | for (int i = 0; i < args.length; i++) {
|
---|
55 | convertedArgs[i] = Py.java2py(args[i]);
|
---|
56 | }
|
---|
57 |
|
---|
58 | return klass.__call__(convertedArgs, keywords).__tojava__(interfaceType);
|
---|
59 | }
|
---|
60 |
|
---|
61 | public Object createObject(Object... args) {
|
---|
62 | return createObject(args, Py.NoKeywords);
|
---|
63 | }
|
---|
64 |
|
---|
65 | }
|
---|