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.
@@ -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.0
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-07-30 00:00:00.000000000 Z
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