metanorma-plugin-lutaml 0.4.2 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +312 -10
- data/lib/metanorma-plugin-lutaml.rb +3 -0
- data/lib/metanorma/plugin/lutaml/liquid/multiply_local_file_system.rb +53 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_diagrams_block.liquid +11 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages.liquid +133 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_class.liquid +81 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_data_dictionary.liquid +177 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_data_dictionary_classes.liquid +43 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_data_type.liquid +63 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_entity_list.liquid +113 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_enum.liquid +63 -0
- data/lib/metanorma/plugin/lutaml/lutaml_diagram_base.rb +81 -0
- data/lib/metanorma/plugin/lutaml/lutaml_diagram_block.rb +5 -60
- data/lib/metanorma/plugin/lutaml/lutaml_diagram_block_macro.rb +20 -0
- data/lib/metanorma/plugin/lutaml/lutaml_figure_inline_macro.rb +23 -0
- data/lib/metanorma/plugin/lutaml/lutaml_uml_attributes_table_preprocessor.rb +11 -10
- data/lib/metanorma/plugin/lutaml/lutaml_uml_datamodel_description_preprocessor.rb +188 -0
- data/lib/metanorma/plugin/lutaml/utils.rb +4 -2
- data/lib/metanorma/plugin/lutaml/version.rb +1 -1
- metadata +15 -2
@@ -0,0 +1,133 @@
|
|
1
|
+
{% for package in context.packages %}
|
2
|
+
{% assign package_name = package.name | downcase | replace: ":", "" | replace: " ", "_" %}
|
3
|
+
{% if additional_context.before and additional_context.before.size > 0 %}
|
4
|
+
{% for before in additional_context.before %}
|
5
|
+
{{ before.text }}
|
6
|
+
{% endfor %}
|
7
|
+
{% endif %}
|
8
|
+
{% assign is_package_spare = package.name | slice: 0,5 %}
|
9
|
+
{% if is_package_spare == 'old: ' %}{% continue %}
|
10
|
+
{% elsif is_package_spare == 'Spare' %}{% continue %}
|
11
|
+
{% endif %}
|
12
|
+
|
13
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}{{equalsigns}} {{ package.name }} package
|
14
|
+
{{equalsigns}}= {{ package.name }} overview
|
15
|
+
|
16
|
+
{% assign before_package_key = 'before;' | append: package.name %}
|
17
|
+
{% if additional_context[before_package_key] and additional_context[before_package_key].size > 0 %}
|
18
|
+
{% for before in additional_context[before_package_key] %}
|
19
|
+
{{ before.text }}
|
20
|
+
{% endfor %}
|
21
|
+
{% endif %}
|
22
|
+
{% if additional_context.diagram_include_block %}
|
23
|
+
{% for diagram_include_block in additional_context.diagram_include_block %}
|
24
|
+
{% include "diagrams_block", package_name: package_name, image_base_path: diagram_include_block.base_path, text: diagram_include_block.text %}
|
25
|
+
{% endfor %}
|
26
|
+
{% endif %}
|
27
|
+
|
28
|
+
{% if package.packages.size > 0 %}The {{ package.name }} package is organized into
|
29
|
+
{{ package.packages.size }} packages{% assign modules_nested_size = 0 %}{% for module in package.packages %}{% assign modules_nested_size = modules_nested_size | plus: module.packages.size %}{% endfor %}{% if modules_nested_size > 0 %} with {{modules_nested_size}} modules{% endif %}:
|
30
|
+
{% endif %}
|
31
|
+
[arabic]
|
32
|
+
{% for module in package.packages %}
|
33
|
+
{% if module.packages.length > 0 %}
|
34
|
+
. {{ module.name }} package comprises:
|
35
|
+
{% for nested_module in module.packages %}
|
36
|
+
.. {{nested_module.name}} module
|
37
|
+
{% endfor %}
|
38
|
+
{% else %}
|
39
|
+
. {{ module.name }} package
|
40
|
+
{% endif %}
|
41
|
+
{% endfor %}
|
42
|
+
|
43
|
+
{% if package.classes.size > 0 or package.enums.size > 0 or package.data_types.size > 0 %}
|
44
|
+
|
45
|
+
{{equalsigns}}= Defining tables
|
46
|
+
|
47
|
+
[arabic]
|
48
|
+
{% for klass in package.classes %}
|
49
|
+
{% assign is_klass_spare = klass.name | slice: 0,5 %}
|
50
|
+
{% if is_klass_spare == 'old: ' %}{% continue %}
|
51
|
+
{% elsif is_klass_spare == 'Spare' %}{% continue %}
|
52
|
+
{% endif %}
|
53
|
+
{% assign klass_name = klass.name | downcase | replace: ':', '' | replace: ' ', '_' %}
|
54
|
+
.<<tab-P-{{ package_name }}-C-{{ klass_name }}>> -- Elements of {{ package.name }}::{{ klass.name }}
|
55
|
+
|
56
|
+
{% endfor %}
|
57
|
+
{% for enum in package.enums %}
|
58
|
+
{% assign is_enum_spare = enum.name | slice: 0,5 %}
|
59
|
+
{% if is_enum_spare == 'old: ' %}{% continue %}
|
60
|
+
{% elsif is_enum_spare == 'Spare' %}{% continue %}
|
61
|
+
{% endif %}
|
62
|
+
{% assign enum_name = enum.name | downcase | replace: ':', '' | replace: ' ', '_' %}
|
63
|
+
.<<tab-P-{{ package_name }}-E-{{ enum_name }}>> -- Elements of {{ package.name }}::{{ enum.name }}
|
64
|
+
|
65
|
+
{% endfor %}
|
66
|
+
{% for data_type in package.data_types %}
|
67
|
+
{% assign is_data_type_spare = data_type.name | slice: 0,5 %}
|
68
|
+
{% if is_data_type_spare == 'old: ' %}{% continue %}
|
69
|
+
{% elsif is_data_type_spare == 'Spare' %}{% continue %}
|
70
|
+
{% endif %}
|
71
|
+
{% assign data_type_name = data_type.name | downcase | replace: ':', '' | replace: ' ', '_' %}
|
72
|
+
.<<tab-P-{{ package_name }}-DT-{{ data_type_name }}>> -- Elements of {{ package.name }}::{{ data_type.name }}
|
73
|
+
|
74
|
+
{% endfor %}
|
75
|
+
|
76
|
+
{% for klass in package.classes %}
|
77
|
+
{% include "packages_class" %}
|
78
|
+
{% endfor %}
|
79
|
+
|
80
|
+
{% for klass in package.enums %}
|
81
|
+
{% include "packages_enum" %}
|
82
|
+
{% endfor %}
|
83
|
+
|
84
|
+
{% for klass in package.data_types %}
|
85
|
+
{% include "packages_data_type" %}
|
86
|
+
{% endfor %}
|
87
|
+
|
88
|
+
{% endif %}
|
89
|
+
|
90
|
+
{% if additional_context.include_block and additional_context.include_block.size > 0 %}
|
91
|
+
{% for block in additional_context.include_block %}
|
92
|
+
{% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
|
93
|
+
{% capture block_content %}{% include block_filename %}{% endcapture %}
|
94
|
+
{% unless block_content contains "Liquid error" %}
|
95
|
+
{% if block.text %}
|
96
|
+
{{ block.text }}
|
97
|
+
{% endif %}
|
98
|
+
{{ block_content }}
|
99
|
+
{% endunless %}
|
100
|
+
{% endfor %}
|
101
|
+
{% endif %}
|
102
|
+
|
103
|
+
{% assign include_block_package_key = 'include_block;' | append: package.name %}
|
104
|
+
{% if additional_context[include_block_package_key] and additional_context[include_block_package_key].size > 0 %}
|
105
|
+
{% for block in additional_context[include_block_package_key] %}
|
106
|
+
{% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
|
107
|
+
{% capture block_content %}{% include block_filename %}{% endcapture %}
|
108
|
+
{% unless block_content contains "Liquid error" %}
|
109
|
+
{% if block.text %}
|
110
|
+
{{ block.text }}
|
111
|
+
{% endif %}
|
112
|
+
{{ block_content }}
|
113
|
+
{% endunless %}
|
114
|
+
{% endfor %}
|
115
|
+
{% endif %}
|
116
|
+
|
117
|
+
{% assign after_package_key = 'after;' | append: package.name %}
|
118
|
+
{% if additional_context[after_package_key] %}
|
119
|
+
{{equalsigns}}= Additional Information
|
120
|
+
{% for after in additional_context[after_package_key] %}
|
121
|
+
{{ after.text }}
|
122
|
+
{% endfor %}
|
123
|
+
{% endif %}
|
124
|
+
{% if package.packages.size > 0 and render_nested_packages %}
|
125
|
+
{% assign nested_depth = depth | plus: 1 %}{% include "packages", depth: nested_depth, context: package %}
|
126
|
+
{% endif %}
|
127
|
+
{% endfor %}
|
128
|
+
|
129
|
+
{% if additional_context.after and additional_context.after.size > 0 %}
|
130
|
+
{% for after in additional_context.after %}
|
131
|
+
{{ after.text }}
|
132
|
+
{% endfor %}
|
133
|
+
{% endif %}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
{% assign is_klass_spare = klass.name | slice: 0,5 %}
|
2
|
+
{% if is_klass_spare == 'old: ' %}{% continue %}
|
3
|
+
{% elsif is_klass_spare == 'Spare' %}{% continue %}
|
4
|
+
{% endif %}
|
5
|
+
{% assign klass_name = klass.name | downcase | replace: ':', '' | replace: ' ', '_' %}
|
6
|
+
[[tab-P-{{ package_name }}-C-{{ klass_name }}]]
|
7
|
+
.Elements of {{ package.name }}::{{ klass.name }}
|
8
|
+
[width="100%",cols="a,a,a,a,a,a,a,a"]
|
9
|
+
|===
|
10
|
+
|
11
|
+
h|Name: 7+| {{ klass.name }}
|
12
|
+
|
13
|
+
h|Definition: 7+| {{ klass.definition | html2adoc }}
|
14
|
+
|
15
|
+
h|Stereotype: 7+| {{ klass.stereotype | default: 'interface' }}
|
16
|
+
|
17
|
+
{% assign inherited = klass.associations | where: "member_end_type", "inheritance" %}
|
18
|
+
{% if inherited.size > 0 %}
|
19
|
+
h|Inheritance from: 7+| {{ inherited | map: 'member_end' | join: ", " }}
|
20
|
+
{% endif %}
|
21
|
+
|
22
|
+
{% assign generalizations = klass.associations | where: "member_end_type", "generalization" %}
|
23
|
+
{% if generalizations.size > 0 %}
|
24
|
+
h|Generalization of: 7+| {{ generalizations | map: 'member_end' | join: ", " }}
|
25
|
+
{% endif %}
|
26
|
+
|
27
|
+
h|Abstract: 7+| {{ klass.is_abstract }}
|
28
|
+
{% assign aggregations = klass.associations | where: "member_end_type", "aggregation" %}
|
29
|
+
{% if aggregations.size > 0 %}
|
30
|
+
.{{aggregations.size | plus: 1}}+h|Associations:
|
31
|
+
4+|_Association with:_
|
32
|
+
|_Obligation_
|
33
|
+
| _Maximum occurrence_
|
34
|
+
|_Provides:_
|
35
|
+
|
36
|
+
{% for assoc in aggregations %}
|
37
|
+
4+| {{assoc.member_end}}
|
38
|
+
| {% if assoc.member_end_cardinality %}{{ assoc.member_end_cardinality.min }}{% endif %}
|
39
|
+
| {% if assoc.member_end_cardinality %}{{ assoc.member_end_cardinality.max }}{% endif %}
|
40
|
+
| {{ assoc.member_end_attribute_name }}
|
41
|
+
|
42
|
+
{% endfor %}
|
43
|
+
{% else %}
|
44
|
+
|
45
|
+
.1+h|Associations: 7+| (none)
|
46
|
+
{% endif %}
|
47
|
+
{% if klass.attributes.size > 0 %}
|
48
|
+
.{{klass.attributes.size | plus: 1}}+h|Public attributes:
|
49
|
+
| _Name_
|
50
|
+
2+| _Definition_
|
51
|
+
| _Derived_
|
52
|
+
| _Obligation_
|
53
|
+
| _Maximum occurrence_
|
54
|
+
| _Data type_
|
55
|
+
|
56
|
+
{% for attr in klass.attributes %}
|
57
|
+
| {{attr.name}}
|
58
|
+
2+| {{ attr.definition | html2adoc }}
|
59
|
+
| {{ attr.is_derived }}
|
60
|
+
| {{attr.cardinality.min}}
|
61
|
+
| {{attr.cardinality.max}}
|
62
|
+
| {{attr.type}}
|
63
|
+
|
64
|
+
{% endfor %}
|
65
|
+
{% else %}
|
66
|
+
.1+h|Public attributes:
|
67
|
+
7+| (none)
|
68
|
+
{% endif %}
|
69
|
+
|
70
|
+
{% if klass.constraints.size > 0 %}
|
71
|
+
.{{ klass.constraints.size }}+|*Constraints:*
|
72
|
+
{% for constr in klass.constraints %}
|
73
|
+
7+| `{{ constr.body }}`
|
74
|
+
|
75
|
+
{% endfor %}
|
76
|
+
{% else %}
|
77
|
+
|
78
|
+
h|Constraints: 7+| (none)
|
79
|
+
{% endif %}
|
80
|
+
|
81
|
+
|===
|
@@ -0,0 +1,177 @@
|
|
1
|
+
{% for package in context.packages %}
|
2
|
+
{% assign package_name = package.name | downcase | replace: ":", "" | replace: " ", "_" %}
|
3
|
+
{% if additional_context.before and additional_context.before.size > 0 %}
|
4
|
+
{% for before in additional_context.before %}
|
5
|
+
{{ before.text }}
|
6
|
+
{% endfor %}
|
7
|
+
{% endif %}
|
8
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}{{equalsigns}} {{ package.name }}
|
9
|
+
{{equalsigns}}= {{ package.name }}
|
10
|
+
|
11
|
+
{% assign before_package_key = 'before;' | append: package.name %}
|
12
|
+
{% if additional_context[before_package_key] and additional_context[before_package_key].size > 0 %}
|
13
|
+
{% for before in additional_context[before_package_key] %}
|
14
|
+
{{ before.text }}
|
15
|
+
{% endfor %}
|
16
|
+
{% endif %}
|
17
|
+
|
18
|
+
[cols="1a,4a"]
|
19
|
+
|===
|
20
|
+
|
21
|
+
h|Description: | {{ package.definition }}
|
22
|
+
h|Parent Package: | {{ context.name }}
|
23
|
+
h|Stereotype: | «{{ package.stereotype }}»
|
24
|
+
|
25
|
+
|===
|
26
|
+
|
27
|
+
{% assign feature_types = package.classes | where: "stereotype", "FeatureType" %}
|
28
|
+
{% assign object_types = package.classes | where: "stereotype", "ObjectType" %}
|
29
|
+
{% assign basic_types = package.classes | where: "stereotype", "BasicType" %}
|
30
|
+
{% assign unions = package.classes | where: "stereotype", "Union" %}
|
31
|
+
{% assign code_lists = package.classes | where: "stereotype", "CodeList" %}
|
32
|
+
{% if feature_types.size > 0 or object_types.size > 0 %}
|
33
|
+
{{equalsigns}}= Classes
|
34
|
+
|
35
|
+
{% include "packages_data_dictionary_classes", classes: feature_types %}
|
36
|
+
{% include "packages_data_dictionary_classes", classes: object_types %}
|
37
|
+
{% endif %}
|
38
|
+
|
39
|
+
{% if basic_types.size > 0 %}
|
40
|
+
{{equalsigns}}= Basic Types
|
41
|
+
|
42
|
+
{% include "packages_data_dictionary_classes", classes: basic_types %}
|
43
|
+
{% endif %}
|
44
|
+
|
45
|
+
{% if unions.size > 0 %}
|
46
|
+
{{equalsigns}}= Unions
|
47
|
+
|
48
|
+
{% include "packages_data_dictionary_classes", classes: unions %}
|
49
|
+
{% endif %}
|
50
|
+
|
51
|
+
{% if code_lists.size > 0 %}
|
52
|
+
{{equalsigns}}= Code Lists
|
53
|
+
|
54
|
+
{% include "packages_data_dictionary_classes", classes: code_lists %}
|
55
|
+
{% endif %}
|
56
|
+
|
57
|
+
{% if package.data_types.size > 0 %}
|
58
|
+
{{equalsigns}}= Data Types
|
59
|
+
|
60
|
+
{% for data_type in package.data_types %}
|
61
|
+
{% capture generalizations %}{% for assoc in data_type.associations | where: "member_end_type", "generalization" %}{{ assoc.member_end }} {% endfor %}{% endcapture %}
|
62
|
+
[[{{ data_type.name }}-section]]
|
63
|
+
[cols="1a"]
|
64
|
+
|===
|
65
|
+
|*{{ data_type.name }}*
|
66
|
+
|[cols="1,4",frame=none,grid=none]
|
67
|
+
!===
|
68
|
+
!{nbsp}{nbsp}{nbsp}{nbsp}Definition: ! {{ data_type.definition }}
|
69
|
+
!{nbsp}{nbsp}{nbsp}{nbsp}Subclass of: ! {{ generalizations }}
|
70
|
+
!{nbsp}{nbsp}{nbsp}{nbsp}Stereotype: ! «DataType»
|
71
|
+
!===
|
72
|
+
{% if data_type.associations.size > 0 %}
|
73
|
+
{% capture rendered_associations %}
|
74
|
+
{% for assoc in data_type.associations %}
|
75
|
+
{% if assoc.member_end_attribute_name.size > 0 %}
|
76
|
+
{% capture cardinality %}{% if assoc.member_end_cardinality.min == 'C' %}[0..{{ assoc.member_end_cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ assoc.member_end_cardinality.max }}]{% endif %}{% endcapture %}
|
77
|
+
!{set:cellbgcolor:#FFFFFF} {{ assoc.member_end_attribute_name }} !<<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }} ! {{ assoc.definition }}
|
78
|
+
{% endif %}
|
79
|
+
{% endfor %}
|
80
|
+
{% endcapture %}
|
81
|
+
{% if rendered_associations.size > 0 %}
|
82
|
+
|[cols="15,20,60",frame=none,grid=none,options="header"]
|
83
|
+
!===
|
84
|
+
!{set:cellbgcolor:#DDDDDD} *Role name* !*Target class and multiplicity* !*Definition*
|
85
|
+
{{ rendered_associations }}
|
86
|
+
!===
|
87
|
+
{% endif %}
|
88
|
+
{% endif %}
|
89
|
+
{% if data_type.attributes.size > 0 %}
|
90
|
+
|[cols="15,20,60",frame=none,grid=none,options="header"]
|
91
|
+
!===
|
92
|
+
!{set:cellbgcolor:#DDDDDD} *Attribute* !*Value type and multiplicity* !*Definition*
|
93
|
+
{% for attr in data_type.attributes %}
|
94
|
+
{% capture cardinality %}{% if attr.cardinality.min == 'C' %}[0..{{ attr.cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ attr.cardinality.max }}]{% endif %}{% endcapture %}
|
95
|
+
!{set:cellbgcolor:#FFFFFF} {{ attr.name }} !<<{{ attr.type }}-section,{{ attr.name }}>> {{ cardinality }} !{{ attr.definition }}
|
96
|
+
{% endfor %}
|
97
|
+
!===
|
98
|
+
|{set:cellbgcolor:#FFFFFF} Note: Unless otherwise specified, all attributes and role names have the stereotype «Property».
|
99
|
+
{% endif %}
|
100
|
+
|===
|
101
|
+
|
102
|
+
{% endfor %}
|
103
|
+
{% endif %}
|
104
|
+
|
105
|
+
{% if package.enums.size > 0 %}
|
106
|
+
{{equalsigns}}= Enumerations
|
107
|
+
|
108
|
+
{% for enum in package.enums %}
|
109
|
+
{% capture generalizations %}{% for assoc in enum.associations | where: "member_end_type", "generalization" %}{{ assoc.member_end }} {% endfor %}{% endcapture %}
|
110
|
+
[[{{ enum.name }}-section]]
|
111
|
+
[cols="1a"]
|
112
|
+
|===
|
113
|
+
|*{{ enum.name }}*
|
114
|
+
|[cols="1,4",frame=none,grid=none]
|
115
|
+
!===
|
116
|
+
!{nbsp}{nbsp}{nbsp}{nbsp}Definition: ! {{ enum.definition }}
|
117
|
+
!{nbsp}{nbsp}{nbsp}{nbsp}Stereotype: ! «Enumeration»
|
118
|
+
!===
|
119
|
+
{% if enum.values.size > 0 %}
|
120
|
+
|[cols="1,4",frame=none,grid=none,options="header"]
|
121
|
+
!===
|
122
|
+
^!{set:cellbgcolor:#DDDDDD} *Literal value* !*Definition*
|
123
|
+
|
124
|
+
{% for val in enum.values %}
|
125
|
+
^!{set:cellbgcolor:#FFFFFF} {{ val.name }} !{{ val.definition }}
|
126
|
+
{% endfor %}
|
127
|
+
!===
|
128
|
+
{% endif %}
|
129
|
+
|===
|
130
|
+
|
131
|
+
{% endfor %}
|
132
|
+
{% endif %}
|
133
|
+
|
134
|
+
{% if additional_context.include_block and additional_context.include_block.size > 0 %}
|
135
|
+
{% for block in additional_context.include_block %}
|
136
|
+
{% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
|
137
|
+
{% capture block_content %}{% include block_filename %}{% endcapture %}
|
138
|
+
{% unless block_content contains "Liquid error" %}
|
139
|
+
{% if block.text %}
|
140
|
+
{{ block.text }}
|
141
|
+
{% endif %}
|
142
|
+
{{ block_content }}
|
143
|
+
{% endunless %}
|
144
|
+
{% endfor %}
|
145
|
+
{% endif %}
|
146
|
+
|
147
|
+
{% assign include_block_package_key = 'include_block;' | append: package.name %}
|
148
|
+
{% if additional_context[include_block_package_key] and additional_context[include_block_package_key].size > 0 %}
|
149
|
+
{% for block in additional_context[include_block_package_key] %}
|
150
|
+
{% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
|
151
|
+
{% capture block_content %}{% include block_filename %}{% endcapture %}
|
152
|
+
{% unless block_content contains "Liquid error" %}
|
153
|
+
{% if block.text %}
|
154
|
+
{{ block.text }}
|
155
|
+
{% endif %}
|
156
|
+
{{ block_content }}
|
157
|
+
{% endunless %}
|
158
|
+
{% endfor %}
|
159
|
+
{% endif %}
|
160
|
+
|
161
|
+
{% assign after_package_key = 'after;' | append: package.name %}
|
162
|
+
{% if additional_context[after_package_key] %}
|
163
|
+
{{equalsigns}}= Additional Information
|
164
|
+
{% for after in additional_context[after_package_key] %}
|
165
|
+
{{ after.text }}
|
166
|
+
{% endfor %}
|
167
|
+
{% endif %}
|
168
|
+
{% if package.packages.size > 0 and render_nested_packages %}
|
169
|
+
{% assign nested_depth = depth | plus: 1 %}{% include "packages_data_dictionary", depth: nested_depth, context: package %}
|
170
|
+
{% endif %}
|
171
|
+
{% endfor %}
|
172
|
+
|
173
|
+
{% if additional_context.after and additional_context.after.size > 0 %}
|
174
|
+
{% for after in additional_context.after %}
|
175
|
+
{{ after.text }}
|
176
|
+
{% endfor %}
|
177
|
+
{% endif %}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
{% for klass in classes %}
|
2
|
+
{% capture generalizations %}{% for assoc in klass.associations | where: "member_end_type", "generalization" %}{{ assoc.member_end }} {% endfor %}{% endcapture %}
|
3
|
+
[[{{ klass.name }}-section]]
|
4
|
+
[cols="1a"]
|
5
|
+
|===
|
6
|
+
|*{{ klass.name }}*
|
7
|
+
|[cols="1,4",frame=none,grid=none]
|
8
|
+
!===
|
9
|
+
!{nbsp}{nbsp}{nbsp}{nbsp}Definition: ! {{ klass.definition }}
|
10
|
+
!{nbsp}{nbsp}{nbsp}{nbsp}Subclass of: ! {{ generalizations }}
|
11
|
+
!{nbsp}{nbsp}{nbsp}{nbsp}Stereotype: ! «{{ klass.stereotype }}»
|
12
|
+
!===
|
13
|
+
{% if klass.associations.size > 0 %}
|
14
|
+
{% capture rendered_associations %}
|
15
|
+
{% for assoc in klass.associations %}
|
16
|
+
{% if assoc.member_end_attribute_name.size > 0 %}
|
17
|
+
{% capture cardinality %}{% if assoc.member_end_cardinality.min == 'C' %}[0..{{ assoc.member_end_cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ assoc.member_end_cardinality.max }}]{% endif %}{% endcapture %}
|
18
|
+
!{set:cellbgcolor:#FFFFFF} {{ assoc.member_end_attribute_name }} !<<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }} ! {{ assoc.definition }}
|
19
|
+
{% endif %}
|
20
|
+
{% endfor %}
|
21
|
+
{% endcapture %}
|
22
|
+
{% if rendered_associations.size > 0 %}
|
23
|
+
|[cols="15,20,60",frame=none,grid=none,options="header"]
|
24
|
+
!===
|
25
|
+
!{set:cellbgcolor:#DDDDDD} *Role name* !*Target class and multiplicity* !*Definition*
|
26
|
+
{{ rendered_associations }}
|
27
|
+
!===
|
28
|
+
{% endif %}
|
29
|
+
{% endif %}
|
30
|
+
{% if klass.attributes.size > 0 %}
|
31
|
+
|[cols="15,20,60",frame=none,grid=none,options="header"]
|
32
|
+
!===
|
33
|
+
!{set:cellbgcolor:#DDDDDD} *Attribute* !*Value type and multiplicity* !*Definition*
|
34
|
+
{% for attr in klass.attributes %}
|
35
|
+
{% capture cardinality %}{% if attr.cardinality.min == 'C' %}[0..{{ attr.cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ attr.cardinality.max }}]{% endif %}{% endcapture %}
|
36
|
+
!{set:cellbgcolor:#FFFFFF} {{ attr.name }} !<<{{ attr.type }}-section,{{ attr.name }}>> {{ cardinality }} !{{ attr.definition }}
|
37
|
+
{% endfor %}
|
38
|
+
!===
|
39
|
+
|{set:cellbgcolor:#FFFFFF} Note: Unless otherwise specified, all attributes and role names have the stereotype «Property».
|
40
|
+
{% endif %}
|
41
|
+
|===
|
42
|
+
|
43
|
+
{% endfor %}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
{% assign is_klass_spare = klass.name | slice: 0,5 %}
|
2
|
+
{% if is_klass_spare == 'old: ' %}{% continue %}
|
3
|
+
{% elsif is_klass_spare == 'Spare' %}{% continue %}
|
4
|
+
{% endif %}
|
5
|
+
{% assign klass_name = klass.name | downcase | replace: ':', '' | replace: ' ', '_' %}
|
6
|
+
[[tab-P-{{ package_name }}-DT-{{ klass_name }}]]
|
7
|
+
.Elements of {{ package.name }}::{{ klass.name }}
|
8
|
+
[width="100%",cols="a,a,a,a,a,a,a,a"]
|
9
|
+
|===
|
10
|
+
|
11
|
+
h|Name: 7+| {{ klass.name }}
|
12
|
+
|
13
|
+
h|Definition: 7+| {{ klass.definition | html2adoc }}
|
14
|
+
|
15
|
+
h|Stereotype: 7+| {{ klass.stereotype | default: 'interface' }}
|
16
|
+
|
17
|
+
{% assign inherited = klass.associations | where: "member_end_type", "inheritance" %}
|
18
|
+
{% if inherited.size > 0 %}
|
19
|
+
h|Inheritance from: 7+| {{ inherited | map: 'member_end' | join: ", " }}
|
20
|
+
{% endif %}
|
21
|
+
|
22
|
+
{% assign generalizations = klass.associations | where: "member_end_type", "generalization" %}
|
23
|
+
{% if generalizations.size > 0 %}
|
24
|
+
h|Generalization of: 7+| {{ generalizations | map: 'member_end' | join: ", " }}
|
25
|
+
{% endif %}
|
26
|
+
|
27
|
+
h|Abstract: 7+| {{ klass.is_abstract }}
|
28
|
+
{% assign aggregations = klass.associations | where: "member_end_type", "aggregation" %}
|
29
|
+
{% if aggregations.size > 0 %}
|
30
|
+
.{{aggregations.size | plus: 1}}+h|Associations:
|
31
|
+
4+|_Association with:_
|
32
|
+
|_Obligation_
|
33
|
+
| _Maximum occurrence_
|
34
|
+
|_Provides:_
|
35
|
+
|
36
|
+
{% for assoc in aggregations %}
|
37
|
+
4+| {{assoc.member_end}}
|
38
|
+
| {% if assoc.member_end_cardinality %}{{ assoc.member_end_cardinality.min }}{% endif %}
|
39
|
+
| {% if assoc.member_end_cardinality %}{{ assoc.member_end_cardinality.max }}{% endif %}
|
40
|
+
| {{ assoc.member_end_attribute_name }}
|
41
|
+
|
42
|
+
{% endfor %}
|
43
|
+
{% else %}
|
44
|
+
|
45
|
+
.1+h|Associations: 7+| (none)
|
46
|
+
{% endif %}
|
47
|
+
|
48
|
+
{% if klass.attributes.size > 0 %}
|
49
|
+
.{{klass.attributes.size | plus: 1}}+h|Values:
|
50
|
+
| _Name_
|
51
|
+
6+| _Definition_
|
52
|
+
|
53
|
+
{% for value in klass.attributes %}
|
54
|
+
| {{value.name}}
|
55
|
+
6+| {{ value.definition | html2adoc }}
|
56
|
+
|
57
|
+
{% endfor %}
|
58
|
+
{% else %}
|
59
|
+
.1+h|Values:
|
60
|
+
7+| (none)
|
61
|
+
{% endif %}
|
62
|
+
|
63
|
+
|===
|