[commit] r1753 - in trunk/SDK/Java/win32com: . client
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Wed Dec 28 16:36:06 CST 2011
Author: ksmyth
Date: Wed Dec 28 16:36:05 2011
New Revision: 1753
Log:
Jython implementation of win32com.client.DispatchEx
Added:
trunk/SDK/Java/win32com/
trunk/SDK/Java/win32com/__init__.py
trunk/SDK/Java/win32com/client/
trunk/SDK/Java/win32com/client/__init__.py
Added: trunk/SDK/Java/win32com/__init__.py
==============================================================================
Added: trunk/SDK/Java/win32com/client/__init__.py
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/SDK/Java/win32com/client/__init__.py Wed Dec 28 16:36:05 2011 (r1753)
@@ -0,0 +1,164 @@
+
+import sys
+import org.isis.jaut
+jaut = org.isis.jaut
+
+CLSCTX_INPROC_SERVER = 1
+CLSCTX_INPROC_HANDLER = 2
+CLSCTX_LOCAL_SERVER = 4
+CLSCTX_INPROC = 3
+CLSCTX_SERVER = 5
+CLSCTX_ALL = 7
+CLSCTX_INPROC_SERVER16 = 8
+CLSCTX_REMOTE_SERVER = 16
+CLSCTX_INPROC_HANDLER16 = 32
+CLSCTX_RESERVED1 = 64
+CLSCTX_RESERVED2 = 128
+CLSCTX_RESERVED3 = 256
+CLSCTX_RESERVED4 = 512
+CLSCTX_NO_CODE_DOWNLOAD = 1024
+CLSCTX_RESERVED5 = 2048
+CLSCTX_NO_CUSTOM_MARSHAL = 4096
+CLSCTX_ENABLE_CODE_DOWNLOAD = 8192
+CLSCTX_NO_FAILURE_LOG = 16384
+CLSCTX_DISABLE_AAA = 32768
+CLSCTX_ENABLE_AAA = 65536
+CLSCTX_FROM_DEFAULT_CONTEXT = 131072
+
+_argkludge = { 'GetXMLInfo': (jaut.Variant.VT_BSTR, jaut.Variant.VT_BSTR, jaut.Variant.VT_NULL, jaut.Variant.VT_BSTR, jaut.Variant.VT_BSTR),
+'QueryParadigm': (jaut.Variant.VT_BSTR, jaut.Variant.VT_NULL),
+'OpenObj': (jaut.Variant.VT_UNKNOWN,),
+}
+_getterkludge = { 'Item': 1,
+'Status': 1,
+'ObjectByPath': 1,
+}
+
+_debug = False
+_dbgout = sys.stderr
+
+def _translate_java(v):
+ if isinstance(v, jaut.Dispatch):
+ return JautDispatch(v)
+ return v
+
+_vt_falses = ( jaut.Variant.VT_NULL, jaut.Variant.VT_EMPTY )
+def __nonzero__(self):
+ vt = self.getVartype()
+ if vt in _vt_falses:
+ return False
+ return True
+org.isis.jaut.Variant.__nonzero__ = __nonzero__
+del __nonzero__
+
+def _translate_variant(v):
+ if v is None:
+ return None
+ vt = v.getVartype()
+ # FIXME: just use toObject() ?
+ if _debug:
+ _dbgout.write('_translate_variant: type ' + str(vt) + "\n")
+ if vt == jaut.Variant.VT_BSTR | jaut.Variant.VT_ARRAY:
+ arr = v.getStringArray()
+ return list(arr)
+ elif vt == jaut.Variant.VT_BSTR or vt == (jaut.Variant.VT_BSTR | jaut.Variant.VT_BYREF):
+ return v.toString()
+ elif vt == jaut.Variant.VT_DISPATCH | jaut.Variant.VT_BYREF:
+ return JautDispatch(v.getDispatch())
+ elif vt == jaut.Variant.VT_DISPATCH:
+ return JautDispatch(v.getDispatch())
+ elif vt == jaut.Variant.VT_UNKNOWN | jaut.Variant.VT_BYREF:
+ return JautDispatch(v.getDispatch())
+ elif vt == 0:
+ return None
+ elif vt == jaut.Variant.VT_I4:
+ return v.getInt()
+ # print 'yyy' + repr(v) + repr(type(v)) + '...' + str(vt)
+ return v
+
+class JautDispatch(object):
+ @staticmethod
+ def CoCreateInstance(progid, clsctx):
+ dispatch = jaut.Dispatch()
+ dispatch.attachNewInstance(progid, clsctx)
+ return JautDispatch(dispatch)
+
+ def __init__(self, dispatch, **kwargs):
+ super(JautDispatch, self).__init__(self, **kwargs)
+ super(JautDispatch, self).__setattr__('dispatch', dispatch)
+
+ def __nonzero__(self):
+ return self.dispatch.pDispatch != 0
+
+ def __iter__(self):
+ class JautIter(object):
+ def __iter__(self):
+ return self
+ def next():
+ pass
+ # FIXME: call this by DISPID_NEWENUM==-4 instead
+ # FIXME: need jaut.dll support for this
+ # it = self.dispatch.get('_NewEnum')
+
+ class GMEIter(object):
+ def __iter__(self):
+ return self
+ def next(self):
+ if self.i > self.coll.Count:
+ raise StopIteration()
+ ret = self.coll.Item(self.i)
+ self.i = self.i + 1
+ return ret
+ iter = GMEIter()
+ iter.i = 1
+ iter.coll = self
+ return iter
+
+ def __setattr__(self, name, value):
+ self.dispatch.put(name, value)
+
+ def __getattr__(self, name):
+ # fail fast
+ id = self.dispatch.getIDOfName(name)
+ try:
+ ret = self.dispatch.get(name)
+ #if isinstance(ret, jaut.Dispatch):
+ # return JautDispatch(ret)
+ return _translate_java(ret)
+ except org.isis.jaut.ComException:
+ pass
+ if _debug:
+ _dbgout.write('__getattr__: name ' + name + "\n")
+ def invoke(*args):
+ import time
+ def arg_map(arg):
+ if isinstance(arg, JautDispatch):
+ return arg.dispatch
+ return arg
+ args = [arg_map(arg) for arg in args]
+ if name == 'Status': # workaround error in typelib: propget without retval
+ args = (jaut.Variant(jaut.Variant.create(jaut.Variant.VT_I4)),)
+ self.dispatch.invoke(name, jaut.Dispatch.DISPATCH_PROPERTYGET, args, None)
+ return args[0].getInt()
+ if name in _getterkludge:
+ return _translate_java(self.dispatch.invoke(name, jaut.Dispatch.DISPATCH_PROPERTYGET, args, None))
+ if name in _argkludge:
+ len_args = len(args)
+ args = list(args)
+ def kludgearg(t):
+ if t == jaut.Variant.VT_BSTR|jaut.Variant.VT_ARRAY:
+ return jaut.Variant()
+ return None
+ args.extend([jaut.Variant(jaut.Variant.create(t)) for t in _argkludge[name]])
+ self.dispatch.callSub(name, args)
+ ret = map(_translate_variant, args[len_args:])
+ if len(ret) == 1:
+ return ret[0]
+ return ret
+ return _translate_java(self.dispatch.call(name, args))
+
+ return invoke
+
+
+def DispatchEx(progid, clsctx=CLSCTX_LOCAL_SERVER):
+ return JautDispatch.CoCreateInstance(progid, clsctx)
More information about the gme-commit
mailing list