# Copyright 2006 Instituto de Investigaciones Dr. José María Luis Mora / # Instituto de Investigaciones Estéticas. # See COPYING.txt and LICENSE.txt for redistribution conditions. # # D.R. 2006 Instituto de Investigaciones Dr. José María Luis Mora / # Instituto de Investigaciones Estéticas. # Véase COPYING.txt y LICENSE.txt para los términos bajo los cuales # se permite la redistribución. module RJBM require 'rjb' def RJBM.get_jars(path) d = Dir.new(path) d.entries.reject{|f| not (f =~ /.*\.jar$/)}.map{|f| path + f} end cl_path_bits = RJBM.get_jars(AppConfig.vendor_java_lib).push(AppConfig.app_java_lib) cl_path = cl_path_bits.join(File::PATH_SEPARATOR) Rjb::load(classpath = cl_path, jvmargs=["-Xmx2048m"]) @@java_classes = Hash.new def RJBM.get_java_class(class_name) if (not @@java_classes.has_key?(class_name)) @@java_classes[class_name] = Rjb::import(class_name) end @@java_classes[class_name] end module JAccess class JClassWrapper attr_accessor(:unqualified_name, :package, :full_name, :cl) def initialize(class_name) @full_name = class_name m = /^(.*)\.([a-zA-Z0-9]*)$/.match(@full_name) @package = m[1] @unqualified_name = m[2] @cl = RJBM.get_java_class(@full_name) end end def JAccess.append_features(including_obj) super def including_obj.j_interface(name) @j_interface_name = name end def including_obj.j_import(*j_class_names) @imports = Hash.new j_class_names.each do |j_class_name| j = JClassWrapper.new(j_class_name) k = j.unqualified_name.to_sym raise "Ambiguous Java import in Ruby class #{ruby_cl.to_s}" if @imports.has_key?(k) @imports[k] = j self.const_set(k, j.cl) end end def including_obj.j_has_interface? @j_interface_name ? true : false end end def j_bind java_class = self.class.instance_variable_get(:@j_interface_name) @java_obj = Rjb::bind(self, java_class) end def j @java_obj end # TODO: remove this method if it's not used def const_missing(m) imports = self.class.instance_variable_get(:@imports) JAccess.get(imports, m) end end end