lutaml 0.10.4 → 0.10.6

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.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -0
  3. data/.rubocop.yml +10 -0
  4. data/.rubocop_todo.yml +218 -94
  5. data/TODO.cleanups/01-resolve-production-todos.md +65 -0
  6. data/TODO.cleanups/02-reduce-metrics-offenses.md +37 -0
  7. data/TODO.cleanups/03-reduce-rspec-multiple-expectations.md +54 -0
  8. data/TODO.cleanups/04-reduce-rspec-example-length.md +45 -0
  9. data/TODO.cleanups/05-replace-marshal-load.md +37 -0
  10. data/TODO.cleanups/06-replace-eval-in-tests.md +41 -0
  11. data/TODO.cleanups/07-fix-lint-offenses.md +74 -0
  12. data/TODO.cleanups/08-reduce-memoized-helpers-and-nesting.md +43 -0
  13. data/TODO.cleanups/09-reduce-verified-doubles-and-rspec-style.md +57 -0
  14. data/TODO.cleanups/10-split-large-files.md +47 -0
  15. data/bin/console +0 -1
  16. data/exe/lutaml +1 -0
  17. data/lib/lutaml/cli/element_identifier.rb +3 -6
  18. data/lib/lutaml/cli/interactive_shell/bookmark_commands.rb +88 -0
  19. data/lib/lutaml/cli/interactive_shell/command_base.rb +32 -0
  20. data/lib/lutaml/cli/interactive_shell/export_handler.rb +67 -0
  21. data/lib/lutaml/cli/interactive_shell/help_display.rb +114 -0
  22. data/lib/lutaml/cli/interactive_shell/navigation_commands.rb +135 -0
  23. data/lib/lutaml/cli/interactive_shell/query_commands.rb +185 -0
  24. data/lib/lutaml/cli/interactive_shell.rb +116 -802
  25. data/lib/lutaml/cli/uml/build_command.rb +5 -5
  26. data/lib/lutaml/cli/uml/verify_command.rb +0 -1
  27. data/lib/lutaml/converter/xmi_to_uml.rb +3 -153
  28. data/lib/lutaml/converter/xmi_to_uml_generalization.rb +193 -0
  29. data/lib/lutaml/formatter/graphviz.rb +1 -2
  30. data/lib/lutaml/qea/database.rb +1 -47
  31. data/lib/lutaml/qea/factory/association_builder.rb +188 -0
  32. data/lib/lutaml/qea/factory/base_transformer.rb +0 -1
  33. data/lib/lutaml/qea/factory/class_transformer.rb +40 -590
  34. data/lib/lutaml/qea/factory/diagram_transformer.rb +0 -3
  35. data/lib/lutaml/qea/factory/generalization_builder.rb +211 -0
  36. data/lib/lutaml/qea/factory/package_transformer.rb +1 -2
  37. data/lib/lutaml/qea/factory/stereotype_loader.rb +34 -0
  38. data/lib/lutaml/qea/lookup_indexes.rb +54 -0
  39. data/lib/lutaml/qea/models/ea_datatype.rb +0 -2
  40. data/lib/lutaml/qea/validation/validation_engine.rb +0 -2
  41. data/lib/lutaml/uml/has_members.rb +0 -1
  42. data/lib/lutaml/uml/inheritance_walker.rb +92 -0
  43. data/lib/lutaml/uml/model_helpers.rb +129 -0
  44. data/lib/lutaml/uml/node/attribute.rb +3 -1
  45. data/lib/lutaml/uml/node/class_node.rb +3 -3
  46. data/lib/lutaml/uml/operation.rb +2 -0
  47. data/lib/lutaml/uml_repository/class_lookup_index.rb +40 -0
  48. data/lib/lutaml/uml_repository/exporters/markdown/class_page_builder.rb +179 -0
  49. data/lib/lutaml/uml_repository/exporters/markdown/formatting.rb +36 -0
  50. data/lib/lutaml/uml_repository/exporters/markdown/index_page_builder.rb +73 -0
  51. data/lib/lutaml/uml_repository/exporters/markdown/link_resolver.rb +40 -0
  52. data/lib/lutaml/uml_repository/exporters/markdown/package_page_builder.rb +107 -0
  53. data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +26 -538
  54. data/lib/lutaml/uml_repository/index_builder.rb +3 -271
  55. data/lib/lutaml/uml_repository/index_builders/association_index.rb +141 -0
  56. data/lib/lutaml/uml_repository/index_builders/class_index.rb +94 -0
  57. data/lib/lutaml/uml_repository/index_builders/package_index.rb +57 -0
  58. data/lib/lutaml/uml_repository/package_exporter.rb +10 -20
  59. data/lib/lutaml/uml_repository/package_loader.rb +37 -17
  60. data/lib/lutaml/uml_repository/repository/deprecated.rb +39 -0
  61. data/lib/lutaml/uml_repository/repository/loader.rb +112 -0
  62. data/lib/lutaml/uml_repository/repository.rb +7 -57
  63. data/lib/lutaml/uml_repository/static_site/association_serialization.rb +142 -0
  64. data/lib/lutaml/uml_repository/static_site/configuration.rb +0 -2
  65. data/lib/lutaml/uml_repository/static_site/data_transformer.rb +52 -873
  66. data/lib/lutaml/uml_repository/static_site/generator.rb +29 -8
  67. data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +1 -4
  68. data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +78 -0
  69. data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +124 -0
  70. data/lib/lutaml/uml_repository/static_site/serializers/diagram_serializer.rb +60 -0
  71. data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +258 -0
  72. data/lib/lutaml/uml_repository/static_site/serializers/metadata_builder.rb +48 -0
  73. data/lib/lutaml/uml_repository/static_site/serializers/operation_serializer.rb +57 -0
  74. data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +94 -0
  75. data/lib/lutaml/uml_repository/static_site/serializers/package_tree_builder.rb +93 -0
  76. data/lib/lutaml/version.rb +1 -1
  77. data/lib/lutaml/xmi/liquid_drops/association_drop.rb +13 -35
  78. data/lib/lutaml/xmi/liquid_drops/attribute_drop.rb +12 -18
  79. data/lib/lutaml/xmi/liquid_drops/cardinality_drop.rb +14 -6
  80. data/lib/lutaml/xmi/liquid_drops/connector_drop.rb +0 -3
  81. data/lib/lutaml/xmi/liquid_drops/constraint_drop.rb +1 -3
  82. data/lib/lutaml/xmi/liquid_drops/data_type_drop.rb +13 -70
  83. data/lib/lutaml/xmi/liquid_drops/dependency_drop.rb +2 -5
  84. data/lib/lutaml/xmi/liquid_drops/diagram_drop.rb +5 -11
  85. data/lib/lutaml/xmi/liquid_drops/enum_drop.rb +8 -16
  86. data/lib/lutaml/xmi/liquid_drops/enum_owned_literal_drop.rb +3 -9
  87. data/lib/lutaml/xmi/liquid_drops/generalization_attribute_drop.rb +11 -13
  88. data/lib/lutaml/xmi/liquid_drops/generalization_drop.rb +27 -85
  89. data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +39 -91
  90. data/lib/lutaml/xmi/liquid_drops/operation_drop.rb +3 -9
  91. data/lib/lutaml/xmi/liquid_drops/package_drop.rb +16 -44
  92. data/lib/lutaml/xmi/liquid_drops/root_drop.rb +3 -11
  93. data/lib/lutaml/xmi/liquid_drops/source_target_drop.rb +2 -5
  94. data/lib/lutaml/xmi/parsers/xmi_base.rb +2 -749
  95. data/lib/lutaml/xmi/parsers/xmi_class_members.rb +45 -0
  96. data/lib/lutaml/xmi/parsers/xmi_connector.rb +251 -0
  97. data/lib/lutaml/xmi/parsers/xml.rb +7 -120
  98. data/lib/lutaml/xmi/xmi_lookup_service.rb +42 -0
  99. data/lib/lutaml.rb +0 -1
  100. metadata +48 -21
  101. data/lib/lutaml/cli/commands/base_command.rb +0 -118
  102. data/lib/lutaml/command_line.rb +0 -272
  103. data/lib/lutaml/sysml/allocate.rb +0 -9
  104. data/lib/lutaml/sysml/allocated.rb +0 -9
  105. data/lib/lutaml/sysml/binding_connector.rb +0 -9
  106. data/lib/lutaml/sysml/block.rb +0 -32
  107. data/lib/lutaml/sysml/constraint_block.rb +0 -14
  108. data/lib/lutaml/sysml/copy.rb +0 -8
  109. data/lib/lutaml/sysml/derive_requirement.rb +0 -9
  110. data/lib/lutaml/sysml/nested_connector_end.rb +0 -13
  111. data/lib/lutaml/sysml/refine.rb +0 -9
  112. data/lib/lutaml/sysml/requirement.rb +0 -44
  113. data/lib/lutaml/sysml/requirement_related.rb +0 -9
  114. data/lib/lutaml/sysml/satisfy.rb +0 -9
  115. data/lib/lutaml/sysml/test_case.rb +0 -25
  116. data/lib/lutaml/sysml/trace.rb +0 -9
  117. data/lib/lutaml/sysml/verify.rb +0 -8
  118. data/lib/lutaml/sysml/xmi_file.rb +0 -486
  119. data/lib/lutaml/sysml.rb +0 -11
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module Sysml
5
- class Refine < Lutaml::Uml::TopElement
6
- attr_accessor :base_abstraction
7
- end
8
- end
9
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module Sysml
5
- class Requirement < Lutaml::Uml::Class
6
- attr_accessor :id, :text, :base_class, :refined_by, :traced_to,
7
- :derived_from, :satisfied_by
8
-
9
- def initialize # rubocop:disable Lint/MissingSuper
10
- @xmi_id = nil
11
- @id = nil
12
- @nested_classifier = []
13
- @stereotype = []
14
- @namespace = nil
15
- end
16
-
17
- def name
18
- if !base_class.nil? && !base_class.name.nil?
19
- return base_class.name
20
- end
21
-
22
- nil
23
- end
24
-
25
- def full_name
26
- if !base_class.nil? && !base_class.name.nil?
27
- return base_class.full_name
28
- end
29
-
30
- nil
31
- end
32
- ## def name
33
- ## if base_class != nil and base_class.name != nil
34
- ## base_class.name
35
- ## else
36
- ## nil
37
- ## end
38
- ## end
39
- ## def full_name
40
- ## get_base_class_full_name ( self )
41
- ## end
42
- end
43
- end
44
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module Sysml
5
- class RequirementRelated < Lutaml::Uml::TopElement
6
- attr_accessor :base_named_element, :satisfies, :refines
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module Sysml
5
- class Satisfy < Trace
6
- attr_accessor :base_realization
7
- end
8
- end
9
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module Sysml
5
- class TestCase < Lutaml::Uml::TopElement
6
- attr_accessor :base_behavior, :verifies
7
-
8
- def name
9
- if !base_behavior.nil? && !base_behavior.name.nil?
10
- return base_behavior.name
11
- end
12
-
13
- nil
14
- end
15
-
16
- def full_name
17
- if !base_behavior.nil? && !base_behavior.name.nil?
18
- return base_behavior.full_name
19
- end
20
-
21
- nil
22
- end
23
- end
24
- end
25
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module Sysml
5
- class Trace < Lutaml::Uml::TopElement
6
- attr_accessor :base_abstraction
7
- end
8
- end
9
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module Sysml
5
- class Verify < Trace
6
- end
7
- end
8
- end
@@ -1,486 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module Sysml
5
- class XmiFile
6
- attr_accessor :package_list, :model_list, :class_list, :activity_list,
7
- :property_list, :port_list,
8
- :datatype_list, :instance_list,
9
- :realization_list, :abstraction_list,
10
- :association_list, :connector_list,
11
- :connectorend_list, :constraint_list, :block_list,
12
- :constraintblock_list, :requirement_list,
13
- :testcase_list, :binding_connector_list,
14
- :nested_connectorend_list, :derive_requirement_list,
15
- :refine_requirement_list, :trace_requirement_list,
16
- :copy_requirement_list, :verify_requirement_list,
17
- :satisfy_requirement_list,
18
- :allocate_requirement_list, :element_hash
19
-
20
- def initialize # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
21
- @package_list = []
22
- @model_list = []
23
- @class_list = []
24
- @activity_list = []
25
- @property_list = []
26
- @port_list = []
27
- @datatype_list = []
28
- @instance_list = []
29
- @realization_list = []
30
- @abstraction_list = []
31
- @association_list = []
32
- @connector_list = []
33
- @connectorend_list = []
34
- @constraint_list = []
35
- @block_list = []
36
- @constraintblock_list = []
37
- @requirement_list = []
38
- @testcase_list = []
39
- @binding_connector_list = []
40
- @nested_connectorend_list = []
41
- @derive_requirement_list = []
42
- @refine_requirement_list = []
43
- @trace_requirement_list = []
44
- @copy_requirement_list = []
45
- @verify_requirement_list = []
46
- @satisfy_requirement_list = []
47
- @allocate_requirement_list = []
48
-
49
- @element_hash = Hash.new
50
- end
51
-
52
- def parse(filename) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
53
- xmifile = File.new(filename, "r")
54
- inxml = Nokogiri::XML(xmifile)
55
-
56
- xmi_elements = inxml.xpath("//xmi:XMI")
57
- if xmi_elements.empty?
58
- puts "ERROR : File contains no 'xmi:XMI' XML elements : " \
59
- "#{filename}, may not be XMI file."
60
- xmifile.close
61
- exit
62
- end
63
-
64
- # setup xmi namespace
65
- xmi_ns = inxml.root.namespace_definitions.find do |ns|
66
- ns.prefix == "xmi"
67
- end
68
-
69
- ## Step 1: Find UML and SysML Core Objects in XMI file and create as
70
- # instance of metamodel
71
-
72
- inxml.xpath("//*").each do |xml_node| # rubocop:disable Metrics/BlockLength
73
- element_new = nil
74
-
75
- if xml_node.name.to_s == "packagedElement" &&
76
- xml_node.attribute_with_ns("type", xmi_ns.href)
77
- .to_s == "uml:Package"
78
- element_new = Lutaml::Uml::Package.new
79
- package_list.push element_new
80
- end
81
-
82
- if xml_node.name.to_s == "Model"
83
- element_new = Lutaml::Uml::Model.new
84
- model_list.push element_new
85
- element_new.viewpoint = xml_node["viewpoint"]
86
- element_new.href = xml_node["href"]
87
- end
88
-
89
- if xml_node.attribute_with_ns("type", xmi_ns.href).to_s == "uml:Class"
90
- element_new = Lutaml::Uml::Class.new
91
- if !xml_node["isAbstract"].nil?
92
- element_new.is_abstract = xml_node["isAbstract"] == "true"
93
- end
94
- class_list.push element_new
95
- end
96
-
97
- if xml_node.attribute_with_ns("type",
98
- xmi_ns.href).to_s == "uml:Activity"
99
- element_new = Lutaml::Uml::Activity.new
100
- activity_list.push element_new
101
- end
102
-
103
- if xml_node.attribute_with_ns("type",
104
- xmi_ns.href).to_s == "uml:Property"
105
- element_new = Lutaml::Uml::Property.new
106
- property_list.push element_new
107
- end
108
-
109
- if xml_node
110
- .attribute_with_ns("type", xmi_ns.href)
111
- .to_s == "uml:InstanceSpecification"
112
- element_new = Lutaml::Uml::Instance.new
113
- instance_list.push element_new
114
- end
115
-
116
- if xml_node.attribute_with_ns("type",
117
- xmi_ns.href).to_s == "uml:DataType"
118
- element_new = Lutaml::Uml::DataType.new
119
- datatype_list.push element_new
120
- end
121
-
122
- if xml_node.attribute_with_ns("type", xmi_ns.href).to_s == "uml:Port"
123
- element_new = Lutaml::Uml::Port.new
124
- port_list.push element_new
125
- end
126
-
127
- if xml_node.attribute_with_ns("type",
128
- xmi_ns.href).to_s == "uml:Connector"
129
- element_new = Lutaml::Uml::Connector.new
130
- connector_list.push element_new
131
- end
132
-
133
- if xml_node.attribute_with_ns("type",
134
- xmi_ns.href).to_s == "uml:ConnectorEnd"
135
- element_new = Lutaml::Uml::ConnectorEnd.new
136
- connectorend_list.push element_new
137
- end
138
-
139
- if xml_node.attribute_with_ns("type",
140
- xmi_ns.href).to_s == "uml:Constraint"
141
- element_new = Lutaml::Uml::Constraint.new
142
- constraint_list.push element_new
143
- end
144
-
145
- if xml_node.name.to_s == "Block"
146
- element_new = SYSML::Block.new
147
- block_list.push element_new
148
- end
149
-
150
- if xml_node.name.to_s == "Template"
151
- element_new = SYSML::Block.new
152
- block_list.push element_new
153
- end
154
-
155
- if xml_node.name.to_s == "ConstraintBlock"
156
- element_new = SYSML::ConstraintBlock.new
157
- constraintblock_list.push element_new
158
- end
159
-
160
- if (
161
- xml_node.name.to_s.index("Requirement") ||
162
- xml_node.name.to_s == "designConstraint"
163
- ) && xml_node.name.to_s != "RequirementRelated"
164
- element_new = SYSML::Requirement.new
165
- requirement_list.push element_new
166
- element_new.id = xml_node.attribute_with_ns("id",
167
- xmi_ns.href).to_s.strip
168
- element_new.text = xml_node["Text"]
169
- if xml_node.name != "Requirement"
170
- element_new.stereotype.push xml_node.name
171
- end
172
- end
173
-
174
- if xml_node.name.to_s == "TestCase"
175
- element_new = SYSML::TestCase.new
176
- testcase_list.push element_new
177
- end
178
-
179
- if xml_node.name.to_s == "BindingConnector"
180
- element_new = SYSML::BindingConnector.new
181
- binding_connector_list.push element_new
182
- end
183
-
184
- if xml_node.name.to_s == "NestedConnectorEnd"
185
- element_new = SYSML::NestedConnectorEnd.new
186
- nested_connectorend_list.push element_new
187
- end
188
-
189
- if xml_node.name.to_s == "DeriveReqt"
190
- element_new = SYSML::DeriveRequirement.new
191
- derive_requirement_list.push element_new
192
- end
193
- if xml_node.name.to_s == "refine"
194
- element_new = SYSML::Refine.new
195
- refine_requirement_list.push element_new
196
- end
197
- if xml_node.name.to_s == "trace"
198
- element_new = SYSML::Trace.new
199
- trace_requirement_list.push element_new
200
- end
201
- if xml_node.name.to_s == "Copy"
202
- element_new = SYSML::Copy.new
203
- copy_requirement_list.push element_new
204
- end
205
- if xml_node.name.to_s == "Verify"
206
- element_new = SYSML::Verify.new
207
- verify_requirement_list.push element_new
208
- end
209
- if xml_node.name.to_s == "Allocate"
210
- element_new = SYSML::Allocate.new
211
- allocate_requirement_list.push element_new
212
- end
213
-
214
- if xml_node.name.to_s == "Satisfy"
215
- element_new = SYSML::Satisfy.new
216
- satisfy_requirement_list.push element_new
217
- end
218
-
219
- if xml_node.attribute_with_ns("type",
220
- xmi_ns.href).to_s == "uml:Abstraction"
221
- element_new = Lutaml::Uml::Abstraction.new
222
- abstraction_list.push element_new
223
- end
224
-
225
- if xml_node.attribute_with_ns("type",
226
- xmi_ns.href).to_s == "uml:Realization"
227
- element_new = Lutaml::Uml::Realization.new
228
- realization_list.push element_new
229
- end
230
-
231
- if xml_node.attribute_with_ns("type",
232
- xmi_ns.href).to_s == "uml:Association"
233
- element_new = Lutaml::Uml::Association.new
234
- association_list.push element_new
235
- end
236
-
237
- if !element_new.nil?
238
- new_xmi_id_node = xml_node.attribute_with_ns("id", xmi_ns.href)
239
- new_xmi_uuid_node = xml_node.attribute_with_ns("uuid", xmi_ns.href)
240
- new_name_node = xml_node["name"]
241
- new_href_node = xml_node["href"]
242
-
243
- if !new_xmi_id_node.nil?
244
- element_new.xmi_id = new_xmi_id_node.to_s
245
- element_hash[element_new.xmi_id] = element_new
246
- end
247
-
248
- if !new_xmi_uuid_node.nil?
249
- element_new.xmi_uuid = new_xmi_uuid_node.to_s
250
- end
251
-
252
- if !new_name_node.nil?
253
- element_new.name = xml_node["name"].strip
254
- end
255
-
256
- if !new_href_node.nil?
257
- element_new.href = new_href_node.to_s
258
- if new_xmi_id_node == nil
259
- element_hash[element_new.href] = element_new
260
- end
261
- if !xml_node.at("xmi:Extension/referenceExtension").nil?
262
- element_new.name = xml_node
263
- .at("xmi:Extension/referenceExtension")["referentPath"]
264
- end
265
- end
266
-
267
- if !xml_node.parent.nil? &&
268
- !xml_node.parent.attribute_with_ns("id", xmi_ns.href).nil? &&
269
- !element_hash[xml_node
270
- .parent.attribute_with_ns("id", xmi_ns.href).to_s].nil?
271
-
272
- parent = element_hash[xml_node
273
- .parent.attribute_with_ns("id", xmi_ns.href).to_s]
274
- element_new.namespace = parent
275
- if parent.is_a? Lutaml::Uml::Package
276
- parent.contents.push element_new
277
- end
278
- end
279
- end
280
- end
281
-
282
- inxml.xpath("//*").each do |xml_node| # rubocop:disable Metrics/BlockLength,Style/CombinableLoops
283
- if !xml_node.attribute_with_ns("id", xmi_ns.href).nil? &&
284
- !element_hash[xml_node
285
- .attribute_with_ns("id", xmi_ns.href).to_s].nil?
286
-
287
- this_thing = element_hash[xml_node
288
- .attribute_with_ns("id", xmi_ns.href).to_s]
289
- end
290
-
291
- if xml_node.name.to_s == "nestedClassifier" &&
292
- xml_node.attribute_with_ns(
293
- "type", xmi_ns.href
294
- ).to_s == "uml:Class"
295
- owning_class_xmi_id = xml_node
296
- .parent.attribute_with_ns("id", xmi_ns.href).to_s
297
- owned_class_xmi_id = xml_node
298
- .attribute_with_ns("id", xmi_ns.href).to_s
299
- owning_class = element_hash[owning_class_xmi_id]
300
- owned_class = element_hash[owned_class_xmi_id]
301
- owning_class.nested_classifier.push owned_class
302
- end
303
-
304
- if xml_node.attribute_with_ns("type", xmi_ns.href)
305
- .to_s == "uml:Realization"
306
- this_thing = element_hash[xml_node
307
- .attribute_with_ns("id", xmi_ns.href).to_s]
308
- supplier_xmi_id = xml_node.at("supplier")["idref"]
309
- client_xmi_id = xml_node.at("client")["idref"]
310
- this_thing.supplier.push element_hash[supplier_xmi_id]
311
- this_thing.client.push element_hash[client_xmi_id]
312
- end
313
-
314
- if xml_node.attribute_with_ns("type",
315
- xmi_ns.href).to_s == "uml:Abstraction"
316
- this_thing = element_hash[xml_node
317
- .attribute_with_ns("id", xmi_ns.href).to_s]
318
- supplier_xmi_id = xml_node.at("supplier")["idref"]
319
- client_xmi_id = xml_node.at("client")["idref"]
320
- this_thing.supplier.push element_hash[supplier_xmi_id]
321
- this_thing.client.push element_hash[client_xmi_id]
322
- end
323
-
324
- if xml_node.name.to_s == "Block"
325
- this_thing = element_hash[xml_node
326
- .attribute_with_ns("id", xmi_ns.href).to_s]
327
- base_class_xmi_id = xml_node["base_Class"]
328
- this_thing.base_class = element_hash[base_class_xmi_id]
329
- end
330
-
331
- if xml_node.name.to_s == "Template"
332
- this_thing = element_hash[xml_node
333
- .attribute_with_ns("id", xmi_ns.href).to_s]
334
- base_class_xmi_id = xml_node["base_Class"]
335
- this_thing.base_class = element_hash[base_class_xmi_id]
336
- this_thing.base_class.stereotype.push "Template"
337
- end
338
-
339
- if xml_node.name.to_s == "ConstraintBlock"
340
- this_thing = element_hash[xml_node
341
- .attribute_with_ns("id", xmi_ns.href).to_s]
342
- base_class_xmi_id = xml_node["base_Class"]
343
- this_thing.base_class = element_hash[base_class_xmi_id]
344
- end
345
-
346
- if (
347
- xml_node.name.to_s.index("Requirement") ||
348
- (xml_node.name.to_s == "designConstraint")
349
- ) && xml_node.name.to_s != "RequirementRelated"
350
- this_thing = element_hash[xml_node
351
- .attribute_with_ns("id", xmi_ns.href).to_s]
352
- base_class_xmi_id = xml_node["base_Class"]
353
- this_thing.base_class = element_hash[base_class_xmi_id]
354
- this_thing.refined_by = element_hash[xml_node["RefinedBy"]]
355
- this_thing.derived_from = element_hash[xml_node["DerivedFrom"]]
356
- this_thing.traced_to = element_hash[xml_node["TracedTo"]]
357
- end
358
-
359
- if xml_node.name.to_s == "TestCase"
360
- this_thing = element_hash[xml_node
361
- .attribute_with_ns("id", xmi_ns.href).to_s]
362
- this_thing.base_behavior = element_hash[xml_node["base_Behavior"]]
363
- this_thing.verifies = element_hash[xml_node["Verifies"]]
364
- end
365
-
366
- if xml_node.name.to_s == "BindingConnector"
367
- this_thing = element_hash[xml_node
368
- .attribute_with_ns("id", xmi_ns.href).to_s]
369
- base_connector_xmi_id = xml_node["base_Connector"]
370
- this_thing.base_connector = element_hash[base_connector_xmi_id]
371
- end
372
-
373
- if xml_node.name.to_s == "NestedConnectorEnd"
374
- this_thing = element_hash[xml_node
375
- .attribute_with_ns("id", xmi_ns.href).to_s]
376
- base_connectorend_xmi_id = xml_node["base_ConnectorEnd"]
377
- this_thing.base_connectorend =
378
- element_hash[base_connectorend_xmi_id]
379
- if xml_node["propertyPath"] == nil
380
- xml_node.xpath("./propertyPath").each do |prop_path|
381
- # to deal with href = '#xmi:id' i.e. local references
382
- href_parts = prop_path["href"].split("#")
383
- prop = if href_parts[0].empty?
384
- element_hash[href_parts[1]]
385
- else
386
- element_hash[prop_path["href"]]
387
- end
388
- this_thing.property_path.push prop
389
- end
390
- else
391
- this_thing.property_path
392
- .push element_hash[xml_node["propertyPath"]]
393
- end
394
- end
395
-
396
- if xml_node.name.to_s == "Satisfy"
397
- this_thing = element_hash[xml_node
398
- .attribute_with_ns("id", xmi_ns.href).to_s]
399
- base_realization_xmi_id = xml_node["base_Realization"]
400
- this_thing.base_realization = element_hash[base_realization_xmi_id]
401
- end
402
-
403
- if ["DeriveReqt", "refine", "trace", "Copy", "Verify", "Allocate", # rubocop:disable Performance/CollectionLiteralInLoop
404
- ""].include? xml_node.name.to_s
405
- this_thing = element_hash[xml_node
406
- .attribute_with_ns("id", xmi_ns.href).to_s]
407
- base_abstraction_xmi_id = xml_node["base_Abstraction"]
408
- this_thing.base_abstraction = element_hash[base_abstraction_xmi_id]
409
- end
410
-
411
- if xml_node.attribute_with_ns("type",
412
- xmi_ns.href).to_s == "uml:Association"
413
- this_thing = element_hash[xml_node
414
- .attribute_with_ns("id", xmi_ns.href).to_s]
415
- member_end_list = xml_node.xpath("./memberEnd")
416
- member_end_list.each do |item|
417
- this_thing.member_end.push element_hash[item["idref"]]
418
- end
419
- owned_end_list = xml_node.xpath("./ownedEnd")
420
- owned_end_list.each do |item|
421
- this_thing.owned_end.push element_hash[item.attribute_with_ns(
422
- "id", xmi_ns.href
423
- ).to_s]
424
- end
425
- end
426
-
427
- if ["uml:Property", "uml:Port"].include?( # rubocop:disable Performance/CollectionLiteralInLoop
428
- xml_node.attribute_with_ns("type", xmi_ns.href).to_s,
429
- ) &&
430
- !["definingFeature", "partWithPort", "propertyPath", "role"] # rubocop:disable Performance/CollectionLiteralInLoop
431
- .include?(xml_node.name.to_s)
432
- this_thing = element_hash[xml_node
433
- .attribute_with_ns("id", xmi_ns.href).to_s]
434
- if !xml_node["association"].nil?
435
- this_thing.association = element_hash[xml_node["association"]]
436
- end
437
- if !xml_node["aggregation"].nil?
438
- this_thing.aggregation = xml_node["aggregation"]
439
- end
440
- if !xml_node["visibility"].nil?
441
- this_thing.visibility = xml_node["visibility"]
442
- end
443
-
444
- if !xml_node.at("lowerValue").nil?
445
-
446
- this_thing.lowerValue = if xml_node.at("lowerValue")["value"].nil?
447
- "0"
448
- else
449
- xml_node.at("lowerValue")["value"]
450
- end
451
- end
452
- if !xml_node.at("upperValue").nil?
453
- this_thing.upperValue = xml_node.at("upperValue")["value"]
454
- end
455
- end
456
-
457
- if xml_node.attribute_with_ns("type",
458
- xmi_ns.href).to_s == "uml:Connector"
459
- this_thing = element_hash[xml_node
460
- .attribute_with_ns("id", xmi_ns.href).to_s]
461
- connector_end_list = xml_node.xpath("./end")
462
- connector_end_list.each do |end_xml_node|
463
- this_thing.connector_end
464
- .push element_hash[end_xml_node.attribute_with_ns(
465
- "id", xmi_ns.href
466
- ).to_s]
467
- end
468
- end
469
-
470
- if xml_node.attribute_with_ns("type",
471
- xmi_ns.href).to_s == "uml:ConnectorEnd"
472
- this_thing = element_hash[xml_node
473
- .attribute_with_ns("id", xmi_ns.href).to_s]
474
- this_thing.connector = element_hash[xml_node.parent
475
- .attribute_with_ns("id", xmi_ns.href).to_s]
476
- this_thing.role = element_hash[xml_node["role"]]
477
- if this_thing.role == nil
478
- this_thing.role = element_hash[xml_node.at("role")["href"]]
479
- end
480
- this_thing.part_with_port = element_hash[xml_node["part_with_port"]]
481
- end
482
- end
483
- end
484
- end
485
- end
486
- end
data/lib/lutaml/sysml.rb DELETED
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "uml"
4
- require "nokogiri"
5
-
6
- module Lutaml
7
- module Sysml
8
- class Error < Lutaml::Error; end
9
- # Your code goes here...
10
- end
11
- end