archimate 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +1 -1
  3. data/Gemfile +1 -0
  4. data/README.md +10 -55
  5. data/Rakefile +19 -1
  6. data/archimate.gemspec +16 -14
  7. data/bin/archimate +12 -0
  8. data/lib/archimate/cli/archi.rb +38 -19
  9. data/lib/archimate/cli/cleanup.rb +41 -25
  10. data/lib/archimate/cli/duper.rb +0 -1
  11. data/lib/archimate/cli/mapper.rb +53 -40
  12. data/lib/archimate/cli/svger.rb +33 -4
  13. data/lib/archimate/core_refinements.rb +41 -0
  14. data/lib/archimate/data_model/bounds.rb +14 -4
  15. data/lib/archimate/data_model/comparison.rb +3 -27
  16. data/lib/archimate/data_model/connection.rb +26 -11
  17. data/lib/archimate/data_model/diagram.rb +17 -10
  18. data/lib/archimate/data_model/element.rb +21 -9
  19. data/lib/archimate/data_model/elements.rb +24 -18
  20. data/lib/archimate/data_model/lang_string.rb +34 -10
  21. data/lib/archimate/data_model/layer.rb +6 -0
  22. data/lib/archimate/data_model/location.rb +10 -13
  23. data/lib/archimate/data_model/model.rb +55 -43
  24. data/lib/archimate/data_model/organization.rb +21 -5
  25. data/lib/archimate/data_model/property.rb +0 -6
  26. data/lib/archimate/data_model/referenceable.rb +29 -3
  27. data/lib/archimate/data_model/referenceable_list.rb +34 -14
  28. data/lib/archimate/data_model/relationship.rb +29 -8
  29. data/lib/archimate/data_model/relationship_references.rb +115 -6
  30. data/lib/archimate/data_model/relationships.rb +15 -0
  31. data/lib/archimate/data_model/view_node.rb +20 -13
  32. data/lib/archimate/data_model/viewpoint.rb +13 -1
  33. data/lib/archimate/data_model/viewpoints.rb +416 -0
  34. data/lib/archimate/data_model.rb +7 -1
  35. data/lib/archimate/derived_relations.rb +2 -11
  36. data/lib/archimate/export/cypher.rb +6 -5
  37. data/lib/archimate/file_format.rb +1 -0
  38. data/lib/archimate/file_formats/archi_file_reader.rb +11 -1
  39. data/lib/archimate/file_formats/archi_file_writer.rb +15 -46
  40. data/lib/archimate/file_formats/archi_file_writer_4.rb +14 -0
  41. data/lib/archimate/file_formats/model_exchange_file_reader.rb +2 -1
  42. data/lib/archimate/file_formats/model_exchange_file_writer_21.rb +1 -0
  43. data/lib/archimate/file_formats/sax/archi/diagram.rb +53 -13
  44. data/lib/archimate/file_formats/sax/archi/location.rb +1 -3
  45. data/lib/archimate/file_formats/sax/model_exchange_file/diagram.rb +13 -2
  46. data/lib/archimate/file_formats/sax.rb +1 -0
  47. data/lib/archimate/file_formats/serializer/archi/archi_file_writer.rb +63 -0
  48. data/lib/archimate/file_formats/serializer/archi/archi_file_writer_3.rb +18 -0
  49. data/lib/archimate/file_formats/serializer/archi/archi_file_writer_4.rb +18 -0
  50. data/lib/archimate/file_formats/serializer/archi/bounds.rb +2 -2
  51. data/lib/archimate/file_formats/serializer/archi/connection.rb +24 -13
  52. data/lib/archimate/file_formats/serializer/archi/diagram.rb +3 -3
  53. data/lib/archimate/file_formats/serializer/archi/element.rb +2 -2
  54. data/lib/archimate/file_formats/serializer/archi/organization.rb +1 -1
  55. data/lib/archimate/file_formats/serializer/archi/property.rb +1 -1
  56. data/lib/archimate/file_formats/serializer/archi/relationship.rb +2 -2
  57. data/lib/archimate/file_formats/serializer/archi/view_node.rb +20 -22
  58. data/lib/archimate/file_formats/serializer/archi/viewpoint3.rb +43 -0
  59. data/lib/archimate/file_formats/serializer/archi/viewpoint4.rb +41 -0
  60. data/lib/archimate/file_formats/serializer/model_exchange_file/style.rb +3 -7
  61. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/diagram.rb +3 -3
  62. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/model.rb +9 -2
  63. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/view_node.rb +1 -1
  64. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/viewpoint.rb +23 -0
  65. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/diagram.rb +3 -3
  66. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/model.rb +5 -7
  67. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/view_node.rb +3 -3
  68. data/lib/archimate/file_formats/serializer/writer.rb +0 -5
  69. data/lib/archimate/file_formats/serializer.rb +6 -2
  70. data/lib/archimate/lint/duplicate_entities.rb +5 -5
  71. data/lib/archimate/lint/linter.rb +4 -4
  72. data/lib/archimate/maybe_io.rb +3 -2
  73. data/lib/archimate/svg/archimate.css +19 -21
  74. data/lib/archimate/svg/connection.rb +1 -1
  75. data/lib/archimate/svg/diagram.rb +1 -6
  76. data/lib/archimate/svg/entity/application_component.rb +9 -3
  77. data/lib/archimate/svg/entity/constraint.rb +0 -1
  78. data/lib/archimate/svg/entity/contract.rb +9 -0
  79. data/lib/archimate/svg/entity/data_entity.rb +1 -1
  80. data/lib/archimate/svg/entity/device.rb +1 -1
  81. data/lib/archimate/svg/entity/event_entity.rb +24 -7
  82. data/lib/archimate/svg/entity/group.rb +23 -4
  83. data/lib/archimate/svg/entity/grouping.rb +37 -0
  84. data/lib/archimate/svg/entity/interface_entity.rb +1 -1
  85. data/lib/archimate/svg/entity/node.rb +1 -1
  86. data/lib/archimate/svg/entity/outcome.rb +0 -1
  87. data/lib/archimate/svg/entity/principle.rb +0 -1
  88. data/lib/archimate/svg/entity/process_entity.rb +1 -1
  89. data/lib/archimate/svg/entity/requirement.rb +0 -1
  90. data/lib/archimate/svg/entity/service_entity.rb +6 -13
  91. data/lib/archimate/svg/entity.rb +1 -0
  92. data/lib/archimate/svg/entity_factory.rb +9 -5
  93. data/lib/archimate/svg/path.rb +57 -46
  94. data/lib/archimate/svg/point.rb +4 -0
  95. data/lib/archimate/svg/segment.rb +30 -0
  96. data/lib/archimate/svg/svg_template.svg.erb +11 -3
  97. data/lib/archimate/svg/view_node.rb +22 -0
  98. data/lib/archimate/version.rb +1 -1
  99. data/lib/archimate.rb +3 -2
  100. metadata +54 -54
  101. data/exe/archidiff +0 -7
  102. data/exe/archidiff-summary +0 -7
  103. data/exe/archimerge +0 -7
  104. data/exe/fmtxml +0 -7
  105. data/lib/archimate/data_model/viewpoint_type.rb +0 -389
  106. data/lib/archimate/file_formats/serializer/archi/location.rb +0 -26
  107. data/lib/archimate/file_formats/serializer/archi/viewpoint_type.rb +0 -45
  108. data/lib/archimate/svg/child.rb +0 -29
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "scanf"
3
4
 
4
5
  module Archimate
@@ -6,6 +7,57 @@ module Archimate
6
7
  module Sax
7
8
  module Archi
8
9
  class Diagram < FileFormats::Sax::Handler
10
+ VIEWPOINT_INDEX = {
11
+ "1" => nil, # DataModel::Viewpoints::Actor_cooperation,
12
+ "2" => DataModel::Viewpoints::Application_behavior,
13
+ "application_cooperation" => DataModel::Viewpoints::Application_cooperation,
14
+ "3" => DataModel::Viewpoints::Application_cooperation,
15
+ "4" => DataModel::Viewpoints::Application_structure,
16
+ "application_usage" => DataModel::Viewpoints::Application_usage,
17
+ "5" => DataModel::Viewpoints::Application_usage,
18
+ "6" => DataModel::Viewpoints::Business_function,
19
+ "business_process_cooperation" => DataModel::Viewpoints::Business_process_cooperation,
20
+ "7" => nil, # DataModel::Viewpoints::Business_cooperation,
21
+ "8" => DataModel::Viewpoints::Business_process,
22
+ "product" => DataModel::Viewpoints::Product,
23
+ "9" => DataModel::Viewpoints::Product,
24
+ "implementation_deployment" => DataModel::Viewpoints::Implementation_and_deployment,
25
+ "10" => DataModel::Viewpoints::Implementation_and_deployment,
26
+ "information_structure" => DataModel::Viewpoints::Information_structure,
27
+ "11" => DataModel::Viewpoints::Information_structure,
28
+ "12" => DataModel::Viewpoints::Infrastructure_usage,
29
+ "13" => DataModel::Viewpoints::Infrastructure,
30
+ "layered" => DataModel::Viewpoints::Layered,
31
+ "14" => DataModel::Viewpoints::Layered,
32
+ "organization" => DataModel::Viewpoints::Organization,
33
+ "15" => DataModel::Viewpoints::Organization,
34
+ "service_realization" => DataModel::Viewpoints::Service_realization,
35
+ "16" => DataModel::Viewpoints::Service_realization,
36
+ "stakeholder" => DataModel::Viewpoints::Stakeholder,
37
+ "17" => DataModel::Viewpoints::Stakeholder,
38
+ "goal_realization" => DataModel::Viewpoints::Goal_realization,
39
+ "18" => DataModel::Viewpoints::Goal_realization,
40
+ "19" => DataModel::Viewpoints::Goal_contribution,
41
+ "20" => DataModel::Viewpoints::Principles,
42
+ "requirements_realization" => DataModel::Viewpoints::Requirements_realization,
43
+ "21" => DataModel::Viewpoints::Requirements_realization,
44
+ "motivation" => DataModel::Viewpoints::Motivation,
45
+ "22" => DataModel::Viewpoints::Motivation,
46
+ "project" => DataModel::Viewpoints::Project,
47
+ "23" => DataModel::Viewpoints::Project,
48
+ "migration" => DataModel::Viewpoints::Migration,
49
+ "24" => DataModel::Viewpoints::Migration,
50
+ "implementation_migration" => DataModel::Viewpoints::Implementation_and_migration,
51
+ "25" => DataModel::Viewpoints::Implementation_and_migration,
52
+ "capability" => nil, # DataModel::Viewpoints::Capability,
53
+ "outcome_realization" => DataModel::Viewpoints::Outcome_realization,
54
+ "physical" => DataModel::Viewpoints::Physical,
55
+ "resource" => nil, # DataModel::Viewpoints::Resource,
56
+ "strategy" => DataModel::Viewpoints::Strategy,
57
+ "technology" => DataModel::Viewpoints::Technology,
58
+ "technology_usage" => DataModel::Viewpoints::Technology_usage
59
+ }.freeze
60
+
9
61
  include Sax::CaptureDocumentation
10
62
  include Sax::CaptureProperties
11
63
 
@@ -31,8 +83,7 @@ module Archimate
31
83
  @diagram ||= DataModel::Diagram.new(
32
84
  id: @attrs["id"],
33
85
  name: DataModel::LangString.string(process_text(@attrs["name"])),
34
- viewpoint_type: parse_viewpoint_type(@attrs["viewpoint"]),
35
- viewpoint: nil,
86
+ viewpoint: VIEWPOINT_INDEX.fetch(@attrs["viewpoint"], nil),
36
87
  connection_router_type: @attrs["connectionRouterType"],
37
88
  type: @attrs["xsi:type"],
38
89
  background: @attrs["background"]
@@ -48,17 +99,6 @@ module Archimate
48
99
  @connections << connection
49
100
  false
50
101
  end
51
-
52
- def parse_viewpoint_type(viewpoint_idx)
53
- case viewpoint_idx
54
- when String
55
- idx = viewpoint_idx.scanf("%d").first
56
- return nil unless idx
57
- Serializer::Archi::ViewpointType.values[idx]
58
- else
59
- nil
60
- end
61
- end
62
102
  end
63
103
  end
64
104
  end
@@ -9,9 +9,7 @@ module Archimate
9
9
  super
10
10
  @location = DataModel::Location.new(
11
11
  x: @attrs["startX"] || 0,
12
- y: @attrs["startY"] || 0,
13
- end_x: @attrs["endX"],
14
- end_y: @attrs["endY"]
12
+ y: @attrs["startY"] || 0
15
13
  )
16
14
  end
17
15
 
@@ -31,8 +31,7 @@ module Archimate
31
31
  def diagram
32
32
  @diagram ||= DataModel::Diagram.new(
33
33
  id: @attrs["identifier"],
34
- viewpoint_type: @attrs["viewpoint"],
35
- viewpoint: nil,
34
+ viewpoint: viewpoint,
36
35
  connection_router_type: @attrs["connectionRouterType"],
37
36
  type: @attrs["xsi:type"],
38
37
  background: @attrs["background"]
@@ -53,6 +52,18 @@ module Archimate
53
52
  @connections << connection
54
53
  false
55
54
  end
55
+
56
+ VIEWPOINT_MAP = {
57
+ "Business Process Co-operation" => DataModel::Viewpoints::Business_process_cooperation,
58
+ "Application Co-operation" => DataModel::Viewpoints::Application_cooperation
59
+ }.freeze
60
+
61
+ def viewpoint
62
+ viewpoint_attr = @attrs["viewpoint"]&.strip || ""
63
+ return nil if viewpoint_attr.empty?
64
+ return VIEWPOINT_MAP[viewpoint_attr] if VIEWPOINT_MAP.include?(viewpoint_attr)
65
+ DataModel::Viewpoints.with_name(viewpoint_attr)
66
+ end
56
67
  end
57
68
  end
58
69
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Archimate
3
4
  module FileFormats
4
5
  module Sax
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+
5
+ module Archimate
6
+ module FileFormats
7
+ module Serializer
8
+ module Archi
9
+ class ArchiFileWriter < Serializer::Writer
10
+ include Serializer::Archi::Bounds
11
+ include Serializer::Archi::Connection
12
+ include Serializer::Archi::Diagram
13
+ include Serializer::Archi::Documentation
14
+ include Serializer::Archi::Element
15
+ include Serializer::Archi::Model
16
+ include Serializer::Archi::Organization
17
+ include Serializer::Archi::Property
18
+ include Serializer::Archi::Relationship
19
+ include Serializer::Archi::ViewNode
20
+ include Serializer::Archi::Viewpoint3
21
+
22
+ TEXT_SUBSTITUTIONS = [
23
+ ['&#13;', '&#xD;'],
24
+ ['"', '&quot;'],
25
+ ['&gt;', '>'],
26
+ ['&#38;', '&amp;']
27
+ ].freeze
28
+
29
+ def initialize(model)
30
+ super
31
+ @version = "3.1.1"
32
+ end
33
+
34
+ def process_text(doc_str)
35
+ %w(documentation content name).each do |tag|
36
+ TEXT_SUBSTITUTIONS.each do |from, to|
37
+ doc_str.gsub!(%r{<#{tag}>([^<]*#{from}[^<]*)</#{tag}>}) do |str|
38
+ str.gsub(from, to)
39
+ end
40
+ end
41
+ end
42
+ doc_str.gsub(
43
+ %r{<(/)?archimate:}, "<\\1"
44
+ ).gsub(
45
+ %r{<(/)?model}, "<\\1archimate:model"
46
+ )
47
+ end
48
+
49
+ def write(archifile_io)
50
+ builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
51
+ serialize_model(xml, model)
52
+ end
53
+ archifile_io.write(
54
+ process_text(
55
+ builder.to_xml
56
+ )
57
+ )
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Archimate
4
+ module FileFormats
5
+ module Serializer
6
+ module Archi
7
+ class ArchiFileWriter3 < Serializer::Archi::ArchiFileWriter
8
+ include Serializer::Archi::Viewpoint3
9
+
10
+ def initialize(model)
11
+ super
12
+ @version = model.version || "3.1.1"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Archimate
4
+ module FileFormats
5
+ module Serializer
6
+ module Archi
7
+ class ArchiFileWriter4 < Serializer::Archi::ArchiFileWriter
8
+ include Serializer::Archi::Viewpoint4
9
+
10
+ def initialize(model)
11
+ super
12
+ @version = model.version || "4.0.0"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -8,12 +8,12 @@ module Archimate
8
8
  def serialize_bounds(xml, bounds)
9
9
  return unless bounds
10
10
  xml.bounds(
11
- remove_nil_values(
11
+ {
12
12
  x: bounds.x&.to_i,
13
13
  y: bounds.y&.to_i,
14
14
  width: bounds.width&.to_i,
15
15
  height: bounds.height&.to_i
16
- )
16
+ }.compact
17
17
  )
18
18
  end
19
19
  end
@@ -7,25 +7,36 @@ module Archimate
7
7
  module Connection
8
8
  def serialize_connection(xml, connection)
9
9
  xml.sourceConnection(
10
- remove_nil_values(
11
- {
12
- "xsi:type" => connection.type,
13
- "id" => connection.id,
14
- "name" => connection.name
15
- }.merge(
16
- archi_style_hash(connection.style).merge(
17
- "source" => connection.source&.id,
18
- "target" => connection.target&.id,
19
- "relationship" => connection.relationship&.id
20
- )
10
+ {
11
+ "xsi:type" => connection.type,
12
+ "id" => connection.id,
13
+ "name" => connection.name
14
+ }.merge(
15
+ archi_style_hash(connection.style).merge(
16
+ "source" => connection.source&.id,
17
+ "target" => connection.target&.id,
18
+ "archimateRelationship" => connection.relationship&.id
21
19
  )
22
- )
20
+ ).compact
23
21
  ) do
24
- serialize(xml, connection.bendpoints)
22
+ connection.bendpoints.each do |bendpoint|
23
+ serialize_bendpoint(xml, bendpoint, connection)
24
+ end
25
25
  serialize_documentation(xml, connection.documentation)
26
26
  serialize(xml, connection.properties)
27
27
  end
28
28
  end
29
+
30
+ def serialize_bendpoint(xml, bendpoint, connection)
31
+ xml.bendpoint(
32
+ {
33
+ startX: (bendpoint.x - connection.start_location.x).to_i,
34
+ startY: (bendpoint.y - connection.start_location.y).to_i,
35
+ endX: (bendpoint.x - connection.end_location.x).to_i,
36
+ endY: (bendpoint.y - connection.end_location.y).to_i
37
+ }.delete_if { |_k, v| v.zero? }
38
+ )
39
+ end
29
40
  end
30
41
  end
31
42
  end
@@ -7,14 +7,14 @@ module Archimate
7
7
  module Diagram
8
8
  def serialize_diagram(xml, diagram)
9
9
  xml.element(
10
- remove_nil_values(
10
+ {
11
11
  "xsi:type" => diagram.type || "archimate:ArchimateDiagramModel",
12
12
  "id" => diagram.id,
13
13
  "name" => diagram.name,
14
14
  "connectionRouterType" => diagram.connection_router_type,
15
- "viewpoint" => ViewpointType.values.index(diagram.viewpoint_type)&.to_s,
15
+ "viewpoint" => serialize_viewpoint(diagram.viewpoint),
16
16
  "background" => diagram.background
17
- )
17
+ }.compact
18
18
  ) do
19
19
  serialize(xml, diagram.nodes)
20
20
  serialize_documentation(xml, diagram.documentation)
@@ -7,11 +7,11 @@ module Archimate
7
7
  module Element
8
8
  def serialize_element(xml, element)
9
9
  xml.element(
10
- remove_nil_values(
10
+ {
11
11
  "xsi:type" => "archimate:#{element.type}",
12
12
  "id" => element.id,
13
13
  "name" => element.name
14
- )
14
+ }.compact
15
15
  ) do
16
16
  serialize_documentation(xml, element.documentation)
17
17
  serialize(xml, element.properties)
@@ -7,7 +7,7 @@ module Archimate
7
7
  module Organization
8
8
  def serialize_organization(xml, organization)
9
9
  xml.folder(
10
- remove_nil_values(name: organization.name, id: organization.id, type: organization.type)
10
+ { name: organization.name, id: organization.id, type: organization.type }.compact
11
11
  ) do
12
12
  serialize(xml, organization.organizations)
13
13
  serialize_documentation(xml, organization.documentation)
@@ -6,7 +6,7 @@ module Archimate
6
6
  module Archi
7
7
  module Property
8
8
  def serialize_property(xml, property)
9
- xml.property(remove_nil_values(key: property.key, value: property.value))
9
+ xml.property({ key: property.key, value: property.value }.compact)
10
10
  end
11
11
  end
12
12
  end
@@ -7,14 +7,14 @@ module Archimate
7
7
  module Relationship
8
8
  def serialize_relationship(xml, rel)
9
9
  xml.element(
10
- remove_nil_values(
10
+ {
11
11
  "xsi:type" => "archimate:#{rel.type}Relationship",
12
12
  "id" => rel.id,
13
13
  "name" => rel.name,
14
14
  "source" => rel.source.id,
15
15
  "target" => rel.target.id,
16
16
  "accessType" => serialize_access_type(rel.access_type)
17
- )
17
+ }.compact
18
18
  ) do
19
19
  serialize_documentation(xml, rel.documentation)
20
20
  serialize(xml, rel.properties)
@@ -5,32 +5,30 @@ module Archimate
5
5
  module Serializer
6
6
  module Archi
7
7
  module ViewNode
8
- def serialize_view_node(xml, child)
9
- style_hash = archi_style_hash(child.style)
8
+ def serialize_view_node(xml, view_node)
9
+ style_hash = archi_style_hash(view_node.style)
10
10
  fill_color = style_hash.delete("fillColor")
11
11
  xml.child(
12
- remove_nil_values(
13
- {
14
- "xsi:type" => child.type,
15
- "id" => child.id,
16
- "name" => child.name
17
- }.merge(
18
- style_hash.merge(
19
- "targetConnections" => child.target_connections.empty? ? nil : child.target_connections.join(" "),
20
- "fillColor" => fill_color,
21
- "model" => child.view_refs&.id,
22
- "archimateElement" => child.element&.id,
23
- "type" => child.child_type
24
- )
12
+ {
13
+ "xsi:type" => view_node.type,
14
+ "id" => view_node.id,
15
+ "name" => view_node.name
16
+ }.merge(
17
+ style_hash.merge(
18
+ "targetConnections" => view_node.target_connections.empty? ? nil : view_node.target_connections.join(" "),
19
+ "fillColor" => fill_color,
20
+ "model" => view_node.view_refs&.id,
21
+ "archimateElement" => view_node.element&.id,
22
+ "type" => view_node.child_type
25
23
  )
26
- )
24
+ ).compact
27
25
  ) do
28
- serialize_bounds(xml, child.bounds)
29
- serialize(xml, child.connections)
30
- xml.content { xml.text child.content } if child.content
31
- serialize(xml, child.nodes)
32
- serialize_documentation(xml, child.documentation)
33
- serialize(xml, child.properties)
26
+ serialize_bounds(xml, view_node.bounds)
27
+ serialize(xml, (view_node.connections + view_node.diagram.connections.select { |conn| conn.source.id == view_node.id }).uniq)
28
+ xml.content { xml.text view_node.content } if view_node.content
29
+ serialize(xml, view_node.nodes)
30
+ serialize_documentation(xml, view_node.documentation)
31
+ serialize(xml, view_node.properties)
34
32
  end
35
33
  end
36
34
 
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Archimate
4
+ module FileFormats
5
+ module Serializer
6
+ module Archi
7
+ module Viewpoint3
8
+ VIEWPOINT_INDEX = {
9
+ # nil => "1", # DataModel::Viewpoints::Actor_cooperation,
10
+ DataModel::Viewpoints::Application_behavior => "2",
11
+ DataModel::Viewpoints::Application_cooperation => "3",
12
+ DataModel::Viewpoints::Application_structure => "4",
13
+ DataModel::Viewpoints::Application_usage => "5",
14
+ DataModel::Viewpoints::Business_function => "6",
15
+ # nil => "7", # DataModel::Viewpoints::Business_cooperation,
16
+ DataModel::Viewpoints::Business_process => "8",
17
+ DataModel::Viewpoints::Product => "9",
18
+ DataModel::Viewpoints::Implementation_and_deployment => "10",
19
+ DataModel::Viewpoints::Information_structure => "11",
20
+ DataModel::Viewpoints::Infrastructure_usage => "12",
21
+ DataModel::Viewpoints::Infrastructure => "13",
22
+ DataModel::Viewpoints::Layered => "14",
23
+ DataModel::Viewpoints::Organization => "15",
24
+ DataModel::Viewpoints::Service_realization => "16",
25
+ DataModel::Viewpoints::Stakeholder => "17",
26
+ DataModel::Viewpoints::Goal_realization => "18",
27
+ DataModel::Viewpoints::Goal_contribution => "19",
28
+ DataModel::Viewpoints::Principles => "20",
29
+ DataModel::Viewpoints::Requirements_realization => "21",
30
+ DataModel::Viewpoints::Motivation => "22",
31
+ DataModel::Viewpoints::Project => "23",
32
+ DataModel::Viewpoints::Migration => "24",
33
+ DataModel::Viewpoints::Implementation_and_migration => "25"
34
+ }.freeze
35
+
36
+ def serialize_viewpoint(viewpoint)
37
+ VIEWPOINT_INDEX.fetch(viewpoint, nil)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Archimate
4
+ module FileFormats
5
+ module Serializer
6
+ module Archi
7
+ module Viewpoint4
8
+ VIEWPOINT_INDEX = {
9
+ DataModel::Viewpoints::Application_cooperation => "application_cooperation",
10
+ DataModel::Viewpoints::Application_usage => "application_usage",
11
+ DataModel::Viewpoints::Business_process_cooperation => "business_process_cooperation",
12
+ DataModel::Viewpoints::Product => "product",
13
+ DataModel::Viewpoints::Implementation_and_deployment => "implementation_deployment",
14
+ DataModel::Viewpoints::Information_structure => "information_structure",
15
+ DataModel::Viewpoints::Layered => "layered",
16
+ DataModel::Viewpoints::Organization => "organization",
17
+ DataModel::Viewpoints::Service_realization => "service_realization",
18
+ DataModel::Viewpoints::Stakeholder => "stakeholder",
19
+ DataModel::Viewpoints::Goal_realization => "goal_realization",
20
+ DataModel::Viewpoints::Requirements_realization => "requirements_realization",
21
+ DataModel::Viewpoints::Motivation => "motivation",
22
+ DataModel::Viewpoints::Project => "project",
23
+ DataModel::Viewpoints::Migration => "migration",
24
+ DataModel::Viewpoints::Implementation_and_migration => "implementation_migration",
25
+ # DataModel::Viewpoints::Capability => "capability",
26
+ DataModel::Viewpoints::Outcome_realization => "outcome_realization",
27
+ DataModel::Viewpoints::Physical => "physical",
28
+ # DataModel::Viewpoints::Resource => "resource",
29
+ DataModel::Viewpoints::Strategy => "strategy",
30
+ DataModel::Viewpoints::Technology => "technology",
31
+ DataModel::Viewpoints::Technology_usage => "technology_usage"
32
+ }.freeze
33
+
34
+ def serialize_viewpoint(viewpoint)
35
+ VIEWPOINT_INDEX.fetch(viewpoint, nil)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -7,11 +7,7 @@ module Archimate
7
7
  module Style
8
8
  def serialize_style(xml, style)
9
9
  return unless style
10
- xml.style(
11
- remove_nil_values(
12
- lineWidth: style.line_width
13
- )
14
- ) do
10
+ xml.style({ lineWidth: style.line_width }.compact) do
15
11
  serialize_color(xml, style.fill_color, :fillColor)
16
12
  serialize_color(xml, style.line_color, :lineColor)
17
13
  serialize_font(xml, style)
@@ -22,11 +18,11 @@ module Archimate
22
18
  def serialize_font(xml, style)
23
19
  return unless style && (style.font || style.font_color)
24
20
  xml.font(
25
- remove_nil_values(
21
+ {
26
22
  name: style.font&.name,
27
23
  size: style.font&.size&.round,
28
24
  style: font_style_string(style.font)
29
- )
25
+ }.compact
30
26
  ) { serialize_color(xml, style&.font_color, :color) }
31
27
  end
32
28
 
@@ -8,11 +8,11 @@ module Archimate
8
8
  module Diagram
9
9
  def serialize_diagram(xml, diagram)
10
10
  xml.view(
11
- remove_nil_values(
11
+ {
12
12
  identifier: identifier(diagram.id),
13
- viewpoint: diagram.viewpoint_type,
13
+ viewpoint: viewpoint_attribute(diagram.viewpoint),
14
14
  "xsi:type": diagram.type
15
- )
15
+ }.compact
16
16
  ) do
17
17
  elementbase(xml, diagram)
18
18
  serialize(xml, diagram.nodes)
@@ -14,7 +14,7 @@ module Archimate
14
14
  serialize_properties(xml, model)
15
15
  Serializer::NamedCollection.new("elements", model.elements).serialize(xml) { |xml_e, elements| serialize(xml_e, elements) }
16
16
  Serializer::NamedCollection.new("relationships", model.relationships).serialize(xml) { |xml_r, relationships| serialize(xml_r, relationships) }
17
- NamedCollection.new("organization", model.organizations).serialize(xml) { |xml_o, orgs| serialize(xml_o, orgs) }
17
+ NamedCollection.new("organization", model.organizations).serialize(xml) { |xml_o, orgs| serialize(xml_o, orgs) }
18
18
  Serializer::XmlPropertyDefs.new(model.property_definitions).serialize(xml)
19
19
  NamedCollection.new("views", model.diagrams).serialize(xml) do |xml_v, diagrams|
20
20
  serialize(xml_v, diagrams)
@@ -24,7 +24,14 @@ module Archimate
24
24
 
25
25
  def model_attrs
26
26
  model.namespaces.merge(
27
- "xsi:schemaLocation" => model.schema_locations.join(" "),
27
+ "xmlns" => "http://www.opengroup.org/xsd/archimate",
28
+ "xmlns:dc" => "http://purl.org/dc/elements/1.1/",
29
+ "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
30
+ "xsi:schemaLocation" => %w[http://www.opengroup.org/xsd/archimate
31
+ http://www.opengroup.org/xsd/archimate/archimate_v2p1.xsd
32
+ http://purl.org/dc/elements/1.1/
33
+ http://dublincore.org/schemas/xmls/qdc/2008/02/11/dc.xsd].join(" "),
34
+ # "xsi:schemaLocation" => model.schema_locations.join(" "),
28
35
  "identifier" => identifier(model.id)
29
36
  )
30
37
  end
@@ -34,7 +34,7 @@ module Archimate
34
34
  # the elementref for views in views
35
35
  attrs[:elementref] = view_node.view_refs
36
36
  end
37
- remove_nil_values(attrs)
37
+ attrs.compact
38
38
  end
39
39
  end
40
40
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Archimate
4
+ module FileFormats
5
+ module Serializer
6
+ module ModelExchangeFile
7
+ module V21
8
+ module Viewpoint
9
+ VIEWPOINT_MAP = {
10
+ "Business Process Co-operation" => DataModel::Viewpoints::Business_process_cooperation,
11
+ "Application Co-operation" => DataModel::Viewpoints::Application_cooperation
12
+ }.freeze
13
+
14
+ def viewpoint_attribute(viewpoint)
15
+ return nil unless viewpoint
16
+ VIEWPOINT_MAP.key(viewpoint) || viewpoint.name.to_s
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -8,11 +8,11 @@ module Archimate
8
8
  module Diagram
9
9
  def serialize_diagram(xml, diagram)
10
10
  xml.view(
11
- remove_nil_values(
11
+ {
12
12
  identifier: identifier(diagram.id),
13
13
  "xsi:type": diagram.type,
14
- viewpoint: diagram.viewpoint_type
15
- )
14
+ viewpoint: diagram.viewpoint&.name
15
+ }.compact
16
16
  ) do
17
17
  elementbase(xml, diagram)
18
18
  serialize(xml, diagram.nodes)