def __init__(self, class_name): '''Initialize to wrap a class name :param class_name: name of class in dotted form, e.g. java.lang.Integer ''' STATIC = J.get_static_field("java/lang/reflect/Modifier", "STATIC", "I") self.cname = class_name.replace(".", "/") self.klass = J.get_class_wrapper(J.class_for_name(class_name), True) self.static_methods = {} env = J.get_env() jmethods = env.get_object_array_elements(self.klass.getMethods()) methods = {} for jmethod in jmethods: if (J.call(jmethod, "getModifiers", "()I") & STATIC) != STATIC: continue method = J.get_method_wrapper(jmethod) name = method.getName() if name not in methods: methods[name] = [] fn = lambda naame=name: lambda *args: self.__call_static(naame, *args) fn = fn() fn.__doc__ = J.to_string(jmethod) setattr(self, name, fn) else: fn = getattr(self, name) fn.__doc__ = fn.__doc__ +"\n"+J.to_string(jmethod) methods[name].append(method) self.methods = methods
def __init__(self, o): '''Initialize the JWrapper with a Java object :param o: a Java object (class = JB_Object) ''' STATIC = J.get_static_field("java/lang/reflect/Modifier", "STATIC", "I") self.o = o self.class_wrapper = J.get_class_wrapper(o) env = J.get_env() jmethods = env.get_object_array_elements(self.class_wrapper.getMethods()) methods = {} for jmethod in jmethods: if (J.call(jmethod, "getModifiers", "()I") & STATIC) == STATIC: continue method = J.get_method_wrapper(jmethod) name = method.getName() if name not in methods: methods[name] = [] fn = lambda naame=name: lambda *args: self.__call(naame, *args) fn = fn() fn.__doc__ = J.to_string(jmethod) setattr(self, name, fn) else: fn = getattr(self, name) fn.__doc__ = fn.__doc__ +"\n"+J.to_string(jmethod) methods[name].append(method) self.methods = methods
def test_02_05_constructor_varargs(self): # Regression test of issue #41 # args = ("foo", "bar") f = J.JClassWrapper( "javax.swing.filechooser.FileNameExtensionFilter")("baz", *args) exts = J.get_env().get_object_array_elements(f.getExtensions().o) self.assertEqual(args[0], J.to_string(exts[0])) self.assertEqual(args[1], J.to_string(exts[1]))
def test_03_09_cw_get_method(self): sclass = javabridge.class_for_name('java.lang.String') iclass = javabridge.get_static_field('java/lang/Integer', 'TYPE', 'Ljava/lang/Class;') c = javabridge.get_class_wrapper('java.lang.String') m = c.getMethod('charAt', [ iclass ]) self.assertEqual(javabridge.to_string(javabridge.call(m, 'getReturnType', '()Ljava/lang/Class;')), 'char') m = c.getMethod('concat', [ sclass]) self.assertEqual(javabridge.to_string(javabridge.call(m, 'getReturnType', '()Ljava/lang/Class;')), 'class java.lang.String')
def custom_properties(self): """ Obtains the currently set custom properties file. :return: the custom properties file :rtype: str """ return javabridge.to_string(javabridge.call(self.jobject, "getCustomPropsFile", "()Ljava/io/File;"))
def __str__(self): """ Calls the toString() method of the java object. :return: the result of the toString() method :rtype: str """ return javabridge.to_string(self.jobject)
def get_commands(): """Return a list of the available command strings""" hashtable = J.static_call('ij/Menus', 'getCommands', '()Ljava/util/Hashtable;') if hashtable is None: # # This is a little bogus, but works - trick IJ into initializing # execute_command("pleaseignorethis") hashtable = J.static_call('ij/Menus', 'getCommands', '()Ljava/util/Hashtable;') if hashtable is None: return [] keys = J.call(hashtable, "keys", "()Ljava/util/Enumeration;") keys = J.jenumeration_to_string_list(keys) values = J.call(hashtable, "values", "()Ljava/util/Collection;") values = [J.to_string(x) for x in J.iterate_java( J.call(values, 'iterator', "()Ljava/util/Iterator;"))] class CommandList(list): def __init__(self): super(CommandList, self).__init__(keys) self.values = values return CommandList()
def load_file(self, dfile, incremental=False): """ Loads the specified file and returns the Instances object. In case of incremental loading, only the structure. :param dfile: the file to load :type dfile: str :param incremental: whether to load the dataset incrementally :type incremental: bool :return: the full dataset or the header (if incremental) :rtype: Instances :raises Exception: if the file does not exist """ self.enforce_type(self.jobject, "weka.core.converters.FileSourcedConverter") self.incremental = incremental if not javabridge.is_instance_of(dfile, "Ljava/io/File;"): dfile = javabridge.make_instance( "Ljava/io/File;", "(Ljava/lang/String;)V", javabridge.get_env().new_string_utf(str(dfile))) javabridge.call(self.jobject, "reset", "()V") # check whether file exists, otherwise previously set file gets loaded again sfile = javabridge.to_string(dfile) if not os.path.exists(sfile): raise Exception("Dataset file does not exist: " + str(sfile)) javabridge.call(self.jobject, "setFile", "(Ljava/io/File;)V", dfile) if incremental: self.structure = Instances(javabridge.call(self.jobject, "getStructure", "()Lweka/core/Instances;")) return self.structure else: return Instances(javabridge.call(self.jobject, "getDataSet", "()Lweka/core/Instances;"))
def test_08_11_toArray(self): c1 = javabridge.get_collection_wrapper(javabridge.make_instance("java/util/HashSet", "()V")) c1.add("Foo") c1.add("Bar") result = [javabridge.to_string(x) for x in c1.toArray()] self.assertIn("Foo", result) self.assertIn("Bar", result)
def test_03_05_cw_get_annotations(self): c = javabridge.get_class_wrapper('java.security.Identity') annotations = c.getAnnotations() annotations = javabridge.get_env().get_object_array_elements( annotations) self.assertEqual(len(annotations), 1) self.assertEqual(javabridge.to_string(annotations[0]), '@java.lang.Deprecated()')
def popup_script_dlg(canvas): joptionpane = javabridge.JClassWrapper("javax.swing.JOptionPane") jresult = joptionpane.showInputDialog("Enter a script command") if jresult is not None: result = javabridge.to_string(jresult) axes = canvas.figure.axes[0] eval(result, globals(), locals()) canvas.draw()
def test_02_01_show_get_and_hide(self): file_name = os.path.join(self.root_dir, "ExampleSBSImages", "Channel1-01-A-01.tif") ip = I.load_imageplus(file_name) ip.show() window = ip.getWindow() self.assertTrue(J.to_string(window).startswith("Channel1-01-A-01.tif")) ip.hide()
def test_08_11_toArray(self): c1 = javabridge.get_collection_wrapper( javabridge.make_instance("java/util/HashSet", "()V")) c1.add("Foo") c1.add("Bar") result = [javabridge.to_string(x) for x in c1.toArray()] self.assertIn("Foo", result) self.assertIn("Bar", result)
def test_02_01_show_get_and_hide(self): file_name = os.path.join( self.root_dir, "ExampleSBSImages", "Channel1-01-A-01.tif") ip = I.load_imageplus(file_name) ip.show() window = ip.getWindow() self.assertTrue(J.to_string(window).startswith("Channel1-01-A-01.tif")) ip.hide()
def test_01_07_get_dictionary_wrapper(self): properties = javabridge.static_call("java/lang/System", "getProperties", "()Ljava/util/Properties;") d = javabridge.get_dictionary_wrapper(properties) self.assertTrue(d.size() > 10) self.assertFalse(d.isEmpty()) keys = javabridge.get_enumeration_wrapper(d.keys()) values = javabridge.get_enumeration_wrapper(d.elements()) n_elems = d.size() for i in range(n_elems): self.assertTrue(keys.hasMoreElements()) key = javabridge.to_string(keys.nextElement()) self.assertTrue(values.hasMoreElements()) value = javabridge.to_string(values.nextElement()) self.assertEqual(javabridge.to_string(d.get(key)), value) self.assertFalse(keys.hasMoreElements()) self.assertFalse(values.hasMoreElements())
def do_evaluate(payload): '''Evaluate a Python command payload: first member is Python command string, second is local context ''' logger.info("Evaluating script") filename = "scripting-cpython" try: command = J.to_string(payload[0]) context = context_to_locals(payload[1]) logger.debug("Script:\n%s" % command) # # OK, the game plan is a little difficult here: # # use AST to parse (see https://docs.python.org/2.7/library/ast.html) # The AST object's body is a list of statements. # If the last body element is an ast.Expr, then # we execute all of the statements except the last # and then we wrap the last as an ast.Expression # and evaluate it. # a = ast.parse(command) if isinstance(a.body[-1], ast.Expr): expr = a.body[-1] del a.body[-1] else: expr = a.parse("None").body[0] filename = context.get("javax.scripting.filename", "scripting-cpython") code = compile(a, filename, mode="exec") exec(code, __builtins__.__dict__, context) code = compile(ast.Expression(expr.value), filename, mode="eval") result = eval(code, __builtins__.__dict__, context) logger.debug("Script evaluated") return J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); var payload = new java.util.ArrayList(); payload.add(result); new CPythonScriptEngine.Message( CPythonScriptEngine.EngineCommands.EVALUATE_RESULT, payload); """, dict(result=result)) except: logger.info("Exception caught during eval", exc_info=True) e_type, e, e_tb = sys.exc_info() return J.run_script( """ importPackage(Packages.org.scijava.plugins.scripting.cpython); var exception = new javax.script.ScriptException( java.lang.String.format('Python exception: %s', e), filename, line_number); var payload = new java.util.ArrayList(); payload.add(exception); new CPythonScriptEngine.Message( CPythonScriptEngine.EngineCommands.EXCEPTION, payload); """, dict(e=repr(e), filename=filename, line_number=e_tb.tb_lineno))
def test_01_08_jenumeration_to_string_list(self): properties = javabridge.static_call("java/lang/System", "getProperties", "()Ljava/util/Properties;") d = javabridge.get_dictionary_wrapper(properties) keys = javabridge.jenumeration_to_string_list(d.keys()) enum = javabridge.get_enumeration_wrapper(d.keys()) for i in range(d.size()): key = javabridge.to_string(enum.nextElement()) self.assertEqual(key, keys[i])
def test_01_09_jdictionary_to_string_dictionary(self): properties = javabridge.static_call("java/lang/System", "getProperties", "()Ljava/util/Properties;") d = javabridge.get_dictionary_wrapper(properties) pyd = javabridge.jdictionary_to_string_dictionary(properties) keys = javabridge.jenumeration_to_string_list(d.keys()) for key in keys: value = javabridge.to_string(d.get(key)) self.assertEqual(pyd[key], value)
def custom_properties(self): """ Obtains the currently set custom properties file. :return: the custom properties file :rtype: str """ return javabridge.to_string( javabridge.call(self.jobject, "getCustomPropsFile", "()Ljava/io/File;"))
def test_01_02_make_instance(self): jobject = javabridge.make_instance("java/lang/Object", "()V") self.assertTrue( javabridge.to_string(jobject).startswith("java.lang.Object")) # <AK> added with self.assertRaisesRegex( javabridge.JavaError, 'Could not find constructor with signature = ' '"\(\)V"'): jobject = javabridge.make_instance("java/lang/Class", "()V")
def test_01_06_get_enumeration_wrapper(self): properties = javabridge.static_call("java/lang/System", "getProperties", "()Ljava/util/Properties;") keys = javabridge.call(properties, "keys", "()Ljava/util/Enumeration;") enum = javabridge.get_enumeration_wrapper(keys) has_java_vm_name = False while(enum.hasMoreElements()): key = javabridge.to_string(enum.nextElement()) if key == "java.vm.name": has_java_vm_name = True self.assertTrue(has_java_vm_name)
def load_file(self, dfile, incremental=False, class_index=None): """ Loads the specified file and returns the Instances object. In case of incremental loading, only the structure. :param dfile: the file to load :type dfile: str :param incremental: whether to load the dataset incrementally :type incremental: bool :param class_index: the class index string to use ('first', 'second', 'third', 'last-2', 'last-1', 'last' or 1-based index) :type class_index: str :return: the full dataset or the header (if incremental) :rtype: Instances :raises Exception: if the file does not exist """ self.enforce_type(self.jobject, "weka.core.converters.FileSourcedConverter") self.incremental = incremental if not javabridge.is_instance_of(dfile, "Ljava/io/File;"): dfile = javabridge.make_instance( "Ljava/io/File;", "(Ljava/lang/String;)V", javabridge.get_env().new_string_utf(str(dfile))) javabridge.call(self.jobject, "reset", "()V") # check whether file exists, otherwise previously set file gets loaded again sfile = javabridge.to_string(dfile) if not os.path.exists(sfile): raise Exception("Dataset file does not exist: " + str(sfile)) javabridge.call(self.jobject, "setFile", "(Ljava/io/File;)V", dfile) if incremental: self.structure = Instances( javabridge.call(self.jobject, "getStructure", "()Lweka/core/Instances;")) result = self.structure else: result = Instances( javabridge.call(self.jobject, "getDataSet", "()Lweka/core/Instances;")) if class_index is not None: if class_index == 'first': result.class_index = 0 elif class_index == 'second': result.class_index = 1 elif class_index == 'third': result.class_index = 2 elif class_index == 'last-2': result.class_index = result.num_attributes - 3 elif class_index == 'last-1': result.class_index = result.num_attributes - 2 elif class_index == 'last': result.class_index = result.num_attributes - 1 else: result.class_index = int(class_index) return result
def __init__(self, o): '''Initialize the JWrapper with a Java object :param o: a Java object (class = JB_Object) ''' STATIC = J.get_static_field("java/lang/reflect/Modifier", "STATIC", "I") self.o = o self.class_wrapper = J.get_class_wrapper(o) env = J.get_env() jmethods = env.get_object_array_elements( self.class_wrapper.getMethods()) methods = {} for jmethod in jmethods: if (J.call(jmethod, "getModifiers", "()I") & STATIC) == STATIC: continue method = J.get_method_wrapper(jmethod) name = method.getName() if name not in methods: methods[name] = [] fn = lambda naame=name: lambda *args: self.__call(naame, *args) fn = fn() fn.__doc__ = J.to_string(jmethod) setattr(self, name, fn) else: fn = getattr(self, name) fn.__doc__ = fn.__doc__ + "\n" + J.to_string(jmethod) methods[name].append(method) jfields = env.get_object_array_elements( self.class_wrapper.getFields(self)) field_class = env.find_class("java/lang/reflect/Field") method_id = env.get_method_id(field_class, "getName", "()Ljava/lang/String;") self.field_names = [ env.get_string_utf(env.call_method(o, method_id)) for o in jfields ] self.methods = methods
def __init__(self, class_name): '''Initialize to wrap a class name :param class_name: name of class in dotted form, e.g. java.lang.Integer ''' STATIC = J.get_static_field("java/lang/reflect/Modifier", "STATIC", "I") self.cname = class_name.replace(".", "/") self.klass = J.get_class_wrapper(J.class_for_name(class_name), True) self.static_methods = {} env = J.get_env() jmethods = env.get_object_array_elements(self.klass.getMethods()) methods = {} for jmethod in jmethods: if (J.call(jmethod, "getModifiers", "()I") & STATIC) != STATIC: continue method = J.get_method_wrapper(jmethod) name = method.getName() if name not in methods: methods[name] = [] fn = lambda naame=name: lambda *args: self.__call_static( naame, *args) fn = fn() fn.__doc__ = J.to_string(jmethod) setattr(self, name, fn) else: fn = getattr(self, name) fn.__doc__ = fn.__doc__ + "\n" + J.to_string(jmethod) methods[name].append(method) jfields = env.get_object_array_elements(self.klass.getFields(self)) field_class = env.find_class("java/lang/reflect/Field") method_id = env.get_method_id(field_class, "getName", "()Ljava/lang/String;") self.field_names = [ env.get_string_utf(env.call_method(o, method_id)) for o in jfields ] self.methods = methods
def get_class_list(): "Return a wrapped instance of loci.formats.ClassList" env = javabridge.get_env() class_list = old_get_class_list() rais_classname = 'loci/common/RandomAccessInputStream' # # Move any class to the back that thinks it can read garbage # fd, path = tempfile.mkstemp( suffix=".garbage", dir=cellprofiler.preferences.get_temporary_directory()) stream = None try: os.write(fd, "This is not an image file") os.fsync(fd) stream = javabridge.make_instance(rais_classname, '(Ljava/lang/String;)V', path) problem_classes = [] for klass in env.get_object_array_elements( class_list.get_classes()): try: instance = javabridge.call(klass, "newInstance", "()Ljava/lang/Object;") can_read_garbage = javabridge.call( instance, "isThisType", "(L%s;)Z" % rais_classname, stream) if can_read_garbage: problem_classes.append(klass) class_list.remove_class(klass) except: logger.info("Caught exception in %s.isThisType", javabridge.to_string(klass)) finally: os.close(fd) javabridge.call(stream, "close", "()V") os.remove(path) for classname in ("loci.formats.in.FlowSightReader", "loci.formats.in.IM3Reader"): try: klass = javabridge.class_for_name(classname) class_list.add_class(klass) except: logger.warn("Could not find Bio-formats reader %s" % classname, exc_info=1) for klass in problem_classes: class_list.add_class(klass) return class_list
def test_01_03_globals(self): jglobals = javabridge.JClassWrapper('java.util.HashMap')() jref = javabridge.JClassWrapper('java.util.ArrayList')() jglobals.put("numerator", "6") jglobals.put("denominator", "2") jglobals.put("answer", jref.o) self.cpython.execute(""" global javabridge import javabridge def fn(): result = int(numerator) / int(denominator) javabridge.call(answer, "add", "(Ljava/lang/Object;)Z", str(result)) fn() """, None, jglobals.o) self.assertEqual(float(javabridge.to_string(jref.get(0))), 3)
def engine(q_request, q_response): logger.info("Starting script engine thread") J.attach() while True: try: msg = J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); q_request.take();""", dict(q_request=q_request)) if logger.level <= logging.INFO: logger.info("Received engine request: %s", J.to_string(msg)) payload = J.get_collection_wrapper( J.run_script("msg.payload", dict(msg=msg))) if J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); msg.command==CPythonScriptEngine.EngineCommands.EXECUTE; """, dict(msg=msg)): response = do_execute(payload) elif J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); msg.command==CPythonScriptEngine.EngineCommands.EVALUATE; """, dict(msg=msg)): response = do_evaluate(payload) elif J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); msg.command==CPythonScriptEngine.EngineCommands.CLOSE_ENGINE; """, dict(msg=msg)): logger.info("Exiting script engine thread after close request") break else: logger.warn( "Received unknown command: %s" % J.run_script("msg.command.toString()", dict(msg=msg))) response = J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); var exception = new java.lang.RuntimeException( java.lang.String.format('Unknown command: %s', msg.command.toString())); var payload = new java.util.ArrayList(); payload.add(exception); new CPythonScriptEngine.Message( CPythonScriptEngine.EngineCommands.EXCEPTION, payload); """, dict(msg=msg)) J.run_script("q_response.put(response);", dict(q_response=q_response, response=response)) except: # To do: how to handle failure, probably from .take() # Guessing that someone has managed to interrupt our thread logger.warn("Exiting script engine thread", exc_info=True) J.detach()
def test_01_03_globals(self): jglobals = javabridge.JClassWrapper('java.util.HashMap')() jref = javabridge.JClassWrapper('java.util.ArrayList')() jglobals.put("numerator", "6") jglobals.put("denominator", "2") jglobals.put("answer", jref.o) self.cpython.execute( """ global javabridge import javabridge def fn(): result = int(numerator) / int(denominator) javabridge.call(answer, "add", "(Ljava/lang/Object;)Z", str(result)) fn() """, None, jglobals.o) self.assertEqual(javabridge.to_string(jref.get(0)), "3")
def get_class_list(): "Return a wrapped instance of loci.formats.ClassList" env = javabridge.get_env() class_list = old_get_class_list() rais_classname = 'loci/common/RandomAccessInputStream' # # Move any class to the back that thinks it can read garbage # fd, path = tempfile.mkstemp(suffix=".garbage", dir=cpprefs.get_temporary_directory()) stream = None try: os.write(fd, "This is not an image file") os.fsync(fd) stream = javabridge.make_instance( rais_classname, '(Ljava/lang/String;)V', path) problem_classes = [] for klass in env.get_object_array_elements(class_list.get_classes()): try: instance = javabridge.call( klass, "newInstance", "()Ljava/lang/Object;") can_read_garbage = javabridge.call( instance, "isThisType", "(L%s;)Z" % rais_classname, stream) if can_read_garbage: problem_classes.append(klass) class_list.remove_class(klass) except: logger.info("Caught exception in %s.isThisType", javabridge.to_string(klass)) finally: os.close(fd) javabridge.call(stream, "close", "()V") os.remove(path) for classname in ("loci.formats.in.FlowSightReader", "loci.formats.in.IM3Reader"): try: klass = javabridge.class_for_name(classname) class_list.add_class(klass) except: logger.warn("Could not find Bio-formats reader %s" % classname, exc_info=1) for klass in problem_classes: class_list.add_class(klass) return class_list
def test_01_02_locals(self): jlocals = javabridge.JClassWrapper('java.util.HashMap')() jref = javabridge.JClassWrapper('java.util.ArrayList')() jlocals.put("numerator", "6") jlocals.put("denominator", "2") code = """ global javabridge import javabridge def fn(numerator, denominator, answer): result = int(numerator) / int(denominator) javabridge.call(answer, "add", "(Ljava/lang/Object;)Z", str(result)) fn(numerator, denominator, answer) """ jlocals.put("code", code) jlocals.put("answer", jref.o) self.cpython.execute(code, jlocals.o, None) self.assertEqual(float(javabridge.to_string(jref.get(0))), 3)
def test_01_04_globals_equals_locals(self): jglobals = javabridge.JClassWrapper('java.util.HashMap')() jref = javabridge.JClassWrapper('java.util.ArrayList')() jglobals.put("numerator", "6") jglobals.put("denominator", "2") jglobals.put("answer", jref.o) # # The import will be added to "locals", but that will be the globals. # self.cpython.execute(""" import javabridge def fn(): result = int(numerator) / int(denominator) javabridge.call(answer, "add", "(Ljava/lang/Object;)Z", str(result)) fn() """, jglobals.o, jglobals.o) self.assertEqual(javabridge.to_string(jref.get(0)), "3")
def test_01_02_locals(self): jlocals = javabridge.JClassWrapper('java.util.HashMap')() jref = javabridge.JClassWrapper('java.util.ArrayList')() jlocals.put("numerator", "6") jlocals.put("denominator", "2") code = """ global javabridge import javabridge def fn(numerator, denominator, answer): result = int(numerator) / int(denominator) javabridge.call(answer, "add", "(Ljava/lang/Object;)Z", str(result)) fn(numerator, denominator, answer) """ jlocals.put("code", code) jlocals.put("answer", jref.o) self.cpython.execute(code, jlocals.o, None) self.assertEqual(javabridge.to_string(jref.get(0)), "3")
def test_01_04_globals_equals_locals(self): jglobals = javabridge.JClassWrapper('java.util.HashMap')() jref = javabridge.JClassWrapper('java.util.ArrayList')() jglobals.put("numerator", "6") jglobals.put("denominator", "2") jglobals.put("answer", jref.o) # # The import will be added to "locals", but that will be the globals. # self.cpython.execute( """ import javabridge def fn(): result = int(numerator) / int(denominator) javabridge.call(answer, "add", "(Ljava/lang/Object;)Z", str(result)) fn() """, jglobals.o, jglobals.o) self.assertEqual(float(javabridge.to_string(jref.get(0))), 3)
def calculate_transpose(actual_axes, desired_axes=None): '''Calculate the transpose tuple that converts the actual orientation to the desired actual_axes - a list of the AxisType arguments as fetched from a display, ImgPlus, view or overlay desired_axes - the desired orientation. By default, this is i,j = Y, X ''' if desired_axes is None: desired_axes = [ Axes().Y, Axes().X] if len(actual_axes) > 2: desired_axes.append(Axes().CHANNEL) transpose = [] for axis in desired_axes: matches = [i for i, actual_axis in enumerate(actual_axes) if J.call(actual_axis, "equals", "(Ljava/lang/Object;)Z", axis)] if len(matches) != 1: raise ValueError("No match for %s axis" % J.to_string(axis)) transpose.append(matches[0]) return transpose
def engine_requester(): J.attach() while True: try: msg = J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); CPythonScriptEngine.engineRequestQueue.take();""") if logger.level <= logging.INFO: logger.info("Received engine request: %s", J.to_string(msg)) payload = J.get_collection_wrapper( J.run_script("msg.payload", dict(msg=msg))) if J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); msg.command==CPythonScriptEngine.EngineCommands.NEW_ENGINE; """, dict(msg=msg)): do_new_engine(payload) elif J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); msg.command==CPythonScriptEngine.EngineCommands.CLOSE_SERVICE; """, dict(msg=msg)): logger.info("Exiting script service thread in response to " "termination request") break else: J.run_script( """importPackage(Packages.org.scijava.plugins.scripting.cpython); var exception = new java.lang.RuntimeException( java.lang.String.format('Unknown command: %s', msg.command.toString())); var payload = new java.util.ArrayList(); payload.add(exception); var response = new CPythonScriptEngine.Message( CPythonScriptEngine.EngineCommands.EXCEPTION, payload); CPythonScriptEngine.engineResponseQueue.put(response); """) except: # To do: how to handle failure, probably from .take() # Guessing that someone has managed to interrupt our thread logger.warn("Exiting script service thread", exc_info=True) J.detach()
def get_commands(): '''Return a list of the available command strings''' hashtable = J.static_call('ij/Menus', 'getCommands', '()Ljava/util/Hashtable;') if hashtable is None: # # This is a little bogus, but works - trick IJ into initializing # execute_command("pleaseignorethis") hashtable = J.static_call('ij/Menus', 'getCommands', '()Ljava/util/Hashtable;') if hashtable is None: return [] keys = J.call(hashtable, "keys", "()Ljava/util/Enumeration;") keys = J.jenumeration_to_string_list(keys) values = J.call(hashtable, "values", "()Ljava/util/Collection;") values = [J.to_string(x) for x in J.iterate_java( J.call(values, 'iterator', "()Ljava/util/Iterator;"))] class CommandList(list): def __init__(self): super(CommandList, self).__init__(keys) self.values = values return CommandList()
def wrap_md(fn, name=None, paramcount=None, *args): if len(args) != paramcount: # raise sensible error for wrong number of arguments raise TypeError(('{0}() takes exactly {1} arguments ({2} ' + 'given)').format(name, paramcount, len(args))) try: jw = fn(*args) except javabridge.JavaException as e: if log is not None: print(javabridge.to_string(log)) javabridge.call(log, 'reset', '()V') raise e if jw is None or jw == '': return None # convert value to int, float, or string jw = str(jw) try: return int(jw) except ValueError: try: return float(jw) except ValueError: return jw
def suppressMsgs(): """ supress too many messages from javabridge """ # https://github.com/LeeKamentsky/python-javabridge/issues/37 java_stack = javabridge.make_instance('java/io/ByteArrayOutputStream', "()V") java_stack_ps = javabridge.make_instance('java/io/PrintStream', "(Ljava/io/OutputStream;)V", java_stack) javabridge.static_call('Ljava/lang/System;', "setErr", '(Ljava/io/PrintStream;)V', java_stack_ps) java_out = javabridge.make_instance('java/io/ByteArrayOutputStream', "()V") java_out_ps = javabridge.make_instance('java/io/PrintStream', "(Ljava/io/OutputStream;)V", java_out) javabridge.static_call('Ljava/lang/System;', "setOut", '(Ljava/io/PrintStream;)V', java_out_ps) javabridge.run_script( 'java.lang.System.out.println("This is java system.out!");') try: javabridge.run_script('this/raises/an/exception;') except javabridge.JavaException: print('\n\nJava stdErr: ' + javabridge.to_string(java_stack))
def test_01_01_to_string(self): jstring = self.env.new_string_utf("Hello, world") self.assertEqual(javabridge.to_string(jstring), "Hello, world")
def test_04_03_field_type(self): c = javabridge.get_class_wrapper('java.lang.Byte') f = javabridge.get_field_wrapper(c.getField('MAX_VALUE')) t = f.getType() self.assertEqual(javabridge.to_string(t), 'byte')
def test_04_01_field_get(self): c = javabridge.get_class_wrapper('java.lang.Byte') f = javabridge.get_field_wrapper(c.getField('MAX_VALUE')) v = f.get(None) self.assertEqual(javabridge.to_string(v), '127')
def __unicode__(self): """ Just calls the toString() method. :rtype: str """ return javabridge.to_string(self.jobject)
def __str__(self): return J.to_string(self.o)
def test_01_02_make_instance(self): jobject = javabridge.make_instance("java/lang/Object", "()V") self.assertTrue(javabridge.to_string(jobject).startswith("java.lang.Object"))
def test_03_05_cw_get_annotations(self): c = javabridge.get_class_wrapper('java.security.Identity') annotations = c.getAnnotations() annotations = javabridge.get_env().get_object_array_elements(annotations) self.assertEqual(len(annotations), 1) self.assertTrue(javabridge.to_string(annotations[0]).startswith('@java.lang.Deprecated'))
script = """ new java.lang.Runnable() { run: function() { o.%s(%s); } }; """ % (method, ",".join(["arg%d" % i for i in range(len(args))])) d = dict([("arg%d" % i, arg) for i, arg in enumerate(args)]) d["o"] = self.o future = J.make_future_task(J.run_script(script, d)) J.execute_future_in_main_thread(future) return future.get() if doc is None: doc = "Run the %s method in the UI thread" % method fn.__doc__ = doc fn.__name__ = method return fn if __name__=="__main__": jar_dir = os.path.join(os.path.split(__file__)[0], "jars") classpath = os.pathsep.join([ os.path.join(jar_dir, filename) for filename in os.listdir(jar_dir) if filename.endswith(".jar")]) J.start_vm(["-Djava.class.path="+classpath]) my_context = create_context(REQUIRED_SERVICES) module_service = get_module_service(my_context) module_infos = module_service.getModules() for module_info in module_infos: print J.to_string(module_info.o)
run: function() { o.%s(%s); } }; """ % (method, ",".join(["arg%d" % i for i in range(len(args))])) d = dict([("arg%d" % i, arg) for i, arg in enumerate(args)]) d["o"] = self.o future = J.make_future_task(J.run_script(script, d)) J.execute_future_in_main_thread(future) return future.get() if doc is None: doc = "Run the %s method in the UI thread" % method fn.__doc__ = doc fn.__name__ = method return fn if __name__ == "__main__": jar_dir = os.path.join(os.path.split(__file__)[0], "jars") classpath = os.pathsep.join([ os.path.join(jar_dir, filename) for filename in os.listdir(jar_dir) if filename.endswith(".jar") ]) J.start_vm(["-Djava.class.path=" + classpath]) my_context = create_context(REQUIRED_SERVICES) module_service = get_module_service(my_context) module_infos = module_service.getModules() for module_info in module_infos: print J.to_string(module_info.o)
def __repr__(self): classname = J.call(J.call(self.o, "getClass", "()Ljava/lang/Class;"), "getName", "()Ljava/lang/String;") return "Instance of %s: %s" % (classname, J.to_string(self.o))
def test_01_14_get_processor(self): file_name = os.path.join( self.root_dir, "ExampleSBSImages", "Channel1-01-A-01.tif") ip = I.load_imageplus(file_name) p = ip.getProcessor() self.assertTrue(J.to_string(p).startswith("ip"))