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