metanorma-plugin-lutaml 0.4.9 → 0.4.10
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.adoc +108 -51
- data/lib/metanorma/plugin/lutaml/liquid/custom_filters.rb +9 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages.liquid +109 -3
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_class.liquid +3 -3
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_data_dictionary.liquid +209 -61
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_data_dictionary_class.liquid +49 -43
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_data_dictionary_classes.liquid +1 -1
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_data_type.liquid +1 -1
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_entity_list.liquid +96 -21
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_entity_list_class.liquid +19 -0
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_entity_list_classes.liquid +3 -3
- data/lib/metanorma/plugin/lutaml/liquid_templates/_packages_enum.liquid +1 -2
- data/lib/metanorma/plugin/lutaml/lutaml_preprocessor.rb +1 -1
- data/lib/metanorma/plugin/lutaml/lutaml_uml_attributes_table_preprocessor.rb +1 -1
- data/lib/metanorma/plugin/lutaml/lutaml_uml_datamodel_description_preprocessor.rb +46 -15
- data/lib/metanorma/plugin/lutaml/utils.rb +1 -1
- data/lib/metanorma/plugin/lutaml/version.rb +1 -1
- metadata +3 -2
@@ -4,7 +4,7 @@
|
|
4
4
|
{% endif %}
|
5
5
|
{% assign klass_name = klass.name | downcase | replace: ':', '' | replace: ' ', '_' %}
|
6
6
|
[[section-{{ klass.xmi_id }}]]
|
7
|
-
.Elements of “{{ package.name }}::{{ klass.name }}” (
|
7
|
+
.Elements of “{{ package.name }}::{{ klass.name }}” ({{ klass.stereotype }})
|
8
8
|
[width="100%",cols="a,a,a,a,a,a,a,a"]
|
9
9
|
|===
|
10
10
|
|
@@ -69,8 +69,8 @@ h| Public attributes:
|
|
69
69
|
|
70
70
|
{% if klass.constraints.size > 0 %}
|
71
71
|
.{{ klass.constraints.size }}+h| Constraints:
|
72
|
-
{% for
|
73
|
-
7+| `{{
|
72
|
+
{% for constraint in klass.constraints %}
|
73
|
+
7+| `{{ constraint.body }}`: `{{ constraint.definition | replace: '|', '\|' }}`
|
74
74
|
|
75
75
|
{% endfor %}
|
76
76
|
{% else %}
|
@@ -1,158 +1,250 @@
|
|
1
1
|
{% for package in context.packages %}
|
2
2
|
{% assign package_name = package.name | downcase | replace: ":", "" | replace: " ", "_" %}
|
3
|
+
{% assign nested_depth = depth | plus: 1 %}
|
3
4
|
{% if additional_context.before and additional_context.before.size > 0 %}
|
4
5
|
{% for before in additional_context.before %}
|
6
|
+
{% if before.text %}
|
7
|
+
|
8
|
+
{% if before.liquid %}
|
9
|
+
{{ before.text | interpolate }}
|
10
|
+
{% else %}
|
5
11
|
{{ before.text }}
|
12
|
+
{% endif %}
|
13
|
+
{% endif %}
|
14
|
+
{% endfor %}
|
15
|
+
{% endif %}
|
16
|
+
|
17
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
|
18
|
+
{{equalsigns}} {{ package.name }}
|
19
|
+
{%comment%}(package: depth is {{ depth }}, nested_depth is {{ nested_depth }}){%endcomment%}
|
20
|
+
|
21
|
+
{% if additional_context.all_macros.size > 0 %}
|
22
|
+
{% assign sorted_all_macros = additional_context.all_macros | where: "position", "before" | sort: 'index' %}
|
23
|
+
{% for block in sorted_all_macros %}
|
24
|
+
{% case block.type %}
|
25
|
+
{% when 'include_block' %}
|
26
|
+
{% unless block.package and block.package != package.name %}
|
27
|
+
{% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
|
28
|
+
{% capture block_content %}{% include block_filename %}{% endcapture %}
|
29
|
+
{% unless block_content contains "Liquid error" %}
|
30
|
+
{% if block.text %}
|
31
|
+
|
32
|
+
{% if block.liquid %}
|
33
|
+
{{ block.text | interpolate }}
|
34
|
+
{% else %}
|
35
|
+
{{ block.text }}
|
36
|
+
{% endif %}
|
37
|
+
{% endif %}
|
38
|
+
|
39
|
+
{{ block_content }}
|
40
|
+
{% endunless %}
|
41
|
+
{% endunless %}
|
42
|
+
{% when 'package_text' %}
|
43
|
+
{% unless block.package and block.package != package.name %}
|
44
|
+
|
45
|
+
{% if block.liquid %}
|
46
|
+
{{ block.text | interpolate }}
|
47
|
+
{% else %}
|
48
|
+
{{ block.text }}
|
49
|
+
{% endif %}
|
50
|
+
{% endunless %}
|
51
|
+
{% else %}
|
52
|
+
{% endcase %}
|
6
53
|
{% endfor %}
|
7
54
|
{% endif %}
|
8
|
-
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}{{equalsigns}} {{ package.name }}
|
9
55
|
|
10
56
|
{% assign before_package_key = 'before;' | append: package.name %}
|
11
57
|
{% if additional_context[before_package_key] and additional_context[before_package_key].size > 0 %}
|
12
58
|
{% for before in additional_context[before_package_key] %}
|
59
|
+
{% if before.text %}
|
60
|
+
|
61
|
+
{% if before.liquid %}
|
62
|
+
{{ before.text | interpolate }}
|
63
|
+
{% else %}
|
13
64
|
{{ before.text }}
|
65
|
+
{% endif %}
|
66
|
+
{% endif %}
|
14
67
|
{% endfor %}
|
15
68
|
{% endif %}
|
16
69
|
|
70
|
+
.Metadata of {{ package.name }} ({{ package.stereotype }})
|
17
71
|
[cols="1a,4a"]
|
18
72
|
|===
|
19
73
|
|
20
|
-
h|Description: | {{ package.definition }}
|
74
|
+
h|Description: | {{ package.definition | replace: '|', '\|' }}
|
21
75
|
h|Parent package: | {{ context.name }}
|
22
76
|
h|Stereotype: | «{{ package.stereotype }}»
|
23
77
|
|
24
78
|
|===
|
25
79
|
|
80
|
+
{% assign inner_depth = depth | plus: 2 %}
|
26
81
|
{% assign basic_types = package.classes | where: "stereotype", "BasicType" %}
|
27
82
|
{% assign unions = package.data_types | where: "stereotype", "Union" %}
|
28
83
|
{% assign code_lists = package.classes | where: "stereotype", "CodeList" %}
|
29
84
|
{% assign not_classes_length = basic_types.size | plus: code_lists.size %}
|
30
|
-
{% assign
|
85
|
+
{% assign not_classes_stereotypes = 'DataType,BasicType,Enumeration,CodeList' | split: ','%}
|
86
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
|
31
87
|
{{equalsigns}}= Classes
|
88
|
+
{%comment%}(class: depth is {{ depth }}, nested_depth is {{ nested_depth }}){%endcomment%}
|
32
89
|
|
33
90
|
{% unless not_classes_length == package.classes.size %}
|
34
91
|
|
35
92
|
{% for klass in package.classes %}
|
36
|
-
{% unless
|
37
|
-
{% include "packages_data_dictionary_class" %}
|
93
|
+
{% unless not_classes_stereotypes contains klass.stereotype %}
|
94
|
+
{% include "packages_data_dictionary_class", depth: inner_depth %}
|
38
95
|
{% endunless %}
|
39
96
|
{% endfor %}
|
40
97
|
{% else %}
|
41
|
-
None
|
98
|
+
None.
|
42
99
|
{% endunless %}
|
43
100
|
|
101
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
|
44
102
|
{{equalsigns}}= Basic types
|
103
|
+
{%comment%}(class: depth is {{ depth }}, inner_depth is {{ inner_depth }}){%endcomment%}
|
45
104
|
|
46
105
|
{% if basic_types.size > 0 %}
|
47
|
-
|
48
|
-
{% include "packages_data_dictionary_classes", classes: basic_types %}
|
106
|
+
{% include "packages_data_dictionary_classes", classes: basic_types, depth: inner_depth %}
|
49
107
|
{% else %}
|
50
|
-
None
|
108
|
+
None.
|
51
109
|
{% endif %}
|
52
110
|
|
111
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
|
53
112
|
{{equalsigns}}= Unions
|
113
|
+
{%comment%}(class: depth is {{ depth }}, inner_depth is {{ inner_depth }}){%endcomment%}
|
54
114
|
|
55
115
|
{% if unions.size > 0 %}
|
56
|
-
|
57
|
-
{% include "packages_data_dictionary_classes", classes: unions %}
|
116
|
+
{% include "packages_data_dictionary_classes", classes: unions, depth: inner_depth %}
|
58
117
|
{% else %}
|
59
|
-
None
|
118
|
+
None.
|
60
119
|
{% endif %}
|
61
120
|
|
121
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
|
62
122
|
{{equalsigns}}= Code lists
|
123
|
+
{%comment%}(class: depth is {{ depth }}, inner_depth is {{ inner_depth }}){%endcomment%}
|
63
124
|
|
64
125
|
{% if code_lists.size > 0 %}
|
65
|
-
|
66
|
-
{% include "packages_data_dictionary_classes", classes: code_lists %}
|
126
|
+
{% include "packages_data_dictionary_classes", classes: code_lists, depth: inner_depth %}
|
67
127
|
{% else %}
|
68
|
-
None
|
128
|
+
None.
|
69
129
|
{% endif %}
|
70
130
|
|
131
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
|
71
132
|
{{equalsigns}}= Data types
|
133
|
+
{%comment%}(class: depth is {{ depth }}, inner_depth is {{ inner_depth }}){%endcomment%}
|
72
134
|
|
73
135
|
{% assign non_unions = package.data_types | where: "stereotype", "DataType" %}
|
74
136
|
{% if non_unions.size > 0 %}
|
75
|
-
|
76
137
|
{% for data_type in non_unions %}
|
77
|
-
{% capture generalizations %}{% assign inheritance =
|
138
|
+
{% capture generalizations %}{% assign inheritance = klass.associations | where: "member_end_type", "inheritance" %}{% for assoc in inheritance %}<<{{ assoc.member_end }}-section,{{ assoc.member_end }}>>{% endfor %}{% endcapture %}
|
78
139
|
[[{{ data_type.name }}-section]]
|
79
|
-
|
140
|
+
{{equalsigns}}== {{ data_type.name }}
|
141
|
+
|
142
|
+
.Metadata of {{ data_type.name }} ({{ data_type.stereotype }})
|
143
|
+
[cols="1a,4a"]
|
80
144
|
|===
|
81
|
-
|
82
|
-
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
145
|
+
h|Definition: | {{ data_type.definition | replace: '|', '\|' }}
|
146
|
+
h|Subclass of: | {% if generalizations.size > 0 %}{{ generalizations }}{% else %}None{% endif %}
|
147
|
+
h|Stereotype: | «{{ data_type.stereotype }}»
|
148
|
+
|
149
|
+
{% if data_type.constraints.size > 0 %}
|
150
|
+
{% for constraint in data_type.constraints %}
|
151
|
+
h| Constraint:
|
152
|
+
| `{{ constraint.body }}`:
|
153
|
+
|
154
|
+
[source,ocl,%unnumbered]
|
155
|
+
------
|
156
|
+
{{ constraint.definition | replace: '|', '\|' }}
|
157
|
+
------
|
158
|
+
{% endfor %}
|
159
|
+
{% endif %}
|
160
|
+
|
161
|
+
|===
|
162
|
+
|
88
163
|
{% if data_type.associations.size > 0 %}
|
89
164
|
{% capture rendered_associations %}
|
90
165
|
{% for assoc in data_type.associations %}
|
91
166
|
{% if assoc.member_end_attribute_name.size > 0 %}
|
92
|
-
{% capture cardinality %}{%
|
93
|
-
|
167
|
+
{% capture cardinality %}[{% case assoc.member_end_cardinality.min %}{% when "C" %}0{% when "M" %}1{% else %}{{assoc.member_end_cardinality.min}}{% endcase %}..{{ assoc.member_end_cardinality.max }}]{% endcapture %}
|
168
|
+
| {{ assoc.member_end_attribute_name }}
|
169
|
+
| <<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }}
|
170
|
+
| {{ assoc.definition | replace: '|', '\|' }}
|
94
171
|
{% endif %}
|
95
172
|
{% endfor %}
|
96
173
|
{% endcapture %}
|
97
|
-
|
98
|
-
|
|
99
|
-
|
100
|
-
|
101
|
-
|
174
|
+
|
175
|
+
{% assign associations_stripped = rendered_associations | strip_newlines | strip %}
|
176
|
+
|
177
|
+
{% if associations_stripped.size > 0 %}
|
178
|
+
.Associations of {{ data_type.name }} ({{ data_type.stereotype }})
|
179
|
+
[cols="15a,20a,60a",options="header"]
|
180
|
+
|===
|
181
|
+
| Role name | Target class and multiplicity | Definition
|
182
|
+
|
102
183
|
{{ rendered_associations }}
|
103
|
-
|
184
|
+
|
185
|
+
|===
|
104
186
|
{% endif %}
|
105
187
|
{% endif %}
|
188
|
+
|
106
189
|
{% if data_type.attributes.size > 0 %}
|
107
|
-
|
108
|
-
[cols="
|
109
|
-
|
110
|
-
|
190
|
+
.Attributes of {{ data_type.name }} ({{ data_type.stereotype }})
|
191
|
+
[cols="15a,20a,60a",options="header"]
|
192
|
+
|===
|
193
|
+
| Attribute | Value type and multiplicity | Definition
|
194
|
+
|
111
195
|
{% for attr in data_type.attributes %}
|
112
|
-
{% capture cardinality %}{%
|
113
|
-
|
196
|
+
{% capture cardinality %}[{% case attr.cardinality.min %}{% when 'C' %}0{% when 'M' %}1{% else %}{{ attr.cardinality.min }}{% endcase %}..{{ attr.cardinality.max }}]{% endcapture %}
|
197
|
+
| {{ attr.name }}
|
198
|
+
| <<{{ attr.type }}-section,{{ attr.type }}>> {{ cardinality }}
|
199
|
+
| {{ attr.definition | replace: '|', '\|' }}
|
200
|
+
|
114
201
|
{% endfor %}
|
115
|
-
!===
|
116
|
-
| NOTE: Unless otherwise specified, all attributes and role names have the stereotype «Property».
|
117
|
-
{% endif %}
|
118
202
|
|===
|
119
203
|
|
204
|
+
[NOTE,keep-separate=true]
|
205
|
+
====
|
206
|
+
Unless otherwise specified, all attributes and role names have the stereotype
|
207
|
+
«Property».
|
208
|
+
====
|
209
|
+
{% endif %}
|
210
|
+
|
120
211
|
{% endfor %}
|
121
212
|
{% else %}
|
122
|
-
None
|
213
|
+
None.
|
123
214
|
{% endif %}
|
124
215
|
|
125
216
|
{{equalsigns}}= Enumerations
|
126
217
|
|
127
218
|
{% if package.enums.size > 0 %}
|
128
|
-
|
129
219
|
{% for enum in package.enums %}
|
130
220
|
[[{{ enum.name }}-section]]
|
131
|
-
|
221
|
+
{{equalsigns}}== {{ enum.name }}
|
222
|
+
|
223
|
+
.Metadata of {{ enum.name }} (Enumeration)
|
224
|
+
[cols="1a,4a"]
|
225
|
+
|===
|
226
|
+
h|Definition: | {{ enum.definition | replace: '|', '\|' }}
|
227
|
+
h|Stereotype: | «Enumeration»
|
132
228
|
|===
|
133
|
-
|
134
|
-
|
|
135
|
-
[cols="1,4"]
|
136
|
-
!===
|
137
|
-
!Definition: ! {{ enum.definition }}
|
138
|
-
!Stereotype: ! «Enumeration»
|
139
|
-
!===
|
229
|
+
|
140
230
|
{% if enum.values.size > 0 %}
|
141
|
-
|
142
|
-
[cols="
|
143
|
-
|
144
|
-
|
231
|
+
.Values of {{ enum.name }} (Enumeration)
|
232
|
+
[cols="1a,4a",options="header"]
|
233
|
+
|===
|
234
|
+
| Literal value | Definition
|
145
235
|
|
146
236
|
{% for val in enum.values %}
|
147
|
-
|
237
|
+
| {{ val.name }}
|
238
|
+
| {{ val.definition | replace: '|', '\|' }}
|
239
|
+
|
148
240
|
{% endfor %}
|
149
|
-
|
150
|
-
{% endif %}
|
241
|
+
|
151
242
|
|===
|
243
|
+
{% endif %}
|
152
244
|
|
153
245
|
{% endfor %}
|
154
246
|
{% else %}
|
155
|
-
None
|
247
|
+
None.
|
156
248
|
{% endif %}
|
157
249
|
|
158
250
|
{% if additional_context.include_block and additional_context.include_block.size > 0 %}
|
@@ -175,27 +267,83 @@ None
|
|
175
267
|
{% capture block_content %}{% include block_filename %}{% endcapture %}
|
176
268
|
{% unless block_content contains "Liquid error" %}
|
177
269
|
{% if block.text %}
|
270
|
+
|
271
|
+
{% if block.liquid %}
|
272
|
+
{{ block.text | interpolate }}
|
273
|
+
{% else %}
|
178
274
|
{{ block.text }}
|
179
275
|
{% endif %}
|
276
|
+
{% endif %}
|
180
277
|
{{ block_content }}
|
181
278
|
{% endunless %}
|
182
279
|
{% endfor %}
|
183
280
|
{% endif %}
|
184
281
|
|
282
|
+
{% if additional_context.all_macros.size > 0 %}
|
283
|
+
{% assign sorted_all_macros = additional_context.all_macros | where: "position", "after" | sort: 'index' %}
|
284
|
+
{% for block in sorted_all_macros %}
|
285
|
+
{% case block.type %}
|
286
|
+
{% when 'include_block' %}
|
287
|
+
{% unless block.package and block.package != package.name %}
|
288
|
+
{% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
|
289
|
+
{% capture block_content %}{% include block_filename %}{% endcapture %}
|
290
|
+
{% unless block_content contains "Liquid error" %}
|
291
|
+
{% if block.text %}
|
292
|
+
|
293
|
+
{% if block.liquid %}
|
294
|
+
{{ block.text | interpolate }}
|
295
|
+
{% else %}
|
296
|
+
{{ block.text }}
|
297
|
+
{% endif %}
|
298
|
+
{% endif %}
|
299
|
+
|
300
|
+
{{ block_content }}
|
301
|
+
{% endunless %}
|
302
|
+
{% endunless %}
|
303
|
+
{% when 'package_text' %}
|
304
|
+
{% unless block.package and block.package != package.name %}
|
305
|
+
|
306
|
+
{% if block.liquid %}
|
307
|
+
{{ block.text | interpolate }}
|
308
|
+
{% else %}
|
309
|
+
{{ block.text }}
|
310
|
+
{% endif %}
|
311
|
+
{% endunless %}
|
312
|
+
{% else %}
|
313
|
+
{% endcase %}
|
314
|
+
{% endfor %}
|
315
|
+
{% endif %}
|
316
|
+
|
317
|
+
|
185
318
|
{% assign after_package_key = 'after;' | append: package.name %}
|
186
319
|
{% if additional_context[after_package_key] %}
|
187
320
|
{{equalsigns}}= Additional information
|
188
321
|
{% for after in additional_context[after_package_key] %}
|
322
|
+
{% if after.text %}
|
323
|
+
|
324
|
+
{% if after.liquid %}
|
325
|
+
{{ after.text | interpolate }}
|
326
|
+
{% else %}
|
189
327
|
{{ after.text }}
|
328
|
+
{% endif %}
|
329
|
+
{% endif %}
|
190
330
|
{% endfor %}
|
191
331
|
{% endif %}
|
332
|
+
|
192
333
|
{% if package.packages.size > 0 and render_nested_packages %}
|
193
|
-
{%
|
334
|
+
{% include "packages_data_dictionary", depth: nested_depth, context: package %}
|
194
335
|
{% endif %}
|
195
336
|
{% endfor %}
|
196
337
|
|
197
338
|
{% if additional_context.after and additional_context.after.size > 0 %}
|
198
339
|
{% for after in additional_context.after %}
|
340
|
+
{% if after.text %}
|
341
|
+
|
342
|
+
{% if after.liquid %}
|
343
|
+
{{ after.text | interpolate }}
|
344
|
+
{% else %}
|
199
345
|
{{ after.text }}
|
346
|
+
{% endif %}
|
347
|
+
{% endif %}
|
200
348
|
{% endfor %}
|
201
349
|
{% endif %}
|
@@ -1,67 +1,73 @@
|
|
1
|
-
{% capture
|
1
|
+
{% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}
|
2
|
+
{% capture generalizations %}{% assign inheritance = klass.associations | where: "member_end_type", "inheritance" %}{% for assoc in inheritance %}<<{{ assoc.member_end }}-section,{{ assoc.member_end }}>>{% endfor %}{% endcapture %}
|
2
3
|
[[{{ klass.name }}-section]]
|
3
|
-
|
4
|
+
{{equalsigns}} {{ klass.name }}
|
5
|
+
{%comment%}(inside class: depth is {{ depth }}, equalsigns {{equalsigns}}){%endcomment%}
|
6
|
+
|
7
|
+
.Metadata of {{ klass.name }} ({{klass.stereotype}})
|
8
|
+
[cols="1a,4a"]
|
4
9
|
|===
|
5
|
-
|
6
|
-
|
|
7
|
-
|
8
|
-
|
9
|
-
! Definition: ! {{ klass.definition }}
|
10
|
-
! Subclass of: ! {% if generalizations.size > 4 %}{{ generalizations }}{% else %}None{% endif %}
|
11
|
-
! Stereotype: ! «{{ klass.stereotype }}»
|
10
|
+
h| Definition: | {{ klass.definition | replace: '|', '\|' }}
|
11
|
+
h| Subclass of: | {% if generalizations.size > 0 %}{{ generalizations }}{% else %}None{% endif %}
|
12
|
+
h| Stereotype: | «{{ klass.stereotype }}»
|
13
|
+
|
12
14
|
{% if klass.constraints.size > 0 %}
|
13
15
|
{% for constraint in klass.constraints %}
|
14
|
-
|
16
|
+
h| Constraint:
|
17
|
+
| `{{ constraint.body }}`:
|
18
|
+
|
19
|
+
[source,ocl,%unnumbered]
|
20
|
+
------
|
21
|
+
{{ constraint.definition | replace: '|', '\|' }}
|
22
|
+
------
|
15
23
|
{% endfor %}
|
16
24
|
{% endif %}
|
17
|
-
|
25
|
+
|
26
|
+
|===
|
18
27
|
|
19
28
|
{% if klass.associations.size > 0 %}
|
20
29
|
{% capture rendered_associations %}
|
21
30
|
{% for assoc in klass.associations %}
|
22
|
-
|
23
31
|
{% if assoc.member_end_attribute_name.size > 0 %}
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
! <<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }}
|
29
|
-
! {{ assoc.definition }}
|
30
|
-
|
32
|
+
{% capture cardinality %}[{% case assoc.member_end_cardinality.min %}{% when "C" %}0{% when "M" %}1{% else %}{{assoc.member_end_cardinality.min}}{% endcase %}..{{ assoc.member_end_cardinality.max }}]{% endcapture %}
|
33
|
+
| {{ assoc.member_end_attribute_name }}
|
34
|
+
| <<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }}
|
35
|
+
| {{ assoc.definition | replace: '|', '\|' }}
|
31
36
|
{% endif %}
|
32
37
|
{% endfor %}
|
33
38
|
{% endcapture %}
|
39
|
+
{% assign associations_stripped = rendered_associations | strip_newlines | strip %}
|
40
|
+
|
41
|
+
{% if associations_stripped.size > 0 %}
|
42
|
+
.Associations of {{ klass.name }} ({{ klass.stereotype }})
|
43
|
+
[cols="15a,20a,60a",options="header"]
|
44
|
+
|===
|
45
|
+
| Role name | Target class and multiplicity | Definition
|
34
46
|
|
35
|
-
{% if rendered_associations.size > 100 %}
|
36
|
-
|
|
37
|
-
[cols="15,20,60",options="header"]
|
38
|
-
!===
|
39
|
-
! *Role name*
|
40
|
-
! *Target class and multiplicity*
|
41
|
-
! *Definition*
|
42
47
|
{{ rendered_associations }}
|
43
|
-
!===
|
44
|
-
{% endif %}
|
45
48
|
|
49
|
+
|===
|
50
|
+
{% endif %}
|
46
51
|
{% endif %}
|
47
|
-
{% if klass.attributes.size > 0 %}
|
48
|
-
|
|
49
|
-
[cols="15,20,60",options="header"]
|
50
|
-
!===
|
51
|
-
! *Attribute*
|
52
|
-
! *Value type and multiplicity*
|
53
|
-
! *Definition*
|
54
|
-
{% for attr in klass.attributes %}
|
55
52
|
|
56
|
-
{%
|
53
|
+
{% if klass.attributes.size > 0 %}
|
54
|
+
.Attributes of {{ klass.name }} ({{klass.stereotype}})
|
55
|
+
[cols="15a,20a,60a",options="header"]
|
56
|
+
|===
|
57
|
+
| Attribute | Value type and multiplicity | Definition
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
|
59
|
+
{% for attr in klass.attributes %}
|
60
|
+
{% capture cardinality %}[{% case attr.cardinality.min %}{% when 'C' %}0{% when 'M' %}1{% else %}{{ attr.cardinality.min }}{% endcase %}..{{ attr.cardinality.max }}]{% endcapture %}
|
61
|
+
| {{ attr.name }}
|
62
|
+
| <<{{ attr.type }}-section,{{ attr.type }}>> {{ cardinality }}
|
63
|
+
| {{ attr.definition | replace: '|', '\|' }}
|
61
64
|
|
62
65
|
{% endfor %}
|
63
|
-
|
66
|
+
|===
|
64
67
|
|
65
|
-
|
68
|
+
[NOTE,keep-separate=true]
|
69
|
+
====
|
70
|
+
Unless otherwise specified, all attributes and role names have the stereotype
|
71
|
+
«Property».
|
72
|
+
====
|
66
73
|
{% endif %}
|
67
|
-
|===
|