archimate 1.2.1 → 2.0.0
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.
- checksums.yaml +4 -4
- data/README.md +47 -0
- data/TODOs.org +219 -0
- data/archimate.gemspec +2 -1
- data/exe/archidiff +7 -0
- data/exe/archidiff-summary +7 -0
- data/exe/archimerge +7 -0
- data/exe/fmtxml +7 -0
- data/lib/archimate.rb +10 -21
- data/lib/archimate/cli/archi.rb +2 -1
- data/lib/archimate/cli/cleanup.rb +8 -9
- data/lib/archimate/cli/convert.rb +3 -1
- data/lib/archimate/cli/mapper.rb +1 -1
- data/lib/archimate/cli/stats.rb +1 -1
- data/lib/archimate/config.rb +4 -1
- data/lib/archimate/data_model.rb +11 -24
- data/lib/archimate/data_model/any_attribute.rb +18 -5
- data/lib/archimate/data_model/any_element.rb +30 -7
- data/lib/archimate/data_model/bounds.rb +34 -7
- data/lib/archimate/data_model/color.rb +32 -7
- data/lib/archimate/data_model/comparison.rb +87 -0
- data/lib/archimate/data_model/concern.rb +20 -7
- data/lib/archimate/data_model/connection.rb +71 -51
- data/lib/archimate/data_model/connector_type.rb +23 -0
- data/lib/archimate/data_model/diagram.rb +72 -10
- data/lib/archimate/data_model/diagram_type.rb +17 -0
- data/lib/archimate/data_model/differentiable.rb +142 -0
- data/lib/archimate/data_model/element.rb +39 -45
- data/lib/archimate/data_model/element_type.rb +89 -0
- data/lib/archimate/data_model/font.rb +30 -12
- data/lib/archimate/data_model/lang_string.rb +89 -16
- data/lib/archimate/data_model/layer.rb +55 -0
- data/lib/archimate/data_model/layers.rb +62 -0
- data/lib/archimate/data_model/location.rb +27 -11
- data/lib/archimate/data_model/metadata.rb +10 -3
- data/lib/archimate/data_model/model.rb +188 -121
- data/lib/archimate/data_model/modeling_note.rb +14 -3
- data/lib/archimate/data_model/organization.rb +44 -13
- data/lib/archimate/data_model/{documentation.rb → preserved_lang_string.rb} +1 -5
- data/lib/archimate/data_model/property.rb +17 -11
- data/lib/archimate/data_model/property_definition.rb +34 -4
- data/lib/archimate/data_model/referenceable.rb +0 -9
- data/lib/archimate/data_model/referenceable_collection.rb +201 -0
- data/lib/archimate/data_model/relationship.rb +52 -33
- data/lib/archimate/data_model/relationship_type.rb +43 -0
- data/lib/archimate/data_model/schema_info.rb +17 -6
- data/lib/archimate/data_model/style.rb +41 -11
- data/lib/archimate/data_model/view_node.rb +153 -59
- data/lib/archimate/data_model/viewpoint.rb +56 -80
- data/lib/archimate/data_model/viewpoint_type.rb +429 -0
- data/lib/archimate/export/csv_export.rb +2 -2
- data/lib/archimate/export/cypher.rb +2 -2
- data/lib/archimate/export/graph_ml.rb +7 -5
- data/lib/archimate/export/jsonl.rb +166 -0
- data/lib/archimate/export/n_quads.rb +8 -5
- data/lib/archimate/file_format.rb +4 -5
- data/lib/archimate/file_formats/archi_file_reader.rb +7 -240
- data/lib/archimate/file_formats/archi_file_writer.rb +16 -188
- data/lib/archimate/file_formats/model_exchange_file_reader.rb +7 -225
- data/lib/archimate/file_formats/model_exchange_file_writer_21.rb +22 -114
- data/lib/archimate/file_formats/model_exchange_file_writer_30.rb +22 -122
- data/lib/archimate/file_formats/sax.rb +55 -0
- data/lib/archimate/file_formats/sax/any_element.rb +64 -0
- data/lib/archimate/file_formats/sax/archi/archi_handler_factory.rb +48 -0
- data/lib/archimate/file_formats/sax/archi/bounds.rb +25 -0
- data/lib/archimate/file_formats/sax/archi/connection.rb +47 -0
- data/lib/archimate/file_formats/sax/archi/content.rb +28 -0
- data/lib/archimate/file_formats/sax/archi/diagram.rb +66 -0
- data/lib/archimate/file_formats/sax/archi/element.rb +36 -0
- data/lib/archimate/file_formats/sax/archi/location.rb +25 -0
- data/lib/archimate/file_formats/sax/archi/model.rb +109 -0
- data/lib/archimate/file_formats/sax/archi/organization.rb +60 -0
- data/lib/archimate/file_formats/sax/archi/property.rb +54 -0
- data/lib/archimate/file_formats/sax/archi/relationship.rb +50 -0
- data/lib/archimate/file_formats/sax/archi/style.rb +35 -0
- data/lib/archimate/file_formats/sax/archi/view_node.rb +76 -0
- data/lib/archimate/file_formats/sax/capture_content.rb +20 -0
- data/lib/archimate/file_formats/sax/capture_documentation.rb +19 -0
- data/lib/archimate/file_formats/sax/capture_properties.rb +20 -0
- data/lib/archimate/file_formats/sax/content_element.rb +19 -0
- data/lib/archimate/file_formats/sax/document.rb +80 -0
- data/lib/archimate/file_formats/sax/handler.rb +54 -0
- data/lib/archimate/file_formats/sax/lang_string.rb +28 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/color.rb +36 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/connection.rb +67 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/diagram.rb +60 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/element.rb +43 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/font.rb +44 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/item.rb +64 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/location.rb +23 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/metadata.rb +66 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/model.rb +124 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/model_exchange_handler_factory.rb +53 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/property.rb +32 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/property_definition.rb +36 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/relationship.rb +49 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/schema_info.rb +47 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/style.rb +66 -0
- data/lib/archimate/file_formats/sax/model_exchange_file/view_node.rb +86 -0
- data/lib/archimate/file_formats/sax/no_op.rb +17 -0
- data/lib/archimate/file_formats/sax/preserved_lang_string.rb +28 -0
- data/lib/archimate/file_formats/serializer.rb +57 -0
- data/lib/archimate/file_formats/serializer/archi/bounds.rb +23 -0
- data/lib/archimate/file_formats/serializer/archi/connection.rb +33 -0
- data/lib/archimate/file_formats/serializer/archi/diagram.rb +28 -0
- data/lib/archimate/file_formats/serializer/archi/documentation.rb +16 -0
- data/lib/archimate/file_formats/serializer/archi/element.rb +24 -0
- data/lib/archimate/file_formats/serializer/archi/location.rb +26 -0
- data/lib/archimate/file_formats/serializer/archi/model.rb +25 -0
- data/lib/archimate/file_formats/serializer/archi/organization.rb +21 -0
- data/lib/archimate/file_formats/serializer/archi/property.rb +15 -0
- data/lib/archimate/file_formats/serializer/archi/relationship.rb +36 -0
- data/lib/archimate/file_formats/serializer/archi/view_node.rb +52 -0
- data/lib/archimate/file_formats/serializer/archi/viewpoint_type.rb +45 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/element.rb +25 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/location.rb +15 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/model_exchange_file_writer.rb +32 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/organization.rb +23 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/properties.rb +15 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/relationship.rb +19 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/style.rb +48 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/connection.rb +25 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/diagram.rb +27 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/item.rb +17 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/label.rb +17 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/model.rb +36 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/organization_body.rb +25 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/property.rb +19 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/view_node.rb +44 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/connection.rb +26 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/diagram.rb +27 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/item.rb +17 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/label.rb +17 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/model.rb +41 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/organization_body.rb +25 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/property.rb +19 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/property_definitions.rb +34 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/view_node.rb +45 -0
- data/lib/archimate/file_formats/serializer/named_collection.rb +21 -0
- data/lib/archimate/file_formats/serializer/writer.rb +56 -0
- data/lib/archimate/file_formats/serializer/xml_lang_string.rb +30 -0
- data/lib/archimate/file_formats/serializer/xml_metadata.rb +64 -0
- data/lib/archimate/file_formats/{model_exchange_file → serializer}/xml_property_defs.rb +2 -2
- data/lib/archimate/lint/duplicate_entities.rb +3 -3
- data/lib/archimate/lint/linter.rb +24 -29
- data/lib/archimate/svg/connection.rb +13 -103
- data/lib/archimate/svg/diagram.rb +1 -1
- data/lib/archimate/svg/entity/base_entity.rb +12 -8
- data/lib/archimate/svg/entity/data_entity.rb +2 -2
- data/lib/archimate/svg/entity/diagram_model_reference.rb +1 -1
- data/lib/archimate/svg/entity/event_entity.rb +2 -2
- data/lib/archimate/svg/entity/gap.rb +1 -1
- data/lib/archimate/svg/entity/group.rb +1 -1
- data/lib/archimate/svg/entity/motivation_entity.rb +1 -1
- data/lib/archimate/svg/entity/node.rb +1 -1
- data/lib/archimate/svg/entity/rect_entity.rb +1 -1
- data/lib/archimate/svg/entity/rounded_rect_entity.rb +1 -1
- data/lib/archimate/svg/entity/service_entity.rb +2 -2
- data/lib/archimate/svg/entity/value.rb +2 -2
- data/lib/archimate/svg/path.rb +153 -0
- data/lib/archimate/svg/point.rb +8 -1
- data/lib/archimate/version.rb +1 -1
- metadata +118 -36
- data/lib/archimate/data_model/archimate_node.rb +0 -181
- data/lib/archimate/data_model/concept.rb +0 -14
- data/lib/archimate/data_model/constants.rb +0 -82
- data/lib/archimate/data_model/container.rb +0 -17
- data/lib/archimate/data_model/diffable_array.rb +0 -213
- data/lib/archimate/data_model/diffable_primitive.rb +0 -83
- data/lib/archimate/data_model/label.rb +0 -19
- data/lib/archimate/data_model/named_referenceable.rb +0 -14
- data/lib/archimate/data_model/view.rb +0 -12
- data/lib/archimate/data_model/view_concept.rb +0 -18
- data/lib/archimate/file_formats/archi_file_format.rb +0 -151
- data/lib/archimate/file_formats/archimate_v2.rb +0 -461
- data/lib/archimate/file_formats/model_exchange_file/xml_lang_string.rb +0 -35
- data/lib/archimate/file_formats/model_exchange_file/xml_metadata.rb +0 -115
- data/lib/archimate/file_formats/model_exchange_file/xml_property_definitions.rb +0 -28
- data/lib/archimate/file_formats/model_exchange_file_reader_21.rb +0 -73
- data/lib/archimate/file_formats/model_exchange_file_reader_30.rb +0 -134
- data/lib/archimate/file_formats/model_exchange_file_writer.rb +0 -157
- data/lib/archimate/file_formats/writer.rb +0 -56
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Bounds
|
|
8
|
+
def serialize_bounds(xml, bounds)
|
|
9
|
+
return unless bounds
|
|
10
|
+
xml.bounds(
|
|
11
|
+
remove_nil_values(
|
|
12
|
+
x: bounds.x&.to_i,
|
|
13
|
+
y: bounds.y&.to_i,
|
|
14
|
+
width: bounds.width&.to_i,
|
|
15
|
+
height: bounds.height&.to_i
|
|
16
|
+
)
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Connection
|
|
8
|
+
def serialize_connection(xml, connection)
|
|
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
|
+
)
|
|
21
|
+
)
|
|
22
|
+
)
|
|
23
|
+
) do
|
|
24
|
+
serialize(xml, connection.bendpoints)
|
|
25
|
+
serialize_documentation(xml, connection.documentation)
|
|
26
|
+
serialize(xml, connection.properties)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Diagram
|
|
8
|
+
def serialize_diagram(xml, diagram)
|
|
9
|
+
xml.element(
|
|
10
|
+
remove_nil_values(
|
|
11
|
+
"xsi:type" => diagram.type || "archimate:ArchimateDiagramModel",
|
|
12
|
+
"id" => diagram.id,
|
|
13
|
+
"name" => diagram.name,
|
|
14
|
+
"connectionRouterType" => diagram.connection_router_type,
|
|
15
|
+
"viewpoint" => ViewpointType.values.index(diagram.viewpoint_type)&.to_s,
|
|
16
|
+
"background" => diagram.background
|
|
17
|
+
)
|
|
18
|
+
) do
|
|
19
|
+
serialize(xml, diagram.nodes)
|
|
20
|
+
serialize_documentation(xml, diagram.documentation)
|
|
21
|
+
serialize(xml, diagram.properties)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Documentation
|
|
8
|
+
def serialize_documentation(xml, documentation, element_name = "documentation")
|
|
9
|
+
return unless documentation
|
|
10
|
+
xml.send(element_name) { xml.text(documentation.text) }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Element
|
|
8
|
+
def serialize_element(xml, element)
|
|
9
|
+
xml.element(
|
|
10
|
+
remove_nil_values(
|
|
11
|
+
"xsi:type" => "archimate:#{element.type}",
|
|
12
|
+
"id" => element.id,
|
|
13
|
+
"name" => element.name
|
|
14
|
+
)
|
|
15
|
+
) do
|
|
16
|
+
serialize_documentation(xml, element.documentation)
|
|
17
|
+
serialize(xml, element.properties)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Location
|
|
8
|
+
# startX = location.x - source_attachment.x
|
|
9
|
+
# startY = location.y - source_attachment.y
|
|
10
|
+
# endX = location.x - target_attachment.x
|
|
11
|
+
# endY = location.y - source_attachment.y
|
|
12
|
+
def serialize_location(xml, bendpoint)
|
|
13
|
+
xml.bendpoint(
|
|
14
|
+
remove_nil_values(
|
|
15
|
+
startX: bendpoint.x == 0 ? nil : bendpoint.x&.to_i,
|
|
16
|
+
startY: bendpoint.y == 0 ? nil : bendpoint.y&.to_i,
|
|
17
|
+
endX: bendpoint.end_x&.to_i,
|
|
18
|
+
endY: bendpoint.end_y&.to_i
|
|
19
|
+
)
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Model
|
|
8
|
+
def serialize_model(xml, model)
|
|
9
|
+
xml["archimate"].model(
|
|
10
|
+
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
|
|
11
|
+
"xmlns:archimate" => "http://www.archimatetool.com/archimate",
|
|
12
|
+
"name" => model.name,
|
|
13
|
+
"id" => model.id,
|
|
14
|
+
"version" => @version
|
|
15
|
+
) do
|
|
16
|
+
serialize(xml, model.organizations)
|
|
17
|
+
serialize(xml, model.properties)
|
|
18
|
+
serialize_documentation(xml, model.documentation, "purpose")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Organization
|
|
8
|
+
def serialize_organization(xml, organization)
|
|
9
|
+
xml.folder(
|
|
10
|
+
remove_nil_values(name: organization.name, id: organization.id, type: organization.type)
|
|
11
|
+
) do
|
|
12
|
+
serialize(xml, organization.organizations)
|
|
13
|
+
serialize_documentation(xml, organization.documentation)
|
|
14
|
+
serialize(xml, organization.items)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Property
|
|
8
|
+
def serialize_property(xml, property)
|
|
9
|
+
xml.property(remove_nil_values(key: property.key, value: property.value))
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module Relationship
|
|
8
|
+
def serialize_relationship(xml, rel)
|
|
9
|
+
xml.element(
|
|
10
|
+
remove_nil_values(
|
|
11
|
+
"xsi:type" => "archimate:#{rel.type}",
|
|
12
|
+
"id" => rel.id,
|
|
13
|
+
"name" => rel.name,
|
|
14
|
+
"source" => rel.source.id,
|
|
15
|
+
"target" => rel.target.id,
|
|
16
|
+
"accessType" => serialize_access_type(rel.access_type)
|
|
17
|
+
)
|
|
18
|
+
) do
|
|
19
|
+
serialize_documentation(xml, rel.documentation)
|
|
20
|
+
serialize(xml, rel.properties)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def serialize_access_type(val)
|
|
25
|
+
case val
|
|
26
|
+
when nil
|
|
27
|
+
nil
|
|
28
|
+
else
|
|
29
|
+
DataModel::ACCESS_TYPE.index(val)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module Archi
|
|
7
|
+
module ViewNode
|
|
8
|
+
def serialize_view_node(xml, child)
|
|
9
|
+
style_hash = archi_style_hash(child.style)
|
|
10
|
+
fill_color = style_hash.delete("fillColor")
|
|
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
|
+
)
|
|
25
|
+
)
|
|
26
|
+
)
|
|
27
|
+
) 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)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def archi_style_hash(style)
|
|
38
|
+
{
|
|
39
|
+
"fillColor" => style&.fill_color&.to_rgba,
|
|
40
|
+
"font" => style&.font&.to_archi_font,
|
|
41
|
+
"fontColor" => style&.font_color&.to_rgba,
|
|
42
|
+
"lineColor" => style&.line_color&.to_rgba,
|
|
43
|
+
"lineWidth" => style&.line_width&.to_s,
|
|
44
|
+
"textAlignment" => style&.text_alignment&.to_s,
|
|
45
|
+
"textPosition" => style&.text_position
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "ruby-enum"
|
|
3
|
+
|
|
4
|
+
module Archimate
|
|
5
|
+
module FileFormats
|
|
6
|
+
module Serializer
|
|
7
|
+
module Archi
|
|
8
|
+
class ViewpointType
|
|
9
|
+
include Ruby::Enum
|
|
10
|
+
|
|
11
|
+
define :None, ""
|
|
12
|
+
define :Actor_cooperation, "Actor Co-operation"
|
|
13
|
+
define :Application_behavior, "Application Behavior"
|
|
14
|
+
define :Application_cooperation, "Application Co-operation"
|
|
15
|
+
define :Application_structure, "Application Structure"
|
|
16
|
+
define :Application_usage, "Application Usage"
|
|
17
|
+
define :Business_function, "Business Function"
|
|
18
|
+
define :Business_process_cooperation, "Business Process Co-operation"
|
|
19
|
+
define :Business_process, "Business Process"
|
|
20
|
+
define :Product, "Product"
|
|
21
|
+
define :Implementation_and_deployment, "Implementation and Deployment"
|
|
22
|
+
define :Information_structure, "Information Structure"
|
|
23
|
+
define :Infrastructure_usage, "Infrastructure Usage"
|
|
24
|
+
define :Infrastructure, "Infrastructure"
|
|
25
|
+
define :Layered, "Layered"
|
|
26
|
+
define :Organization, "Organization"
|
|
27
|
+
define :Service_realization, "Service Realization"
|
|
28
|
+
define :Stakeholder, "Stakeholder"
|
|
29
|
+
define :Goal_realization, "Goal Realization"
|
|
30
|
+
define :Goal_contribution, "Goal Contribution"
|
|
31
|
+
define :Principles, "Principles"
|
|
32
|
+
define :Requirements_realization, "Requirements Realization"
|
|
33
|
+
define :Motivation, "Motivation"
|
|
34
|
+
define :Project, "Project"
|
|
35
|
+
define :Migration, "Migration"
|
|
36
|
+
define :Implementation_and_migration, "Implementation and Migration"
|
|
37
|
+
|
|
38
|
+
def self.[](idx)
|
|
39
|
+
values[idx]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module ModelExchangeFile
|
|
7
|
+
module Element
|
|
8
|
+
def serialize_element(xml, element)
|
|
9
|
+
return if element.type == "SketchModel" # TODO: print a warning that data is lost
|
|
10
|
+
xml.element(identifier: identifier(element.id),
|
|
11
|
+
"xsi:type" => meff_type(element.type)) do
|
|
12
|
+
elementbase(xml, element)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def elementbase(xml, element)
|
|
17
|
+
serialize_label(xml, element.name)
|
|
18
|
+
serialize(xml, element.documentation)
|
|
19
|
+
serialize_properties(xml, element)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Archimate
|
|
4
|
+
module FileFormats
|
|
5
|
+
module Serializer
|
|
6
|
+
module ModelExchangeFile
|
|
7
|
+
module Location
|
|
8
|
+
def serialize_location(xml, location)
|
|
9
|
+
xml.bendpoint(x: location.x.round, y: location.y.round)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "nokogiri"
|
|
3
|
+
|
|
4
|
+
module Archimate
|
|
5
|
+
module FileFormats
|
|
6
|
+
module Serializer
|
|
7
|
+
module ModelExchangeFile
|
|
8
|
+
class ModelExchangeFileWriter < Writer
|
|
9
|
+
attr_reader :model
|
|
10
|
+
|
|
11
|
+
def initialize(model)
|
|
12
|
+
super
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def write(output_io)
|
|
16
|
+
builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
|
17
|
+
serialize_model(xml, model)
|
|
18
|
+
end
|
|
19
|
+
output_io.write(builder.to_xml)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# TODO: Archi uses hex numbers for ids which may not be valid for
|
|
23
|
+
# identifer. If we are converting from Archi, decorate the IDs here.
|
|
24
|
+
def identifier(str)
|
|
25
|
+
return "id-#{str}" if str =~ /^\d/
|
|
26
|
+
str
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
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 Organization
|
|
8
|
+
def serialize_organization(xml, organization)
|
|
9
|
+
if organization.items.empty? &&
|
|
10
|
+
(!organization.documentation || organization.documentation.empty?) &&
|
|
11
|
+
organization.organizations.empty?
|
|
12
|
+
return
|
|
13
|
+
end
|
|
14
|
+
item_attrs = organization.id.nil? || organization.id.empty? ? {} : {identifier: organization.id}
|
|
15
|
+
xml.item(item_attrs) do
|
|
16
|
+
serialize_organization_body(xml, organization)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|