Module: Archimate::FileFormats::Serializer::ModelExchangeFile::V30::ViewNode

Included in:
ModelExchangeFileWriter30
Defined in:
lib/archimate/file_formats/serializer/model_exchange_file/v30/view_node.rb

Instance Method Summary collapse

Instance Method Details

#serialize_view_node(xml, view_node, x_offset = 0, y_offset = 0) ⇒ Object



9
10
11
12
13
14
15
16
17
18
# File 'lib/archimate/file_formats/serializer/model_exchange_file/v30/view_node.rb', line 9

def serialize_view_node(xml, view_node, x_offset = 0, y_offset = 0)
  attrs = view_node_attrs(view_node, x_offset, y_offset)
  xml.node(attrs) do
    serialize_label(xml, view_node.name, :label)
    serialize(xml, view_node.style) if view_node.style
    view_node.nodes.each do |c|
      serialize_view_node(xml, c) # , view_node_attrs[:x].to_f, view_node_attrs[:y].to_f)
    end
  end
end

#view_node_attrs(view_node, x_offset = 0, y_offset = 0) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/archimate/file_formats/serializer/model_exchange_file/v30/view_node.rb', line 20

def view_node_attrs(view_node, x_offset = 0, y_offset = 0)
  attrs = {
    identifier: identifier(view_node.id),
    elementRef: nil,
    "xsi:type" => view_node.type,
    "x" => view_node.bounds ? ((view_node.bounds&.x || 0) + x_offset).round : nil,
    "y" => view_node.bounds ? ((view_node.bounds&.y || 0) + y_offset).round : nil,
    "w" => view_node.bounds&.width&.round,
    "h" => view_node.bounds&.height&.round
  }
  if view_node.element
    attrs[:elementRef] = identifier(view_node.element.id)
  elsif view_node.view_refs
    # Since it doesn't seem to be forbidden, we just assume we can use
    # the elementref for views in views
    attrs[:elementRef] = view_node.view_refs
    attrs[:type] = "model"
  end
  attrs.compact
end