Class: Luruju::JudeApiBuilder
- Inherits:
-
Object
- Object
- Luruju::JudeApiBuilder
- Defined in:
- lib/luruju/jude_api.rb
Constant Summary collapse
- CLASS_DEFAULT_METHODS =
Class.methods.clone
Instance Method Summary collapse
- #build(java_parent, java_getter) ⇒ Object
- #build_array(java_obj, java_getter) ⇒ Object
- #build_judeapi(jude_obj, jude_class) ⇒ Object
- #define_judeapi_class(java_class) ⇒ Object
- #define_judeapi_method(judeapi_class, java_method) ⇒ Object
-
#initialize ⇒ JudeApiBuilder
constructor
A new instance of JudeApiBuilder.
- #is_jude_class?(java_class) ⇒ Boolean
- #is_jude_named_element?(jude_obj) ⇒ Boolean
Constructor Details
#initialize ⇒ JudeApiBuilder
Returns a new instance of JudeApiBuilder.
28 29 30 |
# File 'lib/luruju/jude_api.rb', line 28 def initialize @already_builded = Hash.new end |
Instance Method Details
#build(java_parent, java_getter) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/luruju/jude_api.rb', line 32 def build(java_parent, java_getter) begin java_obj = java_parent.send(java_getter.getName) rescue NativeException => e # p "Warning(#{__FILE__},#{__LINE__}) " + java_getter.getName end return nil if java_obj == nil java_return_class = java_getter.getReturnType if is_jude_class?(java_return_class) return build_judeapi(java_obj, java_return_class) elsif java_return_class.isArray return build_array(java_obj, java_getter) else return java_obj end end |
#build_array(java_obj, java_getter) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/luruju/jude_api.rb', line 52 def build_array(java_obj, java_getter) comp_type = java_getter.getReturnType.getComponentType if is_jude_class?(comp_type) jude_objects = Array.new java_obj.each {|i| jude_objects << build_judeapi(i, comp_type) } return jude_objects else return java_obj.to_a end end |
#build_judeapi(jude_obj, jude_class) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/luruju/jude_api.rb', line 65 def build_judeapi(jude_obj, jude_class) if is_jude_named_element?(jude_obj) and @already_builded.key?(jude_obj.getId) return @already_builded[jude_obj.getId] end raise "UnExpected." + jude_obj.getClass if jude_obj.getClass.getInterfaces.length > 1 interface = jude_obj.getClass.getInterfaces[0] judeapi_class = define_judeapi_class(interface) judeapi_obj = judeapi_class.new @already_builded[jude_obj.getId] = judeapi_obj if is_jude_named_element?(jude_obj) interface.getMethods.each { |java_method| setter_name = define_judeapi_method(judeapi_class, java_method) judeapi_obj.send(setter_name, build(jude_obj, java_method)) } return judeapi_obj end |
#define_judeapi_class(java_class) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/luruju/jude_api.rb', line 115 def define_judeapi_class(java_class) java_class_name = java_class.getSimpleName judeapi_class_name = "Jude" + java_class_name.sub(/^I/,'') if JudeApi.const_defined?(judeapi_class_name) return JudeApi.module_eval(judeapi_class_name) end JudeApi.module_eval("class #{judeapi_class_name} < JudeBase ; end") judeapi_class = JudeApi.module_eval(judeapi_class_name) java_class.getDeclaredFields.each do |p| const_name = p.getName const_value = p.get(nil) judeapi_class.class_eval("#{const_name} = #{const_value}") end return judeapi_class end |
#define_judeapi_method(judeapi_class, java_method) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/luruju/jude_api.rb', line 86 def define_judeapi_method(judeapi_class, java_method) java_method_name = java_method.getName attr_name =java_method_name.sub(/^(get)/,'') attr_name = Inflector.underscore(attr_name) getter_name = attr_name.clone getter_name << "?" if java_method_name.match(/^is/) setter_name = attr_name + "=" return setter_name if judeapi_class.method_defined?(setter_name) statement = String.new statement << "def #{getter_name}() @#{attr_name} end\n" statement << "def #{setter_name}(#{attr_name}) @#{attr_name}=#{attr_name} end\n" judeapi_class.class_eval(statement) return setter_name end |
#is_jude_class?(java_class) ⇒ Boolean
104 105 106 |
# File 'lib/luruju/jude_api.rb', line 104 def is_jude_class?(java_class) java_class.getName.index(JUDEAPI_PHEAD) == 0 end |
#is_jude_named_element?(jude_obj) ⇒ Boolean
108 109 110 111 112 113 |
# File 'lib/luruju/jude_api.rb', line 108 def is_jude_named_element?(jude_obj) jude_obj.getClass.getMethod("getId", nil) return true rescue java.lang.NoSuchMethodException =>e return false end |