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.
@@ -1,65 +1,63 @@
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
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
- 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})
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
@@ -1,14 +1,6 @@
1
- lib = $:.select{|e| e.gsub('java_model_jrb').count>0}
2
- if lib.count==1
3
- lib_path = lib[0]
4
- elsif File.exist?('./lib')
5
- lib_path = './lib'
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-01 00:00:00.000000000 Z
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: []