luruju 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +21 -8
- data/bin/access_jruby_with_command.rb +5 -0
- data/lib/luruju.rb +12 -16
- data/lib/luruju/configuration.rb +11 -0
- data/lib/luruju/dto.rb +8 -0
- data/lib/luruju/enjoy_ruby.rb +186 -0
- data/lib/luruju/jude_api/add_dynamic_method.rb +9 -3
- data/lib/luruju/jude_api/jude_base.rb +89 -1
- data/lib/luruju/jude_api_loader.rb +7 -158
- data/lib/luruju/jude_api_loader_for_cache.rb +22 -0
- data/lib/luruju/jude_api_loader_for_locked_project.rb +37 -0
- data/lib/luruju/jude_api_loader_in_cruby.rb +38 -0
- data/lib/luruju/jude_api_loader_in_jruby.rb +113 -0
- data/lib/luruju/jude_meta.rb +75 -0
- data/lib/luruju/luruju_client.rb +20 -0
- data/lib/luruju/prepare.rb +16 -0
- data/lib/luruju/server/luruju_server.rb +33 -0
- data/lib/luruju/version.rb +2 -4
- data/lib/tasks/luruju.rb +5 -0
- data/lib/tasks/server.rake +21 -0
- data/test/abstract_unit.rb +26 -12
- data/test/{jude_api_test.rb → class_diagram_test.rb} +6 -1
- data/test/configuration_test.rb +108 -0
- data/test/er_diagram_test.rb +1 -1
- data/test/jude/base.jude +0 -0
- data/test/jude/community-5.0.2/class_diagram/dummy.jude +1 -0
- data/test/jude/community-5.0.2/class_diagram/locked.jude +0 -0
- data/test/jude/community-5.0.2/class_diagram/locked.jude.test +0 -0
- data/test/jude/community-5.0.2/locked.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/dummy.jude +1 -0
- data/test/jude/professional-5.1/class_diagram/locked.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/locked.jude.test +0 -0
- data/test/jude_api_loader_for_locked_project_test.rb +97 -0
- data/test/jude_base_test.rb +71 -0
- data/test/luruju_server_test.rb +77 -0
- metadata +78 -47
- data/lib/luruju/customize_inflector.rb +0 -3
- data/lib/luruju/dynamic_method.rb +0 -16
- data/lib/luruju/easy_breakpoint.rb +0 -22
- data/lib/luruju/jude_api/add_method.rb +0 -52
data/Rakefile
CHANGED
@@ -7,6 +7,12 @@ require 'rake/gempackagetask'
|
|
7
7
|
# TODO require 'rake/contrib/rubyforgepublisher'
|
8
8
|
require File.join(File.dirname(__FILE__), 'lib', 'luruju', 'version')
|
9
9
|
|
10
|
+
#require 'tasks/luruju' rescue nil
|
11
|
+
|
12
|
+
#config = Luruju::Configuration.install do |config|
|
13
|
+
# config.drb_port = 9999
|
14
|
+
#end
|
15
|
+
|
10
16
|
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
11
17
|
PKG_NAME = 'luruju'
|
12
18
|
PKG_VERSION = Luruju::VERSION::STRING + PKG_BUILD
|
@@ -16,34 +22,34 @@ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
|
16
22
|
Rake::TestTask.new('test') do |t|
|
17
23
|
t.libs << "test"
|
18
24
|
t.pattern = "test/**/*_test.rb"
|
19
|
-
|
25
|
+
# t.warning = true
|
20
26
|
end
|
21
27
|
|
22
28
|
# Create compressed packages
|
23
|
-
dist_dirs = [ "lib", "test" ]
|
29
|
+
dist_dirs = [ "lib", "test", "bin" ]
|
24
30
|
|
25
31
|
spec = Gem::Specification.new do |s|
|
26
32
|
s.platform = Gem::Platform::RUBY
|
27
33
|
s.name = PKG_NAME
|
28
34
|
s.version = PKG_VERSION
|
29
35
|
s.summary = "A library for coordinating with Ruby And JUDE."
|
30
|
-
# TODO s.description = %q{}
|
36
|
+
# TODO s.description = %q{}
|
31
37
|
|
32
38
|
s.author = "Shuhei Nomura"
|
33
|
-
# TODO s.email = "david@loudthinking.com"
|
39
|
+
# TODO s.email = "david@loudthinking.com"
|
34
40
|
s.rubyforge_project = PKG_NAME
|
35
41
|
s.homepage = "http://luruju.com"
|
36
42
|
|
37
43
|
s.has_rdoc = false # TODO
|
38
|
-
# TODO s.extra_rdoc_files = ["README"]
|
44
|
+
# TODO s.extra_rdoc_files = ["README"]
|
39
45
|
s.requirements << 'JUDE Community'
|
40
46
|
s.add_dependency('activesupport', '>= 1.4.2' + PKG_BUILD)
|
41
47
|
s.require_path = 'lib'
|
42
48
|
s.autorequire = 'luruju'
|
43
49
|
|
44
50
|
s.files = [ "LICENSE", "Rakefile"]
|
45
|
-
# TODO s.files << "CHANGELOG"
|
46
|
-
# TODO s.files << "README"
|
51
|
+
# TODO s.files << "CHANGELOG"
|
52
|
+
# TODO s.files << "README"
|
47
53
|
dist_dirs.each do |dir|
|
48
54
|
s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |i| (/^\.svn/ =~ i) or (/\~\z/) =~ i }
|
49
55
|
end
|
@@ -53,7 +59,7 @@ end
|
|
53
59
|
Rake::GemPackageTask.new(spec) do |p|
|
54
60
|
p.gem_spec = spec
|
55
61
|
p.need_tar = true
|
56
|
-
p.need_zip =
|
62
|
+
p.need_zip = false
|
57
63
|
end
|
58
64
|
|
59
65
|
task :lines do
|
@@ -78,4 +84,11 @@ task :lines do
|
|
78
84
|
end
|
79
85
|
|
80
86
|
puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
|
87
|
+
end
|
88
|
+
|
89
|
+
task :install_localhost => [:repackage] do
|
90
|
+
%x{gem uninstall luruju}
|
91
|
+
%x{gem install pkg/#{PKG_FILE_NAME}.gem -l}
|
92
|
+
%x{jruby -S gem uninstall luruju}
|
93
|
+
%x{jruby -S gem install pkg/#{PKG_FILE_NAME}.gem -l}
|
81
94
|
end
|
data/lib/luruju.rb
CHANGED
@@ -1,19 +1,15 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
-
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
$:.unshift(File.dirname(__FILE__) + "/../../activesupport/lib")
|
7
|
-
require 'active_support'
|
8
|
-
rescue LoadError
|
9
|
-
require 'rubygems'
|
10
|
-
require 'active_support'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
require 'luruju/easy_breakpoint'
|
15
|
-
require 'luruju/customize_inflector'
|
16
|
-
require 'luruju/jude_api_loader'
|
17
|
-
require 'luruju/dynamic_method'
|
18
|
-
require 'luruju/jude_api/jude_base'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'active_support'
|
19
6
|
|
7
|
+
require 'luruju/prepare'
|
8
|
+
require 'luruju/enjoy_ruby'
|
9
|
+
require 'luruju/configuration'
|
10
|
+
require 'luruju/jude_meta'
|
11
|
+
require 'luruju/luruju_client'
|
12
|
+
require 'luruju/jude_api_loader'
|
13
|
+
require "luruju/jude_api_loader_in_#{ruby_vm_name}"
|
14
|
+
require 'luruju/dto'
|
15
|
+
require 'luruju/jude_api/jude_base'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Luruju
|
2
|
+
|
3
|
+
class Configuration
|
4
|
+
|
5
|
+
include Configuratable
|
6
|
+
define_config :access_jruby_with, :default => :drb, :validate => lambda{|val|[:drb,:command].include?(val)}
|
7
|
+
define_config :drb_port, :default => 3937, :validate => lambda{|val|val.to_i > 0}
|
8
|
+
define_config :use_jude_cache, :default => true, :validate => lambda{|val|[true,false].include?(val)}
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
data/lib/luruju/dto.rb
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
|
2
|
+
module Luruju
|
3
|
+
|
4
|
+
module DynamicMethod
|
5
|
+
|
6
|
+
class IsNotMyRole < StandardError ; end
|
7
|
+
|
8
|
+
def method_missing method, *args, &b
|
9
|
+
methods.select{|m|/^dyna_.*/ =~ m.to_s}.sort.each do |dyna_method|
|
10
|
+
return send(dyna_method, method, *args, &b) rescue IsNotMyRole
|
11
|
+
end
|
12
|
+
super method, *args, &b
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
module MethodWrappable
|
18
|
+
|
19
|
+
def self.included(base) base.extend ClassMethods end
|
20
|
+
|
21
|
+
module ClassMethods
|
22
|
+
|
23
|
+
@@wrapped_class_methods = []
|
24
|
+
|
25
|
+
def wrap_class_method *names
|
26
|
+
@@wrapped_class_methods += names
|
27
|
+
names.each { |name| do_wrap_class_method name rescue NameError }
|
28
|
+
end
|
29
|
+
|
30
|
+
def singleton_method_added(name)
|
31
|
+
return if /^original_/ =~ name.to_s
|
32
|
+
file, line, method = caller[1].match(/^(.+?):(\d+)(?::in `(.*?)')?/).captures
|
33
|
+
return if file == __FILE__ and ["do_wrap_class_method","singleton_method_added"].include?(method)
|
34
|
+
do_wrap_class_method(name) if @@wrapped_class_methods.include? name.to_sym
|
35
|
+
ensure
|
36
|
+
super
|
37
|
+
end
|
38
|
+
|
39
|
+
def do_wrap_class_method name
|
40
|
+
self.module_eval <<-EOD
|
41
|
+
class << self
|
42
|
+
alias :original_#{name.to_s} :#{name.to_s}
|
43
|
+
def #{name.to_s} *args
|
44
|
+
bucket_brigade methods.select{|x|/^wrap_#{name}/=~x}.sort!.push("original_#{name.to_s}"), *args
|
45
|
+
end
|
46
|
+
end
|
47
|
+
EOD
|
48
|
+
end
|
49
|
+
|
50
|
+
def bucket_brigade wraps, *args
|
51
|
+
current = wraps.shift
|
52
|
+
send(current, *args) do |*args|
|
53
|
+
wraps.empty? ? send(current, *args) : bucket_brigade(wraps, *args)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
module Configuratable
|
62
|
+
|
63
|
+
def self.included base
|
64
|
+
base.parent.class_eval <<-EOD
|
65
|
+
@@config = nil
|
66
|
+
def self.config() @@config || #{base.name}.default end
|
67
|
+
def self.config=(config) @@config = config end
|
68
|
+
EOD
|
69
|
+
base.class_eval <<-EOD
|
70
|
+
@@default_configurations = {}
|
71
|
+
def self.default() new end
|
72
|
+
def self.uninstall() parent.config = nil end
|
73
|
+
def self.install(config=default, &block)
|
74
|
+
return parent.config = config unless block_given?
|
75
|
+
parent.config = new {|config|yield config}
|
76
|
+
end
|
77
|
+
def self.define_config key, options={}
|
78
|
+
@@default_configurations[key] = Config.new(key, options[:default], options[:validate])
|
79
|
+
end
|
80
|
+
def initialize
|
81
|
+
@configrations = {}
|
82
|
+
@@default_configurations.each{|key, value| @configrations[key] = value.dup}
|
83
|
+
yield self if block_given?
|
84
|
+
end
|
85
|
+
def self.singleton_method_added name
|
86
|
+
return unless name.to_s.match(/default_(.+)$/)
|
87
|
+
key = $1.to_sym
|
88
|
+
return unless @@default_configurations[key]
|
89
|
+
@@default_configurations[key].default = method(name).call
|
90
|
+
end
|
91
|
+
EOD
|
92
|
+
end
|
93
|
+
|
94
|
+
class Config
|
95
|
+
attr_accessor :key, :default, :value
|
96
|
+
def initialize(key, default=nil, validate=nil)
|
97
|
+
@key, @default, @validate = key, default, validate
|
98
|
+
end
|
99
|
+
def value() @value.nil? ? @default : @value end
|
100
|
+
def value=(value)
|
101
|
+
if @validate
|
102
|
+
raise ArgumentError.new("invarid value[#{value}]. key[#{key}]") unless @validate.call(value)
|
103
|
+
end
|
104
|
+
@value = value
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def method_missing method, *args
|
109
|
+
return @configrations[method].value if @configrations.key? method.to_sym
|
110
|
+
if args.size == 1
|
111
|
+
sym = method.to_s.match(/^(.+?)=$/).captures[0].to_sym
|
112
|
+
return @configrations[sym].value = args[0] if @configrations.key? sym
|
113
|
+
end
|
114
|
+
super
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
require 'pp'
|
122
|
+
|
123
|
+
#eval(easy_breakpoint)
|
124
|
+
module Kernel
|
125
|
+
|
126
|
+
def easy_breakpoint
|
127
|
+
<<-EOS
|
128
|
+
puts 'easy-breakpoint>'
|
129
|
+
input = STDIN.readline.chop!
|
130
|
+
unless input == "stop"
|
131
|
+
begin
|
132
|
+
eval(input)
|
133
|
+
rescue => e
|
134
|
+
p e
|
135
|
+
pp e.backtrace
|
136
|
+
end
|
137
|
+
eval easy_breakpoint
|
138
|
+
end
|
139
|
+
EOS
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
__END__
|
145
|
+
|
146
|
+
class Hoge
|
147
|
+
|
148
|
+
include Luruju::MethodWrappable
|
149
|
+
|
150
|
+
wrap_class_method :hoge
|
151
|
+
|
152
|
+
def self.hoge arg1, arg2
|
153
|
+
p "hoge call #{arg1} #{arg2}"
|
154
|
+
"A"
|
155
|
+
end
|
156
|
+
|
157
|
+
def aaa
|
158
|
+
end
|
159
|
+
|
160
|
+
def self.wrap_hoge_aaa arg1, arg2
|
161
|
+
p "wrap enter aaa #{arg1} #{arg2}"
|
162
|
+
rtn = yield arg1, arg2
|
163
|
+
p "wrap leave aaa #{arg1} #{arg2}"
|
164
|
+
rtn + "B"
|
165
|
+
end
|
166
|
+
|
167
|
+
def self.wrap_hoge_bbb arg1, arg2
|
168
|
+
p "wrap enter bbb #{arg1} #{arg2}"
|
169
|
+
rtn = yield arg1, arg2
|
170
|
+
p "wrap leave bbb #{arg1} #{arg2}"
|
171
|
+
rtn + "C"
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
175
|
+
|
176
|
+
begin
|
177
|
+
result = Hoge.hoge "x", "y"
|
178
|
+
rescue LocalJumpError
|
179
|
+
p $!
|
180
|
+
p $!.reason
|
181
|
+
p $!.exit_value
|
182
|
+
require "pp"
|
183
|
+
pp $!.backtrace
|
184
|
+
end
|
185
|
+
|
186
|
+
p result
|
@@ -25,9 +25,10 @@ module Luruju
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def dyna_is_kind_of? method, *args
|
28
|
-
raise IsNotMyRole unless /^kind_of_(
|
29
|
-
|
30
|
-
|
28
|
+
raise IsNotMyRole unless /^kind_of_([^?]+?)\?$/ =~ method.to_s
|
29
|
+
c = "JudeApi::Jude#{$1.classify}Methods"
|
30
|
+
c = 'JudeApi::JudeClassMethods' if c == 'JudeApi::JudeClasMethods'
|
31
|
+
return self.kind_of?(eval(c)) rescue false
|
31
32
|
end
|
32
33
|
|
33
34
|
def dyna_owned_elements method, *args
|
@@ -44,6 +45,11 @@ module Luruju
|
|
44
45
|
send(method.to_s.pluralize.to_sym, *args)[0]
|
45
46
|
end
|
46
47
|
|
48
|
+
def dyna_search method, *args, &block
|
49
|
+
raise IsNotMyRole unless /^search_(.+?)$/ =~ method.to_s
|
50
|
+
JudeBase.search search{|x|x.send("kind_of_#{$1.singularize}?")}, *args, &block
|
51
|
+
end
|
52
|
+
|
47
53
|
end
|
48
54
|
end
|
49
55
|
end
|
@@ -1,2 +1,90 @@
|
|
1
1
|
require 'luruju/jude_api/add_dynamic_method'
|
2
|
-
|
2
|
+
|
3
|
+
module Luruju
|
4
|
+
|
5
|
+
module JudeApi
|
6
|
+
|
7
|
+
class JudeBase
|
8
|
+
|
9
|
+
attr_writer :tagged
|
10
|
+
attr_reader :members
|
11
|
+
|
12
|
+
def initialize(members) @members = members end
|
13
|
+
|
14
|
+
def search options={}, &block
|
15
|
+
JudeBase.search members, options, &block
|
16
|
+
end
|
17
|
+
|
18
|
+
def tagged
|
19
|
+
return @tagged if @tagged
|
20
|
+
@tagged = HashWithIndifferentAccess.new
|
21
|
+
tagged_values.each {|x| @tagged[x.key.to_sym] = x.value}
|
22
|
+
@tagged
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.search members, options={}
|
26
|
+
members.collect do |member|
|
27
|
+
if options.key?(:name)
|
28
|
+
next unless member.is_a?(JudeNamedElementMethods)
|
29
|
+
next unless member.name == options[:name]
|
30
|
+
end
|
31
|
+
next if options.key?(:id) and member.id != options[:id]
|
32
|
+
if block_given?
|
33
|
+
next unless yield(member)
|
34
|
+
end
|
35
|
+
member
|
36
|
+
end.compact
|
37
|
+
end
|
38
|
+
|
39
|
+
def inspect() "<#{self.class}: id=#{self.instance_eval('@id')}>" end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
module JudeNamedElementAddMethod
|
44
|
+
def inspect() "<#{self.class}: name=#{self.name} id=#{self.instance_eval('@id')}>" end
|
45
|
+
end
|
46
|
+
|
47
|
+
module JudeErAttributeAddMethod
|
48
|
+
def constraint(constraint_name) constraints.find{|x|constraint_name == x.name} end
|
49
|
+
end
|
50
|
+
|
51
|
+
module JudeModelAddMethod
|
52
|
+
attr_accessor :mtime
|
53
|
+
end
|
54
|
+
|
55
|
+
module JudeClassAddMethod
|
56
|
+
def default?
|
57
|
+
return unless owner
|
58
|
+
return unless owner.kind_of_element?
|
59
|
+
return unless owner.owner
|
60
|
+
['lang', 'util'].include?(owner.name) and owner.owner.name == 'java'
|
61
|
+
end
|
62
|
+
|
63
|
+
def super_classes() generalizations.collect{|g|g.super_type} end
|
64
|
+
def sub_classes() specializations.collect{|s|s.sub_type} end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
module JudeAttributeAddMethod
|
69
|
+
def broad_aggregate?() is_aggregate? or is_composite? end
|
70
|
+
def not_broad_aggregate?() !broad_aggregate? end
|
71
|
+
def contra() association.attributes.find{|b|b != self} end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
class Class
|
79
|
+
|
80
|
+
alias :include_except_luruju :include
|
81
|
+
|
82
|
+
def include *included
|
83
|
+
return include_except_luruju(*included) unless self.ancestors.include?(Luruju::JudeApi::JudeBase)
|
84
|
+
if Luruju::JudeApi.constants.include? "#{self.name}AddMethod".split("::").last
|
85
|
+
included[0].send :include, eval("#{self.name}AddMethod")
|
86
|
+
end
|
87
|
+
include_except_luruju(*included)
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
@@ -1,164 +1,13 @@
|
|
1
|
-
require 'java'
|
2
|
-
|
3
1
|
module Luruju
|
4
|
-
|
5
|
-
JUDEAPI_PHEAD = 'com.change_vision.jude.api.inf'
|
6
|
-
include_class "#{JUDEAPI_PHEAD}.project.ProjectAccessorFactory"
|
7
|
-
|
8
|
-
class JudeApiLoader
|
9
|
-
|
10
|
-
def self.load jude_file
|
11
|
-
project_accessor = ProjectAccessorFactory.getProjectAccessor
|
12
|
-
project_accessor.open jude_file
|
13
|
-
getter = project_accessor.getClass.getDeclaredMethod "getProject", nil
|
14
|
-
new.build project_accessor, getter
|
15
|
-
ensure
|
16
|
-
project_accessor.close rescue Exception
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize
|
20
|
-
@already_builded = {}
|
21
|
-
end
|
22
|
-
|
23
|
-
def build java_parent, java_getter
|
24
|
-
|
25
|
-
return nil if java_getter.getGenericParameterTypes.length > 0
|
26
|
-
|
27
|
-
begin
|
28
|
-
java_obj = java_parent.send java_getter.getName
|
29
|
-
rescue NativeException
|
30
|
-
# p "Warning(#{__FILE__},#{__LINE__}) " + java_getter.getName
|
31
|
-
end
|
32
|
-
return nil if java_obj == nil
|
33
|
-
|
34
|
-
java_return_class = java_getter.getReturnType
|
35
|
-
if is_jude_class? java_return_class
|
36
|
-
return build_judeapi(java_obj)
|
37
|
-
elsif java_return_class.isArray
|
38
|
-
return build_array(java_obj, java_getter)
|
39
|
-
else
|
40
|
-
return java_obj
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def build_array java_obj, java_getter
|
45
|
-
|
46
|
-
comp_type = java_getter.getReturnType.getComponentType
|
47
|
-
|
48
|
-
if is_jude_class? comp_type
|
49
|
-
jude_objects = Array.new
|
50
|
-
java_obj.each {|i| jude_objects << build_judeapi(i) }
|
51
|
-
return jude_objects
|
52
|
-
else
|
53
|
-
return java_obj.to_a
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def build_judeapi java_obj
|
58
|
-
|
59
|
-
if is_jude_named_element?(java_obj) and @already_builded.key?(java_obj.getId)
|
60
|
-
return @already_builded[java_obj.getId]
|
61
|
-
end
|
62
|
-
|
63
|
-
java_if = java_obj.getClass.getInterfaces[0]
|
64
|
-
jude_class = JudeApi.module_eval java_if.getSimpleName.jude_class
|
65
|
-
jude_object = jude_class.new
|
66
|
-
|
67
|
-
@already_builded[java_obj.getId] = jude_object if jude_object.kind_of_named_element?
|
68
|
-
|
69
|
-
java_if.getMethods.each do |java_method|
|
70
|
-
next if java_method.getGenericParameterTypes.length > 0
|
71
|
-
setter_name = java_method.getName.sub(/^(get)/,'').underscore << "="
|
72
|
-
jude_object.send setter_name, build(java_obj, java_method)
|
73
|
-
end
|
74
|
-
return jude_object
|
75
|
-
end
|
76
|
-
|
77
|
-
def is_jude_class? java_class
|
78
|
-
java_class.getName.index(JUDEAPI_PHEAD) == 0
|
79
|
-
end
|
80
|
-
|
81
|
-
def self.define_jude_class class_id
|
82
|
-
judeapi_class_name = class_id.to_s.jude_class
|
83
|
-
JudeApi.module_eval "class #{judeapi_class_name} < JudeBase ; end"
|
84
|
-
judeapi_class = JudeApi.module_eval judeapi_class_name
|
85
|
-
judeapi_module_name = class_id.to_s.jude_module
|
86
|
-
judeapi_module = JudeApi.module_eval judeapi_module_name
|
87
|
-
judeapi_class.send :include, judeapi_module
|
88
|
-
judeapi_class
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.define_jude_module module_id
|
92
|
-
|
93
|
-
java_if = java.lang.Class.forName "#{JUDEAPI_PHEAD}.model.#{module_id.to_s.java_if}"
|
94
|
-
judeapi_module_name = java_if.getSimpleName.jude_module
|
95
|
-
JudeApi.module_eval "module #{judeapi_module_name} ; end"
|
96
|
-
judeapi_module = JudeApi.module_eval judeapi_module_name
|
97
|
-
java_if.getGenericInterfaces().each do |generic_if|
|
98
|
-
JudeApi.module_eval generic_if.getSimpleName.jude_class
|
99
|
-
judeapi_module.send :include, JudeApi.module_eval(generic_if.getSimpleName.jude_module)
|
100
|
-
end
|
101
|
-
|
102
|
-
java_if.getDeclaredMethods.each do |method|
|
103
|
-
next if method.getGenericParameterTypes.length > 0
|
104
|
-
java_method_name = method.getName
|
105
|
-
attr_name = java_method_name.sub(/^(get)/,'').underscore
|
106
|
-
judeapi_module.module_eval "attr_accessor :#{attr_name}"
|
107
|
-
if /^is_/ =~ attr_name
|
108
|
-
judeapi_module.send :alias_method,
|
109
|
-
"#{attr_name}?".to_sym, attr_name.to_sym
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
java_if.getDeclaredFields.each do |f|
|
114
|
-
judeapi_module.module_eval "#{f.getName} = #{f.get(nil)}"
|
115
|
-
end
|
116
|
-
judeapi_module
|
117
|
-
end
|
118
|
-
|
119
|
-
def is_jude_named_element? jude_obj
|
120
|
-
jude_obj.getClass.getMethod "getId", nil
|
121
|
-
return true
|
122
|
-
rescue java.lang.NoSuchMethodException
|
123
|
-
return false
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
class String
|
130
|
-
|
131
|
-
def is_jude_class?
|
132
|
-
/^Jude/ =~ self and not /Methods$/ =~ self
|
2
|
+
class ProjectNotFoundException < Exception #:nodoc:
|
133
3
|
end
|
134
|
-
|
135
|
-
def is_jude_module?
|
136
|
-
/^Jude/ =~ self and /Methods$/ =~ self
|
4
|
+
class ProjectLockedException < Exception #:nodoc:
|
137
5
|
end
|
138
|
-
|
139
|
-
def jude_class
|
140
|
-
'Jude' + sub(/^(I|Jude)/,'').sub(/ER/, "Er").sub(/Methods$/, '')
|
6
|
+
class UnexpectedNativeException < Exception #:nodoc:
|
141
7
|
end
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
146
|
-
|
147
|
-
def java_if
|
148
|
-
sub(/^(I|Jude)/,'I').sub(/Er/, "ER").sub(/Methods$/, '')
|
8
|
+
class JudeApiLoader
|
9
|
+
include MethodWrappable
|
10
|
+
wrap_class_method :load
|
149
11
|
end
|
150
|
-
|
151
12
|
end
|
152
|
-
|
153
|
-
class Module
|
154
|
-
|
155
|
-
alias :const_missing_except_luruju :const_missing
|
156
|
-
|
157
|
-
def const_missing class_id
|
158
|
-
return const_missing_except_luruju(class_id) unless self == Luruju::JudeApi
|
159
|
-
return Luruju::JudeApiLoader::define_jude_class(class_id) if class_id.to_s.is_jude_class?
|
160
|
-
return Luruju::JudeApiLoader::define_jude_module(class_id) if class_id.to_s.is_jude_module?
|
161
|
-
raise NameError
|
162
|
-
end
|
163
|
-
|
164
|
-
end
|
13
|
+
require 'luruju/jude_api_loader_for_cache'
|