xmi 0.3.6 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 302b69df31217eb74d01a40473d3ed50a35af959c331be1424aadd2262759703
4
- data.tar.gz: 63d413fddf71518961876467bc6a87bd99686e3c3367f9e3510921c4047765da
3
+ metadata.gz: cc142c4dafa8b6f642915fc177a55d64667b39503164533e4acd2f57dc4a5882
4
+ data.tar.gz: 8ea7bac17a8ce090cc39c019571ef1d6d91096c3b868c9e1246114f5a49a8d37
5
5
  SHA512:
6
- metadata.gz: 4b484e2d65d687acb0671498f36929a5eaf30ef9275460ee0a66f716f38a5d088795dd9e5c10833e004d12304c1d544b8622c25fb88b79fcf5eb0a453ba9f267
7
- data.tar.gz: d4da102f2b81e27e0b4a8fd62817d3bf0ba2cb9b2e33dece2ccb56b21c9664af72e2df628a7e4e031799b03b699e284477520e39b07fe3cfd9a4c57663bce4e9
6
+ metadata.gz: a189f14845f4bd56540e1d6b0373a7cab2ec56c7b12572ccdfb9f01365994d90dfdc45802994433bc398fa417979ea6183c82d131bf9b6dd9b5484f4eb7439d3
7
+ data.tar.gz: 034a0986c647977cfa682611df764f7f8ff7859b40aa82ca61e8bef20000f24ec96b5af2bfc3de0cc9aeececfc0a23b3d1f62a4fb7e7a9f52268a77878f2fe1f
data/lib/xmi/ea_root.rb CHANGED
@@ -202,7 +202,7 @@ module Xmi
202
202
  [apply_types_lines, apply_types_nodes]
203
203
  end
204
204
 
205
- def gen_generic_klass(node)
205
+ def gen_generic_klass(node, from_klass = nil) # rubocop:disable Metrics/MethodLength
206
206
  node_name = get_klass_name_from_node(node)
207
207
  attributes_lines, map_attributes_lines = gen_klass_tags(node)
208
208
  apply_types_lines, apply_types_nodes = gen_apply_types(node)
@@ -211,18 +211,34 @@ module Xmi
211
211
  apply_types_lines, apply_types_nodes
212
212
  )
213
213
 
214
+ map_attributes_lines = node_map_attributes(node_name,
215
+ from_klass, map_attributes_lines)
214
216
  xml_mapping = replace_xml_mapping(node_name, map_attributes_lines)
215
217
 
216
- replace_klass_template(node_name, attributes_lines, xml_mapping)
218
+ replace_klass_template(node_name, attributes_lines,
219
+ xml_mapping, from_klass)
217
220
  end
218
221
 
219
- def gen_klass_apply_types(attributes_lines, map_attributes_lines, apply_types_lines, apply_types_nodes)
222
+ def node_map_attributes(node_name, from_klass, map_attributes_lines)
223
+ if from_klass && @node_map.key?(from_klass.to_sym)
224
+ map_attributes_lines += @node_map[from_klass.to_sym].to_s
225
+ else
226
+ @node_map ||= {}
227
+ @node_map[node_name.to_sym] = map_attributes_lines
228
+ end
229
+
230
+ map_attributes_lines
231
+ end
232
+
233
+ def gen_klass_apply_types(attributes_lines, map_attributes_lines, apply_types_lines, apply_types_nodes) # rubocop:disable Metrics/MethodLength
220
234
  unless apply_types_nodes.empty?
221
235
  attributes_lines += apply_types_lines
222
236
  apply_types_nodes.each do |n|
223
237
  apply_types = n.attribute_nodes.map(&:value)
224
238
  apply_types.each do |apply_type|
225
- map_attributes_lines += gen_map_attribute_line("base_#{apply_type}", "base_#{apply_type}")
239
+ map_attributes_lines += gen_map_attribute_line(
240
+ "base_#{apply_type}", "base_#{apply_type}"
241
+ )
226
242
  end
227
243
  end
228
244
  end
@@ -251,9 +267,11 @@ module Xmi
251
267
  .rstrip
252
268
  end
253
269
 
254
- def replace_klass_template(node_name, attributes_lines, xml_mapping)
270
+ def replace_klass_template(node_name, attributes_lines, xml_mapping,
271
+ from_klass = nil)
255
272
  abstract_klass_name = get_klass_name_from_node(@abstract_klass_node)
256
- root_tag_line = "def self.root_tag; \"#{node_name}\"; end"
273
+ abstract_klass_name = from_klass if from_klass
274
+ root_tag_line = "def self.root_tag = \"#{node_name}\""
257
275
 
258
276
  KLASS_TEMPLATE
259
277
  .gsub("#KLASS_NAME#", Shale::Utils.classify(node_name))
@@ -267,6 +285,16 @@ module Xmi
267
285
  nodes = xmi_doc.xpath("//UMLProfiles//Stereotypes//Stereotype[not(contains(@isAbstract, 'true'))]")
268
286
  klasses_lines = ""
269
287
 
288
+ klasses_lines += "#{gen_generic_klasses_wo_base_stereotypes(nodes)}\n"
289
+ klasses_lines += "#{gen_generic_klasses_w_base_stereotypes(nodes)}\n"
290
+
291
+ klasses_lines
292
+ end
293
+
294
+ def gen_generic_klasses_wo_base_stereotypes(nodes)
295
+ nodes = nodes.select { |n| n.attributes["baseStereotypes"].nil? }
296
+ klasses_lines = ""
297
+
270
298
  nodes.each do |node|
271
299
  klasses_lines += "#{gen_generic_klass(node)}\n"
272
300
  end
@@ -274,6 +302,18 @@ module Xmi
274
302
  klasses_lines
275
303
  end
276
304
 
305
+ def gen_generic_klasses_w_base_stereotypes(nodes)
306
+ nodes = nodes.reject { |n| n.attributes["baseStereotypes"].nil? }
307
+ klasses_lines = ""
308
+
309
+ nodes.each do |node|
310
+ base_stereotypes = node.attributes["baseStereotypes"].value
311
+ klasses_lines += "#{gen_generic_klass(node, base_stereotypes)}\n"
312
+ end
313
+
314
+ klasses_lines
315
+ end
316
+
277
317
  def gen_klasses(xmi_doc)
278
318
  @abstract_klass_node = get_abstract_klass_node(xmi_doc)
279
319
  klasses_lines = ""
@@ -289,13 +329,8 @@ module Xmi
289
329
  end
290
330
 
291
331
  def get_namespace_from_definition(xmi_doc)
292
- node = xmi_doc.at_xpath("//UMLProfile/Documentation")
293
- namespace_key = node.attribute_nodes.find do |attr|
294
- attr.name == "name"
295
- end.value
296
- namespace_uri = node.attribute_nodes.find do |attr|
297
- attr.name == "URI"
298
- end.value
332
+ namespace_key = get_module_name_from_definition(xmi_doc)
333
+ namespace_uri = get_module_uri(xmi_doc)
299
334
 
300
335
  { name: namespace_key, uri: namespace_uri }
301
336
  end
@@ -308,7 +343,24 @@ module Xmi
308
343
  end
309
344
 
310
345
  def get_module_name(xmi_doc)
311
- xmi_doc.root.name.split(".").first.capitalize
346
+ get_module_name_from_definition(xmi_doc).capitalize
347
+ end
348
+
349
+ def get_module_name_from_definition(xmi_doc)
350
+ node = xmi_doc.at_xpath("//UMLProfile/Documentation")
351
+ node.attribute_nodes.find { |attr| attr.name == "name" }&.value
352
+ end
353
+
354
+ def get_module_uri(xmi_doc)
355
+ node = xmi_doc.at_xpath("//UMLProfile/Documentation")
356
+ uri = node.attribute_nodes.find { |attr| attr.name == "URI" }&.value
357
+
358
+ return uri if uri
359
+
360
+ name = get_module_name_from_definition(xmi_doc)
361
+ ver = node.attribute_nodes.find { |attr| attr.name == "version" }&.value
362
+
363
+ "http://www.sparxsystems.com/profiles/#{name}/#{ver}"
312
364
  end
313
365
  end
314
366
  end
@@ -37,15 +37,87 @@ module Xmi
37
37
  end
38
38
  end
39
39
 
40
+ class DataType < Shale::Mapper
41
+ attribute :is_collection, Shale::Type::String
42
+ attribute :no_property_type, Shale::Type::String
43
+ attribute :base_class, Shale::Type::String
44
+
45
+ xml do
46
+ root "DataType"
47
+
48
+ map_attribute "isCollection", to: :is_collection
49
+ map_attribute "noPropertyType", to: :no_property_type
50
+ map_attribute "base_Class", to: :base_class
51
+ end
52
+ end
53
+
54
+ class Union < Shale::Mapper
55
+ attribute :is_collection, Shale::Type::String
56
+ attribute :no_property_type, Shale::Type::String
57
+ attribute :base_class, Shale::Type::String
58
+
59
+ xml do
60
+ root "Union"
61
+
62
+ map_attribute "isCollection", to: :is_collection
63
+ map_attribute "noPropertyType", to: :no_property_type
64
+ map_attribute "base_Class", to: :base_class
65
+ end
66
+ end
67
+
68
+ class Enumeration < Shale::Mapper
69
+ attribute :base_enumeration, Shale::Type::String
70
+
71
+ xml do
72
+ root "Enumeration"
73
+
74
+ map_attribute "base_Enumeration", to: :base_enumeration
75
+ end
76
+ end
77
+
78
+ class Type < Shale::Mapper
79
+ attribute :is_collection, Shale::Type::String
80
+ attribute :no_property_type, Shale::Type::String
81
+ attribute :base_class, Shale::Type::String
82
+
83
+ xml do
84
+ root "Type"
85
+
86
+ map_attribute "isCollection", to: :is_collection
87
+ map_attribute "noPropertyType", to: :no_property_type
88
+ map_attribute "base_Class", to: :base_class
89
+ end
90
+ end
91
+
92
+ class FeatureType < Shale::Mapper
93
+ attribute :is_collection, Shale::Type::String
94
+ attribute :no_property_type, Shale::Type::String
95
+ attribute :base_class, Shale::Type::String
96
+ attribute :by_value_property_type, Shale::Type::String
97
+
98
+ xml do
99
+ root "FeatureType"
100
+
101
+ map_attribute "isCollection", to: :is_collection
102
+ map_attribute "noPropertyType", to: :no_property_type
103
+ map_attribute "base_Class", to: :base_class
104
+ map_attribute "byValuePropertyType", to: :by_value_property_type
105
+ end
106
+ end
107
+
40
108
  class Property < Shale::Mapper
41
109
  attribute :sequence_number, Shale::Type::String
42
110
  attribute :base_property, Shale::Type::String
111
+ attribute :is_metadata, Shale::Type::String
112
+ attribute :inline_or_by_reference, Shale::Type::String
43
113
 
44
114
  xml do
45
115
  root "property"
46
116
 
47
117
  map_attribute "sequenceNumber", to: :sequence_number
48
118
  map_attribute "base_Property", to: :base_property
119
+ map_attribute "isMetadata", to: :is_metadata
120
+ map_attribute "inlineOrByReference", to: :inline_or_by_reference
49
121
  end
50
122
  end
51
123
  end
data/lib/xmi/sparx.rb CHANGED
@@ -957,6 +957,11 @@ module Xmi
957
957
  attribute :eauml_import, EaRoot::Eauml::Import, collection: true
958
958
  attribute :gml_application_schema, EaRoot::Gml::ApplicationSchema, collection: true
959
959
  attribute :gml_code_list, EaRoot::Gml::CodeList, collection: true
960
+ attribute :gml_data_type, EaRoot::Gml::CodeList, collection: true
961
+ attribute :gml_union, EaRoot::Gml::CodeList, collection: true
962
+ attribute :gml_enumeration, EaRoot::Gml::CodeList, collection: true
963
+ attribute :gml_type, EaRoot::Gml::CodeList, collection: true
964
+ attribute :gml_feature_type, EaRoot::Gml::CodeList, collection: true
960
965
  attribute :gml_property, EaRoot::Gml::Property, collection: true
961
966
  end
962
967
  end
@@ -1002,6 +1007,21 @@ module Xmi
1002
1007
  map_element "CodeList", to: :gml_code_list,
1003
1008
  namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1004
1009
  prefix: "GML"
1010
+ map_element "DataType", to: :gml_data_type,
1011
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1012
+ prefix: "GML"
1013
+ map_element "Union", to: :gml_union,
1014
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1015
+ prefix: "GML"
1016
+ map_element "Enumeration", to: :gml_enumeration,
1017
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1018
+ prefix: "GML"
1019
+ map_element "Type", to: :gml_type,
1020
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1021
+ prefix: "GML"
1022
+ map_element "FeatureType", to: :gml_feature_type,
1023
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1024
+ prefix: "GML"
1005
1025
  map_element "property", to: :gml_property,
1006
1026
  namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1007
1027
  prefix: "GML"
@@ -1054,6 +1074,21 @@ module Xmi
1054
1074
  map_element "CodeList", to: :gml_code_list,
1055
1075
  namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1056
1076
  prefix: "GML"
1077
+ map_element "DataType", to: :gml_data_type,
1078
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1079
+ prefix: "GML"
1080
+ map_element "Union", to: :gml_union,
1081
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1082
+ prefix: "GML"
1083
+ map_element "Enumeration", to: :gml_enumeration,
1084
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1085
+ prefix: "GML"
1086
+ map_element "Type", to: :gml_type,
1087
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1088
+ prefix: "GML"
1089
+ map_element "FeatureType", to: :gml_feature_type,
1090
+ namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1091
+ prefix: "GML"
1057
1092
  map_element "property", to: :gml_property,
1058
1093
  namespace: "http://www.sparxsystems.com/profiles/GML/1.0",
1059
1094
  prefix: "GML"
data/lib/xmi/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Xmi
4
- VERSION = "0.3.6"
4
+ VERSION = "0.3.8"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xmi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-10 00:00:00.000000000 Z
11
+ date: 2024-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri