lib/lutaml/xmi/parsers/xml.rb in lutaml-0.9.6 vs lib/lutaml/xmi/parsers/xml.rb in lutaml-0.9.7
- old
+ new
@@ -335,16 +335,23 @@
if link.start == owner_xmi_id
xmi_id = link.end
source_or_target = :target
end
- member_end = lookup_entity_name(xmi_id) ||
- connector_name_by_source_or_target(xmi_id, source_or_target)
-
+ member_end = member_end_name(xmi_id, source_or_target)
[member_end, xmi_id]
end
+ # @param xmi_id [String]
+ # @param source_or_target [Symbol]
+ # @return [String]
+ def member_end_name(xmi_id, source_or_target)
+ connector_labels(xmi_id, source_or_target) ||
+ lookup_entity_name(xmi_id) ||
+ connector_name_by_source_or_target(xmi_id, source_or_target)
+ end
+
# @param owner_xmi_id [String]
# @param link [Shale::Mapper]
# @param link_member_name [String]
# @return [Array<String, String, Hash, String, String>]
def serialize_member_type(owner_xmi_id, link, link_member_name)
@@ -400,12 +407,11 @@
member_end_type = "inheritance"
xmi_id = link.end
source_or_target = :target
end
- member_end = lookup_entity_name(xmi_id) ||
- connector_name_by_source_or_target(xmi_id, source_or_target)
+ member_end = member_end_name(xmi_id, source_or_target)
member_end_cardinality, _member_end_attribute_name =
fetch_owned_attribute_node(xmi_id)
[member_end, member_end_type, member_end_cardinality, nil, xmi_id]
@@ -533,18 +539,35 @@
end
# @param xmi_id [String]
# @param source_or_target [String]
# @return [String]
- def connector_name_by_source_or_target(xmi_id, source_or_target)
- node = @xmi_root_model.extension.connectors.connector.select do |con|
+ def connector_node_by_id(xmi_id, source_or_target)
+ @xmi_root_model.extension.connectors.connector.find do |con|
con.send(source_or_target.to_sym).idref == xmi_id
end
- return if node.empty? ||
- node.first.send(source_or_target.to_sym).nil? ||
- node.first.send(source_or_target.to_sym).model.nil?
+ end
- node.first.send(source_or_target.to_sym).model.name
+ # @param xmi_id [String]
+ # @param source_or_target [String]
+ # @return [String]
+ def connector_name_by_source_or_target(xmi_id, source_or_target)
+ node = connector_node_by_id(xmi_id, source_or_target)
+ return if node.nil? ||
+ node.send(source_or_target.to_sym).nil? ||
+ node.send(source_or_target.to_sym).model.nil?
+
+ node.send(source_or_target.to_sym).model.name
+ end
+
+ # @param xmi_id [String]
+ # @param source_or_target [String]
+ # @return [String]
+ def connector_labels(xmi_id, source_or_target)
+ node = connector_node_by_id(xmi_id, source_or_target)
+ return if node.nil?
+
+ node.labels&.rt || node.labels&.lt
end
# @param xmi_id [String]
# @return [String]
# @note xpath %(//source[@xmi:idref="#{xmi_id}"]/model)