archimate 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +1 -1
- data/Gemfile +1 -0
- data/README.md +10 -55
- data/Rakefile +19 -1
- data/archimate.gemspec +16 -14
- data/bin/archimate +12 -0
- data/lib/archimate/cli/archi.rb +38 -19
- data/lib/archimate/cli/cleanup.rb +41 -25
- data/lib/archimate/cli/duper.rb +0 -1
- data/lib/archimate/cli/mapper.rb +53 -40
- data/lib/archimate/cli/svger.rb +33 -4
- data/lib/archimate/core_refinements.rb +41 -0
- data/lib/archimate/data_model/bounds.rb +14 -4
- data/lib/archimate/data_model/comparison.rb +3 -27
- data/lib/archimate/data_model/connection.rb +26 -11
- data/lib/archimate/data_model/diagram.rb +17 -10
- data/lib/archimate/data_model/element.rb +21 -9
- data/lib/archimate/data_model/elements.rb +24 -18
- data/lib/archimate/data_model/lang_string.rb +34 -10
- data/lib/archimate/data_model/layer.rb +6 -0
- data/lib/archimate/data_model/location.rb +10 -13
- data/lib/archimate/data_model/model.rb +55 -43
- data/lib/archimate/data_model/organization.rb +21 -5
- data/lib/archimate/data_model/property.rb +0 -6
- data/lib/archimate/data_model/referenceable.rb +29 -3
- data/lib/archimate/data_model/referenceable_list.rb +34 -14
- data/lib/archimate/data_model/relationship.rb +29 -8
- data/lib/archimate/data_model/relationship_references.rb +115 -6
- data/lib/archimate/data_model/relationships.rb +15 -0
- data/lib/archimate/data_model/view_node.rb +20 -13
- data/lib/archimate/data_model/viewpoint.rb +13 -1
- data/lib/archimate/data_model/viewpoints.rb +416 -0
- data/lib/archimate/data_model.rb +7 -1
- data/lib/archimate/derived_relations.rb +2 -11
- data/lib/archimate/export/cypher.rb +6 -5
- data/lib/archimate/file_format.rb +1 -0
- data/lib/archimate/file_formats/archi_file_reader.rb +11 -1
- data/lib/archimate/file_formats/archi_file_writer.rb +15 -46
- data/lib/archimate/file_formats/archi_file_writer_4.rb +14 -0
- data/lib/archimate/file_formats/model_exchange_file_reader.rb +2 -1
- data/lib/archimate/file_formats/model_exchange_file_writer_21.rb +1 -0
- data/lib/archimate/file_formats/sax/archi/diagram.rb +53 -13
- data/lib/archimate/file_formats/sax/archi/location.rb +1 -3
- data/lib/archimate/file_formats/sax/model_exchange_file/diagram.rb +13 -2
- data/lib/archimate/file_formats/sax.rb +1 -0
- data/lib/archimate/file_formats/serializer/archi/archi_file_writer.rb +63 -0
- data/lib/archimate/file_formats/serializer/archi/archi_file_writer_3.rb +18 -0
- data/lib/archimate/file_formats/serializer/archi/archi_file_writer_4.rb +18 -0
- data/lib/archimate/file_formats/serializer/archi/bounds.rb +2 -2
- data/lib/archimate/file_formats/serializer/archi/connection.rb +24 -13
- data/lib/archimate/file_formats/serializer/archi/diagram.rb +3 -3
- data/lib/archimate/file_formats/serializer/archi/element.rb +2 -2
- data/lib/archimate/file_formats/serializer/archi/organization.rb +1 -1
- data/lib/archimate/file_formats/serializer/archi/property.rb +1 -1
- data/lib/archimate/file_formats/serializer/archi/relationship.rb +2 -2
- data/lib/archimate/file_formats/serializer/archi/view_node.rb +20 -22
- data/lib/archimate/file_formats/serializer/archi/viewpoint3.rb +43 -0
- data/lib/archimate/file_formats/serializer/archi/viewpoint4.rb +41 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/style.rb +3 -7
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/diagram.rb +3 -3
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/model.rb +9 -2
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/view_node.rb +1 -1
- data/lib/archimate/file_formats/serializer/model_exchange_file/v21/viewpoint.rb +23 -0
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/diagram.rb +3 -3
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/model.rb +5 -7
- data/lib/archimate/file_formats/serializer/model_exchange_file/v30/view_node.rb +3 -3
- data/lib/archimate/file_formats/serializer/writer.rb +0 -5
- data/lib/archimate/file_formats/serializer.rb +6 -2
- data/lib/archimate/lint/duplicate_entities.rb +5 -5
- data/lib/archimate/lint/linter.rb +4 -4
- data/lib/archimate/maybe_io.rb +3 -2
- data/lib/archimate/svg/archimate.css +19 -21
- data/lib/archimate/svg/connection.rb +1 -1
- data/lib/archimate/svg/diagram.rb +1 -6
- data/lib/archimate/svg/entity/application_component.rb +9 -3
- data/lib/archimate/svg/entity/constraint.rb +0 -1
- data/lib/archimate/svg/entity/contract.rb +9 -0
- data/lib/archimate/svg/entity/data_entity.rb +1 -1
- data/lib/archimate/svg/entity/device.rb +1 -1
- data/lib/archimate/svg/entity/event_entity.rb +24 -7
- data/lib/archimate/svg/entity/group.rb +23 -4
- data/lib/archimate/svg/entity/grouping.rb +37 -0
- data/lib/archimate/svg/entity/interface_entity.rb +1 -1
- data/lib/archimate/svg/entity/node.rb +1 -1
- data/lib/archimate/svg/entity/outcome.rb +0 -1
- data/lib/archimate/svg/entity/principle.rb +0 -1
- data/lib/archimate/svg/entity/process_entity.rb +1 -1
- data/lib/archimate/svg/entity/requirement.rb +0 -1
- data/lib/archimate/svg/entity/service_entity.rb +6 -13
- data/lib/archimate/svg/entity.rb +1 -0
- data/lib/archimate/svg/entity_factory.rb +9 -5
- data/lib/archimate/svg/path.rb +57 -46
- data/lib/archimate/svg/point.rb +4 -0
- data/lib/archimate/svg/segment.rb +30 -0
- data/lib/archimate/svg/svg_template.svg.erb +11 -3
- data/lib/archimate/svg/view_node.rb +22 -0
- data/lib/archimate/version.rb +1 -1
- data/lib/archimate.rb +3 -2
- metadata +54 -54
- data/exe/archidiff +0 -7
- data/exe/archidiff-summary +0 -7
- data/exe/archimerge +0 -7
- data/exe/fmtxml +0 -7
- data/lib/archimate/data_model/viewpoint_type.rb +0 -389
- data/lib/archimate/file_formats/serializer/archi/location.rb +0 -26
- data/lib/archimate/file_formats/serializer/archi/viewpoint_type.rb +0 -45
- data/lib/archimate/svg/child.rb +0 -29
@@ -25,13 +25,11 @@ module Archimate
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def model_attrs(model)
|
28
|
-
|
29
|
-
model.
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
)
|
34
|
-
)
|
28
|
+
model.namespaces.merge(
|
29
|
+
"xsi:schemaLocation" => model.schema_locations.join(" "),
|
30
|
+
"identifier" => identifier(model.id),
|
31
|
+
"version" => model.version
|
32
|
+
).compact
|
35
33
|
end
|
36
34
|
end
|
37
35
|
end
|
@@ -22,8 +22,8 @@ module Archimate
|
|
22
22
|
identifier: identifier(view_node.id),
|
23
23
|
elementRef: nil,
|
24
24
|
"xsi:type" => view_node.type,
|
25
|
-
"x" => view_node.bounds ? (view_node.bounds&.x + x_offset).round : nil,
|
26
|
-
"y" => view_node.bounds ? (view_node.bounds&.y + y_offset).round : nil,
|
25
|
+
"x" => view_node.bounds ? ((view_node.bounds&.x || 0) + x_offset).round : nil,
|
26
|
+
"y" => view_node.bounds ? ((view_node.bounds&.y || 0) + y_offset).round : nil,
|
27
27
|
"w" => view_node.bounds&.width&.round,
|
28
28
|
"h" => view_node.bounds&.height&.round
|
29
29
|
}
|
@@ -35,7 +35,7 @@ module Archimate
|
|
35
35
|
attrs[:elementRef] = view_node.view_refs
|
36
36
|
attrs[:type] = "model"
|
37
37
|
end
|
38
|
-
|
38
|
+
attrs.compact
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -9,18 +9,21 @@ module Archimate
|
|
9
9
|
autoload :XmlMetadata, 'archimate/file_formats/serializer/xml_metadata'
|
10
10
|
autoload :XmlPropertyDefs, 'archimate/file_formats/serializer/xml_property_defs'
|
11
11
|
module Archi
|
12
|
+
autoload :ArchiFileWriter, 'archimate/file_formats/serializer/archi/archi_file_writer'
|
13
|
+
autoload :ArchiFileWriter3, 'archimate/file_formats/serializer/archi/archi_file_writer_3'
|
14
|
+
autoload :ArchiFileWriter4, 'archimate/file_formats/serializer/archi/archi_file_writer_4'
|
12
15
|
autoload :Bounds, 'archimate/file_formats/serializer/archi/bounds'
|
13
16
|
autoload :Connection, 'archimate/file_formats/serializer/archi/connection'
|
14
17
|
autoload :Diagram, 'archimate/file_formats/serializer/archi/diagram'
|
15
18
|
autoload :Documentation, 'archimate/file_formats/serializer/archi/documentation'
|
16
19
|
autoload :Element, 'archimate/file_formats/serializer/archi/element'
|
17
|
-
autoload :Location, 'archimate/file_formats/serializer/archi/location'
|
18
20
|
autoload :Model, 'archimate/file_formats/serializer/archi/model'
|
19
21
|
autoload :Organization, 'archimate/file_formats/serializer/archi/organization'
|
20
22
|
autoload :Property, 'archimate/file_formats/serializer/archi/property'
|
21
23
|
autoload :Relationship, 'archimate/file_formats/serializer/archi/relationship'
|
22
24
|
autoload :ViewNode, 'archimate/file_formats/serializer/archi/view_node'
|
23
|
-
autoload :
|
25
|
+
autoload :Viewpoint3, 'archimate/file_formats/serializer/archi/viewpoint3'
|
26
|
+
autoload :Viewpoint4, 'archimate/file_formats/serializer/archi/viewpoint4'
|
24
27
|
end
|
25
28
|
module ModelExchangeFile
|
26
29
|
autoload :Element, 'archimate/file_formats/serializer/model_exchange_file/element'
|
@@ -39,6 +42,7 @@ module Archimate
|
|
39
42
|
autoload :OrganizationBody, 'archimate/file_formats/serializer/model_exchange_file/v21/organization_body'
|
40
43
|
autoload :Property, 'archimate/file_formats/serializer/model_exchange_file/v21/property'
|
41
44
|
autoload :ViewNode, 'archimate/file_formats/serializer/model_exchange_file/v21/view_node'
|
45
|
+
autoload :Viewpoint, 'archimate/file_formats/serializer/model_exchange_file/v21/viewpoint'
|
42
46
|
end
|
43
47
|
module V30
|
44
48
|
autoload :Connection, 'archimate/file_formats/serializer/model_exchange_file/v30/connection'
|
@@ -6,7 +6,7 @@ module Archimate
|
|
6
6
|
a able about above according accordingly across actually after afterwards again against all allow allows
|
7
7
|
almost alone along already also although always am among amongst amoungst amount an and another any anybody
|
8
8
|
anyhow anyone anything anyway anyways anywhere apart appear appreciate appropriate are around as aside ask
|
9
|
-
asking associated at available away awfully
|
9
|
+
asking associated at available away awfully be became because become becomes becoming been before
|
10
10
|
beforehand behind being believe below beside besides best better between beyond bill both bottom brief but
|
11
11
|
by call came can can't cannot cant cause causes certain certainly changes clearly co com come comes computer
|
12
12
|
con concerning consequently consider considering contain containing contains corresponding could couldn't
|
@@ -14,7 +14,7 @@ module Archimate
|
|
14
14
|
does doesn't doing don't done down downwards due during each edu eg eight either eleven else elsewhere empty
|
15
15
|
enough entirely especially et etc even ever every everybody everyone everything everywhere ex exactly example
|
16
16
|
except far few fifteen fifth fify fill find fire first five followed following follows for former formerly
|
17
|
-
forth forty found four from
|
17
|
+
forth forty found four from full further furthermore get gets getting give given gives go goes going
|
18
18
|
gone got gotten greetings had hadn't happens hardly has hasn't hasnt have haven't having he he's hello help
|
19
19
|
hence her here here's hereafter hereby herein hereupon hers herself hi him himself his hither hopefully how
|
20
20
|
howbeit however hundred i i'd i'll i'm i've ie if ignored immediate in inasmuch inc indeed indicate indicated
|
@@ -85,13 +85,13 @@ module Archimate
|
|
85
85
|
hash[tag] = hash.fetch(tag, []) << entity
|
86
86
|
end
|
87
87
|
@dupes.delete_if { |_tag, entities| entities.size <= 1 }
|
88
|
-
# @word_count.sort_by(&:last).reverse.each { |ak, av| puts "#{ak}: #{av}" }
|
89
88
|
@dupes
|
90
89
|
end
|
91
90
|
|
92
91
|
def entity_hash_name(entity)
|
93
|
-
layer = entity.layer
|
94
|
-
|
92
|
+
layer = entity.respond_to?(:layer) ? entity.layer : nil
|
93
|
+
layer ||= DataModel::Layers::None
|
94
|
+
layer_sort_order = DataModel::Layers.find_index(layer) # layer ? DataModel::Layers.find_index(layer) : 9
|
95
95
|
[
|
96
96
|
entity.class.name, # Taking advantage of Element being before Relationship
|
97
97
|
layer_sort_order.to_s,
|
@@ -89,13 +89,13 @@ module Archimate
|
|
89
89
|
def invalid_for_viewpoint
|
90
90
|
model.diagrams.each_with_object([]) do |diagram, errors|
|
91
91
|
next if diagram.total_viewpoint?
|
92
|
-
valid_entity_types = DataModel::
|
93
|
-
valid_relation_types = DataModel::
|
92
|
+
valid_entity_types = diagram.viewpoint&.allowed_element_types || DataModel::Elements.classes
|
93
|
+
valid_relation_types = diagram.viewpoint&.allowed_relationship_types || DataModel::Relationships.classes
|
94
94
|
invalid_elements = diagram.all_nodes.reject do |child|
|
95
|
-
child.element
|
95
|
+
child.element.nil? || valid_entity_types.include?(child.element.class)
|
96
96
|
end
|
97
97
|
invalid_relations = diagram.connections.reject do |sc|
|
98
|
-
sc.element
|
98
|
+
sc.element.nil? || valid_relation_types.include?(sc.element.class)
|
99
99
|
end
|
100
100
|
next unless !invalid_elements.empty? || !invalid_relations.empty?
|
101
101
|
errors << format(
|
data/lib/archimate/maybe_io.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
#
|
2
|
+
|
3
|
+
# This class passes an IO (or a fake IO) to the given block based on passing
|
4
|
+
# either a filename to permit output into or nil for a fake IO.
|
4
5
|
#
|
5
6
|
module Archimate
|
6
7
|
class MaybeIO
|
@@ -56,7 +56,6 @@ table.properties>caption {
|
|
56
56
|
float: right;
|
57
57
|
height: 20px;
|
58
58
|
width: 20px;
|
59
|
-
/*border: 1px solid red;*/
|
60
59
|
}
|
61
60
|
|
62
61
|
.archimate-icon {
|
@@ -115,8 +114,8 @@ table.properties>caption {
|
|
115
114
|
}
|
116
115
|
|
117
116
|
.archimate-motivation-background {
|
118
|
-
fill: #
|
119
|
-
stroke: #
|
117
|
+
fill: #cccdfd;
|
118
|
+
stroke: #8e8fb1;
|
120
119
|
}
|
121
120
|
|
122
121
|
.archimate-motivation2-background {
|
@@ -149,6 +148,12 @@ table.properties>caption {
|
|
149
148
|
stroke: #939696;
|
150
149
|
}
|
151
150
|
|
151
|
+
.archimate-grouping-background {
|
152
|
+
fill: #ffffff;
|
153
|
+
stroke: #b2b2b2;
|
154
|
+
stroke-dasharray: 8,4;
|
155
|
+
}
|
156
|
+
|
152
157
|
.archimate-sticky-background {
|
153
158
|
fill: #fffeb9;
|
154
159
|
stroke: #b2b181;
|
@@ -185,58 +190,51 @@ table.properties>caption {
|
|
185
190
|
font-size: 9px;
|
186
191
|
}
|
187
192
|
|
188
|
-
.archimate-assignment
|
193
|
+
.archimate-assignment {
|
189
194
|
marker-end: url(#archimate-filled-arrow);
|
190
195
|
marker-start: url(#archimate-dot-marker);
|
191
196
|
}
|
192
197
|
|
193
|
-
.archimate-composition
|
198
|
+
.archimate-composition {
|
194
199
|
marker-start: url(#archimate-filled-diamond);
|
195
200
|
}
|
196
201
|
|
197
|
-
.archimate-used-by
|
202
|
+
.archimate-used-by {
|
198
203
|
marker-end: url(#archimate-used-by-arrow);
|
199
204
|
}
|
200
205
|
|
201
|
-
.archimate-serving
|
206
|
+
.archimate-serving {
|
202
207
|
marker-end: url(#archimate-used-by-arrow);
|
203
208
|
}
|
204
209
|
|
205
|
-
.archimate-aggregation
|
210
|
+
.archimate-aggregation {
|
206
211
|
marker-start: url(#archimate-hollow-diamond);
|
207
212
|
}
|
208
213
|
|
209
|
-
.archimate-access
|
214
|
+
.archimate-access {
|
210
215
|
marker-end: url(#archimate-open-arrow);
|
211
216
|
stroke-dasharray: 2, 3;
|
212
217
|
}
|
213
218
|
|
214
|
-
.archimate-
|
219
|
+
.archimate-realization {
|
215
220
|
marker-end: url(#archimate-hollow-arrow);
|
216
221
|
stroke-dasharray: 5, 3;
|
217
222
|
}
|
218
223
|
|
219
|
-
.archimate-
|
224
|
+
.archimate-specialization {
|
220
225
|
marker-end: url(#archimate-hollow-arrow);
|
221
226
|
}
|
222
227
|
|
223
|
-
.archimate-influence
|
228
|
+
.archimate-influence {
|
224
229
|
marker-end: url(#archimate-open-arrow);
|
225
230
|
stroke-dasharray: 5, 3;
|
226
231
|
}
|
227
232
|
|
228
|
-
|
229
|
-
}
|
230
|
-
*/
|
231
|
-
.archimate-triggering-relationship {
|
233
|
+
.archimate-triggering {
|
232
234
|
marker-end: url(#archimate-filled-arrow);
|
233
235
|
}
|
234
236
|
|
235
|
-
.archimate-flow
|
237
|
+
.archimate-flow {
|
236
238
|
marker-end: url(#archimate-filled-arrow);
|
237
239
|
stroke-dasharray: 3, 3;
|
238
240
|
}
|
239
|
-
|
240
|
-
/*.archimate-default-connection {
|
241
|
-
}
|
242
|
-
*/
|
@@ -66,15 +66,10 @@ module Archimate
|
|
66
66
|
)
|
67
67
|
end
|
68
68
|
|
69
|
-
def attr_to_i(node, attr)
|
70
|
-
ival = node.attr(attr)
|
71
|
-
ival.to_i unless ival.nil? || ival.strip.empty?
|
72
|
-
end
|
73
|
-
|
74
69
|
def render_elements(svg_node)
|
75
70
|
diagram
|
76
71
|
.nodes
|
77
|
-
.reduce(svg_node) { |svg,
|
72
|
+
.reduce(svg_node) { |svg, view_node| ViewNode.new(view_node).render_elements(svg) }
|
78
73
|
end
|
79
74
|
|
80
75
|
def render_connections(svg_node)
|
@@ -3,14 +3,20 @@
|
|
3
3
|
module Archimate
|
4
4
|
module Svg
|
5
5
|
module Entity
|
6
|
-
|
7
|
-
class ApplicationComponent < BaseEntity
|
6
|
+
class ApplicationComponent < RectEntity
|
8
7
|
def initialize(child, bounds_offset)
|
9
8
|
super
|
9
|
+
@badge = "#archimate-app-component-badge"
|
10
10
|
end
|
11
11
|
|
12
12
|
def entity_shape(xml, bounds)
|
13
|
-
|
13
|
+
case child.child_type
|
14
|
+
when "1"
|
15
|
+
super
|
16
|
+
else
|
17
|
+
component_path(xml, bounds)
|
18
|
+
@badge = nil
|
19
|
+
end
|
14
20
|
end
|
15
21
|
|
16
22
|
def component_path(xml, bounds)
|
@@ -7,6 +7,15 @@ module Archimate
|
|
7
7
|
def initialize(child, bounds_offset)
|
8
8
|
super
|
9
9
|
end
|
10
|
+
|
11
|
+
def entity_shape(xml, bounds)
|
12
|
+
calc_text_bounds(bounds)
|
13
|
+
xml.g(class: background_class) do
|
14
|
+
xml.rect(x: bounds.left, y: bounds.top, width: bounds.width, height: bounds.height, class: background_class, style: shape_style)
|
15
|
+
xml.rect(x: bounds.left, y: bounds.top, width: bounds.width, height: @margin, class: "archimate-decoration")
|
16
|
+
xml.rect(x: bounds.left, y: bounds.top + bounds.height - @margin, width: bounds.width, height: @margin, class: "archimate-decoration")
|
17
|
+
end
|
18
|
+
end
|
10
19
|
end
|
11
20
|
end
|
12
21
|
end
|
@@ -3,13 +3,28 @@
|
|
3
3
|
module Archimate
|
4
4
|
module Svg
|
5
5
|
module Entity
|
6
|
-
class EventEntity <
|
6
|
+
class EventEntity < RoundedRectEntity
|
7
|
+
def initialize(child, bounds_offset)
|
8
|
+
super
|
9
|
+
@badge = "#archimate-event-badge"
|
10
|
+
end
|
11
|
+
|
7
12
|
def entity_shape(xml, bounds)
|
13
|
+
case child.child_type
|
14
|
+
when "1"
|
15
|
+
@badge = nil
|
16
|
+
event_path(xml, bounds)
|
17
|
+
else
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def event_path(xml, bounds)
|
8
23
|
notch_x = 18
|
9
24
|
notch_height = bounds.height / 2.0
|
10
25
|
event_width = bounds.width * 0.85
|
11
26
|
rx = 17
|
12
|
-
|
27
|
+
calc_event_text_bounds(notch_x)
|
13
28
|
xml.path(
|
14
29
|
d: [
|
15
30
|
"M", bounds.left, bounds.top,
|
@@ -23,12 +38,14 @@ module Archimate
|
|
23
38
|
)
|
24
39
|
end
|
25
40
|
|
26
|
-
def
|
41
|
+
def calc_event_text_bounds(notch_x)
|
27
42
|
bounds = @text_bounds
|
28
|
-
@text_bounds = DataModel::Bounds.new(
|
29
|
-
|
30
|
-
|
31
|
-
|
43
|
+
@text_bounds = DataModel::Bounds.new(
|
44
|
+
bounds.to_h.merge(
|
45
|
+
x: bounds.left + notch_x * 0.80,
|
46
|
+
width: bounds.width - notch_x
|
47
|
+
)
|
48
|
+
)
|
32
49
|
end
|
33
50
|
end
|
34
51
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module Archimate
|
@@ -12,9 +11,29 @@ module Archimate
|
|
12
11
|
|
13
12
|
def entity_shape(xml, bounds)
|
14
13
|
group_header_height = 21
|
15
|
-
xml.rect(
|
16
|
-
|
17
|
-
|
14
|
+
xml.rect(
|
15
|
+
x: bounds.left,
|
16
|
+
y: bounds.top + group_header_height,
|
17
|
+
width: bounds.width,
|
18
|
+
height: bounds.height - group_header_height,
|
19
|
+
class: background_class,
|
20
|
+
style: shape_style
|
21
|
+
)
|
22
|
+
xml.rect(
|
23
|
+
x: bounds.left,
|
24
|
+
y: bounds.top,
|
25
|
+
width: bounds.width / 2.0,
|
26
|
+
height: group_header_height,
|
27
|
+
class: background_class,
|
28
|
+
style: shape_style
|
29
|
+
)
|
30
|
+
xml.rect(
|
31
|
+
x: bounds.left,
|
32
|
+
y: bounds.top,
|
33
|
+
width: bounds.width / 2.0,
|
34
|
+
height: group_header_height,
|
35
|
+
class: "archimate-decoration"
|
36
|
+
)
|
18
37
|
@text_bounds = DataModel::Bounds.new(bounds.to_h.merge(height: group_header_height))
|
19
38
|
@text_align = "left"
|
20
39
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Archimate
|
5
|
+
module Svg
|
6
|
+
module Entity
|
7
|
+
class Grouping < BaseEntity
|
8
|
+
def initialize(child, bounds_offset)
|
9
|
+
super
|
10
|
+
@background_class = "archimate-grouping-background"
|
11
|
+
end
|
12
|
+
|
13
|
+
def entity_shape(xml, bounds)
|
14
|
+
group_header_height = 21
|
15
|
+
xml.rect(
|
16
|
+
x: bounds.left,
|
17
|
+
y: bounds.top + group_header_height,
|
18
|
+
width: bounds.width,
|
19
|
+
height: bounds.height - group_header_height,
|
20
|
+
class: background_class,
|
21
|
+
style: shape_style
|
22
|
+
)
|
23
|
+
xml.path(
|
24
|
+
d: ["M", bounds.left, bounds.top + group_header_height - 1,
|
25
|
+
"v", -(group_header_height - 1),
|
26
|
+
"h", bounds.width / 2,
|
27
|
+
"v", group_header_height - 1].map(&:to_s).join(" "),
|
28
|
+
class: background_class,
|
29
|
+
style: shape_style
|
30
|
+
)
|
31
|
+
@text_bounds = DataModel::Bounds.new(bounds.to_h.merge(height: group_header_height))
|
32
|
+
@text_align = "left"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -3,12 +3,11 @@
|
|
3
3
|
module Archimate
|
4
4
|
module Svg
|
5
5
|
module Entity
|
6
|
-
class ServiceEntity <
|
7
|
-
include Rect
|
8
|
-
|
6
|
+
class ServiceEntity < RoundedRectEntity
|
9
7
|
def initialize(child, bounds_offset)
|
10
8
|
super
|
11
9
|
bounds = child.bounds
|
10
|
+
@badge = "#archimate-service-badge"
|
12
11
|
@text_bounds = DataModel::Bounds.new(
|
13
12
|
x: bounds.left + 7,
|
14
13
|
y: bounds.top + 5,
|
@@ -19,17 +18,11 @@ module Archimate
|
|
19
18
|
|
20
19
|
def entity_shape(xml, bounds)
|
21
20
|
case child.child_type
|
22
|
-
when 1
|
23
|
-
@badge_bounds = DataModel::Bounds.new(
|
24
|
-
x: bounds.right - 25,
|
25
|
-
y: bounds.top + 5,
|
26
|
-
width: 20,
|
27
|
-
height: 20
|
28
|
-
)
|
29
|
-
@badge = "#archimate-service-badge"
|
30
|
-
rect_path(xml, bounds)
|
31
|
-
else
|
21
|
+
when "1"
|
32
22
|
service_path(xml, bounds)
|
23
|
+
@badge = nil
|
24
|
+
else
|
25
|
+
super
|
33
26
|
end
|
34
27
|
end
|
35
28
|
|
data/lib/archimate/svg/entity.rb
CHANGED
@@ -46,6 +46,7 @@ module Archimate
|
|
46
46
|
autoload :Gap, 'archimate/svg/entity/gap'
|
47
47
|
autoload :Goal, 'archimate/svg/entity/goal'
|
48
48
|
autoload :Group, 'archimate/svg/entity/group'
|
49
|
+
autoload :Grouping, 'archimate/svg/entity/grouping'
|
49
50
|
autoload :ImplementationEvent, 'archimate/svg/entity/implementation_event'
|
50
51
|
autoload :InfrastructureEvent, 'archimate/svg/entity/infrastructure_event'
|
51
52
|
autoload :InfrastructureFunction, 'archimate/svg/entity/infrastructure_function'
|
@@ -3,13 +3,17 @@
|
|
3
3
|
module Archimate
|
4
4
|
module Svg
|
5
5
|
module EntityFactory
|
6
|
+
# @todo this is wrong because it depends on `type` attribute
|
6
7
|
def make_entity(child, bounds_offset)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
if child.element
|
9
|
+
klass_name = child.element.class.name.split("::").last
|
10
|
+
else
|
11
|
+
klass_name = child.type.sub('archimate:', '')
|
12
|
+
end
|
13
|
+
Entity.const_get(klass_name).new(child, bounds_offset)
|
11
14
|
rescue NameError
|
12
|
-
|
15
|
+
Logging.logger.fatal "Unsupported entity type #{klass_name}"
|
16
|
+
raise
|
13
17
|
end
|
14
18
|
module_function :make_entity
|
15
19
|
end
|