コード例 #1
0
ファイル: wrappers.py プロジェクト: jni/python-javabridge
 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
コード例 #2
0
ファイル: wrappers.py プロジェクト: jni/python-javabridge
 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
コード例 #3
0
ファイル: test_wrappers.py プロジェクト: drmaize/compvision
 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]))
コード例 #4
0
 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')
コード例 #5
0
 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;"))
コード例 #6
0
 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)
コード例 #7
0
ファイル: macros.py プロジェクト: AnneCarpenter/CellProfiler
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()
コード例 #8
0
    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;"))
コード例 #9
0
 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)
コード例 #10
0
ファイル: test_jutil.py プロジェクト: er432/python-javabridge
 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()')
コード例 #11
0
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()
コード例 #12
0
 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()
コード例 #13
0
 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)
コード例 #14
0
 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()
コード例 #15
0
 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())
コード例 #16
0
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))
コード例 #17
0
 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])
コード例 #18
0
 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)
コード例 #19
0
 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;"))
コード例 #20
0
 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())
コード例 #21
0
 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")
コード例 #22
0
 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)
コード例 #23
0
    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
コード例 #24
0
 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
コード例 #25
0
 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
コード例 #26
0
    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
コード例 #27
0
ファイル: test_cpython.py プロジェクト: drmaize/compvision
    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)
コード例 #28
0
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()
コード例 #29
0
    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")
コード例 #30
0
ファイル: cpjvm.py プロジェクト: TomCab/CellProfiler
    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
コード例 #31
0
    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)
コード例 #32
0
    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")        
コード例 #33
0
    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")
コード例 #34
0
    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)
コード例 #35
0
ファイル: imagej2.py プロジェクト: erexhepa/CellProfiler
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
コード例 #36
0
ファイル: imagej2.py プロジェクト: fsun2p10/CellProfiler
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
コード例 #37
0
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()
コード例 #38
0
ファイル: macros.py プロジェクト: cdeepakroy/CellProfiler
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()
コード例 #39
0
ファイル: bioformats.py プロジェクト: nikhartman/pims
 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
コード例 #40
0
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))
コード例 #41
0
 def test_01_01_to_string(self):
     jstring = self.env.new_string_utf("Hello, world")
     self.assertEqual(javabridge.to_string(jstring), "Hello, world")
コード例 #42
0
 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')
コード例 #43
0
 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')
コード例 #44
0
 def __unicode__(self):
     """
     Just calls the toString() method.
     :rtype: str
     """
     return javabridge.to_string(self.jobject)
コード例 #45
0
 def __str__(self):
     return J.to_string(self.o)
コード例 #46
0
 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"))
コード例 #47
0
 def test_01_01_to_string(self):
     jstring = self.env.new_string_utf("Hello, world")
     self.assertEqual(javabridge.to_string(jstring), "Hello, world")
コード例 #48
0
 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')
コード例 #49
0
 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')
コード例 #50
0
 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'))
コード例 #51
0
ファイル: imagej2.py プロジェクト: fsun2p10/CellProfiler
            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)
コード例 #52
0
ファイル: imagej2.py プロジェクト: xuxuan1522/CellProfiler
                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)
コード例 #53
0
 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))
コード例 #54
0
 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"))
コード例 #55
0
ファイル: wrappers.py プロジェクト: jni/python-javabridge
 def __str__(self):
     return J.to_string(self.o)
コード例 #56
0
ファイル: wrappers.py プロジェクト: jni/python-javabridge
 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))