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.
@@ -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: []