module Prototype
@app_jar_path = Config.conf[:jar_dir]
if @app_jar_path
Dir[File.join(@app_jar_path, '*.jar')].each {|f| require f }
prefix = "com.system"
include_class("#{prefix}.guimodel.PresentationEntry")
include_class("#{prefix}.guimodel.PresentationGroup")
include_class("#{prefix}.guimodel.PresentationField")
include_class("#{prefix}.guimodel.PresentationFieldIdentifier")
# more ...
prefix = "com.utils"
include_class("#{prefix}.model.ContentItem")
include_class("#{prefix}.model.ContentClass")
include_class("#{prefix}.model.ContentClassNotFoundException")
include_class("#{prefix}.model.impl.DefaultLanguage")
# more ...
else
raise "Error"
end
end
klasses = {
"com.utils" => [ 'guimodel.PresentationEntry', 'guimodel.PresentationGroup'],
"com.system" => [ 'model.ContentItem', 'model.ContentClass' ]
}
klasses.each_pair{|p, k| Prototype.include_nicely_java_class(p, k) }
Refactorings
No refactoring yet !
Ben Marini
November 7, 2009, November 07, 2009 00:08, permalink
Does this not work?
module Prototype
klasses = {
"com.utils" => [ 'guimodel.PresentationEntry', 'guimodel.PresentationGroup'],
"com.system" => [ 'model.ContentItem', 'model.ContentClass' ]
}
klasses.each_pair { |prefix, klass| include_class("#{prefix}.#{klass}") }
end
marek-kowalcze.myopenid.com
November 9, 2009, November 09, 2009 09:05, permalink
Yeah Ben, it worked :) This is current version with allowing class name aliases as well (when You pass block to include_class). I moved it to separate module to re-use it.
module JavaClassLoader
def JavaClassLoader.included(mod)
@mod = mod
end
def JavaClassLoader.include_java_classes(klasses_hash)
klasses_hash.each_pair do |pref, klasses|
klasses.each do |klass_name|
if klass_name.is_a? Hash
@mod.include_class("#{pref}.#{klass_name.keys.first}") { klass_name.values.first }
elsif klass_name.is_a? String
@mod.include_class "#{pref}.#{klass_name}"
end
end
end
end
end
module Prototype
include JavaClassLoader
klasses = {
"guimodel" => [
'PresentationEntry',
{ 'PresentationContentResolverMetaFactory' => 'MetaFactory' } ],
"model" => [ 'ContentClassNotFoundException' ]
}
JavaClassLoader.include_java_classes(klasses)
end
Hi,
i had problems with turning this code into something shorter. The main point is to DRY it a bit in include_class(package) usages. Important is that Java classes should be included in Prototype module.