archimate 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (182) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +47 -0
  3. data/TODOs.org +219 -0
  4. data/archimate.gemspec +2 -1
  5. data/exe/archidiff +7 -0
  6. data/exe/archidiff-summary +7 -0
  7. data/exe/archimerge +7 -0
  8. data/exe/fmtxml +7 -0
  9. data/lib/archimate.rb +10 -21
  10. data/lib/archimate/cli/archi.rb +2 -1
  11. data/lib/archimate/cli/cleanup.rb +8 -9
  12. data/lib/archimate/cli/convert.rb +3 -1
  13. data/lib/archimate/cli/mapper.rb +1 -1
  14. data/lib/archimate/cli/stats.rb +1 -1
  15. data/lib/archimate/config.rb +4 -1
  16. data/lib/archimate/data_model.rb +11 -24
  17. data/lib/archimate/data_model/any_attribute.rb +18 -5
  18. data/lib/archimate/data_model/any_element.rb +30 -7
  19. data/lib/archimate/data_model/bounds.rb +34 -7
  20. data/lib/archimate/data_model/color.rb +32 -7
  21. data/lib/archimate/data_model/comparison.rb +87 -0
  22. data/lib/archimate/data_model/concern.rb +20 -7
  23. data/lib/archimate/data_model/connection.rb +71 -51
  24. data/lib/archimate/data_model/connector_type.rb +23 -0
  25. data/lib/archimate/data_model/diagram.rb +72 -10
  26. data/lib/archimate/data_model/diagram_type.rb +17 -0
  27. data/lib/archimate/data_model/differentiable.rb +142 -0
  28. data/lib/archimate/data_model/element.rb +39 -45
  29. data/lib/archimate/data_model/element_type.rb +89 -0
  30. data/lib/archimate/data_model/font.rb +30 -12
  31. data/lib/archimate/data_model/lang_string.rb +89 -16
  32. data/lib/archimate/data_model/layer.rb +55 -0
  33. data/lib/archimate/data_model/layers.rb +62 -0
  34. data/lib/archimate/data_model/location.rb +27 -11
  35. data/lib/archimate/data_model/metadata.rb +10 -3
  36. data/lib/archimate/data_model/model.rb +188 -121
  37. data/lib/archimate/data_model/modeling_note.rb +14 -3
  38. data/lib/archimate/data_model/organization.rb +44 -13
  39. data/lib/archimate/data_model/{documentation.rb → preserved_lang_string.rb} +1 -5
  40. data/lib/archimate/data_model/property.rb +17 -11
  41. data/lib/archimate/data_model/property_definition.rb +34 -4
  42. data/lib/archimate/data_model/referenceable.rb +0 -9
  43. data/lib/archimate/data_model/referenceable_collection.rb +201 -0
  44. data/lib/archimate/data_model/relationship.rb +52 -33
  45. data/lib/archimate/data_model/relationship_type.rb +43 -0
  46. data/lib/archimate/data_model/schema_info.rb +17 -6
  47. data/lib/archimate/data_model/style.rb +41 -11
  48. data/lib/archimate/data_model/view_node.rb +153 -59
  49. data/lib/archimate/data_model/viewpoint.rb +56 -80
  50. data/lib/archimate/data_model/viewpoint_type.rb +429 -0
  51. data/lib/archimate/export/csv_export.rb +2 -2
  52. data/lib/archimate/export/cypher.rb +2 -2
  53. data/lib/archimate/export/graph_ml.rb +7 -5
  54. data/lib/archimate/export/jsonl.rb +166 -0
  55. data/lib/archimate/export/n_quads.rb +8 -5
  56. data/lib/archimate/file_format.rb +4 -5
  57. data/lib/archimate/file_formats/archi_file_reader.rb +7 -240
  58. data/lib/archimate/file_formats/archi_file_writer.rb +16 -188
  59. data/lib/archimate/file_formats/model_exchange_file_reader.rb +7 -225
  60. data/lib/archimate/file_formats/model_exchange_file_writer_21.rb +22 -114
  61. data/lib/archimate/file_formats/model_exchange_file_writer_30.rb +22 -122
  62. data/lib/archimate/file_formats/sax.rb +55 -0
  63. data/lib/archimate/file_formats/sax/any_element.rb +64 -0
  64. data/lib/archimate/file_formats/sax/archi/archi_handler_factory.rb +48 -0
  65. data/lib/archimate/file_formats/sax/archi/bounds.rb +25 -0
  66. data/lib/archimate/file_formats/sax/archi/connection.rb +47 -0
  67. data/lib/archimate/file_formats/sax/archi/content.rb +28 -0
  68. data/lib/archimate/file_formats/sax/archi/diagram.rb +66 -0
  69. data/lib/archimate/file_formats/sax/archi/element.rb +36 -0
  70. data/lib/archimate/file_formats/sax/archi/location.rb +25 -0
  71. data/lib/archimate/file_formats/sax/archi/model.rb +109 -0
  72. data/lib/archimate/file_formats/sax/archi/organization.rb +60 -0
  73. data/lib/archimate/file_formats/sax/archi/property.rb +54 -0
  74. data/lib/archimate/file_formats/sax/archi/relationship.rb +50 -0
  75. data/lib/archimate/file_formats/sax/archi/style.rb +35 -0
  76. data/lib/archimate/file_formats/sax/archi/view_node.rb +76 -0
  77. data/lib/archimate/file_formats/sax/capture_content.rb +20 -0
  78. data/lib/archimate/file_formats/sax/capture_documentation.rb +19 -0
  79. data/lib/archimate/file_formats/sax/capture_properties.rb +20 -0
  80. data/lib/archimate/file_formats/sax/content_element.rb +19 -0
  81. data/lib/archimate/file_formats/sax/document.rb +80 -0
  82. data/lib/archimate/file_formats/sax/handler.rb +54 -0
  83. data/lib/archimate/file_formats/sax/lang_string.rb +28 -0
  84. data/lib/archimate/file_formats/sax/model_exchange_file/color.rb +36 -0
  85. data/lib/archimate/file_formats/sax/model_exchange_file/connection.rb +67 -0
  86. data/lib/archimate/file_formats/sax/model_exchange_file/diagram.rb +60 -0
  87. data/lib/archimate/file_formats/sax/model_exchange_file/element.rb +43 -0
  88. data/lib/archimate/file_formats/sax/model_exchange_file/font.rb +44 -0
  89. data/lib/archimate/file_formats/sax/model_exchange_file/item.rb +64 -0
  90. data/lib/archimate/file_formats/sax/model_exchange_file/location.rb +23 -0
  91. data/lib/archimate/file_formats/sax/model_exchange_file/metadata.rb +66 -0
  92. data/lib/archimate/file_formats/sax/model_exchange_file/model.rb +124 -0
  93. data/lib/archimate/file_formats/sax/model_exchange_file/model_exchange_handler_factory.rb +53 -0
  94. data/lib/archimate/file_formats/sax/model_exchange_file/property.rb +32 -0
  95. data/lib/archimate/file_formats/sax/model_exchange_file/property_definition.rb +36 -0
  96. data/lib/archimate/file_formats/sax/model_exchange_file/relationship.rb +49 -0
  97. data/lib/archimate/file_formats/sax/model_exchange_file/schema_info.rb +47 -0
  98. data/lib/archimate/file_formats/sax/model_exchange_file/style.rb +66 -0
  99. data/lib/archimate/file_formats/sax/model_exchange_file/view_node.rb +86 -0
  100. data/lib/archimate/file_formats/sax/no_op.rb +17 -0
  101. data/lib/archimate/file_formats/sax/preserved_lang_string.rb +28 -0
  102. data/lib/archimate/file_formats/serializer.rb +57 -0
  103. data/lib/archimate/file_formats/serializer/archi/bounds.rb +23 -0
  104. data/lib/archimate/file_formats/serializer/archi/connection.rb +33 -0
  105. data/lib/archimate/file_formats/serializer/archi/diagram.rb +28 -0
  106. data/lib/archimate/file_formats/serializer/archi/documentation.rb +16 -0
  107. data/lib/archimate/file_formats/serializer/archi/element.rb +24 -0
  108. data/lib/archimate/file_formats/serializer/archi/location.rb +26 -0
  109. data/lib/archimate/file_formats/serializer/archi/model.rb +25 -0
  110. data/lib/archimate/file_formats/serializer/archi/organization.rb +21 -0
  111. data/lib/archimate/file_formats/serializer/archi/property.rb +15 -0
  112. data/lib/archimate/file_formats/serializer/archi/relationship.rb +36 -0
  113. data/lib/archimate/file_formats/serializer/archi/view_node.rb +52 -0
  114. data/lib/archimate/file_formats/serializer/archi/viewpoint_type.rb +45 -0
  115. data/lib/archimate/file_formats/serializer/model_exchange_file/element.rb +25 -0
  116. data/lib/archimate/file_formats/serializer/model_exchange_file/location.rb +15 -0
  117. data/lib/archimate/file_formats/serializer/model_exchange_file/model_exchange_file_writer.rb +32 -0
  118. data/lib/archimate/file_formats/serializer/model_exchange_file/organization.rb +23 -0
  119. data/lib/archimate/file_formats/serializer/model_exchange_file/properties.rb +15 -0
  120. data/lib/archimate/file_formats/serializer/model_exchange_file/relationship.rb +19 -0
  121. data/lib/archimate/file_formats/serializer/model_exchange_file/style.rb +48 -0
  122. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/connection.rb +25 -0
  123. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/diagram.rb +27 -0
  124. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/item.rb +17 -0
  125. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/label.rb +17 -0
  126. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/model.rb +36 -0
  127. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/organization_body.rb +25 -0
  128. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/property.rb +19 -0
  129. data/lib/archimate/file_formats/serializer/model_exchange_file/v21/view_node.rb +44 -0
  130. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/connection.rb +26 -0
  131. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/diagram.rb +27 -0
  132. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/item.rb +17 -0
  133. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/label.rb +17 -0
  134. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/model.rb +41 -0
  135. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/organization_body.rb +25 -0
  136. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/property.rb +19 -0
  137. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/property_definitions.rb +34 -0
  138. data/lib/archimate/file_formats/serializer/model_exchange_file/v30/view_node.rb +45 -0
  139. data/lib/archimate/file_formats/serializer/named_collection.rb +21 -0
  140. data/lib/archimate/file_formats/serializer/writer.rb +56 -0
  141. data/lib/archimate/file_formats/serializer/xml_lang_string.rb +30 -0
  142. data/lib/archimate/file_formats/serializer/xml_metadata.rb +64 -0
  143. data/lib/archimate/file_formats/{model_exchange_file → serializer}/xml_property_defs.rb +2 -2
  144. data/lib/archimate/lint/duplicate_entities.rb +3 -3
  145. data/lib/archimate/lint/linter.rb +24 -29
  146. data/lib/archimate/svg/connection.rb +13 -103
  147. data/lib/archimate/svg/diagram.rb +1 -1
  148. data/lib/archimate/svg/entity/base_entity.rb +12 -8
  149. data/lib/archimate/svg/entity/data_entity.rb +2 -2
  150. data/lib/archimate/svg/entity/diagram_model_reference.rb +1 -1
  151. data/lib/archimate/svg/entity/event_entity.rb +2 -2
  152. data/lib/archimate/svg/entity/gap.rb +1 -1
  153. data/lib/archimate/svg/entity/group.rb +1 -1
  154. data/lib/archimate/svg/entity/motivation_entity.rb +1 -1
  155. data/lib/archimate/svg/entity/node.rb +1 -1
  156. data/lib/archimate/svg/entity/rect_entity.rb +1 -1
  157. data/lib/archimate/svg/entity/rounded_rect_entity.rb +1 -1
  158. data/lib/archimate/svg/entity/service_entity.rb +2 -2
  159. data/lib/archimate/svg/entity/value.rb +2 -2
  160. data/lib/archimate/svg/path.rb +153 -0
  161. data/lib/archimate/svg/point.rb +8 -1
  162. data/lib/archimate/version.rb +1 -1
  163. metadata +118 -36
  164. data/lib/archimate/data_model/archimate_node.rb +0 -181
  165. data/lib/archimate/data_model/concept.rb +0 -14
  166. data/lib/archimate/data_model/constants.rb +0 -82
  167. data/lib/archimate/data_model/container.rb +0 -17
  168. data/lib/archimate/data_model/diffable_array.rb +0 -213
  169. data/lib/archimate/data_model/diffable_primitive.rb +0 -83
  170. data/lib/archimate/data_model/label.rb +0 -19
  171. data/lib/archimate/data_model/named_referenceable.rb +0 -14
  172. data/lib/archimate/data_model/view.rb +0 -12
  173. data/lib/archimate/data_model/view_concept.rb +0 -18
  174. data/lib/archimate/file_formats/archi_file_format.rb +0 -151
  175. data/lib/archimate/file_formats/archimate_v2.rb +0 -461
  176. data/lib/archimate/file_formats/model_exchange_file/xml_lang_string.rb +0 -35
  177. data/lib/archimate/file_formats/model_exchange_file/xml_metadata.rb +0 -115
  178. data/lib/archimate/file_formats/model_exchange_file/xml_property_definitions.rb +0 -28
  179. data/lib/archimate/file_formats/model_exchange_file_reader_21.rb +0 -73
  180. data/lib/archimate/file_formats/model_exchange_file_reader_30.rb +0 -134
  181. data/lib/archimate/file_formats/model_exchange_file_writer.rb +0 -157
  182. data/lib/archimate/file_formats/writer.rb +0 -56
@@ -4,131 +4,39 @@ require "nokogiri"
4
4
  module Archimate
5
5
  module FileFormats
6
6
  # Archimate version 2.1 Model Exchange Format Writer
7
- class ModelExchangeFileWriter21 < ModelExchangeFileWriter
7
+ class ModelExchangeFileWriter21 < Serializer::ModelExchangeFile::ModelExchangeFileWriter
8
+ include Serializer::ModelExchangeFile::V21::Connection
9
+ include Serializer::ModelExchangeFile::V21::Diagram
10
+ include Serializer::ModelExchangeFile::Element
11
+ include Serializer::ModelExchangeFile::V21::Item
12
+ include Serializer::ModelExchangeFile::V21::Label
13
+ include Serializer::ModelExchangeFile::Location
14
+ include Serializer::ModelExchangeFile::V21::Model
15
+ include Serializer::ModelExchangeFile::Organization
16
+ include Serializer::ModelExchangeFile::V21::OrganizationBody
17
+ include Serializer::ModelExchangeFile::V21::Property
18
+ include Serializer::ModelExchangeFile::Properties
19
+ include Serializer::ModelExchangeFile::Relationship
20
+ include Serializer::ModelExchangeFile::Style
21
+ include Serializer::ModelExchangeFile::V21::ViewNode
22
+
8
23
  def initialize(model)
9
24
  super
10
25
  end
11
26
 
12
- def model_attrs
13
- model_namespaces.merge(
14
- "xsi:schemaLocation" => model.schema_locations.join(" "),
15
- "identifier" => identifier(model.id)
16
- )
17
- end
18
-
19
- def serialize_model(xml)
20
- xml.model(model_attrs) do
21
- ModelExchangeFile::XmlMetadata.new(model.metadata).serialize(xml)
22
- ModelExchangeFile::XmlLangString.new(model.name, :name).serialize(xml)
23
- ModelExchangeFile::XmlLangString.new(model.documentation, :documentation).serialize(xml)
24
- serialize_properties(xml, model)
25
- serialize_elements(xml)
26
- serialize_relationships(xml)
27
- serialize_organization_root(xml, model.organizations)
28
- serialize_property_defs(xml)
29
- serialize_views(xml)
30
- end
31
- end
32
-
33
- def serialize_property_defs(xml)
34
- return if model.property_definitions.empty?
35
- ModelExchangeFile::XmlPropertyDefs.new(model.property_definitions).serialize(xml)
36
- end
37
-
38
- def serialize_label(xml, str)
39
- return if str.nil? || str.strip.empty?
40
- name_attrs = str.lang && !str.lang.empty? ? {"xml:lang" => str.lang} : {}
41
- xml.label(name_attrs) { xml.text text_proc(str) }
42
- end
43
-
44
- def serialize_organization_root(xml, organizations)
45
- return unless organizations && organizations.size > 0
46
- xml.organization do
47
- serialize(xml, organizations)
48
- end
49
- end
50
-
51
- def serialize_item(xml, item)
52
- xml.item(identifierref: identifier(item))
53
- end
54
-
55
- def serialize_property(xml, property)
56
- xml.property(identifierref: property.property_definition.id) do
57
- ModelExchangeFile::XmlLangString.new(property.value, :value).serialize(xml)
58
- end
59
- end
60
-
61
- def serialize_views(xml)
62
- return if model.diagrams.empty?
63
- xml.views do
64
- serialize(xml, model.diagrams)
65
- end
66
- end
67
-
68
- def serialize_diagram(xml, diagram)
69
- xml.view(
70
- remove_nil_values(
71
- identifier: identifier(diagram.id),
72
- viewpoint: diagram.viewpoint_type,
73
- "xsi:type": diagram.type
74
- )
75
- ) do
76
- elementbase(xml, diagram)
77
- serialize(xml, diagram.nodes)
78
- serialize(xml, diagram.connections)
79
- end
80
- end
81
-
82
- def view_node_attrs(view_node, x_offset = 0, y_offset = 0)
83
- attrs = {
84
- identifier: identifier(view_node.id),
85
- elementref: nil,
86
- x: view_node.bounds ? (view_node.bounds&.x + x_offset).round : nil,
87
- y: view_node.bounds ? (view_node.bounds&.y + y_offset).round : nil,
88
- w: view_node.bounds&.width&.round,
89
- h: view_node.bounds&.height&.round,
90
- type: nil
27
+ def relationship_attributes(relationship)
28
+ {
29
+ identifier: identifier(relationship.id),
30
+ source: identifier(relationship.source.id),
31
+ target: identifier(relationship.target.id),
32
+ "xsi:type" => meff_type(relationship.type)
91
33
  }
92
- if view_node.archimate_element
93
- attrs[:elementref] = identifier(view_node.archimate_element)
94
- elsif view_node.model
95
- # Since it doesn't seem to be forbidden, we just assume we can use
96
- # the elementref for views in views
97
- attrs[:elementref] = view_node.model
98
- attrs[:type] = "model"
99
- else
100
- attrs[:type] = "group"
101
- end
102
- remove_nil_values(attrs)
103
- end
104
-
105
- def serialize_view_node(xml, view_node, x_offset = 0, y_offset = 0)
106
- attrs = view_node_attrs(view_node, x_offset, y_offset)
107
- xml.node(attrs) do
108
- serialize_label(xml, view_node.name) if attrs[:type] == "group"
109
- serialize(xml, view_node.style) if view_node.style
110
- view_node.nodes.each do |c|
111
- serialize_view_node(xml, c) # , attrs[:x].to_f, attrs[:y].to_f)
112
- end
113
- end
114
34
  end
115
35
 
116
36
  def font_style_string(font)
117
37
  font&.style_string
118
38
  end
119
39
 
120
- def serialize_connection(xml, sc)
121
- xml.connection(
122
- identifier: identifier(sc.id),
123
- relationshipref: identifier(sc.relationship),
124
- source: identifier(sc.source),
125
- target: identifier(sc.target)
126
- ) do
127
- serialize(xml, sc.bendpoints)
128
- serialize(xml, sc.style)
129
- end
130
- end
131
-
132
40
  def meff_type(el_type)
133
41
  el_type = el_type.sub(/^/, "")
134
42
  case el_type
@@ -3,122 +3,35 @@ require "nokogiri"
3
3
 
4
4
  module Archimate
5
5
  module FileFormats
6
- class ModelExchangeFileWriter30 < ModelExchangeFileWriter
6
+ class ModelExchangeFileWriter30 < Serializer::ModelExchangeFile::ModelExchangeFileWriter
7
+ include Serializer::ModelExchangeFile::V30::Connection
8
+ include Serializer::ModelExchangeFile::V30::Diagram
9
+ include Serializer::ModelExchangeFile::Element
10
+ include Serializer::ModelExchangeFile::V30::Item
11
+ include Serializer::ModelExchangeFile::V30::Label
12
+ include Serializer::ModelExchangeFile::Location
13
+ include Serializer::ModelExchangeFile::V30::Model
14
+ include Serializer::ModelExchangeFile::Organization
15
+ include Serializer::ModelExchangeFile::V30::OrganizationBody
16
+ include Serializer::ModelExchangeFile::V30::Property
17
+ include Serializer::ModelExchangeFile::Properties
18
+ include Serializer::ModelExchangeFile::Relationship
19
+ include Serializer::ModelExchangeFile::Style
20
+ include Serializer::ModelExchangeFile::V30::ViewNode
21
+
7
22
  def initialize(model)
8
23
  super
9
24
  end
10
25
 
11
- def model_attrs
12
- remove_nil_values(
13
- model_namespaces.merge(
14
- "xsi:schemaLocation" => model.schema_locations.join(" "),
15
- "identifier" => identifier(model.id),
16
- "version" => model.version
17
- )
18
- )
19
- end
20
-
21
- def serialize_model(xml)
22
- xml.model(model_attrs) do
23
- ModelExchangeFile::XmlLangString.new(model.name, :name).serialize(xml)
24
- ModelExchangeFile::XmlLangString.new(model.documentation, :documentation).serialize(xml)
25
- ModelExchangeFile::XmlMetadata.new(model.metadata).serialize(xml)
26
- serialize_properties(xml, model)
27
- serialize_elements(xml)
28
- serialize_relationships(xml)
29
- serialize_organization_root(xml, model.organizations)
30
- serialize_property_defs(xml)
31
- serialize_views(xml)
32
- end
33
- end
34
-
35
- def serialize_property_defs(xml)
36
- return if model.property_definitions.empty?
37
- ModelExchangeFile::XmlPropertyDefinitions.new(model.property_definitions).serialize(xml)
38
- end
39
-
40
- def serialize_label(xml, str, tag = :name)
41
- return if str.nil? || str.strip.empty?
42
- name_attrs = str.lang && !str.lang.empty? ? {"xml:lang" => str.lang} : {}
43
- xml.send(tag, name_attrs) { xml.text text_proc(str) }
44
- end
45
-
46
26
  def relationship_attributes(relationship)
47
- attrs = super
48
- attrs["accessType"] = relationship.access_type if relationship.access_type
49
- attrs
50
- end
51
-
52
- def serialize_organization_root(xml, organizations)
53
- return unless organizations && organizations.size > 0
54
- xml.organizations do
55
- serialize_organization_body(xml, organizations[0])
56
- end
57
- end
58
-
59
- def serialize_item(xml, item)
60
- xml.item(identifierRef: identifier(item))
61
- end
62
-
63
- def serialize_property(xml, property)
64
- xml.property("propertyDefinitionRef" => property.property_definition.id) do
65
- ModelExchangeFile::XmlLangString.new(property.value, :value).serialize(xml)
66
- end
67
- end
68
-
69
- def serialize_views(xml)
70
- return if model.diagrams.empty?
71
- xml.views do
72
- xml.diagrams {
73
- serialize(xml, model.diagrams)
74
- }
75
- end
76
- end
77
-
78
- def serialize_diagram(xml, diagram)
79
- xml.view(
80
- remove_nil_values(
81
- identifier: identifier(diagram.id),
82
- "xsi:type": diagram.type,
83
- viewpoint: diagram.viewpoint_type
84
- )
85
- ) do
86
- elementbase(xml, diagram)
87
- serialize(xml, diagram.nodes)
88
- serialize(xml, diagram.connections)
89
- end
90
- end
91
-
92
- def view_node_attrs(view_node, x_offset = 0, y_offset = 0)
93
27
  attrs = {
94
- identifier: identifier(view_node.id),
95
- elementRef: nil,
96
- "xsi:type" => view_node.type,
97
- "x" => view_node.bounds ? (view_node.bounds&.x + x_offset).round : nil,
98
- "y" => view_node.bounds ? (view_node.bounds&.y + y_offset).round : nil,
99
- "w" => view_node.bounds&.width&.round,
100
- "h" => view_node.bounds&.height&.round
28
+ identifier: identifier(relationship.id),
29
+ source: identifier(relationship.source.id),
30
+ target: identifier(relationship.target.id),
31
+ "xsi:type" => meff_type(relationship.type)
101
32
  }
102
- if view_node.archimate_element
103
- attrs[:elementRef] = identifier(view_node.archimate_element)
104
- elsif view_node.model
105
- # Since it doesn't seem to be forbidden, we just assume we can use
106
- # the elementref for views in views
107
- attrs[:elementRef] = view_node.model
108
- attrs[:type] = "model"
109
- end
110
- remove_nil_values(attrs)
111
- end
112
-
113
- def serialize_view_node(xml, view_node, x_offset = 0, y_offset = 0)
114
- attrs = view_node_attrs(view_node, x_offset, y_offset)
115
- xml.node(attrs) do
116
- serialize_label(xml, view_node.name, :label)
117
- serialize(xml, view_node.style) if view_node.style
118
- view_node.nodes.each do |c|
119
- serialize_view_node(xml, c) # , view_node_attrs[:x].to_f, view_node_attrs[:y].to_f)
120
- end
121
- end
33
+ attrs["accessType"] = relationship.access_type if relationship.access_type
34
+ attrs
122
35
  end
123
36
 
124
37
  def font_style_string(font)
@@ -132,19 +45,6 @@ module Archimate
132
45
  end
133
46
  end
134
47
 
135
- def serialize_connection(xml, sc)
136
- xml.connection(
137
- identifier: identifier(sc.id),
138
- relationshipRef: identifier(sc.relationship),
139
- "xsi:type": sc.type,
140
- source: identifier(sc.source),
141
- target: identifier(sc.target)
142
- ) do
143
- serialize(xml, sc.style)
144
- serialize(xml, sc.bendpoints)
145
- end
146
- end
147
-
148
48
  def meff_type(el_type)
149
49
  el_type.sub(/^/, "")
150
50
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+ module Archimate
3
+ module FileFormats
4
+ module Sax
5
+ SaxEvent = Struct.new(:sym, :args, :source)
6
+ FutureReference = Struct.new(:obj, :attr, :id)
7
+
8
+ autoload :AnyElement, 'archimate/file_formats/sax/any_element'
9
+ autoload :CaptureContent, 'archimate/file_formats/sax/capture_content'
10
+ autoload :CaptureDocumentation, 'archimate/file_formats/sax/capture_documentation'
11
+ autoload :CaptureProperties, 'archimate/file_formats/sax/capture_properties'
12
+ autoload :ContentElement, 'archimate/file_formats/sax/content_element'
13
+ autoload :Document, 'archimate/file_formats/sax/document'
14
+ autoload :Handler, 'archimate/file_formats/sax/handler'
15
+ autoload :LangString, 'archimate/file_formats/sax/lang_string'
16
+ autoload :NoOp, 'archimate/file_formats/sax/no_op'
17
+ autoload :PreservedLangString, 'archimate/file_formats/sax/preserved_lang_string'
18
+ module Archi
19
+ autoload :ArchiHandlerFactory, 'archimate/file_formats/sax/archi/archi_handler_factory'
20
+ autoload :Bounds, 'archimate/file_formats/sax/archi/bounds'
21
+ autoload :Connection, 'archimate/file_formats/sax/archi/connection'
22
+ autoload :Content, 'archimate/file_formats/sax/archi/content'
23
+ autoload :Diagram, 'archimate/file_formats/sax/archi/diagram'
24
+ autoload :Element, 'archimate/file_formats/sax/archi/element'
25
+ autoload :Location, 'archimate/file_formats/sax/archi/location'
26
+ autoload :Model, 'archimate/file_formats/sax/archi/model'
27
+ autoload :Organization, 'archimate/file_formats/sax/archi/organization'
28
+ autoload :PreservedLangString, 'archimate/file_formats/sax/archi/preserved_lang_string'
29
+ autoload :Property, 'archimate/file_formats/sax/archi/property'
30
+ autoload :Relationship, 'archimate/file_formats/sax/archi/relationship'
31
+ autoload :Style, 'archimate/file_formats/sax/archi/style'
32
+ autoload :ViewNode, 'archimate/file_formats/sax/archi/view_node'
33
+ end
34
+ module ModelExchangeFile
35
+ autoload :Color, 'archimate/file_formats/sax/model_exchange_file/color'
36
+ autoload :Connection, 'archimate/file_formats/sax/model_exchange_file/connection'
37
+ autoload :Diagram, 'archimate/file_formats/sax/model_exchange_file/diagram'
38
+ autoload :Element, 'archimate/file_formats/sax/model_exchange_file/element'
39
+ autoload :Font, 'archimate/file_formats/sax/model_exchange_file/font'
40
+ autoload :Item, 'archimate/file_formats/sax/model_exchange_file/item'
41
+ autoload :Location, 'archimate/file_formats/sax/model_exchange_file/location'
42
+ autoload :Metadata, 'archimate/file_formats/sax/model_exchange_file/metadata'
43
+ autoload :ModelExchangeHandlerFactory, 'archimate/file_formats/sax/model_exchange_file/model_exchange_handler_factory'
44
+ autoload :Model, 'archimate/file_formats/sax/model_exchange_file/model'
45
+ autoload :Property, 'archimate/file_formats/sax/model_exchange_file/property'
46
+ autoload :PropertyDefinition, 'archimate/file_formats/sax/model_exchange_file/property_definition'
47
+ autoload :Relationship, 'archimate/file_formats/sax/model_exchange_file/relationship'
48
+ autoload :Schema, 'archimate/file_formats/sax/model_exchange_file/schema'
49
+ autoload :SchemaInfo, 'archimate/file_formats/sax/model_exchange_file/schema_info'
50
+ autoload :Style, 'archimate/file_formats/sax/model_exchange_file/style'
51
+ autoload :ViewNode, 'archimate/file_formats/sax/model_exchange_file/view_node'
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Archimate
4
+ module FileFormats
5
+ module Sax
6
+ class AnyElement < Handler
7
+ include Sax::CaptureContent
8
+
9
+ def initialize(name, attrs, parent_handler)
10
+ super
11
+ @children = []
12
+ @el_name = nil
13
+ @prefix = nil
14
+ end
15
+
16
+ def complete
17
+ [event(
18
+ :on_any_element,
19
+ DataModel::AnyElement.new(
20
+ element: el_name,
21
+ prefix: prefix,
22
+ attributes: any_attributes,
23
+ content: content,
24
+ children: @children
25
+ )
26
+ )]
27
+ end
28
+
29
+ def on_any_element(any_element, _source)
30
+ @children << any_element
31
+ false
32
+ end
33
+
34
+ private
35
+
36
+ def el_name
37
+ parse_name unless @el_name
38
+ @el_name
39
+ end
40
+
41
+ def prefix
42
+ parse_name unless @el_name
43
+ @prefix
44
+ end
45
+
46
+ def parse_name
47
+ name_parts = name.split(":")
48
+ @prefix = name_parts.size > 1 ? name_parts.first : nil
49
+ @el_name = name_parts.last
50
+ end
51
+
52
+ def any_attributes
53
+ attrs.map do |attr_name, attr_val|
54
+ DataModel::AnyAttribute.new(
55
+ attr_name,
56
+ attr_val,
57
+ prefix: attr_name.split(":").first
58
+ )
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Archimate
4
+ module FileFormats
5
+ module Sax
6
+ module Archi
7
+ class ArchiHandlerFactory
8
+ def handler_for(name, attrs)
9
+ case name
10
+ when "model", "archimate:model"
11
+ Model
12
+ when "documentation", "purpose"
13
+ Sax::PreservedLangString
14
+ when "element"
15
+ element_type = Hash[attrs]["xsi:type"].sub(/archimate:/, '')
16
+ case element_type
17
+ when DataModel::ElementType, DataModel::ConnectorType
18
+ Element
19
+ when DataModel::DiagramType
20
+ Diagram
21
+ when DataModel::RelationshipType
22
+ Relationship
23
+ else
24
+ raise "Unexpected element_type #{element_type}"
25
+ end
26
+ when "property"
27
+ Property
28
+ when "folder"
29
+ Organization
30
+ when "child"
31
+ ViewNode
32
+ when "bounds"
33
+ Bounds
34
+ when "sourceConnection"
35
+ Connection
36
+ when "bendpoint"
37
+ Location
38
+ when "content"
39
+ Content
40
+ else
41
+ raise "Unhandled element name #{name}"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end