java_model_jrb 0.1.0-java → 0.1.1-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|