archimate 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/archimate.gemspec +2 -1
- data/lib/archimate/color.rb +2 -2
- data/lib/archimate/data_model/any_attribute.rb +4 -10
- data/lib/archimate/data_model/any_element.rb +9 -17
- data/lib/archimate/data_model/bounds.rb +6 -6
- data/lib/archimate/data_model/color.rb +6 -6
- data/lib/archimate/data_model/comparison.rb +101 -5
- data/lib/archimate/data_model/concern.rb +5 -13
- data/lib/archimate/data_model/connection.rb +39 -48
- data/lib/archimate/data_model/connector_type.rb +1 -0
- data/lib/archimate/data_model/diagram.rb +27 -42
- data/lib/archimate/data_model/diagram_type.rb +1 -0
- data/lib/archimate/data_model/element.rb +14 -35
- data/lib/archimate/data_model/elements.rb +681 -0
- data/lib/archimate/data_model/font.rb +8 -8
- data/lib/archimate/data_model/lang_string.rb +10 -36
- data/lib/archimate/data_model/layer.rb +4 -5
- data/lib/archimate/data_model/layers.rb +45 -49
- data/lib/archimate/data_model/location.rb +6 -6
- data/lib/archimate/data_model/metadata.rb +2 -6
- data/lib/archimate/data_model/model.rb +50 -62
- data/lib/archimate/data_model/modeling_note.rb +3 -8
- data/lib/archimate/data_model/organization.rb +18 -27
- data/lib/archimate/data_model/property.rb +9 -8
- data/lib/archimate/data_model/property_definition.rb +15 -21
- data/lib/archimate/data_model/referenceable.rb +14 -9
- data/lib/archimate/data_model/referenceable_list.rb +82 -0
- data/lib/archimate/data_model/relationship.rb +41 -152
- data/lib/archimate/data_model/relationship_references.rb +29 -0
- data/lib/archimate/data_model/relationships.rb +214 -0
- data/lib/archimate/data_model/schema_info.rb +6 -12
- data/lib/archimate/data_model/style.rb +14 -25
- data/lib/archimate/data_model/view_node.rb +38 -66
- data/lib/archimate/data_model/viewpoint.rb +23 -38
- data/lib/archimate/data_model/viewpoint_type.rb +347 -387
- data/lib/archimate/data_model.rb +7 -6
- data/lib/archimate/derived_relations.rb +106 -31
- data/lib/archimate/export/cypher.rb +0 -18
- data/lib/archimate/export/jsonl.rb +16 -45
- data/lib/archimate/export/n_quads.rb +1 -24
- data/lib/archimate/file_formats/archi_file_reader.rb +2 -1
- data/lib/archimate/file_formats/model_exchange_file_writer_21.rb +9 -1
- data/lib/archimate/file_formats/sax/archi/archi_handler_factory.rb +2 -2
- data/lib/archimate/file_formats/sax/archi/connection.rb +2 -1
- data/lib/archimate/file_formats/sax/archi/element.rb +7 -5
- data/lib/archimate/file_formats/sax/archi/relationship.rb +1 -1
- data/lib/archimate/file_formats/sax/model_exchange_file/connection.rb +2 -1
- data/lib/archimate/file_formats/sax/model_exchange_file/element.rb +1 -1
- data/lib/archimate/file_formats/sax/model_exchange_file/relationship.rb +1 -1
- data/lib/archimate/file_formats/sax/model_exchange_file/view_node.rb +0 -1
- data/lib/archimate/file_formats/serializer/archi/relationship.rb +1 -1
- data/lib/archimate/lint/duplicate_entities.rb +46 -42
- data/lib/archimate/svg/archimate.css +12 -2
- data/lib/archimate/svg/entity/base_entity.rb +6 -29
- data/lib/archimate/svg/entity/location.rb +1 -0
- data/lib/archimate/svg/entity_factory.rb +3 -3
- data/lib/archimate/svg/point.rb +3 -3
- data/lib/archimate/svg/svg_template.svg.erb +5 -5
- data/lib/archimate/version.rb +2 -1
- metadata +20 -6
- data/TODOs.org +0 -505
- data/lib/archimate/data_model/differentiable.rb +0 -142
- data/lib/archimate/data_model/element_type.rb +0 -89
- data/lib/archimate/data_model/relationship_type.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4adaa55a050dfda4d29150a63c15860a21f50932
|
4
|
+
data.tar.gz: 78c4c98ef53b79704018ef5b761377ac01e4497d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad77b807f9800be3bd0b4cde9a8dffa00161b94925aa2fdaf7519bfbcd80a71a63acc80ef294647b6d442cbb92b41113c50de10397bd7b9831a52acfb5d35a38
|
7
|
+
data.tar.gz: ef2e775c6067f3a9b097c853083d687af9289ce28f68d7d36a166257e2572af06089bab38513f4c7661cb0d30810bba271f89a4be82b0724beeafa46e225b66a
|
data/archimate.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
# frozen_string_literal: true
|
2
|
+
|
3
3
|
lib = File.expand_path('../lib', __FILE__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
require 'archimate/version'
|
@@ -48,4 +48,5 @@ Gem::Specification.new do |spec|
|
|
48
48
|
spec.add_development_dependency "faker"
|
49
49
|
spec.add_development_dependency "rsense"
|
50
50
|
spec.add_development_dependency "awesome_print"
|
51
|
+
spec.add_development_dependency "rubocop"
|
51
52
|
end
|
data/lib/archimate/color.rb
CHANGED
@@ -23,7 +23,7 @@ HighLine.color_scheme = HighLine::ColorScheme.new do |cs|
|
|
23
23
|
cs[:Connectors] = %i[black on_light_gray]
|
24
24
|
cs[:unknown_layer] = %i[black on_gray]
|
25
25
|
cs[:Model] = [:cyan]
|
26
|
-
cs[:Connection]
|
26
|
+
cs[:Connection] = [:blue]
|
27
27
|
cs[:Organization] = [:cyan]
|
28
28
|
cs[:Relationship] = %i[black on_light_gray]
|
29
29
|
cs[:Diagram] = %i[black on_cyan]
|
@@ -33,7 +33,7 @@ end
|
|
33
33
|
module Archimate
|
34
34
|
class Color
|
35
35
|
def self.layer_color(layer, str)
|
36
|
-
layer_sym = layer
|
36
|
+
layer_sym = layer&.to_sym
|
37
37
|
sym = HighLine.color_scheme.include?(layer_sym) ? layer_sym : :unknown_layer
|
38
38
|
color(str, sym)
|
39
39
|
end
|
@@ -7,20 +7,14 @@ module Archimate
|
|
7
7
|
include Comparison
|
8
8
|
|
9
9
|
# @!attribute [r] attribute
|
10
|
-
#
|
10
|
+
# @return [String]
|
11
11
|
model_attr :attribute
|
12
12
|
# @!attribute [r] prefix
|
13
|
-
#
|
14
|
-
model_attr :prefix
|
13
|
+
# @return [String]
|
14
|
+
model_attr :prefix, default: ""
|
15
15
|
# @!attribute [r] value
|
16
|
-
#
|
16
|
+
# @return [String]
|
17
17
|
model_attr :value
|
18
|
-
|
19
|
-
def initialize(attribute, value, prefix: "")
|
20
|
-
@attribute = attribute
|
21
|
-
@prefix = prefix
|
22
|
-
@value = value
|
23
|
-
end
|
24
18
|
end
|
25
19
|
end
|
26
20
|
end
|
@@ -7,28 +7,20 @@ module Archimate
|
|
7
7
|
include Comparison
|
8
8
|
|
9
9
|
# @!attribute [r] element
|
10
|
-
#
|
10
|
+
# @return [String]
|
11
11
|
model_attr :element
|
12
12
|
# @!attribute [r] prefix
|
13
|
-
#
|
14
|
-
model_attr :prefix
|
13
|
+
# @return [String, NilClass]
|
14
|
+
model_attr :prefix, default: ""
|
15
15
|
# @!attribute [r] attributes
|
16
|
-
#
|
17
|
-
model_attr :attributes
|
16
|
+
# @return [Array<AnyAttribute>]
|
17
|
+
model_attr :attributes, default: []
|
18
18
|
# @!attribute [r] content
|
19
|
-
#
|
20
|
-
model_attr :content
|
19
|
+
# @return [String, NilClass]
|
20
|
+
model_attr :content, default: nil
|
21
21
|
# @!attribute [r] children
|
22
|
-
#
|
23
|
-
model_attr :children
|
24
|
-
|
25
|
-
def initialize(element:, prefix: "", attributes: [], content: nil, children: [])
|
26
|
-
@element = element
|
27
|
-
@prefix = prefix
|
28
|
-
@attributes = attributes
|
29
|
-
@content = content
|
30
|
-
@children = children
|
31
|
-
end
|
22
|
+
# @return [Array<AnyElement>]
|
23
|
+
model_attr :children, default: []
|
32
24
|
|
33
25
|
def to_sym
|
34
26
|
element&.to_sym
|
@@ -6,16 +6,16 @@ module Archimate
|
|
6
6
|
include Comparison
|
7
7
|
|
8
8
|
# @!attribute [r] x
|
9
|
-
#
|
10
|
-
model_attr :x
|
9
|
+
# @return [Float, NilClass]
|
10
|
+
model_attr :x, default: nil
|
11
11
|
# @!attribute [r] y
|
12
|
-
#
|
13
|
-
model_attr :y
|
12
|
+
# @return [Float, NilClass]
|
13
|
+
model_attr :y, default: nil
|
14
14
|
# @!attribute [r] width
|
15
|
-
#
|
15
|
+
# @return [Float]
|
16
16
|
model_attr :width
|
17
17
|
# @!attribute [r] height
|
18
|
-
#
|
18
|
+
# @return [Float]
|
19
19
|
model_attr :height
|
20
20
|
|
21
21
|
def self.zero
|
@@ -10,16 +10,16 @@ module Archimate
|
|
10
10
|
include Comparison
|
11
11
|
|
12
12
|
# @!attribute [r] r
|
13
|
-
#
|
13
|
+
# @return [Int] red component, value 0-255
|
14
14
|
model_attr :r
|
15
15
|
# @!attribute [r] g
|
16
|
-
#
|
16
|
+
# @return [Int] green component, value 0-255
|
17
17
|
model_attr :g
|
18
18
|
# @!attribute [r] b
|
19
|
-
#
|
19
|
+
# @return [Int] blue component, value 0-255
|
20
20
|
model_attr :b
|
21
21
|
# @!attribute [r] a
|
22
|
-
#
|
22
|
+
# @return [Int, NilClass] optional alpha component, value 0-100
|
23
23
|
model_attr :a
|
24
24
|
|
25
25
|
# Parses a CSS style color string into a color object
|
@@ -45,8 +45,8 @@ module Archimate
|
|
45
45
|
|
46
46
|
def initialize(r:, g:, b:, a: nil)
|
47
47
|
raise "r, g, b cannot be nil" if [r, g, b].any?(&:nil?)
|
48
|
-
raise "r, g, b must be between 0 and 255" if [r, g, b].any? { |v| v
|
49
|
-
raise "a must be between 0 and 100" if a && (a
|
48
|
+
raise "r, g, b must be between 0 and 255" if [r, g, b].any? { |v| v.negative? || v > 255 }
|
49
|
+
raise "a must be between 0 and 100" if a && (a.negative? || a > 100)
|
50
50
|
@r = r
|
51
51
|
@g = g
|
52
52
|
@b = b
|
@@ -3,6 +3,32 @@
|
|
3
3
|
module Archimate
|
4
4
|
module DataModel
|
5
5
|
module Comparison
|
6
|
+
def initialize(opts = {})
|
7
|
+
self.class.attr_info.each do |sym, attr_info|
|
8
|
+
if attr_info.default == :value_required && !opts.include?(sym)
|
9
|
+
raise "#{self.class} required value for #{sym} is missing."
|
10
|
+
end
|
11
|
+
val = opts.fetch(sym, attr_info.default)
|
12
|
+
instance_variable_set("@#{sym}".to_sym, val)
|
13
|
+
val.add_reference(self) if val.is_a?(Referenceable)
|
14
|
+
end
|
15
|
+
|
16
|
+
self.class.attr_info.each do |sym, attr_info|
|
17
|
+
if attr_info.referenceable_list
|
18
|
+
instance_variable_set(
|
19
|
+
"@#{sym}".to_sym,
|
20
|
+
ReferenceableList.new(self, opts.fetch(sym, attr_info.default), attr_info.also_reference)
|
21
|
+
)
|
22
|
+
elsif attr_info.also_reference.size.positive?
|
23
|
+
val = instance_variable_get("@#{sym}".to_sym)
|
24
|
+
attr_info.also_reference.each do |ref_sym|
|
25
|
+
ref = send(ref_sym)
|
26
|
+
val.add_reference(ref) if ref && val
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
6
32
|
def hash
|
7
33
|
@hash_key ||=
|
8
34
|
self.class.attr_names.reduce(self.class.hash) { |ha, attr| ha ^ send(attr).hash }
|
@@ -35,6 +61,8 @@ module Archimate
|
|
35
61
|
self.class.comparison_attr_paths.each(&blk)
|
36
62
|
end
|
37
63
|
|
64
|
+
# @todo implement pretty_print as a more normal pretty_print with correct
|
65
|
+
# handling for attr_info values for comparison_attr
|
38
66
|
def pretty_print(pp)
|
39
67
|
pp.object_address_group(self) do
|
40
68
|
pp.seplist(self.class.comparison_attr_paths, proc { pp.text ',' }) do |attr|
|
@@ -50,26 +78,90 @@ module Archimate
|
|
50
78
|
end
|
51
79
|
end
|
52
80
|
|
81
|
+
# @todo implement inspect as a more normal inspect with correct handling for
|
82
|
+
# attr_info values for comparison_attr
|
83
|
+
def inspect
|
84
|
+
"#<#{self.class.to_s.split('::').last}\n " +
|
85
|
+
self.class.attr_info
|
86
|
+
.map { |sym, info| info.attr_inspect(self, sym) }
|
87
|
+
.compact
|
88
|
+
.join("\n ") + "\n >"
|
89
|
+
end
|
90
|
+
|
91
|
+
def brief_inspect
|
92
|
+
"#<#{self.class.to_s.split('::').last}#{" id=#{id}" if respond_to?(:id)}#{" #{name.brief_inspect}" if respond_to?(:name) && name}>"
|
93
|
+
end
|
94
|
+
|
53
95
|
def self.included(base)
|
54
96
|
base.extend ClassMethods
|
55
97
|
end
|
56
98
|
|
57
99
|
module ClassMethods
|
100
|
+
AttributeInfo = Struct.new(:comparison_attr, :writable, :default, :referenceable_list, :also_reference) do
|
101
|
+
def attr_inspect(obj, sym)
|
102
|
+
case comparison_attr
|
103
|
+
when :no_compare
|
104
|
+
nil
|
105
|
+
when nil
|
106
|
+
"#{sym}: #{attr_value_inspect(obj.send(sym))}"
|
107
|
+
else
|
108
|
+
val = obj.send(sym)
|
109
|
+
cval = val&.send(comparison_attr)
|
110
|
+
"#{sym}: #<#{val.class.to_s.split('::').last} #{comparison_attr}=#{attr_value_inspect(cval)}>"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def attr_value_inspect(val)
|
115
|
+
case val
|
116
|
+
when Comparison
|
117
|
+
val.brief_inspect
|
118
|
+
when Array
|
119
|
+
vals = val.first(3).map do |v|
|
120
|
+
if v.is_a?(Comparison)
|
121
|
+
v.brief_inspect
|
122
|
+
else
|
123
|
+
v.inspect
|
124
|
+
end
|
125
|
+
end
|
126
|
+
"[#{vals.join(', ')}#{"...#{val.size}" if val.size > 3}]"
|
127
|
+
else
|
128
|
+
val.inspect
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
58
133
|
# Define the reader method (or call model_attr)
|
59
134
|
# Append the attr_sym to the @@attrs for the class
|
60
|
-
def model_attr(attr_sym, comparison_attr: nil, writable: false
|
135
|
+
def model_attr(attr_sym, comparison_attr: nil, writable: false,
|
136
|
+
default: :value_required, referenceable_list: false,
|
137
|
+
also_reference: [])
|
61
138
|
send(:attr_reader, attr_sym)
|
62
139
|
attrs = attr_names << attr_sym
|
63
140
|
class_variable_set(:@@attr_names, attrs.uniq)
|
64
|
-
|
141
|
+
class_variable_set(
|
142
|
+
:@@attr_info,
|
143
|
+
attr_info.merge(attr_sym => AttributeInfo.new(
|
144
|
+
comparison_attr, writable, default, referenceable_list, also_reference
|
145
|
+
))
|
146
|
+
)
|
65
147
|
if comparison_attr != :no_compare
|
66
148
|
attrs = comparison_attr_paths << (comparison_attr ? [attr_sym, comparison_attr] : attr_sym)
|
67
149
|
class_variable_set(:@@comparison_attr_paths, attrs.uniq)
|
68
150
|
end
|
69
|
-
|
70
|
-
|
71
|
-
|
151
|
+
return unless writable
|
152
|
+
define_method("#{attr_sym}=".to_sym) do |val|
|
153
|
+
instance_variable_set(:@hash_key, nil)
|
154
|
+
old_val = instance_variable_get("@#{attr_sym}")
|
155
|
+
if old_val.is_a?(ReferenceableList)
|
156
|
+
old_val.replace_with(val)
|
157
|
+
else
|
158
|
+
old_val.remove_reference(self) if old_val.is_a?(Referenceable)
|
72
159
|
instance_variable_set("@#{attr_sym}".to_sym, val)
|
160
|
+
val.add_reference(self) if val.is_a?(Referenceable)
|
161
|
+
also_reference.each do |ref_sym|
|
162
|
+
ref = send(ref_sym)
|
163
|
+
val.add_reference(ref) if ref && val
|
164
|
+
end
|
73
165
|
end
|
74
166
|
end
|
75
167
|
end
|
@@ -78,6 +170,10 @@ module Archimate
|
|
78
170
|
class_variable_defined?(:@@attr_names) ? class_variable_get(:@@attr_names) : []
|
79
171
|
end
|
80
172
|
|
173
|
+
def attr_info
|
174
|
+
class_variable_defined?(:@@attr_info) ? class_variable_get(:@@attr_info) : {}
|
175
|
+
end
|
176
|
+
|
81
177
|
def comparison_attr_paths
|
82
178
|
class_variable_defined?(:@@comparison_attr_paths) ? class_variable_get(:@@comparison_attr_paths) : []
|
83
179
|
end
|
@@ -9,22 +9,14 @@ module Archimate
|
|
9
9
|
include Comparison
|
10
10
|
|
11
11
|
# @!attribute [r] label
|
12
|
-
#
|
12
|
+
# @return [LangString] one label is required
|
13
13
|
model_attr :label
|
14
14
|
# @!attribute [r] documentation
|
15
|
-
#
|
16
|
-
model_attr :documentation
|
15
|
+
# @return [PreservedLangString]
|
16
|
+
model_attr :documentation, default: nil
|
17
17
|
# @!attribute [r] stakeholders
|
18
|
-
#
|
19
|
-
model_attr :stakeholders
|
20
|
-
|
21
|
-
def initialize(label:, documentation: nil, stakeholders: [])
|
22
|
-
raise "label is required" unless label
|
23
|
-
raise "stakeholders is a list" unless stakeholders.is_a?(Array)
|
24
|
-
@label = label
|
25
|
-
@documentation = documentation
|
26
|
-
@stakeholders = stakeholders
|
27
|
-
end
|
18
|
+
# @return [Array<LangString>]
|
19
|
+
model_attr :stakeholders, default: []
|
28
20
|
end
|
29
21
|
end
|
30
22
|
end
|
@@ -4,75 +4,66 @@ module Archimate
|
|
4
4
|
module DataModel
|
5
5
|
# Graphical connection type.
|
6
6
|
#
|
7
|
-
# If the 'relationshipRef' attribute is present, the connection should
|
7
|
+
# If the 'relationshipRef' attribute is present, the connection should
|
8
|
+
# reference an existing ArchiMate relationship.
|
8
9
|
#
|
9
|
-
# If the connection is an ArchiMate relationship type, the connection's
|
10
|
-
#
|
11
|
-
#
|
10
|
+
# If the connection is an ArchiMate relationship type, the connection's
|
11
|
+
# label, documentation and properties may be determined (i.e inherited)
|
12
|
+
# from those in the referenced ArchiMate relationship. Otherwise the
|
13
|
+
# connection's label, documentation and properties can be provided and will
|
14
|
+
# be additional to (or over-ride) those contained in the referenced
|
15
|
+
# ArchiMate relationship.
|
12
16
|
class Connection
|
13
17
|
include Comparison
|
18
|
+
include Referenceable
|
14
19
|
|
15
20
|
# @!attribute [r] id
|
16
|
-
#
|
21
|
+
# @return [String]
|
17
22
|
model_attr :id
|
18
23
|
# @!attribute [r] name
|
19
|
-
#
|
20
|
-
model_attr :name
|
24
|
+
# @return [LangString, NilClass]
|
25
|
+
model_attr :name, default: nil
|
21
26
|
# @!attribute [r] documentation
|
22
|
-
#
|
23
|
-
model_attr :documentation
|
27
|
+
# @return [PreservedLangString, NilClass]
|
28
|
+
model_attr :documentation, default: nil
|
24
29
|
# # @!attribute [r] other_elements
|
25
|
-
#
|
26
|
-
model_attr :other_elements
|
30
|
+
# @return [Array<AnyElement>]
|
31
|
+
model_attr :other_elements, default: []
|
27
32
|
# # @!attribute [r] other_attributes
|
28
|
-
#
|
29
|
-
model_attr :other_attributes
|
33
|
+
# @return [Array<AnyAttribute>]
|
34
|
+
model_attr :other_attributes, default: []
|
30
35
|
# @note type here was used for the Element/Relationship/Diagram type
|
31
36
|
# @!attribute [r] type
|
32
|
-
#
|
33
|
-
model_attr :type
|
37
|
+
# @return [String, NilClass]
|
38
|
+
model_attr :type, default: nil
|
34
39
|
# @!attribute [r] source_attachment
|
35
|
-
#
|
36
|
-
model_attr :source_attachment
|
40
|
+
# @return [Location, NilClass]
|
41
|
+
model_attr :source_attachment, default: nil
|
37
42
|
# @!attribute [r] bendpoints
|
38
|
-
#
|
39
|
-
model_attr :bendpoints
|
43
|
+
# @return [Array<Location>]
|
44
|
+
model_attr :bendpoints, default: []
|
40
45
|
# @!attribute [r] target_attachment
|
41
|
-
#
|
42
|
-
model_attr :target_attachment
|
46
|
+
# @return [Location, NilClass]
|
47
|
+
model_attr :target_attachment, default: nil
|
43
48
|
# @!attribute [rw] source
|
44
|
-
#
|
45
|
-
model_attr :source, comparison_attr: :id, writable: true
|
49
|
+
# @return [ViewNode, NilClass]
|
50
|
+
model_attr :source, comparison_attr: :id, writable: true, default: nil
|
46
51
|
# @!attribute [rw] target
|
47
|
-
#
|
48
|
-
model_attr :target, comparison_attr: :id, writable: true
|
52
|
+
# @return [ViewNode, NilClass]
|
53
|
+
model_attr :target, comparison_attr: :id, writable: true, default: nil
|
49
54
|
# @!attribute [rw] relationship
|
50
|
-
#
|
51
|
-
model_attr :relationship, comparison_attr: :id, writable: true
|
55
|
+
# @return [Relationship, NilClass]
|
56
|
+
model_attr :relationship, comparison_attr: :id, writable: true, default: nil, also_reference: [:diagram]
|
52
57
|
# @!attribute [r] style
|
53
|
-
#
|
54
|
-
model_attr :style
|
58
|
+
# @return [Style, NilClass]
|
59
|
+
model_attr :style, default: nil
|
55
60
|
# @!attribute [r] properties
|
56
|
-
#
|
57
|
-
model_attr :properties
|
61
|
+
# @return [Array<Property>]
|
62
|
+
model_attr :properties, default: []
|
58
63
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
properties: nil)
|
63
|
-
@id = id
|
64
|
-
@name = name
|
65
|
-
@documentation = documentation
|
66
|
-
@type = type
|
67
|
-
@source_attachment = source_attachment
|
68
|
-
@bendpoints = bendpoints
|
69
|
-
@target_attachment = target_attachment
|
70
|
-
@source = source
|
71
|
-
@target = target
|
72
|
-
@relationship = relationship
|
73
|
-
@style = style
|
74
|
-
@properties = properties
|
75
|
-
end
|
64
|
+
# @!attribute [r] diagram
|
65
|
+
# @return [Diagram, NilClass]
|
66
|
+
model_attr :diagram, comparison_attr: :no_compare
|
76
67
|
|
77
68
|
def replace(entity, with_entity)
|
78
69
|
@relationship = with_entity.id if relationship == entity.id
|
@@ -4,64 +4,49 @@ module Archimate
|
|
4
4
|
module DataModel
|
5
5
|
class Diagram
|
6
6
|
include Comparison
|
7
|
+
include Referenceable
|
7
8
|
|
8
9
|
# @!attribute [r] id
|
9
|
-
#
|
10
|
+
# @return [String]
|
10
11
|
model_attr :id
|
11
12
|
# @!attribute [rw] name
|
12
|
-
#
|
13
|
-
model_attr :name, writable: true
|
13
|
+
# @return [LangString]
|
14
|
+
model_attr :name, writable: true, default: nil
|
14
15
|
# @!attribute [rw] documentation
|
15
|
-
#
|
16
|
-
model_attr :documentation, writable: true
|
17
|
-
#
|
18
|
-
|
19
|
-
#
|
20
|
-
|
16
|
+
# @return [PreservedLangString, NilClass]
|
17
|
+
model_attr :documentation, writable: true, default: nil
|
18
|
+
# @return [Array<AnyElement>]
|
19
|
+
model_attr :other_elements, default: []
|
20
|
+
# @return [Array<AnyAttribute>]
|
21
|
+
model_attr :other_attributes, default: []
|
21
22
|
# @note type here was used for the Element/Relationship/Diagram type
|
22
23
|
# @!attribute [r] type
|
23
|
-
#
|
24
|
-
model_attr :type
|
24
|
+
# @return [String, NilClass]
|
25
|
+
model_attr :type, default: nil
|
25
26
|
# @!attribute [rw] properties
|
26
|
-
#
|
27
|
-
model_attr :properties, writable: true
|
27
|
+
# @return [Array<Property>]
|
28
|
+
model_attr :properties, writable: true, default: []
|
28
29
|
# @todo make this a ViewpointType is better but is Archimate specification version dependent
|
29
30
|
# @!attribute [r] viewpoint_type
|
30
|
-
#
|
31
|
-
model_attr :viewpoint_type
|
31
|
+
# @return [String, NilClass]
|
32
|
+
model_attr :viewpoint_type, default: nil
|
32
33
|
# @!attribute [r] viewpoint
|
33
|
-
#
|
34
|
-
model_attr :viewpoint
|
34
|
+
# @return [Viewpoint, NilClass]
|
35
|
+
model_attr :viewpoint, default: nil
|
35
36
|
# @!attribute [rw] nodes
|
36
|
-
#
|
37
|
-
model_attr :nodes, writable: true
|
37
|
+
# @return [Array<ViewNode>]
|
38
|
+
model_attr :nodes, writable: true, default: [], referenceable_list: true
|
38
39
|
# @todo Archi formats only fill this in, should be an enum
|
39
40
|
# @!attribute [r] connection_router_type
|
40
|
-
#
|
41
|
-
model_attr :connection_router_type
|
41
|
+
# @return [Int, NilClass]
|
42
|
+
model_attr :connection_router_type, default: nil
|
42
43
|
# value of 0 on Archi Sketch Model
|
43
44
|
# @!attribute [r] background
|
44
|
-
#
|
45
|
-
model_attr :background
|
45
|
+
# @return [Int, NilClass]
|
46
|
+
model_attr :background, default: nil
|
46
47
|
# @!attribute [rw] connections
|
47
|
-
#
|
48
|
-
model_attr :connections, writable: true
|
49
|
-
|
50
|
-
def initialize(id:, name: nil, documentation: nil, type: nil, properties: [],
|
51
|
-
viewpoint_type: nil, viewpoint: nil, nodes: [],
|
52
|
-
connection_router_type: nil, background: nil, connections: [])
|
53
|
-
@id = id
|
54
|
-
@name = name
|
55
|
-
@documentation = documentation
|
56
|
-
@type = type
|
57
|
-
@properties = properties
|
58
|
-
@viewpoint_type = viewpoint_type
|
59
|
-
@viewpoint = viewpoint
|
60
|
-
@nodes = nodes
|
61
|
-
@connection_router_type = connection_router_type
|
62
|
-
@background = background
|
63
|
-
@connections = connections
|
64
|
-
end
|
48
|
+
# @return [Array<Connection>]
|
49
|
+
model_attr :connections, writable: true, default: [], referenceable_list: true
|
65
50
|
|
66
51
|
def all_nodes
|
67
52
|
nodes.inject(Array.new(nodes)) { |child_ary, child| child_ary.concat(child.all_nodes) }
|
@@ -92,7 +77,7 @@ module Archimate
|
|
92
77
|
end
|
93
78
|
|
94
79
|
def referenced_identified_nodes
|
95
|
-
(nodes + connections)
|
80
|
+
(nodes.to_ary + connections)
|
96
81
|
.map(&:referenced_identified_nodes)
|
97
82
|
.flatten
|
98
83
|
.uniq
|
@@ -8,63 +8,42 @@ module Archimate
|
|
8
8
|
# type. This is indicated in xml by having a tag name of +element+ and an
|
9
9
|
# attribute of +xsi:type="BusinessRole"+ where +BusinessRole+ is a derived
|
10
10
|
# type from [ElementType].
|
11
|
-
#
|
12
|
-
# @todo Possible Make this abstract with concrete implementations for all
|
13
|
-
# valid element types
|
14
11
|
class Element
|
15
12
|
include Comparison
|
13
|
+
include Referenceable
|
14
|
+
include RelationshipReferences
|
16
15
|
|
17
16
|
# @!attribute [r] id
|
18
|
-
#
|
17
|
+
# @return [String]
|
19
18
|
model_attr :id
|
20
19
|
# @!attribute [r] name
|
21
|
-
#
|
20
|
+
# @return [LangString, NilClass]
|
22
21
|
model_attr :name
|
23
22
|
# @!attribute [rw] documentation
|
24
|
-
#
|
25
|
-
model_attr :documentation, writable: true
|
23
|
+
# @return [PreservedLangString, NilClass]
|
24
|
+
model_attr :documentation, writable: true, default: nil
|
26
25
|
# # @return [Array<AnyElement>]
|
27
26
|
# model_attr :other_elements
|
28
27
|
# # @return [Array<AnyAttribute>]
|
29
28
|
# model_attr :other_attributes
|
30
|
-
# @note type here was used for the Element/Relationship/Diagram type
|
31
|
-
# @!attribute [r] type
|
32
|
-
# @return [String, NilClass]
|
33
|
-
model_attr :type
|
34
29
|
# @!attribute [r] properties
|
35
|
-
#
|
36
|
-
model_attr :properties
|
37
|
-
|
38
|
-
def initialize(id:, name:, documentation: nil, type: nil, properties: [])
|
39
|
-
@id = id
|
40
|
-
@name = name
|
41
|
-
@documentation = documentation
|
42
|
-
@type = type
|
43
|
-
@properties = properties
|
44
|
-
end
|
30
|
+
# @return [Array<Property>]
|
31
|
+
model_attr :properties, default: []
|
45
32
|
|
46
33
|
def to_s
|
47
34
|
Archimate::Color.layer_color(layer, "#{type}<#{id}>[#{name}]")
|
48
35
|
end
|
49
36
|
|
50
|
-
def
|
51
|
-
|
37
|
+
def type
|
38
|
+
self.class.name.split("::").last
|
52
39
|
end
|
53
40
|
|
54
|
-
|
55
|
-
|
56
|
-
def diagrams
|
57
|
-
@diagrams ||= in_model.diagrams.select do |diagram|
|
58
|
-
diagram.element_ids.include?(id)
|
59
|
-
end
|
41
|
+
def classification
|
42
|
+
self.class::CLASSIFICATION
|
60
43
|
end
|
61
44
|
|
62
|
-
|
63
|
-
|
64
|
-
def relationships
|
65
|
-
@relationships ||= in_model.relationships.select do |relationship|
|
66
|
-
relationship.source == id || relationship.target == id
|
67
|
-
end
|
45
|
+
def layer
|
46
|
+
self.class::LAYER
|
68
47
|
end
|
69
48
|
|
70
49
|
# Copy any attributes/docs, etc. from each of the others into the original.
|