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)