Module: JavaModel

Defined in:
lib/java_model/java_to_json.rb,
lib/java_model/model_building.rb,
lib/java_model/info_extraction.rb

Overview

TODO put in modules…

Defined Under Namespace

Modules: InfoExtraction Classes: EClassClassAdapter, EClassClassMethodAdapter, EClassFieldAdapter

Constant Summary collapse

IJavaOptions =
org.emftext.language.java.resource.java.IJavaOptions
ADAPTERS_MAP =
{
	'http://www.emftext.org/java/classifiers#Class'=> EClassClassAdapter.new,
	'http://www.emftext.org/java/members#ClassMethod'=> EClassClassMethodAdapter.new,
	'http://www.emftext.org/java/members#Field'=> EClassFieldAdapter.new
}

Class Method Summary collapse

Class Method Details

.all_deep_content(root) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/java_model/java_to_json.rb', line 46

def self.all_deep_content(root)
	contents = []
	all_direct_content(root).each do |c|
		contents << c
		contents.concat(all_deep_content(c))
	end
	contents
end

.all_direct_content(root) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/java_model/java_to_json.rb', line 29

def self.all_direct_content(root)
	contents = []
	root.keys.each do |k|
		if k.start_with? 'relcont_' and root[k]
			#puts "Considering rel #{k} = #{root[k]}"
			if root[k].is_a? Array 
				root[k].each do |c|
					contents << c
				end
			else
				contents << root[k]
			end
		end
	end
	contents
end

.create_resource_setObject



12
13
14
15
16
17
18
# File 'lib/java_model/java_to_json.rb', line 12

def self.create_resource_set()
	resource_set = org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.new
	resource_set.getLoadOptions.put(IJavaOptions.DISABLE_LAYOUT_INFORMATION_RECORDING,true)
	rf = org.emftext.language.java.resource.java.mopp.JavaResourceFactory.new
	resource_set.getResourceFactoryRegistry.getExtensionToFactoryMap.put('java',rf)
	resource_set
end

.eobject_class_qname(clazz) ⇒ Object



24
25
26
27
# File 'lib/java_model/java_to_json.rb', line 24

def self.eobject_class_qname(clazz)
	raise "not implemented (ParentConcreteClassifier: #{clazz.getParentConcreteClassifier}" if clazz.getParentConcreteClassifier!=clazz
	clazz.getContainingPackageName.join('.')+"."+clazz.name
end

.field_from_getter(getter) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/java_model/java_to_json.rb', line 86

def self.field_from_getter(getter)
	if (getter.name.start_with? 'get' and getter.name.length>3) or (getter.name.start_with? 'is' and getter.name.length>2)
		field_name = getter.name.slice(3,1).downcase + getter.name.slice(4..-1) if getter.name.start_with? 'get'
		field_name = getter.name.slice(2,1).downcase + getter.name.slice(3..-1) if getter.name.start_with? 'is'
		#puts "Field name for getter #{getter.name} #{field_name}"
		fields = getter.eContainer.members.select {|m| m.java_kind_of? org.emftext.language.java.members.Field}
		field = fields.find {|f| f.name==field_name}
		return field
	else
		return nil
	end	
end

.field_from_setter(setter) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/java_model/java_to_json.rb', line 99

def self.field_from_setter(setter)
	if setter.name.start_with? 'set' and setter.name.length>3
		field_name = setter.name.slice(3,1).downcase + setter.name.slice(4..-1) if setter.name.start_with? 'set'
		#field_name = getter.name.slice(2,1).downcase + getter.name.slice(3..-1) if getter.name.start_with? 'is'
		#puts "Field name for getter #{getter.name} #{field_name}"
		fields = setter.eContainer.members.select {|m| m.java_kind_of? org.emftext.language.java.members.Field}
		field = fields.find {|f| f.name==field_name}
		return field
	else
		return nil
	end	
end

.generate_java_model_per_file(src, dest, model_ext = 'java.lm', max_nesting = 500) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/java_model/model_building.rb', line 17

def self.generate_java_model_per_file(src,dest,model_ext='java.lm',max_nesting=500)
	LightModels::ModelBuilding.generate_model_per_file(src,dest) do |src|
		java_resource = JavaModel.get_resource(@resource_set, src)
		raise "wrong number of roots" unless java_resource.contents.size == 1
		root = java_resource.contents.get(0)
		LightModels::Serialization.eobject_to_model(root,JavaModel::ADAPTERS_MAP)
	end
end

.generate_java_models_in_dir(src, dest, model_ext = 'java.lm', max_nesting = 500) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/java_model/model_building.rb', line 8

def self.generate_java_models_in_dir(src,dest,model_ext='java.lm',max_nesting=500)
	LightModels::ModelBuilding.generate_models_in_dir(src,dest,'java',model_ext,max_nesting) do |src|
		java_resource = JavaModel.get_resource(@resource_set, src)
		raise "wrong number of roots" unless java_resource.contents.size == 1
		root = java_resource.contents.get(0)
		LightModels::Serialization.eobject_to_model(root,JavaModel::ADAPTERS_MAP)
	end
end

.get_deep_content_of_type(root, type) ⇒ Object



55
56
57
# File 'lib/java_model/java_to_json.rb', line 55

def self.get_deep_content_of_type(root,type)
	all_deep_content(root).select {|o| o['type']==type}
end

.get_resource(resource_set, path) ⇒ Object



20
21
22
# File 'lib/java_model/java_to_json.rb', line 20

def self.get_resource(resource_set,path)
	resource_set.getResource(org.eclipse.emf.common.util.URI.createFileURI(path),true)
end

.get_specific_deep_content(root, type, &block) ⇒ Object



59
60
61
# File 'lib/java_model/java_to_json.rb', line 59

def self.get_specific_deep_content(root,type,&block)
	get_deep_content_of_type(root,type).find &block
end

.getter(field) ⇒ Object



71
72
73
74
75
76
77
# File 'lib/java_model/java_to_json.rb', line 71

def self.getter(field)
	getter_nb_name = 'get' + field.name.slice(0,1).capitalize + field.name.slice(1..-1)
	getter_b_name  = 'is' + field.name.slice(0,1).capitalize + field.name.slice(1..-1)
	methods = field.eContainer.members.select {|m| m.java_kind_of? org.emftext.language.java.members.ClassMethod}
	getter = methods.find {|m| m.name==getter_b_name or m.name==getter_nb_name}
	getter
end

.jsonize_java_obj(root) ⇒ Object



145
146
147
# File 'lib/java_model/java_to_json.rb', line 145

def self.jsonize_java_obj(root)
	LightModels::Serialization::jsonize_obj(root,ADAPTERS_MAP)
end

.setter(field) ⇒ Object



79
80
81
82
83
84
# File 'lib/java_model/java_to_json.rb', line 79

def self.setter(field)
	setter_name = 'set' + field.name.slice(0,1).capitalize + field.name.slice(1..-1)
	methods = field.eContainer.members.select {|m| m.java_kind_of? org.emftext.language.java.members.ClassMethod}
	setter = methods.find {|m| m.name==setter_name}
	setter
end