Class: Naether::Java::Ruby

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/naether/java/ruby.rb

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Ruby) initialize

A new instance of Ruby



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/naether/java/ruby.rb', line 19

def initialize
  require 'rjb' 
  
  naether_jar = Naether::Configuration.naether_jar
        
  # Call Rjb::load with an empty classpath, incase Rjb::load has already been called
  java_opts = (ENV['JAVA_OPTS'] || ENV['JAVA_OPTIONS']).to_s.split
  Rjb::load("", java_opts)
  
  @loaded_paths = []
  load_paths( naether_jar )
  
  class_loader_class = Rjb::import( "com.tobedevoured.naether.PathClassLoader" )
  @class_loader = class_loader_class.new()
    
  internal_load_paths( naether_jar )
  
end

Instance Attribute Details

- (Object) class_loader (readonly)

Returns the value of attribute class_loader



17
18
19
# File 'lib/naether/java/ruby.rb', line 17

def class_loader
  @class_loader
end

- (Object) loaded_paths (readonly)

Returns the value of attribute loaded_paths



17
18
19
# File 'lib/naether/java/ruby.rb', line 17

def loaded_paths
  @loaded_paths
end

Instance Method Details

- (Object) convert_to_java_list(ruby_array)



111
112
113
114
115
116
117
118
# File 'lib/naether/java/ruby.rb', line 111

def convert_to_java_list( ruby_array ) 
  list = Rjb::import("java.util.ArrayList").new
  ruby_array.each do |item|
    list.add( item )
  end
  
  list
end

- (Object) convert_to_ruby_array(java_array, to_string = false)



120
121
122
123
124
125
126
127
128
# File 'lib/naether/java/ruby.rb', line 120

def convert_to_ruby_array( java_array, to_string = false )
  ruby_array = java_array.toArray()
  
  if to_string
    ruby_array = ruby_array.map { |x| x.toString()}
  end
  
  ruby_array
end

- (Object) convert_to_ruby_hash(java_hash, to_string = false)



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/naether/java/ruby.rb', line 130

def convert_to_ruby_hash( java_hash, to_string = false )
  
  hash = {}
  keys = java_hash.keySet()
  iterator = keys.iterator()
  if to_string
    while iterator.hasNext()
      key = iterator.next().toString()
      hash[key] = java_hash.get( key ).toString()
    end
  else
    while iterator.hasNext()
      key = iterator.next()
      hash[key] = java_hash.get( key )              
    end
  end
  
  hash
  
end

- (Object) create(target_class, *args)



38
39
40
41
42
43
44
45
# File 'lib/naether/java/ruby.rb', line 38

def create( target_class, *args )
  #@class_loader.newInstance(target_class, *args )
  if args.size > 0
    @class_loader._invoke('newInstance', 'Ljava.lang.String;[Ljava.lang.Object;', target_class, args )
  else
    @class_loader._invoke('newInstance', 'Ljava.lang.String;', target_class )
  end
end

- (Object) exec_static_method(target_class, target_method, params, types = nil)



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/naether/java/ruby.rb', line 47

def exec_static_method( target_class, target_method, params, types = nil ) 
  unless params.is_a? Array
    params = [params]
  end
  
  if types
    unless types.is_a? Array
       types = [types]
    end
  end
  result = nil
  if params.nil?
    result = @class_loader._invoke('execStaticMethod','Ljava.lang.String;Ljava.lang.String;', target_class, target_method )
  elsif types.nil?
    result = @class_loader._invoke('execStaticMethod','Ljava.lang.String;Ljava.lang.String;Ljava.util.List;', target_class, target_method, convert_to_java_list(params) )
  else
    result = @class_loader._invoke('execStaticMethod','Ljava.lang.String;Ljava.lang.String;Ljava.util.List;Ljava.util.List;', target_class, target_method, convert_to_java_list(params), convert_to_java_list(types) )
  end
  
  unless result.nil?
    # Force toString on java.lang.String otherwise the result will be a Rjb::Proxy
    if result.getClass().getName() == 'java.lang.String'
      result.toString()
    else
      result
    end
  end
end

- (Object) internal_load_paths(paths)



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/naether/java/ruby.rb', line 76

def internal_load_paths(paths)
  loadable_paths = []
  unless paths.is_a? Array
    paths = [paths]
  end
  
  paths.each do |path|
    expanded_path = File.expand_path(path)
    if File.exists?( expanded_path )
      @class_loader.addPath( path )
      loadable_paths << expanded_path
    end
  end
  
  loadable_paths
end

- (Object) load_paths(paths)



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/naether/java/ruby.rb', line 93

def load_paths(paths)
  loadable_paths = []
  unless paths.is_a? Array
    paths = [paths]
  end
  
  paths.each do |path|
    expanded_path = File.expand_path(path)
    if !@loaded_paths.include?(expanded_path) && File.exists?( expanded_path )
      @loaded_paths << expanded_path
      Rjb::add_jar( expanded_path )
      loadable_paths << expanded_path
    end
  end
  
  loadable_paths
end