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.
- armodel/cli/arxml_dump_cli.py +13 -13
- armodel/cli/memory_section_cli.py +76 -0
- armodel/cli/system_signal_cli.py +74 -0
- armodel/data_models/sw_connector.py +3 -3
- armodel/lib/__init__.py +2 -1
- armodel/lib/system_signal.py +37 -0
- armodel/models/__init__.py +9 -4
- armodel/models/annotation.py +27 -3
- armodel/models/ar_object.py +18 -6
- armodel/models/ar_package.py +271 -127
- armodel/models/ar_ref.py +11 -166
- armodel/models/bsw_module_template.py +37 -14
- armodel/models/common_structure.py +91 -174
- armodel/models/communication.py +2 -2
- armodel/models/data_prototype.py +41 -6
- armodel/models/datatype.py +16 -74
- armodel/models/end_to_end_protection.py +1 -1
- armodel/models/fibex/can_communication.py +119 -3
- armodel/models/fibex/fibex_4_can/__init__.py +0 -0
- armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
- armodel/models/fibex/fibex_4_multiplatform.py +81 -88
- armodel/models/fibex/fibex_core/__init__.py +0 -0
- armodel/models/fibex/fibex_core/core_communication.py +627 -0
- armodel/models/fibex/fibex_core/core_topology.py +180 -0
- armodel/models/fibex/lin_communication.py +24 -3
- armodel/models/general_structure.py +110 -11
- armodel/models/internal_behavior.py +1 -1
- armodel/models/m2/__init__.py +0 -0
- armodel/models/m2/autosar_templates/__init__.py +0 -0
- armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
- armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
- armodel/models/m2/autosar_templates/common_structure/implementation.py +21 -0
- armodel/models/m2/autosar_templates/common_structure/implementation_data_types.py +148 -0
- armodel/models/m2/autosar_templates/ecuc_description_template.py +269 -0
- armodel/models/m2/autosar_templates/generic_structure/__init__.py +0 -0
- armodel/models/m2/autosar_templates/generic_structure/abstract_structure.py +69 -0
- armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
- armodel/models/m2/autosar_templates/sw_component_template/communication.py +360 -0
- armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +246 -0
- armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +181 -0
- armodel/models/m2/autosar_templates/sw_component_template/composition/__init__.py +154 -0
- armodel/models/m2/autosar_templates/sw_component_template/composition/instance_refs.py +157 -0
- armodel/models/m2/autosar_templates/sw_component_template/data_type/__init__.py +0 -0
- armodel/models/m2/autosar_templates/sw_component_template/data_type/data_prototypes.py +104 -0
- armodel/models/m2/autosar_templates/sw_component_template/port_interface/__init__.py +243 -0
- armodel/models/m2/autosar_templates/sw_component_template/port_interface/instance_refs.py +39 -0
- armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +46 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/instance_refs_usage.py +169 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +38 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +27 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
- armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
- armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
- armodel/models/m2/autosar_templates/system_template/instance_refs.py +48 -0
- armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
- armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
- armodel/models/m2/msr/__init__.py +0 -0
- armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
- armodel/models/m2/msr/asam_hdo/units.py +105 -0
- armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
- armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
- armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
- armodel/models/m2/msr/documentation/__init__.py +0 -0
- armodel/models/m2/msr/documentation/block_elements.py +18 -0
- armodel/models/m2_msr.py +1 -0
- armodel/models/multilanguage_data.py +15 -0
- armodel/models/per_instance_memory.py +34 -6
- armodel/models/port_prototype.py +2 -253
- armodel/models/service_needs.py +3 -1
- armodel/models/sw_component.py +19 -358
- armodel/parser/__init__.py +2 -1
- armodel/parser/abstract_arxml_parser.py +10 -1
- armodel/parser/arxml_parser.py +912 -229
- armodel/parser/file_parser.py +43 -0
- armodel/tests/test_armodel/models/test_ar_package.py +6 -3
- armodel/tests/test_armodel/models/test_ar_ref.py +18 -16
- armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
- armodel/tests/test_armodel/models/test_common_structure.py +8 -7
- armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
- armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
- armodel/tests/test_armodel/models/test_datatype.py +9 -9
- armodel/tests/test_armodel/models/test_port_interface.py +2 -2
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +3 -3
- armodel/tests/test_armodel/parser/test_sw_components.py +3 -3
- armodel/writer/abstract_arxml_writer.py +5 -1
- armodel/writer/arxml_writer.py +870 -224
- {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/METADATA +28 -1
- armodel-1.6.1.dist-info/RECORD +140 -0
- {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/entry_points.txt +3 -1
- armodel-1.5.0.dist-info/RECORD +0 -91
- {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/LICENSE +0 -0
- {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/WHEEL +0 -0
- {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
|
+
|