java_model_jrb 0.1.0-java → 0.1.1-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -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