armodel 1.5.0__py3-none-any.whl → 1.6.1__py3-none-any.whl

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.
Files changed (96) hide show
  1. armodel/cli/arxml_dump_cli.py +13 -13
  2. armodel/cli/memory_section_cli.py +76 -0
  3. armodel/cli/system_signal_cli.py +74 -0
  4. armodel/data_models/sw_connector.py +3 -3
  5. armodel/lib/__init__.py +2 -1
  6. armodel/lib/system_signal.py +37 -0
  7. armodel/models/__init__.py +9 -4
  8. armodel/models/annotation.py +27 -3
  9. armodel/models/ar_object.py +18 -6
  10. armodel/models/ar_package.py +271 -127
  11. armodel/models/ar_ref.py +11 -166
  12. armodel/models/bsw_module_template.py +37 -14
  13. armodel/models/common_structure.py +91 -174
  14. armodel/models/communication.py +2 -2
  15. armodel/models/data_prototype.py +41 -6
  16. armodel/models/datatype.py +16 -74
  17. armodel/models/end_to_end_protection.py +1 -1
  18. armodel/models/fibex/can_communication.py +119 -3
  19. armodel/models/fibex/fibex_4_can/__init__.py +0 -0
  20. armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
  21. armodel/models/fibex/fibex_4_multiplatform.py +81 -88
  22. armodel/models/fibex/fibex_core/__init__.py +0 -0
  23. armodel/models/fibex/fibex_core/core_communication.py +627 -0
  24. armodel/models/fibex/fibex_core/core_topology.py +180 -0
  25. armodel/models/fibex/lin_communication.py +24 -3
  26. armodel/models/general_structure.py +110 -11
  27. armodel/models/internal_behavior.py +1 -1
  28. armodel/models/m2/__init__.py +0 -0
  29. armodel/models/m2/autosar_templates/__init__.py +0 -0
  30. armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
  31. armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
  32. armodel/models/m2/autosar_templates/common_structure/implementation.py +21 -0
  33. armodel/models/m2/autosar_templates/common_structure/implementation_data_types.py +148 -0
  34. armodel/models/m2/autosar_templates/ecuc_description_template.py +269 -0
  35. armodel/models/m2/autosar_templates/generic_structure/__init__.py +0 -0
  36. armodel/models/m2/autosar_templates/generic_structure/abstract_structure.py +69 -0
  37. armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
  38. armodel/models/m2/autosar_templates/sw_component_template/communication.py +360 -0
  39. armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +246 -0
  40. armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +181 -0
  41. armodel/models/m2/autosar_templates/sw_component_template/composition/__init__.py +154 -0
  42. armodel/models/m2/autosar_templates/sw_component_template/composition/instance_refs.py +157 -0
  43. armodel/models/m2/autosar_templates/sw_component_template/data_type/__init__.py +0 -0
  44. armodel/models/m2/autosar_templates/sw_component_template/data_type/data_prototypes.py +104 -0
  45. armodel/models/m2/autosar_templates/sw_component_template/port_interface/__init__.py +243 -0
  46. armodel/models/m2/autosar_templates/sw_component_template/port_interface/instance_refs.py +39 -0
  47. armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
  48. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
  49. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
  50. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +46 -0
  51. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/instance_refs_usage.py +169 -0
  52. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +38 -0
  53. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +27 -0
  54. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
  55. armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
  56. armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
  57. armodel/models/m2/autosar_templates/system_template/instance_refs.py +48 -0
  58. armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
  59. armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
  60. armodel/models/m2/msr/__init__.py +0 -0
  61. armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
  62. armodel/models/m2/msr/asam_hdo/units.py +105 -0
  63. armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
  64. armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
  65. armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
  66. armodel/models/m2/msr/documentation/__init__.py +0 -0
  67. armodel/models/m2/msr/documentation/block_elements.py +18 -0
  68. armodel/models/m2_msr.py +1 -0
  69. armodel/models/multilanguage_data.py +15 -0
  70. armodel/models/per_instance_memory.py +34 -6
  71. armodel/models/port_prototype.py +2 -253
  72. armodel/models/service_needs.py +3 -1
  73. armodel/models/sw_component.py +19 -358
  74. armodel/parser/__init__.py +2 -1
  75. armodel/parser/abstract_arxml_parser.py +10 -1
  76. armodel/parser/arxml_parser.py +912 -229
  77. armodel/parser/file_parser.py +43 -0
  78. armodel/tests/test_armodel/models/test_ar_package.py +6 -3
  79. armodel/tests/test_armodel/models/test_ar_ref.py +18 -16
  80. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
  81. armodel/tests/test_armodel/models/test_common_structure.py +8 -7
  82. armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
  83. armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
  84. armodel/tests/test_armodel/models/test_datatype.py +9 -9
  85. armodel/tests/test_armodel/models/test_port_interface.py +2 -2
  86. armodel/tests/test_armodel/parser/test_parse_bswmd.py +3 -3
  87. armodel/tests/test_armodel/parser/test_sw_components.py +3 -3
  88. armodel/writer/abstract_arxml_writer.py +5 -1
  89. armodel/writer/arxml_writer.py +870 -224
  90. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/METADATA +28 -1
  91. armodel-1.6.1.dist-info/RECORD +140 -0
  92. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/entry_points.txt +3 -1
  93. armodel-1.5.0.dist-info/RECORD +0 -91
  94. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/LICENSE +0 -0
  95. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/WHEEL +0 -0
  96. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,360 @@
1
+ from abc import ABCMeta
2
+ from typing import List
3
+
4
+
5
+ from .....models.ar_object import ARNumerical, ARObject, ARLiteral, ARBoolean, ARPositiveInteger
6
+ from .....models.ar_ref import RefType
7
+ from .....models.communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
8
+ from ...msr.data_dictionary.data_def_properties import SwDataDefProps
9
+ from ..common_structure import ValueSpecification
10
+
11
+ class PPortComSpec(ARObject, metaclass = ABCMeta):
12
+ """
13
+ Communication attributes of a provided PortPrototype. This class will contain attributes that are valid for
14
+ all kinds of provide ports, independent of client-server or sender-receiver communication patterns.
15
+
16
+ Abstract Class
17
+
18
+ Package: M2::AUTOSARTemplates::SWComponentTemplate::Communication
19
+ Base: ARObject
20
+ """
21
+
22
+ def __init__(self):
23
+ if type(self) == PPortComSpec:
24
+ raise NotImplementedError("PPortComSpec is an abstract class.")
25
+ super().__init__()
26
+
27
+
28
+ class RPortComSpec(ARObject, metaclass = ABCMeta):
29
+ """
30
+ Communication attributes of a provided PortPrototype. This class will contain attributes that are valid for
31
+ all kinds of provide ports, independent of client-server or sender-receiver communication patterns.
32
+
33
+ Abstract Class
34
+
35
+ Package: M2::AUTOSARTemplates::SWComponentTemplate::Communication
36
+ Base: ARObject
37
+ """
38
+
39
+ def __init__(self):
40
+ if type(self) == RPortComSpec:
41
+ raise NotImplementedError("RPortComSpec is an abstract class.")
42
+
43
+ super().__init__()
44
+
45
+
46
+ class SenderComSpec(PPortComSpec, metaclass = ABCMeta):
47
+ def __init__(self):
48
+ if type(self) == SenderComSpec:
49
+ raise NotImplementedError("SenderComSpec is an abstract class.")
50
+
51
+ super().__init__()
52
+
53
+ self.compositeNetworkRepresentations = [] # type: List[CompositeNetworkRepresentation]
54
+ self.dataElementRef = None # type: RefType
55
+ self.networkRepresentation = None # type: SwDataDefProps
56
+ self.handleOutOfRange = None # type: str
57
+ self.transmissionAcknowledge = None # type: TransmissionAcknowledgementRequest
58
+ self.usesEndToEndProtection = None # type: ARBoolean
59
+
60
+ def addCompositeNetworkRepresentation(self, representation: CompositeNetworkRepresentation):
61
+ self.compositeNetworkRepresentations.append(representation)
62
+
63
+ def getCompositeNetworkRepresentations(self) -> List[CompositeNetworkRepresentation]:
64
+ return self.compositeNetworkRepresentations
65
+
66
+ def getDataElementRef(self):
67
+ return self.dataElementRef
68
+
69
+ def setDataElementRef(self, value):
70
+ self.dataElementRef = value
71
+ return self
72
+
73
+ def getNetworkRepresentation(self):
74
+ return self.networkRepresentation
75
+
76
+ def setNetworkRepresentation(self, value):
77
+ self.networkRepresentation = value
78
+ return self
79
+
80
+ def getHandleOutOfRange(self):
81
+ return self.handleOutOfRange
82
+
83
+ def setHandleOutOfRange(self, value):
84
+ self.handleOutOfRange = value
85
+ return self
86
+
87
+ def getTransmissionAcknowledge(self):
88
+ return self.transmissionAcknowledge
89
+
90
+ def setTransmissionAcknowledge(self, value):
91
+ self.transmissionAcknowledge = value
92
+ return self
93
+
94
+ def getUsesEndToEndProtection(self):
95
+ return self.usesEndToEndProtection
96
+
97
+ def setUsesEndToEndProtection(self, value):
98
+ self.usesEndToEndProtection = value
99
+ return self
100
+
101
+ class QueuedSenderComSpec(SenderComSpec):
102
+ def __init__(self):
103
+ super().__init__()
104
+
105
+ class NonqueuedSenderComSpec(SenderComSpec):
106
+ def __init__(self):
107
+ super().__init__()
108
+
109
+ self.initValue = None # type: ValueSpecification
110
+
111
+ def getInitValue(self):
112
+ return self.initValue
113
+
114
+ def setInitValue(self, value):
115
+ self.initValue = value
116
+ return self
117
+
118
+ class ClientComSpec(RPortComSpec):
119
+ def __init__(self):
120
+ super().__init__()
121
+
122
+ self.operationRef = None # type: RefType
123
+
124
+ def getOperationRef(self):
125
+ return self.operationRef
126
+
127
+ def setOperationRef(self, value):
128
+ self.operationRef = value
129
+ return self
130
+
131
+ class ModeSwitchReceiverComSpec(RPortComSpec):
132
+ def __init__(self):
133
+ super().__init__()
134
+
135
+ self.modeGroupRef = None # type: RefType
136
+
137
+ def getModeGroupRef(self):
138
+ return self.modeGroupRef
139
+
140
+ def setModeGroupRef(self, value):
141
+ self.modeGroupRef = value
142
+ return self
143
+
144
+ class NvRequireComSpec(RPortComSpec):
145
+ def __init__(self):
146
+ super().__init__()
147
+
148
+ class ParameterRequireComSpec(RPortComSpec):
149
+ def __init__(self):
150
+ super().__init__()
151
+
152
+ self.initValue = None # type: ValueSpecification
153
+ self.parameterRef = None # type: RefType
154
+
155
+ def getInitValue(self):
156
+ return self.initValue
157
+
158
+ def setInitValue(self, value):
159
+ self.initValue = value
160
+ return self
161
+
162
+ def getParameterRef(self):
163
+ return self.parameterRef
164
+
165
+ def setParameterRef(self, value):
166
+ self.parameterRef = value
167
+ return self
168
+
169
+ class ReceiverComSpec(RPortComSpec):
170
+ __metaclass__ = ABCMeta
171
+
172
+ def __init__(self):
173
+ super().__init__()
174
+
175
+ self.compositeNetworkRepresentations = [] # type: List[CompositeNetworkRepresentation]
176
+ self.dataElementRef = None # type: RefType
177
+ self.networkRepresentation = None # type: SwDataDefProps
178
+ self.handleOutOfRange = None # type: ARLiteral
179
+ self.usesEndToEndProtection = None # type: ARBoolean
180
+
181
+ def getDataElementRef(self):
182
+ return self.dataElementRef
183
+
184
+ def setDataElementRef(self, value):
185
+ self.dataElementRef = value
186
+ return self
187
+
188
+ def getNetworkRepresentation(self):
189
+ return self.networkRepresentation
190
+
191
+ def setNetworkRepresentation(self, value):
192
+ self.networkRepresentation = value
193
+ return self
194
+
195
+ def getHandleOutOfRange(self):
196
+ return self.handleOutOfRange
197
+
198
+ def setHandleOutOfRange(self, value):
199
+ self.handleOutOfRange = value
200
+ return self
201
+
202
+ def getUsesEndToEndProtection(self):
203
+ return self.usesEndToEndProtection
204
+
205
+ def setUsesEndToEndProtection(self, value):
206
+ self.usesEndToEndProtection = value
207
+ return self
208
+
209
+ def addCompositeNetworkRepresentation(self, representation: CompositeNetworkRepresentation):
210
+ self.compositeNetworkRepresentations.append(representation)
211
+
212
+ def getCompositeNetworkRepresentations(self) -> List[CompositeNetworkRepresentation]:
213
+ return self.compositeNetworkRepresentations
214
+
215
+ class ModeSwitchSenderComSpec(RPortComSpec):
216
+ def __init__(self):
217
+ super().__init__()
218
+
219
+ self.enhancedModeApi = None # type: ARBoolean
220
+ self.modeGroupRef = None # type: RefType
221
+ self.modeSwitchedAck = None # type: ModeSwitchedAckRequest
222
+ self.queueLength = None # type: ARPositiveInteger
223
+
224
+ def getEnhancedModeApi(self):
225
+ return self.enhancedModeApi
226
+
227
+ def setEnhancedModeApi(self, value):
228
+ self.enhancedModeApi = value
229
+ return self
230
+
231
+ def getModeGroupRef(self):
232
+ return self.modeGroupRef
233
+
234
+ def setModeGroupRef(self, value):
235
+ self.modeGroupRef = value
236
+ return self
237
+
238
+ def getModeSwitchedAck(self):
239
+ return self.modeSwitchedAck
240
+
241
+ def setModeSwitchedAck(self, value):
242
+ self.modeSwitchedAck = value
243
+ return self
244
+
245
+ def getQueueLength(self):
246
+ return self.queueLength
247
+
248
+ def setQueueLength(self, value):
249
+ self.queueLength = value
250
+ return self
251
+
252
+
253
+
254
+ class ParameterProvideComSpec(RPortComSpec):
255
+ def __init__(self):
256
+ super().__init__()
257
+
258
+ class ServerComSpec(PPortComSpec):
259
+ def __init__(self):
260
+ super().__init__()
261
+
262
+ self.operationRef = None # type: RefType
263
+ self.queueLength = None # type: ARNumerical
264
+
265
+ def getOperationRef(self):
266
+ return self.operationRef
267
+
268
+ def setOperationRef(self, value):
269
+ self.operationRef = value
270
+ return self
271
+
272
+ def getQueueLength(self):
273
+ return self.queueLength
274
+
275
+ def setQueueLength(self, value):
276
+ self.queueLength = value
277
+ return self
278
+
279
+ class NonqueuedReceiverComSpec(ReceiverComSpec):
280
+ def __init__(self):
281
+ super().__init__()
282
+
283
+ self.aliveTimeout = None # type: ARNumerical
284
+ self.enableUpdated = None # type: ARBoolean
285
+ self.filter = None # type: DataFilter
286
+ self.handleDataStatus = None # type: ARBoolean
287
+ self.handleNeverReceived = None # type: ARBoolean
288
+ self.handleTimeoutType = ""
289
+ self.initValue = None # type: ValueSpecification
290
+ self.timeoutSubstitution = None # type: ValueSpecification
291
+
292
+ def getAliveTimeout(self):
293
+ return self.aliveTimeout
294
+
295
+ def setAliveTimeout(self, value):
296
+ self.aliveTimeout = value
297
+ return self
298
+
299
+ def getEnableUpdated(self):
300
+ return self.enableUpdated
301
+
302
+ def setEnableUpdated(self, value):
303
+ self.enableUpdated = value
304
+ return self
305
+
306
+ def getFilter(self):
307
+ return self.filter
308
+
309
+ def setFilter(self, value):
310
+ self.filter = value
311
+ return self
312
+
313
+ def getHandleDataStatus(self):
314
+ return self.handleDataStatus
315
+
316
+ def setHandleDataStatus(self, value):
317
+ self.handleDataStatus = value
318
+ return self
319
+
320
+ def getHandleNeverReceived(self):
321
+ return self.handleNeverReceived
322
+
323
+ def setHandleNeverReceived(self, value):
324
+ self.handleNeverReceived = value
325
+ return self
326
+
327
+ def getHandleTimeoutType(self):
328
+ return self.handleTimeoutType
329
+
330
+ def setHandleTimeoutType(self, value):
331
+ self.handleTimeoutType = value
332
+ return self
333
+
334
+ def getInitValue(self):
335
+ return self.initValue
336
+
337
+ def setInitValue(self, value):
338
+ self.initValue = value
339
+ return self
340
+
341
+ def getTimeoutSubstitution(self):
342
+ return self.timeoutSubstitution
343
+
344
+ def setTimeoutSubstitution(self, value):
345
+ self.timeoutSubstitution = value
346
+ return self
347
+
348
+
349
+ class QueuedReceiverComSpec(ReceiverComSpec):
350
+ def __init__(self):
351
+ super().__init__()
352
+
353
+ self.queueLength = None # type: ARPositiveInteger
354
+
355
+ def getQueueLength(self):
356
+ return self.queueLength
357
+
358
+ def setQueueLength(self, value):
359
+ self.queueLength = value
360
+ return self
@@ -0,0 +1,246 @@
1
+ from abc import ABCMeta
2
+ from typing import List
3
+
4
+
5
+
6
+ from .....ar_ref import RefType, TRefType
7
+ from .....general_structure import ARElement, Identifiable
8
+ from .....ar_object import ARBoolean, ARObject
9
+ from ...common_structure.implementation import ImplementationProps
10
+ from ..communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, RPortComSpec, ServerComSpec
11
+ from .instance_refs import InnerPortGroupInCompositionInstanceRef
12
+
13
+ class SymbolProps(ImplementationProps):
14
+ def __init__(self, parent: ARObject, short_name: str):
15
+ super().__init__(parent, short_name)
16
+
17
+ class PortPrototype(Identifiable):
18
+ def __init__(self, parent: ARObject, short_name: str):
19
+ super().__init__(parent, short_name)
20
+
21
+ self.clientServerAnnotations = []
22
+ self.delegatedPortAnnotation = None
23
+ self.ioHwAbstractionServerAnnotations = []
24
+ self.modePortAnnotations = []
25
+ self.nvDataPortAnnotations = []
26
+ self.parameterPortAnnotations = []
27
+ self.senderReceiverAnnotations = []
28
+ self.triggerPortAnnotations = []
29
+
30
+ def getClientServerAnnotations(self):
31
+ return self.clientServerAnnotations
32
+
33
+ def addClientServerAnnotation(self, value):
34
+ self.clientServerAnnotations.append(value)
35
+ return self
36
+
37
+ def getDelegatedPortAnnotation(self):
38
+ return self.delegatedPortAnnotation
39
+
40
+ def setDelegatedPortAnnotation(self, value):
41
+ self.delegatedPortAnnotation = value
42
+ return self
43
+
44
+ def getIoHwAbstractionServerAnnotations(self):
45
+ return self.ioHwAbstractionServerAnnotations
46
+
47
+ def addIoHwAbstractionServerAnnotation(self, value):
48
+ self.ioHwAbstractionServerAnnotations.append(value)
49
+ return self
50
+
51
+ def getModePortAnnotations(self):
52
+ return self.modePortAnnotations
53
+
54
+ def addModePortAnnotation(self, value):
55
+ self.modePortAnnotations.append(value)
56
+ return self
57
+
58
+ def getNvDataPortAnnotations(self):
59
+ return self.nvDataPortAnnotations
60
+
61
+ def addNvDataPortAnnotation(self, value):
62
+ self.nvDataPortAnnotations.append(value)
63
+ return self
64
+
65
+ def getParameterPortAnnotations(self):
66
+ return self.parameterPortAnnotations
67
+
68
+ def addParameterPortAnnotation(self, value):
69
+ self.parameterPortAnnotations.append(value)
70
+ return self
71
+
72
+ def getSenderReceiverAnnotations(self):
73
+ return self.senderReceiverAnnotations
74
+
75
+ def addSenderReceiverAnnotation(self, value):
76
+ self.senderReceiverAnnotations.append(value)
77
+ return self
78
+
79
+ def getTriggerPortAnnotations(self):
80
+ return self.triggerPortAnnotations
81
+
82
+ def addTriggerPortAnnotation(self, value):
83
+ self.triggerPortAnnotations.append(value)
84
+ return self
85
+
86
+ class AbstractProvidedPortPrototype(PortPrototype):
87
+ def __init__(self, parent: ARObject, short_name: str):
88
+ super().__init__(parent, short_name)
89
+
90
+ self.provided_com_specs = [] # type: List[PPortComSpec]
91
+
92
+ def _validateRPortComSpec(self, com_spec: PPortComSpec):
93
+ if isinstance(com_spec, NonqueuedSenderComSpec):
94
+ if com_spec.dataElementRef == None:
95
+ raise ValueError(
96
+ "operation of NonqueuedSenderComSpec is invalid")
97
+ if com_spec.dataElementRef.dest != "VARIABLE-DATA-PROTOTYPE":
98
+ raise ValueError(
99
+ "Invalid operation dest of NonqueuedSenderComSpec")
100
+ elif isinstance(com_spec, ServerComSpec):
101
+ pass
102
+ elif isinstance(com_spec, QueuedSenderComSpec):
103
+ pass
104
+ elif isinstance(com_spec, ModeSwitchSenderComSpec):
105
+ pass
106
+ else:
107
+ raise ValueError("Unsupported com spec")
108
+
109
+ def addProvidedComSpec(self, com_spec):
110
+ self._validateRPortComSpec(com_spec)
111
+ self.provided_com_specs.append(com_spec)
112
+
113
+ def getProvidedComSpecs(self) -> List[PPortComSpec]:
114
+ return self.provided_com_specs
115
+
116
+ def getNonqueuedSenderComSpecs(self) -> List[NonqueuedSenderComSpec]:
117
+ return filter(lambda c: isinstance(c, NonqueuedSenderComSpec), self.provided_com_specs)
118
+
119
+
120
+ class AbstractRequiredPortPrototype(PortPrototype):
121
+ def __init__(self, parent: ARObject, short_name: str):
122
+ super().__init__(parent, short_name)
123
+
124
+ self.required_com_specs = [] # type: List[RPortComSpec]
125
+
126
+ def _validateRPortComSpec(self, com_spec: RPortComSpec):
127
+ if (isinstance(com_spec, ClientComSpec)):
128
+ if com_spec.getOperationRef() is not None:
129
+ if com_spec.getOperationRef().getDest() != "CLIENT-SERVER-OPERATION":
130
+ raise ValueError("Invalid operation dest of ClientComSpec.")
131
+ elif isinstance(com_spec, NonqueuedReceiverComSpec):
132
+ if com_spec.getDataElementRef() is not None:
133
+ if com_spec.getDataElementRef().getDest() != "VARIABLE-DATA-PROTOTYPE":
134
+ raise ValueError("Invalid date element dest of NonqueuedReceiverComSpec.")
135
+ elif isinstance(com_spec, QueuedReceiverComSpec):
136
+ pass
137
+ elif isinstance(com_spec, ModeSwitchReceiverComSpec):
138
+ pass
139
+ elif isinstance(com_spec, ParameterRequireComSpec):
140
+ if com_spec.getParameterRef() is not None:
141
+ if com_spec.getParameterRef().getDest() != "PARAMETER-DATA-PROTOTYPE":
142
+ raise ValueError("Invalid parameter dest of ParameterRequireComSpec.")
143
+ else:
144
+ raise ValueError("Unsupported RPortComSpec <%s>" % type(com_spec))
145
+
146
+ def addRequiredComSpec(self, com_spec: RPortComSpec):
147
+ self._validateRPortComSpec(com_spec)
148
+ self.required_com_specs.append(com_spec)
149
+
150
+ def getRequiredComSpecs(self) -> List[RPortComSpec]:
151
+ return self.required_com_specs
152
+
153
+ def getClientComSpecs(self) -> List[ClientComSpec]:
154
+ return filter(lambda c: isinstance(c, ClientComSpec), self.required_com_specs)
155
+
156
+ def getNonqueuedReceiverComSpecs(self) -> List[NonqueuedReceiverComSpec]:
157
+ return filter(lambda c: isinstance(c, NonqueuedReceiverComSpec), self.required_com_specs)
158
+
159
+
160
+ class PPortPrototype(AbstractProvidedPortPrototype):
161
+ def __init__(self, parent: ARObject, short_name: str):
162
+ super().__init__(parent, short_name)
163
+
164
+ self.providedInterfaceTRef = None # type: TRefType
165
+
166
+ def getProvidedInterfaceTRef(self):
167
+ return self.providedInterfaceTRef
168
+
169
+ def setProvidedInterfaceTRef(self, value):
170
+ self.providedInterfaceTRef = value
171
+ return self
172
+
173
+ class RPortPrototype(AbstractRequiredPortPrototype):
174
+ def __init__(self, parent: ARObject, short_name: str):
175
+ super().__init__(parent, short_name)
176
+
177
+ self.mayBeUnconnected = None # type: ARBoolean
178
+ self.requiredInterfaceTRef = None # type: TRefType
179
+
180
+ def getMayBeUnconnected(self):
181
+ return self.mayBeUnconnected
182
+
183
+ def setMayBeUnconnected(self, value):
184
+ self.mayBeUnconnected = value
185
+ return self
186
+
187
+ def getRequiredInterfaceTRef(self):
188
+ return self.requiredInterfaceTRef
189
+
190
+ def setRequiredInterfaceTRef(self, value):
191
+ self.requiredInterfaceTRef = value
192
+ return self
193
+
194
+ class PortGroup(Identifiable):
195
+ def __init__(self, parent: ARObject, short_name: str):
196
+ super().__init__(parent, short_name)
197
+
198
+ self._inner_group_iref = [] # type: List[InnerPortGroupInCompositionInstanceRef]
199
+ self._outer_port_ref = [] # type: List[RefType]
200
+
201
+ def addInnerGroupIRef(self, iref: InnerPortGroupInCompositionInstanceRef):
202
+ self._inner_group_iref.append(iref)
203
+
204
+ def getInnerGroupIRefs(self) -> List[InnerPortGroupInCompositionInstanceRef]:
205
+ return self._inner_group_iref
206
+
207
+ def addOuterPortRef(self, ref: RefType):
208
+ self._outer_port_ref.append(ref)
209
+
210
+ def getOuterPortRefs(self) -> List[RefType]:
211
+ return self._outer_port_ref
212
+
213
+ class SwComponentType(ARElement, metaclass = ABCMeta):
214
+ def __init__(self, parent: ARObject, short_name: str):
215
+ super().__init__(parent, short_name)
216
+
217
+ def createPPortPrototype(self, short_name: str) -> PPortPrototype:
218
+ prototype = PPortPrototype(self, short_name)
219
+ if (short_name not in self.elements):
220
+ self.elements[short_name] = prototype
221
+ return self.elements[short_name]
222
+
223
+ def createRPortPrototype(self, short_name) -> RPortPrototype:
224
+ prototype = RPortPrototype(self, short_name)
225
+ if (short_name not in self.elements):
226
+ self.elements[short_name] = prototype
227
+ return self.elements[short_name]
228
+
229
+ def createPortGroup(self, short_name) -> PortGroup:
230
+ port_group = PortGroup(self, short_name)
231
+ if (short_name not in self.elements):
232
+ self.elements[short_name] = port_group
233
+ return self.elements[short_name]
234
+
235
+ def getPPortPrototypes(self) -> List[PPortPrototype]:
236
+ return list(sorted(filter(lambda c: isinstance(c, PPortPrototype), self.elements.values()), key= lambda o: o.short_name))
237
+
238
+ def getRPortPrototypes(self) -> List[RPortPrototype]:
239
+ return list(sorted(filter(lambda c: isinstance(c, RPortPrototype), self.elements.values()), key= lambda o: o.short_name))
240
+
241
+ def getPortPrototypes(self) -> List[PortPrototype]:
242
+ return list(sorted(filter(lambda c: isinstance(c, PortPrototype), self.elements.values()), key= lambda o: o.short_name))
243
+
244
+ def getPortGroups(self) -> List[PortGroup]:
245
+ return list(sorted(filter(lambda c: isinstance(c, PortGroup), self.elements.values()), key= lambda o: o.short_name))
246
+