java_model_jrb 0.1.1-java → 0.1.2-java
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|