naether 0.9.2-java → 0.10.0-java

Sign up to get free protection for your applications and to get access to all the features.
data/lib/naether.rb CHANGED
@@ -17,10 +17,11 @@ require "#{File.dirname(__FILE__)}/naether/configuration"
17
17
  require "#{File.dirname(__FILE__)}/naether/bootstrap"
18
18
  require "#{File.dirname(__FILE__)}/naether/java"
19
19
 
20
-
21
- # Java dependency resolver.
20
+ #
21
+ # Java dependency resolver
22
22
  #
23
23
  # @author Michael Guymon
24
+ # @see https://github.com/mguymon/naether/tree/master/core
24
25
  #
25
26
  class Naether
26
27
 
@@ -28,7 +29,7 @@ class Naether
28
29
 
29
30
  class << self
30
31
 
31
- # Helper for Java dependencies needed to bootstrap Naether
32
+ # List of Java dependencies needed to bootstrap Naether
32
33
  #
33
34
  # @param [String] dep_file path
34
35
  # @see {Naether::Bootstrap#dependencies}
@@ -57,7 +58,7 @@ class Naether
57
58
 
58
59
  # Create new instance.
59
60
  def initialize
60
- @resolver = Naether::Java.create('com.tobedevoured.naether.Naether')
61
+ @resolver = Naether::Java.create('com.tobedevoured.naether.impl.NaetherImpl')
61
62
  end
62
63
 
63
64
  # Clear all remote repositories
@@ -250,7 +251,7 @@ class Naether
250
251
  #
251
252
  # @return [Array]
252
253
  def dependencies
253
- Naether::Java.convert_to_ruby_array( @resolver.getDependencies() )
254
+ Naether::Java.convert_to_ruby_array( @resolver.currentDependencies() )
254
255
  end
255
256
 
256
257
  # Get array of dependencies as notation
@@ -271,11 +272,37 @@ class Naether
271
272
  # Convert dependencies to Classpath friendly string
272
273
  #
273
274
  # @return [String]
274
- def dependencies_classpath()
275
+ def dependencies_classpath
275
276
  @resolver.getResolvedClassPath()
276
277
  end
277
278
 
279
+ # Dependencies as a Graph of nested Hashes
280
+ #
281
+ # @return [Hash]
282
+ def dependencies_graph(nodes=nil)
283
+ nodes = @resolver.getDependenciesGraph() unless nodes
284
+
285
+ graph = {}
286
+ if Naether.platform == 'java'
287
+ nodes.each do |k,v|
288
+ deps = dependencies_graph(v)
289
+ graph[k] = Naether::Java.convert_to_ruby_hash( deps )
290
+ end
291
+ else
292
+ iterator = nodes.entrySet().iterator();
293
+ while iterator.hasNext()
294
+ entry = iterator.next()
295
+ deps = dependencies_graph(entry.getValue())
296
+ graph[entry.getKey().toString()] = Naether::Java.convert_to_ruby_hash( deps )
297
+ end
298
+ end
299
+
300
+ graph
301
+ end
302
+
278
303
  # Load dependencies to Classpath
304
+ #
305
+ # @return [Array] of loaded jars
279
306
  def load_dependencies_to_classpath
280
307
  jars = dependencies_classpath.split(":")
281
308
  Naether::Java.load_jars(jars)
@@ -5,12 +5,11 @@ require 'open-uri'
5
5
  require 'fileutils'
6
6
 
7
7
  class Naether
8
- # :title:Naether::Bootstrap
8
+
9
9
  #
10
10
  # Helper for bootstrapping Naether
11
11
  #
12
- # = Authors
13
- # Michael Guymon
12
+ # @author Michael Guymon
14
13
  #
15
14
  class Bootstrap
16
15
 
@@ -18,11 +17,14 @@ class Naether
18
17
 
19
18
  class << self
20
19
 
20
+ # Default local repo of ENV['M2_REPO'] or ~/.m2/repository
21
+ #
22
+ # @return [String]
21
23
  def default_local_repo
22
24
  ENV['M2_REPO'] || File.expand_path('~/.m2/repository')
23
25
  end
24
26
 
25
- # write bootstrap dependencies to yaml file
27
+ # Write bootstrap dependencies to yaml file
26
28
  def write_dependencies( dest = 'jar_dependencies.yml' )
27
29
  deps = {};
28
30
  if Naether::Configuration.platform == 'java'
@@ -37,7 +39,11 @@ class Naether
37
39
  end
38
40
  end
39
41
 
40
- # List of Java dependencies for Naether
42
+ # List of Java dependencies for Naether from yaml dependency file. Caches
43
+ # result after first run.
44
+ #
45
+ # @param [String] dep_file path, defaults to Naether::Configuration.dependencies_yml
46
+ # @return [List]
41
47
  def dependencies( dep_file=nil )
42
48
 
43
49
  if @@dependencies
@@ -53,6 +59,11 @@ class Naether
53
59
  end
54
60
 
55
61
 
62
+ #
63
+ # Bootstrap the local repo by downloading Naether's dependencies
64
+ # @param [String] local_repo defaults to #default_local_repo
65
+ # @param [hash] opts
66
+ #
56
67
  def bootstrap_local_repo(local_repo = nil, opts = {} )
57
68
  local_repo = local_repo || default_local_repo
58
69
 
@@ -71,10 +82,16 @@ class Naether
71
82
  install_dependencies_to_local_repo( deps[:downloaded], jars, opts )
72
83
  end
73
84
 
74
- #raise Naether::Java.instance.java.class_loader.getLoadedPaths().map { |x| x.toString() }.sort.inspect
85
+ #raise Naether::Java.internal_loaded_paths.inspect
75
86
 
76
87
  end
77
88
 
89
+ #
90
+ # Download Naether dependencies
91
+ #
92
+ # @param [String] dest to download dependencies t
93
+ # @param [Hash] opts
94
+ # @return [Hash] with status of missing, downloaded, exists dependencies
78
95
  def download_dependencies( dest, opts = {} )
79
96
 
80
97
  if !File.exists? dest
@@ -121,6 +138,12 @@ class Naether
121
138
  deps
122
139
  end
123
140
 
141
+ #
142
+ # Check local_repo for Naether dependencies
143
+ #
144
+ # @param [String] local_repo
145
+ # @param [Hash] opts
146
+ # @return [Hash] with status of missing, downloaded, exists dependencies
124
147
  def check_local_repo_for_deps(local_repo = nil, opts = {} )
125
148
 
126
149
  local_repo = local_repo || default_local_repo
@@ -151,6 +174,14 @@ class Naether
151
174
  deps
152
175
  end
153
176
 
177
+ #
178
+ # Install Naether Dependencies to local_repo
179
+ #
180
+ # @param [Array<String>] install_jars
181
+ # @param [Array<String>] naether_jars to bootstrap Naether. These may overlap with install_jars.
182
+ # @param [Hash] opts
183
+ # @return [Naether]
184
+ #
154
185
  def install_dependencies_to_local_repo( install_jars, naether_jars, opts = {} )
155
186
 
156
187
  require "#{File.dirname(__FILE__)}/../naether"
@@ -1,5 +1,9 @@
1
1
 
2
2
  class Naether
3
+
4
+ #
5
+ # Naether runtime configuration
6
+ #
3
7
  class Configurator
4
8
  def initialize(data={})
5
9
  gem_dir = File.expand_path("#{File.dirname(__FILE__)}/../../")
@@ -19,7 +23,7 @@ class Naether
19
23
 
20
24
  @data = {
21
25
  :gem_dir => gem_dir,
22
- :naether_jar => File.join( gem_dir, "naether-#{version}.jar"),
26
+ :naether_jar => File.join( gem_dir, "core-#{version}.jar"),
23
27
  :platform => ($platform || RUBY_PLATFORM[/java/] || 'ruby'),
24
28
  :version => version,
25
29
  :dependencies_yml => File.expand_path("#{File.dirname( __FILE__ )}/../../jar_dependencies.yml")
data/lib/naether/java.rb CHANGED
@@ -1,13 +1,11 @@
1
1
  require 'singleton'
2
2
  require "#{File.dirname(__FILE__)}/configuration"
3
3
 
4
- # :title:Naether::Java
5
4
  #
6
- # Handles loading jars. Determines correct platform to use, Naether::Java::JRuby
5
+ # Handles loading jars using the correct platform, Naether::Java::JRuby
7
6
  # or Naether::Java::Ruby
8
7
  #
9
- # = Authors
10
- # Michael Guymon
8
+ # @author Michael Guymon
11
9
  #
12
10
  class Naether
13
11
  class Java
@@ -15,6 +13,10 @@ class Naether
15
13
 
16
14
  attr_reader :java
17
15
 
16
+ #
17
+ # Creates new instance by loading the Naether jar to the parent ClassLoader
18
+ # and creating the internal Naether ClassLoader
19
+ #
18
20
  def initialize()
19
21
  naether_jar = Naether::Configuration.naether_jar
20
22
 
@@ -24,44 +26,93 @@ class Naether
24
26
 
25
27
  if Naether::Configuration.platform == 'java'
26
28
  require "#{File.dirname(__FILE__)}/java/jruby"
27
- @java = Naether::Java::JRuby.instance
29
+ @java = Naether::Java::JRuby.new
28
30
  else
29
31
  require "#{File.dirname(__FILE__)}/java/ruby"
30
- @java = Naether::Java::Ruby.instance
32
+ @java = Naether::Java::Ruby.new
31
33
  end
32
34
  end
33
35
 
36
+ #
34
37
  # Paths loaded
38
+ #
39
+ # @return [Array] of String paths
40
+ #
35
41
  def self.loaded_paths
36
42
  instance.java.loaded_paths
37
43
  end
38
44
 
39
- # Load paths for the runtime platform
45
+ #
46
+ # Load a path onto the parent ClassLoader
47
+ #
48
+ # @param [Array] paths as an Array of String paths or a String path
49
+ #
40
50
  def self.load_paths(paths)
41
51
  instance.java.load_paths(paths)
42
52
  end
43
53
 
44
- # Load paths for the runtime platform
54
+ def self.internal_loaded_paths
55
+ convert_to_ruby_array( instance.java.class_loader.getLoadedPaths, true )
56
+ end
57
+
58
+ #
59
+ # Load a path into the internal Naether ClassLoader
60
+ #
61
+ # @param [Array] paths as an Array of String paths or a String path
62
+ #
45
63
  def self.internal_load_paths(paths)
46
64
  instance.java.internal_load_paths(paths)
47
65
  end
48
-
66
+
67
+ #
68
+ # Create a Java Object from the Naether Class Loader
69
+ #
70
+ # @param [String] target_class to create
71
+ # @param [Array] args Array of constructor arguments
49
72
  def self.create( target_class, *args )
50
73
  instance.java.create( target_class, *args )
51
74
  end
52
75
 
53
- def self.exec_static_method( target_class, target_method, *args )
54
- instance.java.exec_static_method( target_class, target_method, *args )
76
+ #
77
+ # Execute a Staic method on a Java class from the Naether Class Loader
78
+ #
79
+ # @param [String] target_class
80
+ # @param [String] target_method
81
+ # @param [Array] params Array of method parameters
82
+ # @param [Array] types if defined, a Array of String classes of params type that lines up with params one to one.
83
+ # @return [Object]
84
+ def self.exec_static_method( target_class, target_method, params, types = nil )
85
+ instance.java.exec_static_method( target_class, target_method, params, types )
55
86
  end
56
87
 
88
+ #
89
+ # Convert a Ruby Array to a java.util.ArrayList
90
+ #
91
+ # @param [Array] ruby_array to convert to Java.util.ArrayList
92
+ # @return [java.util.ArrayList]
93
+ #
57
94
  def self.convert_to_java_list( ruby_array )
58
95
  instance.java.convert_to_java_list( ruby_array )
59
96
  end
60
97
 
98
+ #
99
+ # Convert a java,util.List to a Ruby Array
100
+ #
101
+ # @param [java.util.ArrayList] java_array
102
+ # @param [Boolean] to_string platform dependent helper
103
+ # @return [Array]
104
+ #
61
105
  def self.convert_to_ruby_array( java_array, to_string = false )
62
106
  instance.java.convert_to_ruby_array( java_array, to_string )
63
107
  end
64
-
108
+
109
+ #
110
+ # Convert a java.util.Map to a Ruby Hash
111
+ #
112
+ # @param [java.util.Map] java_hash
113
+ # @param [Boolean] to_string platform dependent helper
114
+ # @return [Hash]
115
+ #
65
116
  def self.convert_to_ruby_hash( java_hash, to_string = false )
66
117
  instance.java.convert_to_ruby_hash( java_hash, to_string )
67
118
  end
@@ -1,23 +1,20 @@
1
1
  require "#{File.dirname(__FILE__)}/../configuration"
2
2
 
3
- # :title:Naether::Java::JRuby
4
- #
5
- # Singletn that handles Java interactions for JRuby. Providers helpers for
3
+
4
+ # Handles Java interactions for JRuby. Providers helpers for
6
5
  # nomalizing accesss.
7
6
 
8
- # = Authors
9
- # Michael Guymon
7
+ # @author Michael Guymon
10
8
  #
11
9
  class Naether
12
10
  class Java
13
11
 
14
12
  class JRuby
15
- include Singleton
16
13
 
17
14
  attr_reader :loaded_paths, :class_loader
18
15
 
19
16
  #
20
- # Creates new instance by loading the Naether jar to the global ClassLoader
17
+ # Creates new instance by loading the Naether jar to the parent ClassLoader
21
18
  # and creating the internal Naether ClassLoader
22
19
  #
23
20
  def initialize
@@ -33,15 +30,22 @@ class Naether
33
30
  end
34
31
 
35
32
  #
36
- # Create a Java Object
33
+ # Create a Java Object from the Naether Class Loader
37
34
  #
35
+ # @param [String] target_class to create
36
+ # @param [Array] args Array of constructor arguments
38
37
  def create( target_class, *args )
39
38
  @class_loader.newInstance(target_class, *args )
40
39
  end
41
40
 
42
41
  #
43
- # Execute a Staic method on a Java class
42
+ # Execute a Staic method on a Java class from the Naether Class Loader
44
43
  #
44
+ # @param [String] target_class
45
+ # @param [String] target_method
46
+ # @param [Array] params Array of method parameters
47
+ # @param [Array] types if defined, a Array of String classes of params type that lines up with params one to one.
48
+ # @return [Object]
45
49
  def exec_static_method( target_class, target_method, params, types = nil )
46
50
  unless params.is_a? Array
47
51
  params = [params]
@@ -59,6 +63,8 @@ class Naether
59
63
  #
60
64
  # Load a path into the internal Naether ClassLoader
61
65
  #
66
+ # @param [Array] paths as an Array of String paths or a String path
67
+ #
62
68
  def internal_load_paths(paths)
63
69
  load_paths = []
64
70
  unless paths.is_a? Array
@@ -78,7 +84,9 @@ class Naether
78
84
  end
79
85
 
80
86
  #
81
- # Load a path onto the Global ClassLoader
87
+ # Load a path onto the parent ClassLoader
88
+ #
89
+ # @param [Array] paths as an Array of String paths or a String path
82
90
  #
83
91
  def load_paths(paths)
84
92
  load_paths = []
@@ -99,7 +107,10 @@ class Naether
99
107
  end
100
108
 
101
109
  #
102
- # Convert a Ruby Array to a Java ArrayList
110
+ # Convert a Ruby Array to a java.util.ArrayList
111
+ #
112
+ # @param [Array] ruby_array Array to convert to Java.util.ArrayList
113
+ # @return [java.util.ArrayList]
103
114
  #
104
115
  def convert_to_java_list( ruby_array )
105
116
  list = java.util.ArrayList.new
@@ -111,17 +122,31 @@ class Naether
111
122
  end
112
123
 
113
124
  #
114
- # Convert a Java List to a Ruby Array
125
+ # Convert a java,util.List to a Ruby Array
126
+ #
127
+ # @param [java.util.ArrayList] java_array
128
+ # @param [Boolean] to_string has no affect on conversion.
129
+ # @return [Array]
115
130
  #
116
131
  def convert_to_ruby_array( java_array, to_string = false )
117
132
  java_array.to_a
118
133
  end
119
134
 
120
135
  #
121
- # Convert a Java Map to a Ruby Hash
136
+ # Convert a java.util.Map to a Ruby Hash
137
+ #
138
+ # @param [java.util.Map] java_hash
139
+ # @param [Boolean] to_string has no affect on conversion
140
+ # @return [Hash]
122
141
  #
123
142
  def convert_to_ruby_hash( java_hash, to_string = false )
124
- java_hash.to_hash
143
+ hash = java_hash.to_hash
144
+
145
+ hash.each do |k,v|
146
+ if v.is_a? java.util.Map
147
+ hash[k] = convert_to_ruby_hash(v, to_string )
148
+ end
149
+ end
125
150
  end
126
151
 
127
152
  end
@@ -1,21 +1,21 @@
1
1
  require "#{File.dirname(__FILE__)}/../configuration"
2
2
 
3
- # :title:Naether::Java::Ruby
4
- #
5
- # Sngleton that handles Java interactions for Ruby using RJB. Providers helpers for
3
+ # Handles Java interactions for Ruby using RJB. Providers helpers for
6
4
  # nomalizing accesss.
7
5
  #
8
- # = Authors
9
- # Michael Guymon
6
+ # @author Michael Guymon
10
7
  #
11
8
  class Naether
12
9
  class Java
13
10
 
14
11
  class Ruby
15
- include Singleton
16
12
 
17
13
  attr_reader :loaded_paths, :class_loader
18
14
 
15
+ #
16
+ # Creates new instance by loading the Naether jar to the parent ClassLoader
17
+ # and creating the internal Naether ClassLoader
18
+ #
19
19
  def initialize
20
20
  require 'rjb'
21
21
 
@@ -35,6 +35,11 @@ class Naether
35
35
 
36
36
  end
37
37
 
38
+ #
39
+ # Create a Java Object from the Naether Class Loader
40
+ #
41
+ # @param [String] target_class to create
42
+ # @param [Array] args Array of constructor arguments
38
43
  def create( target_class, *args )
39
44
  #@class_loader.newInstance(target_class, *args )
40
45
  if args.size > 0
@@ -44,6 +49,14 @@ class Naether
44
49
  end
45
50
  end
46
51
 
52
+ #
53
+ # Execute a Staic method on a Java class from the Naether Class Loader
54
+ #
55
+ # @param [String] target_class
56
+ # @param [String] target_method
57
+ # @param [Array] params Array of method parameters
58
+ # @param [Array] types if defined, a Array of String classes of params type that lines up with params one to one.
59
+ # @return [Object]
47
60
  def exec_static_method( target_class, target_method, params, types = nil )
48
61
  unless params.is_a? Array
49
62
  params = [params]
@@ -72,7 +85,12 @@ class Naether
72
85
  end
73
86
  end
74
87
  end
75
-
88
+
89
+ #
90
+ # Load a path into the internal Naether ClassLoader
91
+ #
92
+ # @param [Array] paths as an Array of String paths or a String path
93
+ #
76
94
  def internal_load_paths(paths)
77
95
  loadable_paths = []
78
96
  unless paths.is_a? Array
@@ -90,6 +108,11 @@ class Naether
90
108
  loadable_paths
91
109
  end
92
110
 
111
+ #
112
+ # Load a path onto the parent ClassLoader
113
+ #
114
+ # @param [Array] paths as an Array of String paths or a String path
115
+ #
93
116
  def load_paths(paths)
94
117
  loadable_paths = []
95
118
  unless paths.is_a? Array
@@ -108,6 +131,12 @@ class Naether
108
131
  loadable_paths
109
132
  end
110
133
 
134
+ #
135
+ # Convert a Ruby Array to a java.util.ArrayList
136
+ #
137
+ # @param [Array] ruby_array Array to convert to Java.util.ArrayList
138
+ # @return [java.util.ArrayList]
139
+ #
111
140
  def convert_to_java_list( ruby_array )
112
141
  list = Rjb::import("java.util.ArrayList").new
113
142
  ruby_array.each do |item|
@@ -117,6 +146,13 @@ class Naether
117
146
  list
118
147
  end
119
148
 
149
+ #
150
+ # Convert a java,util.List to a Ruby Array
151
+ #
152
+ # @param [java.util.ArrayList] java_array
153
+ # @param [Boolean] to_string converts each element using toString
154
+ # @return [Array]
155
+ #
120
156
  def convert_to_ruby_array( java_array, to_string = false )
121
157
  ruby_array = java_array.toArray()
122
158
 
@@ -127,20 +163,37 @@ class Naether
127
163
  ruby_array
128
164
  end
129
165
 
166
+ #
167
+ # Convert a java.util.Map to a Ruby Hash
168
+ #
169
+ # @param [java.util.Map] java_hash
170
+ # @param [Boolean] to_string converts each element using toString
171
+ # @return [Hash]
172
+ #
130
173
  def convert_to_ruby_hash( java_hash, to_string = false )
131
174
 
132
175
  hash = {}
133
- keys = java_hash.keySet()
134
- iterator = keys.iterator()
135
- if to_string
136
- while iterator.hasNext()
137
- key = iterator.next().toString()
138
- hash[key] = java_hash.get( key ).toString()
176
+ unless java_hash.is_a? Hash
177
+ keys = java_hash.keySet()
178
+ iterator = keys.iterator()
179
+ if to_string
180
+ while iterator.hasNext()
181
+ key = iterator.next().toString()
182
+ hash[key] = java_hash.get( key ).toString()
183
+ end
184
+ else
185
+ while iterator.hasNext()
186
+ key = iterator.next()
187
+ hash[key] = java_hash.get( key )
188
+ end
139
189
  end
140
190
  else
141
- while iterator.hasNext()
142
- key = iterator.next()
143
- hash[key] = java_hash.get( key )
191
+ if to_string
192
+ java_hash.each do |k,v|
193
+ hash[k.toString()] = v.toString()
194
+ end
195
+ else
196
+ hash = java_hash
144
197
  end
145
198
  end
146
199