Class: Archimate::DataModel::Connection

Inherits:
Object
  • Object
show all
Includes:
Comparison, Referenceable
Defined in:
lib/archimate/data_model/connection.rb

Overview

Graphical connection type.

If the ‘relationshipRef’ attribute is present, the connection should reference an existing ArchiMate relationship.

If the connection is an ArchiMate relationship type, the connection’s label, documentation and properties may be determined (i.e inherited) from those in the referenced ArchiMate relationship. Otherwise the connection’s label, documentation and properties can be provided and will be additional to (or over-ride) those contained in the referenced ArchiMate relationship.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Referenceable

#add_reference, #destroy, #model, #references, #remove_reference, #replace_with

Methods included from Comparison

#==, #[], #dig, #each, #hash, included, #initialize, #inspect, #pretty_print, #to_h

Instance Attribute Details

#bendpointsArray<Location> (readonly)

Returns:



44
# File 'lib/archimate/data_model/connection.rb', line 44

model_attr :bendpoints, default: []

#diagramDiagram, NilClass (readonly)

Returns:



66
# File 'lib/archimate/data_model/connection.rb', line 66

model_attr :diagram, comparison_attr: :no_compare

#documentationPreservedLangString, NilClass (readonly)

Returns:



28
# File 'lib/archimate/data_model/connection.rb', line 28

model_attr :documentation, default: nil

#idString (readonly)

Returns:

  • (String)


22
# File 'lib/archimate/data_model/connection.rb', line 22

model_attr :id

#nameLangString, NilClass (readonly)

Returns:



25
# File 'lib/archimate/data_model/connection.rb', line 25

model_attr :name, default: nil

#propertiesArray<Property> (readonly)

Returns:



62
# File 'lib/archimate/data_model/connection.rb', line 62

model_attr :properties, default: []

#relationshipRelationship, NilClass

Returns:



56
# File 'lib/archimate/data_model/connection.rb', line 56

model_attr :relationship, comparison_attr: :id, writable: true, default: nil, also_reference: [:diagram]

#sourceViewNode, NilClass

Returns:



50
# File 'lib/archimate/data_model/connection.rb', line 50

model_attr :source, comparison_attr: :id, writable: true, default: nil

#source_attachmentLocation, NilClass (readonly)

Returns:



41
# File 'lib/archimate/data_model/connection.rb', line 41

model_attr :source_attachment, default: nil

#styleStyle, NilClass (readonly)

Returns:



59
# File 'lib/archimate/data_model/connection.rb', line 59

model_attr :style, default: nil

#targetViewNode, NilClass

Returns:



53
# File 'lib/archimate/data_model/connection.rb', line 53

model_attr :target, comparison_attr: :id, writable: true, default: nil

#target_attachmentLocation, NilClass (readonly)

Returns:



47
# File 'lib/archimate/data_model/connection.rb', line 47

model_attr :target_attachment, default: nil

#typeString, NilClass (readonly)

Note:

type here was used for the Element/Relationship/Diagram type

Returns:

  • (String, NilClass)


38
# File 'lib/archimate/data_model/connection.rb', line 38

model_attr :type, default: nil

Instance Method Details

#absolute_positionObject



116
117
118
119
# File 'lib/archimate/data_model/connection.rb', line 116

def absolute_position
  pt = Svg::Path.new(self).midpoint
  Bounds.new(x: pt.x, y: pt.y, width: 0, height: 0)
end

#descriptionObject



86
87
88
89
90
91
92
93
# File 'lib/archimate/data_model/connection.rb', line 86

def description
  [
    name.nil? ? nil : "#{name}: ",
    source&.description,
    relationship&.description,
    target&.description
  ].compact.join(" ")
end

#elementObject



78
79
80
# File 'lib/archimate/data_model/connection.rb', line 78

def element
  relationship
end

#end_locationObject



99
100
101
# File 'lib/archimate/data_model/connection.rb', line 99

def end_location
  target_attachment || target_bounds.center
end

#nodesObject

This is used when rendering a connection to connection relationship.



112
113
114
# File 'lib/archimate/data_model/connection.rb', line 112

def nodes
  []
end

#other_attributesArray<AnyAttribute>

# @!attribute [r] other_attributes

Returns:



34
# File 'lib/archimate/data_model/connection.rb', line 34

model_attr :other_attributes, default: []

#other_elementsArray<AnyElement>

# @!attribute [r] other_elements

Returns:



31
# File 'lib/archimate/data_model/connection.rb', line 31

model_attr :other_elements, default: []

#replace(entity, with_entity) ⇒ Object



68
69
70
71
72
# File 'lib/archimate/data_model/connection.rb', line 68

def replace(entity, with_entity)
  @relationship = with_entity.id if relationship == entity.id
  @source = with_entity.id if source == entity.id
  @target = with_entity.id if target == entity.id
end

#replace_item_with(item, replacement) ⇒ Object



121
122
123
124
125
126
127
128
129
130
# File 'lib/archimate/data_model/connection.rb', line 121

def replace_item_with(item, replacement)
  super
  item.remove_reference(self)
  case item
  when relationship
    @relationship = replacement
  else
    raise "Trying to replace #{item} that I don't reference"
  end
end

#source_boundsObject



103
104
105
# File 'lib/archimate/data_model/connection.rb', line 103

def source_bounds
  source.absolute_position
end

#start_locationObject



95
96
97
# File 'lib/archimate/data_model/connection.rb', line 95

def start_location
  source_attachment || source_bounds.center
end

#target_boundsObject



107
108
109
# File 'lib/archimate/data_model/connection.rb', line 107

def target_bounds
  target.absolute_position
end

#to_sObject



82
83
84
# File 'lib/archimate/data_model/connection.rb', line 82

def to_s
  "#{type_name} #{source.nil? ? 'nothing' : source} -> #{target.nil? ? 'nothing' : target}"
end

#type_nameObject



74
75
76
# File 'lib/archimate/data_model/connection.rb', line 74

def type_name
  Archimate::Color.color("#{Archimate::Color.data_model('Connection')}[#{Archimate::Color.color(@name || '', %i[white underline])}]", :on_light_magenta)
end