expressir 1.2.4-arm64-darwin → 1.2.5-arm64-darwin
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.
- checksums.yaml +4 -4
- data/.cross_rubies +0 -6
- data/.github/workflows/rake.yml +200 -9
- data/.gitignore +7 -2
- data/.gitmodules +3 -0
- data/.rubocop.yml +13 -4
- data/Rakefile +4 -1
- data/bin/console +0 -1
- data/bin/rspec +3 -3
- data/exe/expressir +4 -2
- data/exe/format +1 -1
- data/exe/format-test +25 -25
- data/exe/generate-parser +16 -13
- data/expressir.gemspec +11 -9
- data/lib/expressir/config.rb +1 -1
- data/lib/expressir/express/2.7/express_parser.bundle +0 -0
- data/lib/expressir/express/3.0/express_parser.bundle +0 -0
- data/lib/expressir/express/3.1/express_parser.bundle +0 -0
- data/lib/expressir/express/parser.rb +2 -2
- data/lib/expressir/express/visitor.rb +7 -5
- data/lib/expressir/model.rb +78 -78
- data/lib/expressir/version.rb +1 -1
- data/rakelib/antlr4-native.rake +63 -0
- data/rakelib/cross-ruby.rake +213 -162
- data/spec/acceptance/version_spec.rb +7 -2
- data/spec/expressir/express/cache_spec.rb +8 -5
- data/spec/expressir/express/formatter_spec.rb +16 -8
- data/spec/expressir/express/parser_spec.rb +17 -11
- data/spec/expressir/model/model_element_spec.rb +154 -146
- metadata +52 -61
- data/demo.rb +0 -18
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
- data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
- data/original/examples/employment/eclipse/.project +0 -17
- data/original/examples/employment/eclipse/Export/Employment.png +0 -0
- data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
- data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
- data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
- data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
- data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
- data/original/examples/employment/eclipse/readme.txt +0 -7
- data/original/examples/employment/employment_schema.exp +0 -33
- data/original/examples/employment/employment_schema.rb +0 -232
- data/original/examples/employment/employment_schema.xml +0 -93
- data/original/examples/employment/employment_schema___module.rb +0 -46
- data/original/examples/employment/employment_schema___p28attr.rb +0 -126
- data/original/examples/employment/employment_schema___p28inst.rb +0 -26
- data/original/examples/employment/example_employment_data.xml +0 -1
- data/original/examples/employment/example_employment_data_copy.xml +0 -1
- data/original/examples/employment/example_employment_reader.rb +0 -30
- data/original/examples/employment/example_employment_writer.rb +0 -51
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
- data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
- data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
- data/original/exp2ruby.rb +0 -525
- data/original/expsm.rb +0 -34
- data/original/mapping_owl.rb +0 -1018
- data/original/mapping_sysml.rb +0 -2281
- data/original/mapping_uml2.rb +0 -599
- data/original/mapping_uml2_eclipse.rb +0 -433
- data/original/reeper.rb +0 -134
- data/spec/expressr_spec.rb +0 -5
data/original/mapping_uml2.rb
DELETED
@@ -1,599 +0,0 @@
|
|
1
|
-
require 'erb'
|
2
|
-
# EXPRESS to UML 2 Mapping
|
3
|
-
# Version 0.1
|
4
|
-
#
|
5
|
-
# This function navigates the EXPRESS STEPMod Model Ruby Classes
|
6
|
-
# and performs a structural EXPRESS-to-UML2 (2.1.2) mapping using Ruby ERB templates.
|
7
|
-
# The output is in XMI 2.1 syntax in a file named <schema>.xmi if one schema input and 'Model.xmi' if more than one schema input.
|
8
|
-
#
|
9
|
-
# Integer, Boolean, String -> UML equivalent builtin type
|
10
|
-
# Real, Number, Binary, Logical -> New PrimitiveType
|
11
|
-
# Schema -> Package
|
12
|
-
# Entity (subtype of) -> Class (Generalization)
|
13
|
-
# Select Type -> Interface and InterfaceRealization
|
14
|
-
# Enum Type -> Enumeration and EnumerationLiteral
|
15
|
-
# Explicit Attribute (Optional) Primitive or Enum -> Property owned by Class (with lower)
|
16
|
-
# Explicit Attribute (Optional) Entity -> Property owned by Class (with lower) plus Association owning other end property
|
17
|
-
# Explicit Attribute 1-D SET, BAG, LIST of Select or Entity -> Property owned by Class (with lower)
|
18
|
-
# plus Association owning other end property and multiplicity, unique and ordered set
|
19
|
-
# Explicit Attribute 1-D SET, BAG, LIST of Primitive or Enum -> Property owned by Class and multiplicity, unique and ordered set
|
20
|
-
# Explicit Attribute of Entity/Select/Builtin Redeclaration (Renamed) -> Property with (new) name that redefines inherited Property
|
21
|
-
# Inverse Attribute -> Association end adjustment
|
22
|
-
# Inverse Attribute Redeclaration (Renamed) -> Property with (new) name that redefines inherited Property
|
23
|
-
# USE or REFERENCE (even with named items) -> UML PackageImport between Packages
|
24
|
-
#
|
25
|
-
#######################################################################################
|
26
|
-
|
27
|
-
def map_from_express( mapinput )
|
28
|
-
|
29
|
-
# Enter file name here to override defaults (<schema>.xmi if one schema, and Model.xmi if more than one)
|
30
|
-
output_xmi_filename = nil
|
31
|
-
|
32
|
-
# datatypes for builtin types that map directly to UML
|
33
|
-
datatype_hash = Hash.new
|
34
|
-
datatype_hash["INTEGER"] = 'http://schema.omg.org/spec/UML/2.1.2/uml.xml#Integer'
|
35
|
-
datatype_hash["BOOLEAN"] = 'http://schema.omg.org/spec/UML/2.1.2/uml.xml#Boolean'
|
36
|
-
datatype_hash["STRING"] = 'http://schema.omg.org/spec/UML/2.1.2/uml.xml#String'
|
37
|
-
|
38
|
-
# XMI File Start Template (includes datatypes for builtin with no direct UML equivalent)
|
39
|
-
overall_start_template = %{<?xml version="1.0" encoding="UTF-8"?>
|
40
|
-
<uml:Model xmi:version = "2.1" xmlns:xmi = "http://schema.omg.org/spec/XMI/2.1" xmlns:uml = "http://schema.omg.org/spec/UML/2.1.2" name = "UMLfromEXPRESS" xmi:id = "_0">
|
41
|
-
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="REAL" name="Real" />
|
42
|
-
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="NUMBER" name="Number" />
|
43
|
-
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="BINARY" name="Binary" />
|
44
|
-
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="LOGICAL" name="Logical" />}
|
45
|
-
|
46
|
-
# XMI File End Template
|
47
|
-
overall_end_template = %{</uml:Model>}
|
48
|
-
|
49
|
-
# SCHEMA Start Template
|
50
|
-
schema_start_template = %{<packagedElement xmi:type = "uml:Package" xmi:id = "_1_<%= schema.name %>" name = "<%= schema.name %>" visibility = "public">}
|
51
|
-
|
52
|
-
# SCHEMA INTERFACE Template
|
53
|
-
schema_interface_template = %{<packageImport xmi:type='uml:PackageImport' xmi:id='_2_<%= schema.name %>-<%= interfaced_schema.foreign_schema_id %>' visibility='public' importedPackage='_1_<%= interfaced_schema.foreign_schema_id %>'/>}
|
54
|
-
|
55
|
-
# SCHEMA End Template
|
56
|
-
schema_end_template = %{</packagedElement>}
|
57
|
-
|
58
|
-
# ENTITY Start Template
|
59
|
-
entity_start_template = %{<packagedElement xmi:type = "uml:Class" xmi:id = "<%= xmiid %>" name = "<%= entity.name %>" isAbstract = "<% if entity.isAbs %>TRUE<% else %>FALSE<% end %>" visibility = "public">}
|
60
|
-
|
61
|
-
# SUBTYPE OF Template
|
62
|
-
supertype_template = %{<generalization xmi:type="uml:Generalization" xmi:id="<%= xmiid %>" general="<%= xmiid_general %>"/>}
|
63
|
-
|
64
|
-
# ENTITY End Template
|
65
|
-
entity_end_template = %{</packagedElement>}
|
66
|
-
|
67
|
-
# ENUMERATION Start Template
|
68
|
-
enum_start_template = %{<packagedElement xmi:type = "uml:Enumeration" xmi:id = "<%= type_xmiid %>" name = "<%= enum.name %>">}
|
69
|
-
|
70
|
-
# ENUMERATION ITEM Template
|
71
|
-
enum_item_template = %{<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="<%= enumitem_xmiid %>" name="<%= enumitem %>" classifier="<%= type_xmiid %>" enumeration="<%= type_xmiid %>">
|
72
|
-
<specification xmi:type="uml:LiteralInteger" xmi:id="<%= enumitem_xmiid + '_specification' %> "/>
|
73
|
-
</ownedLiteral>}
|
74
|
-
|
75
|
-
# ENUMERATION End Template
|
76
|
-
enum_end_template = %{</packagedElement>}
|
77
|
-
|
78
|
-
# SELECT Start Template
|
79
|
-
select_start_template = %{<packagedElement xmi:type = "uml:Interface" xmi:id = "<%= xmiid %>" name = "<%= select.name %>" isAbstract = "TRUE" visibility = "public">}
|
80
|
-
|
81
|
-
# SELECT ITEM is ENTITY Template
|
82
|
-
selectitem_entity_template = %{ <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="<%= xmiid %>" supplier="<%= xmiid_general %>" client="<%= xmiid_entity %>" contract="<%= xmiid_general %>" implementingClassifier="<%= xmiid_entity %>"/>}
|
83
|
-
|
84
|
-
# SELECT ITEM is TYPE Template
|
85
|
-
selectitem_type_template = %{ <packagedElement xmi:type="uml:Realization" xmi:id="<%= xmiid %>" supplier="<%= xmiid_general %>" client="<%= xmiid_type %>"/>}
|
86
|
-
|
87
|
-
# SELECT End Template
|
88
|
-
select_end_template = %{</packagedElement>}
|
89
|
-
|
90
|
-
# Template covering abstract entity types
|
91
|
-
abstract_entity_template = %{}
|
92
|
-
|
93
|
-
# Template covering the output file contents for each attribute that is an aggregate
|
94
|
-
attribute_aggregate_template = %{}
|
95
|
-
|
96
|
-
# Template covering the output file contents for each attribute that is an aggregate of select of entity
|
97
|
-
attribute_aggregate_entity_select_template = %{}
|
98
|
-
|
99
|
-
# Template covering the output file contents for each attribute that is a select of entity
|
100
|
-
attribute_entity_select_template = %{}
|
101
|
-
|
102
|
-
# Template covering the output file contents for each attribute that is an entity
|
103
|
-
attribute_entity_template = %{<ownedAttribute xmi:type="uml:Property" xmi:id="<%= xmiid %>" name="<%= attr.name %>" visibility="public" isOrdered='<%= islist %>' isUnique='<%= isset %>' isLeaf='false' isStatic='false' isReadOnly='false' isDerived='false' isDerivedUnion='false' type="<%= domain_xmiid %>" aggregation="none" association="<%= assoc_xmiid %>"<% if attr.redeclare_entity %> redefinedProperty="<%= redefined_xmiid %>"<% end %>>}
|
104
|
-
|
105
|
-
# INVERSE ATTRIBUTE Template
|
106
|
-
inverse_attribute_template = %{<ownedAttribute xmi:type="uml:Property" xmi:id="<%= xmiid %>" name="<%= inverse.name %>" visibility="public" isOrdered='<%= islist %>' isUnique='<%= isset %>' isLeaf='false' isStatic='false' isReadOnly='true' isDerived='false' isDerivedUnion='false' type="<%= domain_xmiid %>" aggregation="none" association="<%= assoc_xmiid %>" <% if inverse.redeclare_entity %>redefinedProperty="<%= redefined_xmiid %>"<% end %>>}
|
107
|
-
|
108
|
-
#Template covering attribute wrapup
|
109
|
-
attribute_end = %{<% if lower == '0' %><lowerValue xmi:type="uml:LiteralInteger" xmi:id="<%= xmiid %>-lowerValue"/><% end %>
|
110
|
-
<% if lower != '0' and lower != '1' %><lowerValue xmi:type="uml:LiteralInteger" xmi:id="<%= xmiid %>-lowerValue" value="<%= lower %>"/><% end %>
|
111
|
-
<% if upper != '1' %><upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="<%= xmiid %>-upperValue" value="<%= upper %>"/><% end %>
|
112
|
-
</ownedAttribute>}
|
113
|
-
|
114
|
-
|
115
|
-
# EXPLICIT ATTRIBUTE ENTITY Create Association Template
|
116
|
-
attribute_entity_association_template = %{<packagedElement xmi:type="uml:Association" xmi:id="<%= xmiid %>" name="" visibility='public' isLeaf='false' isAbstract='false' isDerived='false'>
|
117
|
-
<memberEnd xmi:idref="<%= attr_xmiid %>"/>
|
118
|
-
<% if !inverse_exists %><memberEnd xmi:idref="<%= xmiid + '-end' %>"/>
|
119
|
-
<ownedEnd xmi:type="uml:Property" xmi:id="<%= xmiid + '-end' %>" type="<%= owner_xmiid %>" owningAssociation="<%= xmiid %>" association="<%= xmiid %>" visibility='public'>
|
120
|
-
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="<%= xmiid %>-lowerValue"/>
|
121
|
-
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="<%= xmiid %>-upperValue" value="*"/>
|
122
|
-
</ownedEnd><% else %><memberEnd xmi:idref="<%= iattr_xmiid %>"/>
|
123
|
-
<% end %>
|
124
|
-
<% if general_exists %><generalization xmi:type="uml:Generalization" xmi:id="<%= general_xmiid %>" general="<%= redefined_xmiid %>"/><% end %>
|
125
|
-
</packagedElement>}
|
126
|
-
|
127
|
-
|
128
|
-
# INVERSE ATTRIBUTE ENTITY Create Association Template
|
129
|
-
inverse_entity_association_template = %{<packagedElement xmi:type="uml:Association" xmi:id="<%= xmiid %>" name="" visibility='public' isLeaf='false' isAbstract='false' isDerived='false'>
|
130
|
-
<memberEnd xmi:idref="<%= iattr_xmiid %>"/>
|
131
|
-
<memberEnd xmi:idref="<%= xmiid + '-end' %>"/>
|
132
|
-
<ownedEnd xmi:type="uml:Property" xmi:id="<%= xmiid + '-end' %>" type="<%= owner_xmiid %>" owningAssociation="<%= xmiid %>" association="<%= xmiid %>" visibility='public'/>
|
133
|
-
<generalization xmi:type="uml:Generalization" xmi:id="<%= general_xmiid %>" general="<%= redefined_xmiid %>"/>
|
134
|
-
</packagedElement>}
|
135
|
-
|
136
|
-
|
137
|
-
# Template covering the output file contents for each attribute
|
138
|
-
attribute_template = %{}
|
139
|
-
|
140
|
-
# EXPLICIT ATTRIBUTE SIMPLE TYPE Template
|
141
|
-
attribute_builtin_template = %{<ownedAttribute xmi:type="uml:Property" xmi:id="<%= xmiid %>" name="<%= attr.name %>" visibility="public" <% if datatype_hash[attr.domain] != nil %>isOrdered='<%= islist %>' isUnique='<%= isset %>'<% if attr.redeclare_entity %> redefinedProperty="<%= redefined_xmiid %>"<% end %>>
|
142
|
-
<type xmi:type="uml:PrimitiveType" href="<%= datatype_hash[attr.domain] %>" /><% end %>
|
143
|
-
<% if datatype_hash[attr.domain] == nil %>type="<%= attr.domain %>"<% if attr.redeclare_entity %> redefinedProperty="<%= redefined_xmiid %>"<% end %>><% end %>}
|
144
|
-
|
145
|
-
|
146
|
-
# EXPLICIT ATTRIBUTE ENUM and TYPE Template
|
147
|
-
attribute_enum_type_template = %{<ownedAttribute xmi:type="uml:Property" xmi:id="<%= xmiid %>" name="<%= attr.name %>" visibility="public" type="<%= type_xmiid %>" isOrdered='<%= islist %>' isUnique='<%= isset %>' >}
|
148
|
-
|
149
|
-
# UNIQUE rule template
|
150
|
-
unique_template = %{<ownedRule xmi:type="uml:Constraint" xmi:id="<%= xmiid %>" name="<%= unique.name %>" visibility="public">
|
151
|
-
<constrainedElement xmi:idref="<%= xmiid_entity %>"/>
|
152
|
-
<specification xmi:type="uml:OpaqueExpression" xmi:id="<%= xmiid + '-spec' %>" visibility="public">
|
153
|
-
<body><%= entity.name %>::allInstance()->isUnique(<%= unique_text %>)</body>
|
154
|
-
<language>OCL2.0</language>
|
155
|
-
</specification>
|
156
|
-
</ownedRule>}
|
157
|
-
|
158
|
-
# TYPE Template
|
159
|
-
type_template = %{<packagedElement xmi:type="uml:PrimitiveType" xmi:id="_<%= schema.name %>-<%= type.name %>" name="<%= type.name %>" >
|
160
|
-
<% if datatype_hash[type.domain] != nil %>
|
161
|
-
<generalization xmi:type="uml:Generalization" xmi:id="_supertype_<%= schema.name %>-<%= type.name %>">
|
162
|
-
<general xmi:type='uml:PrimitiveType' href="<%= datatype_hash[type.domain] %>" />
|
163
|
-
</generalization>
|
164
|
-
<% end %>
|
165
|
-
<% if datatype_hash[type.domain] == nil %>
|
166
|
-
<generalization xmi:type="uml:Generalization" xmi:id="_supertype_<%= schema.name %>-<%= type.name %>" general="<%= type.domain %>"/>
|
167
|
-
<% end %>
|
168
|
-
</packagedElement>}
|
169
|
-
|
170
|
-
|
171
|
-
#############################################################################################
|
172
|
-
# Set up list of schemas to process, input may be a repository containing schemas or a single schema
|
173
|
-
#############################################################################################
|
174
|
-
|
175
|
-
if mapinput.kind_of? EXPSM::Repository
|
176
|
-
schema_list = mapinput.schemas
|
177
|
-
elsif mapinput.kind_of? EXPSM::SchemaDefinition
|
178
|
-
schema_list = [mapinput]
|
179
|
-
else
|
180
|
-
puts "ERROR : map_from_express input no Repository instance or Schema instance"
|
181
|
-
exit
|
182
|
-
end
|
183
|
-
|
184
|
-
# Set up XMI output file
|
185
|
-
|
186
|
-
if schema_list.size == 1 and output_xmi_filename == nil
|
187
|
-
schema = schema_list[0]
|
188
|
-
output_xmi_filename = schema.name.to_s + ".xmi"
|
189
|
-
elsif output_xmi_filename == nil
|
190
|
-
output_xmi_filename = 'Model.xmi'
|
191
|
-
end
|
192
|
-
|
193
|
-
file = File.new(output_xmi_filename, "w")
|
194
|
-
puts 'reeper : Writing output to file ' + output_xmi_filename
|
195
|
-
|
196
|
-
# Evaluate and write file start template
|
197
|
-
res = ERB.new(overall_start_template)
|
198
|
-
t = res.result(binding)
|
199
|
-
file.puts t
|
200
|
-
|
201
|
-
# Set up list of all EXPRESS Inverses in all schemas
|
202
|
-
all_inverse_list = []
|
203
|
-
|
204
|
-
for schema in schema_list
|
205
|
-
entity_list = schema.contents.find_all{ |e| e.kind_of? EXPSM::Entity }
|
206
|
-
for entity in entity_list
|
207
|
-
entity_inverse_list = entity.attributes.find_all{ |e| e.kind_of? EXPSM::Inverse }
|
208
|
-
for inverse in entity_inverse_list
|
209
|
-
all_inverse_list.push inverse
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
|
214
|
-
# Evaluate and write schema start template
|
215
|
-
res = ERB.new(schema_start_template)
|
216
|
-
t = res.result(binding)
|
217
|
-
file.puts t
|
218
|
-
|
219
|
-
interfaced_schema_list = schema.contents.find_all{ |e| e.instance_of? EXPSM::InterfaceSpecification}
|
220
|
-
|
221
|
-
for interfaced_schema in interfaced_schema_list
|
222
|
-
# Evaluate and write schema interface template
|
223
|
-
res = ERB.new(schema_interface_template)
|
224
|
-
t = res.result(binding)
|
225
|
-
file.puts t
|
226
|
-
end
|
227
|
-
|
228
|
-
# set up select_list - used in a number of places
|
229
|
-
select_list = schema.contents.find_all{ |e| e.instance_of? EXPSM::TypeSelect }
|
230
|
-
|
231
|
-
# Map EXPRESS TYPE of Builtin
|
232
|
-
type_list = schema.contents.find_all{ |e| e.instance_of? EXPSM::Type and e.isBuiltin}
|
233
|
-
for type in type_list
|
234
|
-
xmiid = '_' + schema.name + '-' + type.name
|
235
|
-
res = ERB.new(type_template)
|
236
|
-
t = res.result(binding)
|
237
|
-
file.puts t
|
238
|
-
|
239
|
-
# Map TYPE Select has Type as item
|
240
|
-
for select in select_list
|
241
|
-
if select.selectitems_array.include?(type)
|
242
|
-
xmiid = '_2_selectitem_' + schema.name + '-' + type.name + '-' + select.name
|
243
|
-
xmiid_general = '_' + schema.name + '-' + select.name
|
244
|
-
res = ERB.new(selectitem_type_template)
|
245
|
-
t = res.result(binding)
|
246
|
-
file.puts t
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
# Map EXPRESS TYPE of TYPE Select
|
252
|
-
type_list = schema.contents.find_all{ |e| e.instance_of? EXPSM::Type and !e.isBuiltin}
|
253
|
-
for select in type_list
|
254
|
-
superselect = NamedType.find_by_name( select.domain )
|
255
|
-
if superselect.kind_of? EXPSM::TypeSelect
|
256
|
-
# Evaluate and write TYPE Select start template
|
257
|
-
xmiid = '_' + schema.name + '-' + select.name
|
258
|
-
xmiid_type = xmiid
|
259
|
-
res = ERB.new(select_start_template)
|
260
|
-
t = res.result(binding)
|
261
|
-
file.puts t
|
262
|
-
|
263
|
-
# Write Select Item template for parent (maps to UML same as EXPRESS supertype)
|
264
|
-
xmiid = '_2_superselect_' + schema.name + '-' + select.name + '-' + superselect.name
|
265
|
-
xmiid_general = '_' + schema.name + '-' + superselect.name
|
266
|
-
res = ERB.new(supertype_template)
|
267
|
-
t = res.result(binding)
|
268
|
-
file.puts t
|
269
|
-
|
270
|
-
# Evaluate and write TYPE Select end template
|
271
|
-
res = ERB.new(select_end_template)
|
272
|
-
t = res.result(binding)
|
273
|
-
file.puts t
|
274
|
-
end
|
275
|
-
end
|
276
|
-
|
277
|
-
# Map EXPRESS Enumeration Types
|
278
|
-
enum_list = schema.contents.find_all{ |e| e.instance_of? EXPSM::TypeEnum }
|
279
|
-
for enum in enum_list
|
280
|
-
|
281
|
-
# Evaluate and write TYPE Enum start template
|
282
|
-
type_xmiid = '_' + schema.name + '-' + enum.name
|
283
|
-
res = ERB.new(enum_start_template)
|
284
|
-
t = res.result(binding)
|
285
|
-
file.puts t
|
286
|
-
|
287
|
-
superenum = enum.extends_item
|
288
|
-
if superenum != nil
|
289
|
-
if superselect.kind_of? EXPSM::TypeEnum
|
290
|
-
# Write Enum Item template for parent (maps to UML same as EXPRESS supertype)
|
291
|
-
xmiid = '_2_superenum_' + schema.name + '-' + enum.name + '-' + superenum.name
|
292
|
-
xmiid_general = '_' + superenum.schema.name + '-' + superenum.name
|
293
|
-
res = ERB.new(supertype_template)
|
294
|
-
t = res.result(binding)
|
295
|
-
file.puts t
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
# Evaluate and write Enum Item template for each item
|
300
|
-
enumitem_name_list = enum.items.scan(/\w+/)
|
301
|
-
for enumitem in enumitem_name_list
|
302
|
-
enumitem_xmiid = '_1_enumitem_' + schema.name + '-' + enum.name + '-' + enumitem
|
303
|
-
res = ERB.new(enum_item_template)
|
304
|
-
t = res.result(binding)
|
305
|
-
file.puts t
|
306
|
-
end
|
307
|
-
|
308
|
-
# Evaluate and write TYPE Enum end template
|
309
|
-
res = ERB.new(enum_end_template)
|
310
|
-
t = res.result(binding)
|
311
|
-
file.puts t
|
312
|
-
end
|
313
|
-
|
314
|
-
# Map EXPRESS TYPE Selects
|
315
|
-
for select in select_list
|
316
|
-
|
317
|
-
# Evaluate and write TYPE Select start template
|
318
|
-
xmiid = '_' + schema.name + '-' + select.name
|
319
|
-
res = ERB.new(select_start_template)
|
320
|
-
t = res.result(binding)
|
321
|
-
file.puts t
|
322
|
-
|
323
|
-
superselect = select.extends_item
|
324
|
-
if superselect != nil
|
325
|
-
if superselect.kind_of? EXPSM::TypeSelect
|
326
|
-
# Write Select Item template for parent (maps to UML same as EXPRESS supertype)
|
327
|
-
xmiid = '_2_superselect_' + schema.name + '-' + select.name + '-' + superselect.name
|
328
|
-
xmiid_general = '_' + superselect.schema.name + '-' + superselect.name
|
329
|
-
res = ERB.new(supertype_template)
|
330
|
-
t = res.result(binding)
|
331
|
-
file.puts t
|
332
|
-
end
|
333
|
-
end
|
334
|
-
|
335
|
-
# Evaluate and write Select Item template for each item (maps to UML same as EXPRESS supertype)
|
336
|
-
for superselect in select_list
|
337
|
-
if superselect.selectitems_array.include?(select)
|
338
|
-
xmiid = '_2_superselect_' + schema.name + '-' + select.name + '-' + superselect.name
|
339
|
-
xmiid_general = '_' + schema.name + '-' + superselect.name
|
340
|
-
res = ERB.new(supertype_template)
|
341
|
-
t = res.result(binding)
|
342
|
-
file.puts t
|
343
|
-
end
|
344
|
-
end
|
345
|
-
|
346
|
-
# Evaluate and write TYPE Select end template
|
347
|
-
res = ERB.new(select_end_template)
|
348
|
-
t = res.result(binding)
|
349
|
-
file.puts t
|
350
|
-
end
|
351
|
-
|
352
|
-
entity_list = schema.contents.find_all{ |e| e.kind_of? EXPSM::Entity }
|
353
|
-
|
354
|
-
# Map EXPRESS Explicit Attribute resulting UML Association (the Association is referenced from Class resulting from Entity)
|
355
|
-
for entity in entity_list
|
356
|
-
attr_list = entity.attributes.find_all{ |e| e.kind_of? EXPSM::Explicit }
|
357
|
-
for attr in attr_list
|
358
|
-
|
359
|
-
if NamedType.find_by_name( attr.domain ).kind_of? EXPSM::Entity or NamedType.find_by_name( attr.domain ).kind_of? EXPSM::TypeSelect
|
360
|
-
xmiid = '_1_association_' + schema.name + '-' + entity.name + '-' + attr.name
|
361
|
-
attr_xmiid = '_2_attr_' + schema.name + '-' + entity.name + '-' + attr.name
|
362
|
-
owner_xmiid = '_' + schema.name + '-' + entity.name
|
363
|
-
domain_xmiid = '_' + schema.name + '-' + NamedType.find_by_name( attr.domain ).name
|
364
|
-
|
365
|
-
general_exists = false
|
366
|
-
if attr.redeclare_entity
|
367
|
-
general_exists = true
|
368
|
-
redeclare_entity = NamedType.find_by_name( attr.redeclare_entity )
|
369
|
-
general_xmiid = '_2_general_' + schema.name + '-' + entity.name + '-' + attr.name
|
370
|
-
if attr.redeclare_oldname
|
371
|
-
redefined_xmiid = '_1_association_' + redeclare_entity.schema.name + '-' + attr.redeclare_entity + '-' + attr.redeclare_oldname
|
372
|
-
else
|
373
|
-
redefined_xmiid = '_1_association_' + redeclare_entity.schema.name + '-' + attr.redeclare_entity + '-' + attr.name
|
374
|
-
end
|
375
|
-
end
|
376
|
-
|
377
|
-
# check if inverse refers to this attribute, affects how association is written
|
378
|
-
inverse_exists = false
|
379
|
-
for inverse in all_inverse_list
|
380
|
-
if inverse.reverseAttr == attr
|
381
|
-
if attr.domain == inverse.entity.name
|
382
|
-
iattr_xmiid = '_2_attr_' + inverse.entity.schema.name + '-' + inverse.entity.name + '-' + inverse.name
|
383
|
-
all_inverse_list.delete inverse
|
384
|
-
inverse_exists = true
|
385
|
-
end
|
386
|
-
end
|
387
|
-
end
|
388
|
-
|
389
|
-
res = ERB.new(attribute_entity_association_template)
|
390
|
-
t = res.result(binding)
|
391
|
-
file.puts t
|
392
|
-
end
|
393
|
-
end
|
394
|
-
end
|
395
|
-
|
396
|
-
# Map EXPRESS Inverse Attribute resulting UML Association (the Association is referenced from Class resulting from Entity)
|
397
|
-
for inverse in all_inverse_list
|
398
|
-
xmiid = '_1_association_' + inverse.reverseEntity.schema.name + '-' + inverse.entity.name + '-' + inverse.reverseAttr_id
|
399
|
-
owner_xmiid = '_' + inverse.entity.schema.name + '-' + inverse.entity.name
|
400
|
-
iattr_xmiid = '_2_attr_' + inverse.entity.schema.name + '-' + inverse.entity.name + '-' + inverse.name
|
401
|
-
|
402
|
-
general_xmiid = '_2_general_' + inverse.reverseEntity.schema.name + '-' + inverse.entity.name + '-' + inverse.reverseAttr_id
|
403
|
-
redefined_xmiid = '_1_association_' + inverse.entity.schema.name + '-' + inverse.reverseEntity.name + '-' + inverse.reverseAttr_id
|
404
|
-
|
405
|
-
res = ERB.new(inverse_entity_association_template)
|
406
|
-
t = res.result(binding)
|
407
|
-
file.puts t
|
408
|
-
end
|
409
|
-
|
410
|
-
# Map EXPRESS Entity Types
|
411
|
-
for entity in entity_list
|
412
|
-
|
413
|
-
# Evaluate and write ENTITY start template
|
414
|
-
xmiid = '_' + schema.name + '-' + entity.name
|
415
|
-
xmiid_entity = xmiid
|
416
|
-
res = ERB.new(entity_start_template)
|
417
|
-
t = res.result(binding)
|
418
|
-
file.puts t
|
419
|
-
|
420
|
-
# Map Entity is SUBTYPE OF (i.e. list of supertypes)
|
421
|
-
for supertype in entity.supertypes_array
|
422
|
-
xmiid = '_2_supertype_' + schema.name + '-' + entity.name + '-' + supertype.name
|
423
|
-
xmiid_general = '_' + supertype.schema.name + '-' + supertype.name
|
424
|
-
res = ERB.new(supertype_template)
|
425
|
-
t = res.result(binding)
|
426
|
-
file.puts t
|
427
|
-
end
|
428
|
-
|
429
|
-
# Map TYPE Select has Entity as item
|
430
|
-
for select in select_list
|
431
|
-
if select.selectitems_array.include?(entity)
|
432
|
-
xmiid = '_2_selectitem_' + schema.name + '-' + entity.name + '-' + select.name
|
433
|
-
xmiid_general = '_' + schema.name + '-' + select.name
|
434
|
-
res = ERB.new(selectitem_entity_template)
|
435
|
-
t = res.result(binding)
|
436
|
-
file.puts t
|
437
|
-
end
|
438
|
-
end
|
439
|
-
|
440
|
-
# Map EXPRESS Explicit Attributes
|
441
|
-
attr_list = entity.attributes.find_all{ |e| e.kind_of? EXPSM::Explicit }
|
442
|
-
for attr in attr_list
|
443
|
-
xmiid = '_2_attr_' + schema.name + '-' + entity.name + '-' + attr.name
|
444
|
-
|
445
|
-
# set up references resulting from attribute being a redeclaration
|
446
|
-
if attr.redeclare_entity
|
447
|
-
redeclare_entity = NamedType.find_by_name( attr.redeclare_entity )
|
448
|
-
if attr.redeclare_oldname
|
449
|
-
redefined_xmiid = '_2_attr_' + redeclare_entity.schema.name + '-' + attr.redeclare_entity + '-' + attr.redeclare_oldname
|
450
|
-
else
|
451
|
-
redefined_xmiid = '_2_attr_' + redeclare_entity.schema.name + '-' + attr.redeclare_entity + '-' + attr.name
|
452
|
-
end
|
453
|
-
end
|
454
|
-
|
455
|
-
# initialize default cardinailty constraints
|
456
|
-
lower = '1'
|
457
|
-
upper = '1'
|
458
|
-
isset = 'true'
|
459
|
-
islist = 'false'
|
460
|
-
|
461
|
-
# set up cardinailty constraints from attribute being a 1-D aggregate
|
462
|
-
if attr.instance_of? EXPSM::ExplicitAggregate and attr.rank == 1
|
463
|
-
upper = attr.dimensions[0].upper
|
464
|
-
if upper == '?'
|
465
|
-
upper = '*'
|
466
|
-
end
|
467
|
-
lower = attr.dimensions[0].lower
|
468
|
-
if attr.dimensions[0].aggrtype == 'LIST'
|
469
|
-
islist = 'true'
|
470
|
-
end
|
471
|
-
if attr.dimensions[0].aggrtype == 'BAG'
|
472
|
-
isset = 'false'
|
473
|
-
end
|
474
|
-
if attr.dimensions[0].aggrtype == 'LIST' and !attr.dimensions[0].isUnique
|
475
|
-
isset = 'false'
|
476
|
-
end
|
477
|
-
end
|
478
|
-
if attr.isOptional == TRUE
|
479
|
-
lower = '0'
|
480
|
-
end
|
481
|
-
|
482
|
-
attrset = false
|
483
|
-
|
484
|
-
# Map EXPRESS Explicit Attributes of Builtin
|
485
|
-
if attr.isBuiltin
|
486
|
-
attrset= true
|
487
|
-
res = ERB.new(attribute_builtin_template,0,"<>")
|
488
|
-
t = res.result(binding)
|
489
|
-
file.puts t
|
490
|
-
end
|
491
|
-
|
492
|
-
attr_domain = NamedType.find_by_name( attr.domain )
|
493
|
-
|
494
|
-
# Map EXPRESS Explicit Attributes of TYPE and TYPE Enum
|
495
|
-
if attr_domain.kind_of? EXPSM::Type or attr_domain.kind_of? EXPSM::TypeEnum
|
496
|
-
attrset= true
|
497
|
-
type_xmiid = '_' + attr_domain.schema.name + '-' + attr_domain.name
|
498
|
-
res = ERB.new(attribute_enum_type_template,0,"<>")
|
499
|
-
t = res.result(binding)
|
500
|
-
file.puts t
|
501
|
-
end
|
502
|
-
|
503
|
-
# Map EXPRESS Explicit Attributes of Entity and Select
|
504
|
-
if attr_domain.kind_of? EXPSM::Entity or attr_domain.kind_of? EXPSM::TypeSelect
|
505
|
-
attrset= true
|
506
|
-
domain_xmiid = '_' + attr_domain.schema.name + '-' + attr_domain.name
|
507
|
-
assoc_xmiid = '_1_association_' + schema.name + '-' + entity.name + '-' + attr.name
|
508
|
-
res = ERB.new(attribute_entity_template,0,"<>")
|
509
|
-
t = res.result(binding)
|
510
|
-
file.puts t
|
511
|
-
end
|
512
|
-
|
513
|
-
if !attrset
|
514
|
-
puts 'Oops ' + entity.name + '.' + attr.name
|
515
|
-
puts attr.domain
|
516
|
-
end
|
517
|
-
|
518
|
-
res = ERB.new(attribute_end,0,"<>")
|
519
|
-
t = res.result(binding)
|
520
|
-
file.puts t
|
521
|
-
end
|
522
|
-
|
523
|
-
#Map EXPRESS Inverse Attributes
|
524
|
-
inverse_attr_list = entity.attributes.find_all{ |e| e.kind_of? EXPSM::Inverse }
|
525
|
-
for inverse in inverse_attr_list
|
526
|
-
xmiid = '_2_attr_' + schema.name + '-' + entity.name + '-' + inverse.name
|
527
|
-
# set up references resulting from attribute being a redeclaration
|
528
|
-
if inverse.redeclare_entity
|
529
|
-
puts 'FOUND REDECLARED INVERSE ' + inverse.name
|
530
|
-
if inverse.redeclare_oldname
|
531
|
-
redefined_xmiid = '_2_attr_' + schema.name + '-' + inverse.redeclare_entity + '-' + inverse.redeclare_oldname
|
532
|
-
else
|
533
|
-
redefined_xmiid = '_2_attr_' + schema.name + '-' + inverse.redeclare_entity + '-' + inverse.name
|
534
|
-
end
|
535
|
-
end
|
536
|
-
|
537
|
-
lower = '1'
|
538
|
-
upper = '1'
|
539
|
-
isset = 'true'
|
540
|
-
if inverse.instance_of? EXPSM::InverseAggregate
|
541
|
-
lower = '0'
|
542
|
-
upper = '*'
|
543
|
-
if inverse.upper != '?'
|
544
|
-
upper = inverse.upper
|
545
|
-
end
|
546
|
-
if inverse.lower != '0'
|
547
|
-
lower = inverse.lower
|
548
|
-
end
|
549
|
-
if inverse.aggrtype == 'BAG'
|
550
|
-
isset = 'false'
|
551
|
-
end
|
552
|
-
end
|
553
|
-
domain_xmiid = '_' + schema.name + '-' + inverse.reverseEntity.name
|
554
|
-
if inverse.reverseAttr.domain == entity.name
|
555
|
-
assoc_xmiid = '_1_association_' + inverse.reverseEntity.schema.name + '-' + inverse.reverseEntity.name + '-' + inverse.reverseAttr_id
|
556
|
-
else
|
557
|
-
assoc_xmiid = '_1_association_' + inverse.reverseEntity.schema.name + '-' + entity.name + '-' + inverse.reverseAttr_id
|
558
|
-
end
|
559
|
-
res = ERB.new(inverse_attribute_template)
|
560
|
-
t = res.result(binding)
|
561
|
-
file.puts t
|
562
|
-
|
563
|
-
res = ERB.new(attribute_end,0,"<>")
|
564
|
-
t = res.result(binding)
|
565
|
-
file.puts t
|
566
|
-
end
|
567
|
-
|
568
|
-
#Map EXPRESS Unique crules
|
569
|
-
if entity.uniques.size > 0
|
570
|
-
for unique in entity.uniques
|
571
|
-
xmiid = '_3_uniq_' + schema.name + '-' + entity.name + '-' + unique.name
|
572
|
-
if unique.attributes.size == 1
|
573
|
-
unique_text = unique.attributes[0]
|
574
|
-
else
|
575
|
-
unique_text = 'Sequence{'+ unique.attributes.join(', ') +'}'
|
576
|
-
end
|
577
|
-
res = ERB.new(unique_template)
|
578
|
-
t = res.result(binding)
|
579
|
-
file.puts t
|
580
|
-
end
|
581
|
-
end
|
582
|
-
|
583
|
-
# Evaluate and write ENTITY end template
|
584
|
-
res = ERB.new(entity_end_template)
|
585
|
-
t = res.result(binding)
|
586
|
-
file.puts t
|
587
|
-
end
|
588
|
-
|
589
|
-
# Evaluate and write SCHEMA end template
|
590
|
-
res = ERB.new(schema_end_template)
|
591
|
-
t = res.result(binding)
|
592
|
-
file.puts t
|
593
|
-
end
|
594
|
-
|
595
|
-
# Evaluate and write file end template
|
596
|
-
res = ERB.new(overall_end_template)
|
597
|
-
t = res.result(binding)
|
598
|
-
file.puts t
|
599
|
-
end
|