rgen 0.5.0 → 0.5.1
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.
- data/CHANGELOG +5 -0
- data/Rakefile +3 -3
- data/lib/rgen/metamodel_builder/builder_extensions.rb +6 -5
- data/lib/rgen/model_comparator_base.rb +137 -0
- data/test/metamodel_builder_test.rb +49 -1
- data/test/metamodel_roundtrip_test/TestModel_Regenerated.rb +34 -35
- data/test/metamodel_roundtrip_test/houseMetamodel_Regenerated.ecore +43 -42
- data/test/model_builder/builder_test.rb +2 -44
- data/test/model_builder/ecore_internal.rb +11 -11
- data/test/model_builder/serializer_test.rb +1 -0
- data/test/model_builder/statemachine_metamodel.rb +42 -0
- data/test/model_builder/test_model/statemachine1.rb +23 -0
- data/test/testmodel/ea_testmodel_regenerated.xml +584 -584
- metadata +21 -56
- data/lib/rgen/metamodel_builder/module_extension2.rb +0 -205
- data/test/ea_serializer_test/ea_testmodel_regenerated.xml +0 -821
- data/test/ea_serializer_test/ea_testmodel_regenerated_import.log +0 -3
- data/test/testmodel/ea_testmodel_import.log +0 -1
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rgen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 5
|
8
|
+
- 1
|
9
|
+
version: 0.5.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Martin Thiede
|
@@ -9,7 +14,7 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2009-
|
17
|
+
date: 2009-11-10 00:00:00 +01:00
|
13
18
|
default_executable:
|
14
19
|
dependencies: []
|
15
20
|
|
@@ -24,7 +29,6 @@ extra_rdoc_files:
|
|
24
29
|
- CHANGELOG
|
25
30
|
- MIT-LICENSE
|
26
31
|
files:
|
27
|
-
- lib/ea_support
|
28
32
|
- lib/ea_support/ea_support.rb
|
29
33
|
- lib/ea_support/id_store.rb
|
30
34
|
- lib/ea_support/uml13_ea_metamodel.rb
|
@@ -32,80 +36,61 @@ files:
|
|
32
36
|
- lib/ea_support/uml13_ea_metamodel_generator.rb
|
33
37
|
- lib/ea_support/uml13_ea_to_uml13.rb
|
34
38
|
- lib/ea_support/uml13_to_uml13_ea.rb
|
35
|
-
- lib/instantiators
|
36
|
-
- lib/metamodels
|
37
39
|
- lib/metamodels/uml13_metamodel.rb
|
38
40
|
- lib/metamodels/uml13_metamodel_ext.rb
|
39
|
-
- lib/mmgen
|
40
41
|
- lib/mmgen/metamodel_generator.rb
|
41
42
|
- lib/mmgen/mmgen.rb
|
42
|
-
- lib/mmgen/mm_ext
|
43
43
|
- lib/mmgen/mm_ext/ecore_mmgen_ext.rb
|
44
|
-
- lib/mmgen/templates
|
45
44
|
- lib/mmgen/templates/annotations.tpl
|
46
45
|
- lib/mmgen/templates/metamodel_generator.tpl
|
47
|
-
- lib/rgen
|
48
46
|
- lib/rgen/array_extensions.rb
|
49
47
|
- lib/rgen/auto_class_creator.rb
|
50
|
-
- lib/rgen/ecore
|
51
48
|
- lib/rgen/ecore/ecore.rb
|
52
49
|
- lib/rgen/ecore/ecore_builder_methods.rb
|
53
50
|
- lib/rgen/ecore/ecore_ext.rb
|
54
51
|
- lib/rgen/ecore/ecore_instantiator.rb
|
55
52
|
- lib/rgen/ecore/ecore_transformer.rb
|
56
53
|
- lib/rgen/environment.rb
|
57
|
-
- lib/rgen/instantiator
|
58
54
|
- lib/rgen/instantiator/abstract_instantiator.rb
|
59
55
|
- lib/rgen/instantiator/abstract_xml_instantiator.rb
|
60
56
|
- lib/rgen/instantiator/default_xml_instantiator.rb
|
61
57
|
- lib/rgen/instantiator/ecore_xml_instantiator.rb
|
62
58
|
- lib/rgen/instantiator/nodebased_xml_instantiator.rb
|
63
59
|
- lib/rgen/instantiator/xmi11_instantiator.rb
|
64
|
-
- lib/rgen/metamodel_builder
|
65
60
|
- lib/rgen/metamodel_builder/builder_extensions.rb
|
66
61
|
- lib/rgen/metamodel_builder/builder_runtime.rb
|
67
62
|
- lib/rgen/metamodel_builder/data_types.rb
|
68
|
-
- lib/rgen/metamodel_builder/intermediate
|
69
63
|
- lib/rgen/metamodel_builder/intermediate/annotation.rb
|
70
64
|
- lib/rgen/metamodel_builder/metamodel_description.rb
|
71
65
|
- lib/rgen/metamodel_builder/mm_multiple.rb
|
72
66
|
- lib/rgen/metamodel_builder/module_extension.rb
|
73
|
-
- lib/rgen/metamodel_builder/module_extension2.rb
|
74
67
|
- lib/rgen/metamodel_builder.rb
|
75
68
|
- lib/rgen/method_delegation.rb
|
76
|
-
- lib/rgen/model_builder
|
77
69
|
- lib/rgen/model_builder/builder_context.rb
|
78
70
|
- lib/rgen/model_builder/model_serializer.rb
|
79
71
|
- lib/rgen/model_builder/reference_resolver.rb
|
80
72
|
- lib/rgen/model_builder.rb
|
81
73
|
- lib/rgen/model_comparator.rb
|
74
|
+
- lib/rgen/model_comparator_base.rb
|
82
75
|
- lib/rgen/model_dumper.rb
|
83
76
|
- lib/rgen/name_helper.rb
|
84
|
-
- lib/rgen/serializer
|
85
77
|
- lib/rgen/serializer/xmi11_serializer.rb
|
86
78
|
- lib/rgen/serializer/xmi20_serializer.rb
|
87
79
|
- lib/rgen/serializer/xml_serializer.rb
|
88
|
-
- lib/rgen/template_language
|
89
80
|
- lib/rgen/template_language/directory_template_container.rb
|
90
81
|
- lib/rgen/template_language/output_handler.rb
|
91
82
|
- lib/rgen/template_language/template_container.rb
|
92
83
|
- lib/rgen/template_language/template_helper.rb
|
93
84
|
- lib/rgen/template_language.rb
|
94
85
|
- lib/rgen/transformer.rb
|
95
|
-
- lib/serializers
|
96
|
-
- lib/transformers
|
97
86
|
- lib/transformers/ecore_to_uml13.rb
|
98
87
|
- lib/transformers/uml13_to_ecore.rb
|
99
88
|
- test/array_extensions_test.rb
|
100
89
|
- test/ea_instantiator_test.rb
|
101
|
-
- test/ea_serializer_test
|
102
|
-
- test/ea_serializer_test/ea_testmodel_regenerated.xml
|
103
|
-
- test/ea_serializer_test/ea_testmodel_regenerated_import.log
|
104
90
|
- test/ea_serializer_test.rb
|
105
91
|
- test/ecore_self_test.rb
|
106
92
|
- test/environment_test.rb
|
107
93
|
- test/metamodel_builder_test.rb
|
108
|
-
- test/metamodel_roundtrip_test
|
109
94
|
- test/metamodel_roundtrip_test/houseMetamodel.ecore
|
110
95
|
- test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb
|
111
96
|
- test/metamodel_roundtrip_test/houseMetamodel_Regenerated.ecore
|
@@ -113,7 +98,6 @@ files:
|
|
113
98
|
- test/metamodel_roundtrip_test/TestModel_Regenerated.rb
|
114
99
|
- test/metamodel_roundtrip_test.rb
|
115
100
|
- test/method_delegation_test.rb
|
116
|
-
- test/model_builder
|
117
101
|
- test/model_builder/builder_context_test.rb
|
118
102
|
- test/model_builder/builder_test.rb
|
119
103
|
- test/model_builder/ecore_internal.rb
|
@@ -121,88 +105,68 @@ files:
|
|
121
105
|
- test/model_builder/ecore_original_regenerated.rb
|
122
106
|
- test/model_builder/reference_resolver_test.rb
|
123
107
|
- test/model_builder/serializer_test.rb
|
108
|
+
- test/model_builder/statemachine_metamodel.rb
|
109
|
+
- test/model_builder/test_model/statemachine1.rb
|
124
110
|
- test/model_builder_test.rb
|
125
111
|
- test/output_handler_test.rb
|
126
112
|
- test/rgen_test.rb
|
127
|
-
- test/template_language_test
|
128
113
|
- test/template_language_test/expected_result1.txt
|
129
114
|
- test/template_language_test/expected_result2.txt
|
130
115
|
- test/template_language_test/expected_result3.txt
|
131
116
|
- test/template_language_test/indentStringTestDefaultIndent.out
|
132
117
|
- test/template_language_test/indentStringTestTabIndent.out
|
133
|
-
- test/template_language_test/templates
|
134
|
-
- test/template_language_test/templates/code
|
135
118
|
- test/template_language_test/templates/code/array.tpl
|
136
|
-
- test/template_language_test/templates/content
|
137
119
|
- test/template_language_test/templates/content/author.tpl
|
138
120
|
- test/template_language_test/templates/content/chapter.tpl
|
139
|
-
- test/template_language_test/templates/define_local_test
|
140
121
|
- test/template_language_test/templates/define_local_test/local.tpl
|
141
122
|
- test/template_language_test/templates/define_local_test/test.tpl
|
142
|
-
- test/template_language_test/templates/evaluate_test
|
143
123
|
- test/template_language_test/templates/evaluate_test/test.tpl
|
144
124
|
- test/template_language_test/templates/indent_string_test.tpl
|
145
|
-
- test/template_language_test/templates/index
|
146
|
-
- test/template_language_test/templates/index/c
|
147
125
|
- test/template_language_test/templates/index/c/cmod.tpl
|
148
126
|
- test/template_language_test/templates/index/chapter.tpl
|
149
127
|
- test/template_language_test/templates/no_backslash_r_test.tpl
|
150
|
-
- test/template_language_test/templates/no_indent_test
|
151
128
|
- test/template_language_test/templates/no_indent_test/no_indent.tpl
|
152
|
-
- test/template_language_test/templates/no_indent_test/sub1
|
153
129
|
- test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl
|
154
130
|
- test/template_language_test/templates/no_indent_test/test.tpl
|
155
131
|
- test/template_language_test/templates/no_indent_test/test2.tpl
|
156
132
|
- test/template_language_test/templates/no_indent_test/test3.tpl
|
157
133
|
- test/template_language_test/templates/null_context_test.tpl
|
158
134
|
- test/template_language_test/templates/root.tpl
|
159
|
-
- test/template_language_test/templates/template_resolution_test
|
160
|
-
- test/template_language_test/templates/template_resolution_test/sub1
|
161
135
|
- test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl
|
162
136
|
- test/template_language_test/templates/template_resolution_test/sub1.tpl
|
163
137
|
- test/template_language_test/templates/template_resolution_test/test.tpl
|
164
138
|
- test/template_language_test/testout.txt
|
165
139
|
- test/template_language_test.rb
|
166
|
-
- test/testmodel
|
167
140
|
- test/testmodel/class_model_checker.rb
|
168
141
|
- test/testmodel/ea_testmodel.eap
|
169
142
|
- test/testmodel/ea_testmodel.xml
|
170
|
-
- test/testmodel/ea_testmodel_import.log
|
171
143
|
- test/testmodel/ea_testmodel_partial.xml
|
172
144
|
- test/testmodel/ea_testmodel_regenerated.xml
|
173
145
|
- test/testmodel/ecore_model_checker.rb
|
174
146
|
- test/testmodel/manual_testmodel.xml
|
175
147
|
- test/testmodel/object_model_checker.rb
|
176
148
|
- test/transformer_test.rb
|
177
|
-
- test/xml_instantiator_test
|
178
149
|
- test/xml_instantiator_test/simple_ecore_model_checker.rb
|
179
150
|
- test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb
|
180
151
|
- test/xml_instantiator_test/simple_xmi_metamodel.rb
|
181
152
|
- test/xml_instantiator_test/simple_xmi_to_ecore.rb
|
182
153
|
- test/xml_instantiator_test.rb
|
183
|
-
- redist/xmlscan
|
184
154
|
- redist/xmlscan/ChangeLog
|
185
|
-
- redist/xmlscan/doc
|
186
155
|
- redist/xmlscan/doc/changes.html
|
187
156
|
- redist/xmlscan/doc/changes.rd
|
188
|
-
- redist/xmlscan/doc/en
|
189
157
|
- redist/xmlscan/doc/en/conformance.html
|
190
158
|
- redist/xmlscan/doc/en/conformance.rd
|
191
159
|
- redist/xmlscan/doc/en/manual.html
|
192
160
|
- redist/xmlscan/doc/en/manual.rd
|
193
|
-
- redist/xmlscan/doc/ja
|
194
161
|
- redist/xmlscan/doc/ja/conformance.ja.html
|
195
162
|
- redist/xmlscan/doc/ja/conformance.ja.rd
|
196
163
|
- redist/xmlscan/doc/ja/manual.ja.html
|
197
164
|
- redist/xmlscan/doc/ja/manual.ja.rd
|
198
|
-
- redist/xmlscan/doc/src
|
199
165
|
- redist/xmlscan/doc/src/conformance.rd.src
|
200
166
|
- redist/xmlscan/doc/src/langsplit.rb
|
201
167
|
- redist/xmlscan/doc/src/Makefile
|
202
168
|
- redist/xmlscan/doc/src/manual.rd.src
|
203
169
|
- redist/xmlscan/install.rb
|
204
|
-
- redist/xmlscan/lib
|
205
|
-
- redist/xmlscan/lib/xmlscan
|
206
170
|
- redist/xmlscan/lib/xmlscan/encoding.rb
|
207
171
|
- redist/xmlscan/lib/xmlscan/htmlscan.rb
|
208
172
|
- redist/xmlscan/lib/xmlscan/namespace.rb
|
@@ -211,17 +175,13 @@ files:
|
|
211
175
|
- redist/xmlscan/lib/xmlscan/version.rb
|
212
176
|
- redist/xmlscan/lib/xmlscan/visitor.rb
|
213
177
|
- redist/xmlscan/lib/xmlscan/xmlchar.rb
|
214
|
-
- redist/xmlscan/memo
|
215
178
|
- redist/xmlscan/memo/CONFORMANCE
|
216
179
|
- redist/xmlscan/memo/contentspec.ry
|
217
180
|
- redist/xmlscan/memo/PRODUCTIONS
|
218
181
|
- redist/xmlscan/README
|
219
|
-
- redist/xmlscan/samples
|
220
182
|
- redist/xmlscan/samples/chibixml.rb
|
221
183
|
- redist/xmlscan/samples/getxmlchar.rb
|
222
184
|
- redist/xmlscan/samples/rexml.rb
|
223
|
-
- redist/xmlscan/samples/xmlbench
|
224
|
-
- redist/xmlscan/samples/xmlbench/parser
|
225
185
|
- redist/xmlscan/samples/xmlbench/parser/chibixml.rb
|
226
186
|
- redist/xmlscan/samples/xmlbench/parser/nqxml.rb
|
227
187
|
- redist/xmlscan/samples/xmlbench/parser/rexml.rb
|
@@ -234,7 +194,6 @@ files:
|
|
234
194
|
- redist/xmlscan/samples/xmlbench.rb
|
235
195
|
- redist/xmlscan/samples/xmlconftest.rb
|
236
196
|
- redist/xmlscan/test.rb
|
237
|
-
- redist/xmlscan/tests
|
238
197
|
- redist/xmlscan/tests/deftestcase.rb
|
239
198
|
- redist/xmlscan/tests/runtest.rb
|
240
199
|
- redist/xmlscan/tests/testall.rb
|
@@ -251,7 +210,9 @@ files:
|
|
251
210
|
- MIT-LICENSE
|
252
211
|
- Rakefile
|
253
212
|
has_rdoc: true
|
254
|
-
homepage: ruby-gen.org
|
213
|
+
homepage: http://ruby-gen.org
|
214
|
+
licenses: []
|
215
|
+
|
255
216
|
post_install_message:
|
256
217
|
rdoc_options:
|
257
218
|
- --main
|
@@ -267,23 +228,27 @@ rdoc_options:
|
|
267
228
|
require_paths:
|
268
229
|
- lib
|
269
230
|
required_ruby_version: !ruby/object:Gem::Requirement
|
231
|
+
none: false
|
270
232
|
requirements:
|
271
233
|
- - ">="
|
272
234
|
- !ruby/object:Gem::Version
|
235
|
+
segments:
|
236
|
+
- 0
|
273
237
|
version: "0"
|
274
|
-
version:
|
275
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
|
+
none: false
|
276
240
|
requirements:
|
277
241
|
- - ">="
|
278
242
|
- !ruby/object:Gem::Version
|
243
|
+
segments:
|
244
|
+
- 0
|
279
245
|
version: "0"
|
280
|
-
version:
|
281
246
|
requirements: []
|
282
247
|
|
283
248
|
rubyforge_project: rgen
|
284
|
-
rubygems_version: 1.
|
249
|
+
rubygems_version: 1.3.7
|
285
250
|
signing_key:
|
286
|
-
specification_version:
|
251
|
+
specification_version: 3
|
287
252
|
summary: Ruby Modelling and Generator Framework
|
288
253
|
test_files: []
|
289
254
|
|
@@ -1,205 +0,0 @@
|
|
1
|
-
require 'rgen/ecore/ecore_ext'
|
2
|
-
|
3
|
-
module RGen
|
4
|
-
|
5
|
-
module ModelBuilder
|
6
|
-
|
7
|
-
class BuilderContext
|
8
|
-
attr_accessor :contextElement, :resolver
|
9
|
-
end
|
10
|
-
|
11
|
-
class ReferenceResolver
|
12
|
-
ResolverJob = Struct.new(:receiver, :reference, :namespace, :string)
|
13
|
-
|
14
|
-
class ResolverException < Exception
|
15
|
-
end
|
16
|
-
|
17
|
-
def addJob(job)
|
18
|
-
@jobs ||= []
|
19
|
-
@jobs << job
|
20
|
-
end
|
21
|
-
|
22
|
-
def resolve(env=nil)
|
23
|
-
(@jobs || []).each do |job|
|
24
|
-
begin
|
25
|
-
target = resolveReference(env, job.namespace, job.string.split("."), job.reference.eType.instanceClass, true)
|
26
|
-
rescue ResolverException => e
|
27
|
-
raise ResolverException.new("Can not resolve reference #{job.string}: #{e.message}")
|
28
|
-
end
|
29
|
-
if job.reference.many
|
30
|
-
job.receiver.addGeneric(job.reference.name, target)
|
31
|
-
else
|
32
|
-
job.receiver.setGeneric(job.reference.name, target)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def resolveReference(env, namespace, nameParts, targetClass, toplevel=false)
|
40
|
-
#puts "resolveReferences nameParts " + nameParts.inspect + " namespace #{namespace}"
|
41
|
-
firstPart, *restParts = nameParts
|
42
|
-
if namespace
|
43
|
-
children = elementChildren(namespace)
|
44
|
-
#puts children.inspect
|
45
|
-
#puts "looking for a element named #{firstPart}"
|
46
|
-
elements = children.select{|e| e.respond_to?(:name) && e.name == firstPart}
|
47
|
-
#puts elements.inspect
|
48
|
-
#puts elementParents(namespace).inspect
|
49
|
-
if elements.empty? && elementParents(namespace).size > 0 && toplevel
|
50
|
-
#puts "Trying parent"
|
51
|
-
raise ResolverException.new("Element #{namespace} has multiple parents") if elementParents(namespace).size > 1
|
52
|
-
elements << resolveReference(env, elementParents(namespace).first, nameParts, targetClass, true)
|
53
|
-
else
|
54
|
-
where = "within children of #{namespace}"
|
55
|
-
where += " named #{namespace.name}" if namespace.respond_to?(:name)
|
56
|
-
end
|
57
|
-
elsif env
|
58
|
-
elements = env.find(:class => targetClass, :name => firstPart)
|
59
|
-
where = "in environment"
|
60
|
-
else
|
61
|
-
raise ResolverException.new("Neither namespace nor environment specified")
|
62
|
-
end
|
63
|
-
raise ResolverException.new("Can not find element named #{firstPart} #{where}") if elements.size == 0
|
64
|
-
raise ResolverException.new("Multiple elements named #{firstPart} found #{where}") if elements.size > 1
|
65
|
-
if restParts.size > 0
|
66
|
-
resolveReference(env, elements.first, restParts, targetClass)
|
67
|
-
else
|
68
|
-
elements.first
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def elementChildren(element)
|
73
|
-
@elementChildren ||= {}
|
74
|
-
return @elementChildren[element] if @elementChildren[element]
|
75
|
-
children = element.class.ecore.eAllReferences.select{|r| r.containment}.collect do |r|
|
76
|
-
element.getGeneric(r.name)
|
77
|
-
end.flatten.compact
|
78
|
-
@elementChildren[element] = children
|
79
|
-
end
|
80
|
-
|
81
|
-
def elementParents(element)
|
82
|
-
@elementParents ||= {}
|
83
|
-
return @elementParents[element] if @elementParents[element]
|
84
|
-
parents = element.class.ecore.eAllReferences.select{|r| r.eOpposite && r.eOpposite.containment}.collect do |r|
|
85
|
-
element.getGeneric(r.name)
|
86
|
-
end.flatten.compact
|
87
|
-
@elementParents[element] = parents
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
# this module takes up helper methods to avoid littering the package modules
|
92
|
-
module Helper
|
93
|
-
class << self
|
94
|
-
def processArguments(args)
|
95
|
-
unless (args.size == 2 && args.first.is_a?(String) && args.last.is_a?(Hash)) ||
|
96
|
-
(args.size == 1 && (args.first.is_a?(String) || args.first.is_a?(Hash)))
|
97
|
-
raise "Provide a Hash to set feature values, " +
|
98
|
-
"optionally the first argument may be a String specifying " +
|
99
|
-
"the value of the \"name\" attribute."
|
100
|
-
end
|
101
|
-
if args.last.is_a?(Hash)
|
102
|
-
argHash = args.last
|
103
|
-
else
|
104
|
-
argHash = {}
|
105
|
-
end
|
106
|
-
argHash[:name] ||= args.first if args.first.is_a?(String)
|
107
|
-
argHash
|
108
|
-
end
|
109
|
-
|
110
|
-
def processArgHash(argHash, eClass)
|
111
|
-
resolverJobs = []
|
112
|
-
asRole = nil
|
113
|
-
argHash.each_pair do |k,v|
|
114
|
-
if k == :as
|
115
|
-
asRole = v
|
116
|
-
argHash.delete(k)
|
117
|
-
elsif v.is_a?(String)
|
118
|
-
ref = eClass.eAllReferences.find{|r| r.name == k.to_s}
|
119
|
-
if ref
|
120
|
-
argHash.delete(k)
|
121
|
-
resolverJobs << ReferenceResolver::ResolverJob.new(nil, ref, nil, v)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
[ resolverJobs, asRole ]
|
126
|
-
end
|
127
|
-
|
128
|
-
def associateWithContextElement(element, contextElement, asRole)
|
129
|
-
return unless contextElement
|
130
|
-
contextClass = contextElement.class.ecore
|
131
|
-
if asRole
|
132
|
-
asRoleRef = contextClass.eAllReferences.find{|r| r.name == asRole.to_s}
|
133
|
-
raise "Context class #{contextClass.name} has no reference named #{asRole}" unless asRoleRef
|
134
|
-
ref = asRoleRef
|
135
|
-
else
|
136
|
-
possibleContainmentRefs = contextClass.eAllReferences.select { |r| r.containment &&
|
137
|
-
(element.class.ecore.eAllSuperTypes << element.class.ecore).include?(r.eType) }
|
138
|
-
if possibleContainmentRefs.size == 1
|
139
|
-
ref = possibleContainmentRefs.first
|
140
|
-
elsif possibleContainmentRefs.size == 0
|
141
|
-
raise "Context class #{contextClass.name} can not contain a #{element.class.ecore.name}"
|
142
|
-
else
|
143
|
-
raise "Context class #{contextClass.name} has several containment references to a #{element.class.ecore.name}." +
|
144
|
-
" Clearify using \":as => <role>\""
|
145
|
-
end
|
146
|
-
end
|
147
|
-
if ref.many
|
148
|
-
contextElement.addGeneric(ref.name, element)
|
149
|
-
else
|
150
|
-
contextElement.setGeneric(ref.name, element)
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
end
|
157
|
-
|
158
|
-
module MetamodelBuilder
|
159
|
-
|
160
|
-
module ModuleExtension
|
161
|
-
|
162
|
-
def method_missing(m, *args, &block)
|
163
|
-
return super unless self.ecore.is_a?(RGen::ECore::EPackage)
|
164
|
-
className = m.to_s[0..0].upcase + m.to_s[1..-1]
|
165
|
-
eClass = self.ecore.eClasses.find{|c| c.name == className}
|
166
|
-
return super unless eClass
|
167
|
-
argHash = ModelBuilder::Helper.processArguments(args)
|
168
|
-
resolverJobs, asRole = ModelBuilder::Helper.processArgHash(argHash, eClass)
|
169
|
-
element = eClass.instanceClass.new(argHash)
|
170
|
-
if @builderContext
|
171
|
-
ModelBuilder::Helper.associateWithContextElement(element, @builderContext.contextElement, asRole)
|
172
|
-
resolver = @builderContext.resolver
|
173
|
-
else
|
174
|
-
resolver = ModelBuilder::ReferenceResolver.new
|
175
|
-
end
|
176
|
-
resolverJobs.each do |job|
|
177
|
-
job.receiver = element
|
178
|
-
job.namespace = @builderContext && @builderContext.contextElement
|
179
|
-
resolver.addJob(job)
|
180
|
-
end
|
181
|
-
# process block
|
182
|
-
if block
|
183
|
-
if @builderContext
|
184
|
-
@builderContext, oldContext = @builderContext.dup, @builderContext
|
185
|
-
else
|
186
|
-
@builderContext = ModelBuilder::BuilderContext.new
|
187
|
-
@builderContext.resolver = resolver
|
188
|
-
oldContext = nil
|
189
|
-
end
|
190
|
-
@builderContext.contextElement = element
|
191
|
-
instance_eval(&block)
|
192
|
-
@builderContext = oldContext
|
193
|
-
if oldContext.nil?
|
194
|
-
# we are back on toplevel
|
195
|
-
resolver.resolve
|
196
|
-
end
|
197
|
-
end
|
198
|
-
element
|
199
|
-
end
|
200
|
-
|
201
|
-
end
|
202
|
-
|
203
|
-
end
|
204
|
-
|
205
|
-
end
|