java_model_jrb 0.1.0-java → 0.1.1-java
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/java_model/generate.rb +65 -0
- data/lib/java_model/java_to_json.rb +138 -0
- metadata +4 -2
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'java'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'emf_jruby'
|
4
|
+
require 'json'
|
5
|
+
require 'zip/zipfilesystem'
|
6
|
+
require 'java_to_json_lib'
|
7
|
+
|
8
|
+
$PWD = File.dirname(__FILE__)
|
9
|
+
|
10
|
+
raise "Usage: java_to_json <sources> <models>" unless ARGV.count==2
|
11
|
+
|
12
|
+
sources_path = ARGV[0]
|
13
|
+
models_path = ARGV[1]
|
14
|
+
raise "Path to sources does not exist or it is not a dir: #{sources_path}" unless File.exist?(sources_path) and File.directory?(sources_path)
|
15
|
+
raise "Path to models does not exist or it is not a dir: #{models_path}" unless File.exist?(models_path) and File.directory?(models_path)
|
16
|
+
|
17
|
+
EObject = org.eclipse.emf.ecore.EObject
|
18
|
+
JavaResource = org.emftext.language.java.resource.java.mopp.JavaResource
|
19
|
+
JavaResourceUtil = org.emftext.language.java.resource.java.util.JavaResourceUtil
|
20
|
+
EcoreUtil = org.eclipse.emf.ecore.util.EcoreUtil
|
21
|
+
|
22
|
+
$SRC = sources_path
|
23
|
+
$DEST = models_path
|
24
|
+
$VERBOSE = false
|
25
|
+
|
26
|
+
def translate_dir(src,dest,src_extension,dest_extension,&translate_file)
|
27
|
+
puts "== #{src} -> #{dest} ==" if $VERBOSE
|
28
|
+
Dir["#{src}/*"].each do |fd|
|
29
|
+
if File.directory? fd
|
30
|
+
basename = File.basename(fd)
|
31
|
+
translate_dir("#{src}/#{basename}","#{dest}/#{basename}",src_extension,dest_extension,&translate_file)
|
32
|
+
else
|
33
|
+
if File.extname(fd)==".#{src_extension}"
|
34
|
+
translated_simple_name = "#{File.basename(fd, ".#{src_extension}")}.#{dest_extension}"
|
35
|
+
translated_name = "#{dest}/#{translated_simple_name}"
|
36
|
+
puts "* #{fd} --> #{translated_name}" if $VERBOSE
|
37
|
+
translate_file.call(fd,translated_name)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
$resource_set = create_resource_set()
|
44
|
+
|
45
|
+
translate_dir($SRC,$DEST,'java','json') do |src,dest|
|
46
|
+
if not File.exist? dest
|
47
|
+
puts "<Model from #{src}>"
|
48
|
+
|
49
|
+
#file = java.io.File.new src
|
50
|
+
# java_resource = JavaResourceUtil.getResource file
|
51
|
+
java_resource = get_resource($resource_set, src)
|
52
|
+
|
53
|
+
raise "wrong number of roots" unless java_resource.contents.size == 1
|
54
|
+
root = java_resource.contents.get(0)
|
55
|
+
|
56
|
+
$nextId = 1
|
57
|
+
res = jsonize_java_obj(root)
|
58
|
+
|
59
|
+
dest_dir = File.dirname(dest)
|
60
|
+
FileUtils.mkdir_p(dest_dir)
|
61
|
+
File.open(dest, 'w') do |file|
|
62
|
+
file.write(JSON.pretty_generate(res,:max_nesting => 500))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'java'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'emf_jruby'
|
4
|
+
|
5
|
+
IJavaOptions = org.emftext.language.java.resource.java.IJavaOptions
|
6
|
+
|
7
|
+
def create_resource_set()
|
8
|
+
resource_set = org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.new
|
9
|
+
resource_set.getLoadOptions.put(IJavaOptions.DISABLE_LAYOUT_INFORMATION_RECORDING,true)
|
10
|
+
rf = org.emftext.language.java.resource.java.mopp.JavaResourceFactory.new
|
11
|
+
resource_set.getResourceFactoryRegistry.getExtensionToFactoryMap.put('java',rf)
|
12
|
+
resource_set
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_resource(resource_set,path)
|
16
|
+
resource_set.getResource(org.eclipse.emf.common.util.URI.createFileURI(path),true)
|
17
|
+
end
|
18
|
+
|
19
|
+
def eobject_class_qname(clazz)
|
20
|
+
raise "not implemented (ParentConcreteClassifier: #{clazz.getParentConcreteClassifier}" if clazz.getParentConcreteClassifier!=clazz
|
21
|
+
clazz.getContainingPackageName.join('.')+"."+clazz.name
|
22
|
+
end
|
23
|
+
|
24
|
+
def all_direct_content(root)
|
25
|
+
contents = []
|
26
|
+
root.keys.each do |k|
|
27
|
+
if k.start_with? 'relcont_' and root[k]
|
28
|
+
#puts "Considering rel #{k} = #{root[k]}"
|
29
|
+
if root[k].is_a? Array
|
30
|
+
root[k].each do |c|
|
31
|
+
contents << c
|
32
|
+
end
|
33
|
+
else
|
34
|
+
contents << root[k]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
contents
|
39
|
+
end
|
40
|
+
|
41
|
+
def all_deep_content(root)
|
42
|
+
contents = []
|
43
|
+
all_direct_content(root).each do |c|
|
44
|
+
contents << c
|
45
|
+
contents.concat(all_deep_content(c))
|
46
|
+
end
|
47
|
+
contents
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_deep_content_of_type(root,type)
|
51
|
+
all_deep_content(root).select {|o| o['type']==type}
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_specific_deep_content(root,type,&block)
|
55
|
+
get_deep_content_of_type(root,type).find &block
|
56
|
+
end
|
57
|
+
|
58
|
+
class EClassClassAdapter
|
59
|
+
|
60
|
+
def adapt(eobject,map)
|
61
|
+
map['attr_fullname'] = eobject_class_qname(eobject)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
def getter(field)
|
67
|
+
getter_nb_name = 'get' + field.name.slice(0,1).capitalize + field.name.slice(1..-1)
|
68
|
+
getter_b_name = 'is' + field.name.slice(0,1).capitalize + field.name.slice(1..-1)
|
69
|
+
methods = field.eContainer.members.select {|m| m.java_kind_of? org.emftext.language.java.members.ClassMethod}
|
70
|
+
getter = methods.find {|m| m.name==getter_b_name or m.name==getter_nb_name}
|
71
|
+
getter
|
72
|
+
end
|
73
|
+
|
74
|
+
def setter(field)
|
75
|
+
setter_name = 'set' + field.name.slice(0,1).capitalize + field.name.slice(1..-1)
|
76
|
+
methods = field.eContainer.members.select {|m| m.java_kind_of? org.emftext.language.java.members.ClassMethod}
|
77
|
+
setter = methods.find {|m| m.name==setter_name}
|
78
|
+
setter
|
79
|
+
end
|
80
|
+
|
81
|
+
def field_from_getter(getter)
|
82
|
+
if (getter.name.start_with? 'get' and getter.name.length>3) or (getter.name.start_with? 'is' and getter.name.length>2)
|
83
|
+
field_name = getter.name.slice(3,1).downcase + getter.name.slice(4..-1) if getter.name.start_with? 'get'
|
84
|
+
field_name = getter.name.slice(2,1).downcase + getter.name.slice(3..-1) if getter.name.start_with? 'is'
|
85
|
+
#puts "Field name for getter #{getter.name} #{field_name}"
|
86
|
+
fields = getter.eContainer.members.select {|m| m.java_kind_of? org.emftext.language.java.members.Field}
|
87
|
+
field = fields.find {|f| f.name==field_name}
|
88
|
+
return field
|
89
|
+
else
|
90
|
+
return nil
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def field_from_setter(setter)
|
95
|
+
if setter.name.start_with? 'set' and setter.name.length>3
|
96
|
+
field_name = setter.name.slice(3,1).downcase + setter.name.slice(4..-1) if setter.name.start_with? 'set'
|
97
|
+
#field_name = getter.name.slice(2,1).downcase + getter.name.slice(3..-1) if getter.name.start_with? 'is'
|
98
|
+
#puts "Field name for getter #{getter.name} #{field_name}"
|
99
|
+
fields = setter.eContainer.members.select {|m| m.java_kind_of? org.emftext.language.java.members.Field}
|
100
|
+
field = fields.find {|f| f.name==field_name}
|
101
|
+
return field
|
102
|
+
else
|
103
|
+
return nil
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class EClassClassMethodAdapter
|
108
|
+
|
109
|
+
def adapt(eobject,map)
|
110
|
+
field = field_from_getter(eobject)
|
111
|
+
map['attr_getter'] = field!=nil
|
112
|
+
map['relnoncont_getterFor'] = serialization_id(field) if field
|
113
|
+
map['relnoncont_getterFor'] = nil unless field
|
114
|
+
|
115
|
+
field = field_from_setter(eobject)
|
116
|
+
map['attr_setter'] = field!=nil
|
117
|
+
map['relnoncont_setterFor'] = serialization_id(field) if field
|
118
|
+
map['relnoncont_setterFor'] = nil unless field
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
class EClassFieldAdapter
|
124
|
+
|
125
|
+
def adapt(eobject,map)
|
126
|
+
getter = getter(eobject)
|
127
|
+
map['relnoncont_getter'] = serialization_id(getter) if getter
|
128
|
+
map['relnoncont_getter'] = nil unless getter
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
def jsonize_java_obj(root)
|
134
|
+
jsonize_obj(root,{
|
135
|
+
'http://www.emftext.org/java/classifiers#Class'=> EClassClassAdapter.new,
|
136
|
+
'http://www.emftext.org/java/members#ClassMethod'=> EClassClassMethodAdapter.new,
|
137
|
+
'http://www.emftext.org/java/members#Field'=> EClassFieldAdapter.new})
|
138
|
+
end
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: java_model_jrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.1
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Federico Tomassetti
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: emf_jruby
|
@@ -34,6 +34,8 @@ extensions: []
|
|
34
34
|
extra_rdoc_files: []
|
35
35
|
files:
|
36
36
|
- lib/java_model_jrb.rb
|
37
|
+
- lib/java_model/generate.rb
|
38
|
+
- lib/java_model/java_to_json.rb
|
37
39
|
- lib/jars/org.emftext.commons.antlr3_4_0_3.4.0.v201207310007.jar
|
38
40
|
- lib/jars/org.emftext.commons.layout_1.4.1.v201207310007.jar
|
39
41
|
- lib/jars/org.emftext.language.java.resource.java_1.4.0.v201207310007.jar
|