Class: Lutaml::Qea::Factory::AssociationTransformer

Inherits:
BaseTransformer show all
Defined in:
lib/lutaml/qea/factory/association_transformer.rb

Overview

Transforms EA connectors (Association type) to UML associations

Instance Attribute Summary

Attributes inherited from BaseTransformer

#database

Instance Method Summary collapse

Methods inherited from BaseTransformer

#initialize, #transform_collection

Constructor Details

This class inherits a constructor from Lutaml::Qea::Factory::BaseTransformer

Instance Method Details

#transform(ea_connector) ⇒ Lutaml::Uml::Association

Transform EA connector to UML association

Parameters:

  • ea_connector (EaConnector)

    EA connector model

Returns:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/lutaml/qea/factory/association_transformer.rb', line 15

def transform(ea_connector) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
  return nil if ea_connector.nil?
  return nil unless ea_connector.association?

  Lutaml::Uml::Association.new.tap do |assoc| # rubocop:disable Metrics/BlockLength
    # Map basic properties
    assoc.name = ea_connector.name unless
      ea_connector.name.nil? || ea_connector.name.empty?
    assoc.xmi_id = normalize_guid_to_xmi_format(ea_connector.ea_guid,
                                                "EAID")

    # Map source (owner) end
    source_obj = find_object(ea_connector.start_object_id)
    if source_obj
      assoc.owner_end = source_obj.name
      assoc.owner_end_xmi_id = normalize_guid_to_xmi_format(
        source_obj.ea_guid, "EAID"
      )
      assoc.owner_end_attribute_name = ea_connector.sourcerole
      assoc.owner_end_cardinality = build_cardinality_from_string(
        ea_connector.sourcecard,
      )
    end

    # Map target (member) end
    target_obj = find_object(ea_connector.end_object_id)
    if target_obj
      assoc.member_end = target_obj.name
      assoc.member_end_xmi_id = normalize_guid_to_xmi_format(
        target_obj.ea_guid, "EAID"
      )
      assoc.member_end_attribute_name = ea_connector.destrole
      assoc.member_end_cardinality = build_cardinality_from_string(
        ea_connector.destcard,
      )
    end

    # Map definition/notes
    assoc.definition = ea_connector.notes unless
      ea_connector.notes.nil? || ea_connector.notes.empty?

    # Map stereotype
    if ea_connector.stereotype && !ea_connector.stereotype.empty?
      assoc.stereotype = [ea_connector.stereotype]
    end

    # Load and transform tagged values
    assoc.tagged_values = load_tagged_values(ea_connector.ea_guid)
  end
end