class Lutaml::Qea::Factory::ClassTransformer
def add_direct_stereotype(stereotypes, ea_object)
def add_direct_stereotype(stereotypes, ea_object) return unless ea_object.stereotype && !ea_object.stereotype.empty? stereotypes << ea_object.stereotype end
def add_interface_stereotype(stereotypes, ea_object)
def add_interface_stereotype(stereotypes, ea_object) return unless ea_object.interface? && !stereotypes.include?("interface") stereotypes << "interface" end
def add_xref_stereotype(stereotypes, ea_object)
def add_xref_stereotype(stereotypes, ea_object) xref_stereotype = StereotypeLoader.new(database) .load_from_xref(ea_object.ea_guid) return unless xref_stereotype && !stereotypes.include?(xref_stereotype) stereotypes << xref_stereotype end
def assign_basic_properties(klass, ea_object)
def assign_basic_properties(klass, ea_object) klass.name = ea_object.name klass.xmi_id = normalize_guid_to_xmi_format(ea_object.ea_guid, "EAID") klass.is_abstract = ea_object.abstract? klass.type = "Class" klass.visibility = map_visibility(ea_object.visibility) assign_stereotypes(klass, ea_object) assign_definition(klass, ea_object) end
def assign_definition(klass, ea_object)
def assign_definition(klass, ea_object) return if ea_object.note.nil? || ea_object.note.empty? klass.definition = normalize_line_endings(ea_object.note) end
def assign_feature_collections(klass, ea_object)
def assign_feature_collections(klass, ea_object) klass.operations = load_operations(ea_object.ea_object_id) klass.constraints = load_constraints(ea_object.ea_object_id) klass.tagged_values = load_tagged_values(ea_object.ea_guid) klass.tagged_values.concat( load_object_properties(ea_object.ea_object_id), ) end
def assign_features(klass, ea_object)
def assign_features(klass, ea_object) klass.attributes = load_all_attributes(ea_object) assign_feature_collections(klass, ea_object) end
def assign_relationships(klass, ea_object)
def assign_relationships(klass, ea_object) gen_builder = GeneralizationBuilder.new(database) assoc_builder = AssociationBuilder.new(database) klass.generalization = gen_builder.load_generalization( ea_object.ea_object_id, ) klass.association_generalization = gen_builder .load_association_generalizations(ea_object.ea_object_id) klass.associations = assoc_builder.load_class_associations( ea_object.ea_object_id, ea_object.ea_guid ) end
def assign_stereotypes(klass, ea_object)
def assign_stereotypes(klass, ea_object) stereotypes = build_stereotypes(ea_object) klass.stereotype = stereotypes unless stereotypes.empty? end
def build_stereotypes(ea_object)
def build_stereotypes(ea_object) stereotypes = [] add_direct_stereotype(stereotypes, ea_object) add_xref_stereotype(stereotypes, ea_object) add_interface_stereotype(stereotypes, ea_object) stereotypes end
def load_all_attributes(ea_object)
def load_all_attributes(ea_object) gen_builder = GeneralizationBuilder.new(database) assoc_builder = AssociationBuilder.new(database) attrs = load_attributes(ea_object.ea_object_id) assoc_attrs = gen_builder.convert_to_top_element_attributes( assoc_builder.load_association_attributes(ea_object.ea_object_id), ) attrs + assoc_attrs end
def load_attributes(object_id)
def load_attributes(object_id) return [] if object_id.nil? ea_attributes = database.attributes_for_object(object_id) .sort_by { |a| a.pos || 0 } AttributeTransformer.new(database).transform_collection(ea_attributes) end
def load_constraints(object_id)
def load_constraints(object_id) return [] if object_id.nil? return [] unless database.object_constraints ea_constraints = database.object_constraints.select do |c| c.ea_object_id == object_id end ConstraintTransformer.new(database).transform_collection(ea_constraints) end
def load_object_properties(object_id)
def load_object_properties(object_id) return [] if object_id.nil? return [] unless database.object_properties ea_props = database.object_properties.select do |prop| prop.ea_object_id == object_id end ObjectPropertyTransformer.new(database).transform_collection(ea_props) end
def load_operations(object_id)
def load_operations(object_id) return [] if object_id.nil? ea_operations = database.operations_for_object(object_id) .sort_by { |op| op.pos || 0 } OperationTransformer.new(database).transform_collection(ea_operations) end
def load_tagged_values(ea_guid)
def load_tagged_values(ea_guid) return [] if ea_guid.nil? return [] unless database.tagged_values ea_tags = database.tagged_values.select do |tag| tag.element_id == ea_guid end TaggedValueTransformer.new(database).transform_collection(ea_tags) end
def transform(ea_object)
def transform(ea_object) return nil if ea_object.nil? return nil unless transformable?(ea_object) Lutaml::Uml::Class.new.tap do |klass| assign_basic_properties(klass, ea_object) assign_features(klass, ea_object) assign_relationships(klass, ea_object) end end
def transformable?(ea_object)
def transformable?(ea_object) ea_object.uml_class? || ea_object.interface? || ea_object.object_type == "ProxyConnector" || ea_object.object_type == "Text" end