armodel 1.4.0__py3-none-any.whl → 1.5.0__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 (72) hide show
  1. armodel/__init__.py +2 -1
  2. armodel/cli/arxml_dump_cli.py +9 -7
  3. armodel/cli/arxml_format_cli.py +72 -0
  4. armodel/cli/connector_update_cli.py +11 -4
  5. armodel/data_models/__init__.py +0 -0
  6. armodel/data_models/sw_connector.py +22 -0
  7. armodel/lib/data_analyzer.py +1 -1
  8. armodel/models/__init__.py +3 -2
  9. armodel/models/annotation.py +20 -0
  10. armodel/models/ar_object.py +163 -18
  11. armodel/models/ar_package.py +228 -24
  12. armodel/models/ar_ref.py +85 -6
  13. armodel/models/bsw_module_template.py +113 -27
  14. armodel/models/calibration.py +107 -4
  15. armodel/models/common_structure.py +142 -52
  16. armodel/models/communication.py +10 -1
  17. armodel/models/data_def_properties.py +16 -0
  18. armodel/models/data_dictionary.py +46 -9
  19. armodel/models/data_prototype.py +24 -5
  20. armodel/models/datatype.py +69 -20
  21. armodel/models/end_to_end_protection.py +67 -0
  22. armodel/models/fibex/__init__.py +0 -0
  23. armodel/models/fibex/can_communication.py +6 -0
  24. armodel/models/fibex/fibex_4_multiplatform.py +145 -0
  25. armodel/models/fibex/fibex_core.py +341 -0
  26. armodel/models/fibex/lin_communication.py +17 -0
  27. armodel/models/fibex/lin_topology.py +7 -0
  28. armodel/models/general_structure.py +44 -18
  29. armodel/models/global_constraints.py +4 -4
  30. armodel/models/implementation.py +79 -32
  31. armodel/models/internal_behavior.py +63 -0
  32. armodel/models/m2_msr.py +6 -4
  33. armodel/models/mode_declaration.py +8 -0
  34. armodel/models/multilanguage_data.py +42 -0
  35. armodel/models/per_instance_memory.py +14 -0
  36. armodel/models/port_interface.py +27 -4
  37. armodel/models/port_prototype.py +57 -19
  38. armodel/models/record_layout.py +118 -0
  39. armodel/models/rpt_scenario.py +20 -0
  40. armodel/models/service_mapping.py +11 -0
  41. armodel/models/service_needs.py +48 -0
  42. armodel/models/sw_component.py +293 -45
  43. armodel/models/system_template/__init__.py +0 -0
  44. armodel/models/system_template/network_management.py +7 -0
  45. armodel/models/system_template/transport_protocols.py +7 -0
  46. armodel/models/timing.py +91 -0
  47. armodel/parser/abstract_arxml_parser.py +248 -0
  48. armodel/parser/arxml_parser.py +1571 -844
  49. armodel/parser/connector_xlsx_parser.py +190 -0
  50. armodel/parser/excel_parser.py +18 -0
  51. armodel/tests/test_armodel/models/test_ar_object.py +152 -0
  52. armodel/tests/test_armodel/models/test_ar_package.py +1 -1
  53. armodel/tests/test_armodel/models/test_common_structure.py +2 -2
  54. armodel/tests/test_armodel/models/test_data_dictionary.py +7 -7
  55. armodel/tests/test_armodel/models/test_data_prototype.py +3 -3
  56. armodel/tests/test_armodel/models/test_datatype.py +11 -11
  57. armodel/tests/test_armodel/models/test_general_structure.py +1 -1
  58. armodel/tests/test_armodel/models/test_implementation.py +26 -0
  59. armodel/tests/test_armodel/models/test_m2_msr.py +4 -4
  60. armodel/tests/test_armodel/models/test_port_interface.py +5 -5
  61. armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
  62. armodel/tests/test_armodel/parser/test_parse_bswmd.py +74 -42
  63. armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
  64. armodel/writer/abstract_arxml_writer.py +123 -0
  65. armodel/writer/arxml_writer.py +1701 -358
  66. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/METADATA +114 -3
  67. armodel-1.5.0.dist-info/RECORD +91 -0
  68. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/WHEEL +1 -1
  69. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/entry_points.txt +2 -0
  70. armodel-1.4.0.dist-info/RECORD +0 -60
  71. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/LICENSE +0 -0
  72. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/top_level.txt +0 -0
@@ -1,30 +1,46 @@
1
1
  from typing import List, Dict
2
2
  from abc import ABCMeta
3
+
4
+ from .rpt_scenario import ModeAccessPointIdent
5
+
6
+ from .internal_behavior import IncludedDataTypeSet, InternalBehavior
7
+ from .service_mapping import RoleBasedPortAssignment
8
+ from .per_instance_memory import PerInstanceMemory
9
+ from .service_needs import NvBlockNeeds, RoleBasedDataAssignment, ServiceNeeds
10
+ from .ar_object import ARBoolean, ARLiteral
3
11
  from .general_structure import ARElement, Identifiable, ARObject
4
- from .ar_ref import AutosarVariableRef, RefType, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
5
- from .ar_ref import PortInCompositionTypeInstanceRef, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
12
+ from .ar_ref import AutosarParameterRef, AutosarVariableRef, InnerPortGroupInCompositionInstanceRef, POperationInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, ROperationInAtomicSwcInstanceRef, TRefType
13
+ from .ar_ref import RefType, PortInCompositionTypeInstanceRef, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
6
14
  from .ar_ref import RVariableInAtomicSwcInstanceRef, RModeInAtomicSwcInstanceRef
7
15
  from .port_prototype import RPortPrototype, PPortPrototype, PortPrototype
8
- from .data_prototype import VariableDataPrototype
9
- from .common_structure import ExecutableEntity, InternalBehavior
16
+ from .data_prototype import ParameterDataPrototype, VariableDataPrototype
17
+ from .common_structure import ExecutableEntity, ValueSpecification
10
18
 
11
19
  class VariableAccess(Identifiable):
12
20
  def __init__(self, parent: ARObject, short_name):
13
21
  super().__init__(parent, short_name)
14
22
  self.accessed_variable_ref = AutosarVariableRef()
15
23
  self.accessed_variable_ref.parent = self
16
- self.parent = parent
24
+ self._parent = parent
17
25
  self.local_variable_ref = None # type: RefType
18
26
 
19
- class ExecutableEntity(Identifiable):
27
+ class AbstractAccessPoint(Identifiable):
28
+ __metaclass__ = ABCMeta
29
+
20
30
  def __init__(self, parent: ARObject, short_name: str):
31
+ if type(self) == AbstractAccessPoint:
32
+ raise NotImplementedError("ARObject is an abstract class.")
33
+
21
34
  super().__init__(parent, short_name)
22
35
 
23
- class AbstractAccessPoint(Identifiable):
24
- __metaclass__ = ABCMeta
36
+ self.return_value_provision = None
25
37
 
38
+ class ParameterAccess(AbstractAccessPoint):
26
39
  def __init__(self, parent: ARObject, short_name: str):
27
- super().__init__(parent, short_name)
40
+ super().__init__(parent, short_name)
41
+
42
+ self.accessed_parameter = None # type: AutosarParameterRef
43
+ self.sw_data_def_props = None #
28
44
 
29
45
  class ServerCallPoint(AbstractAccessPoint):
30
46
  __metaclass__ = ABCMeta
@@ -32,13 +48,28 @@ class ServerCallPoint(AbstractAccessPoint):
32
48
  def __init__(self, parent: ARObject, short_name: str):
33
49
  super().__init__(parent, short_name)
34
50
  self.operation_iref = None # type: ROperationInAtomicSwcInstanceRef
35
- self.timeout = 0
51
+ self.timeout = None # type: float
36
52
 
37
53
  class SynchronousServerCallPoint(ServerCallPoint):
38
54
  def __init__(self, parent: ARObject, short_name: str):
39
55
  super().__init__(parent, short_name)
40
56
 
41
- self.called_from_within_exclusive_area_ref = None # Type: RefType
57
+ self.called_from_within_exclusive_area_ref = None # type: RefType
58
+
59
+ class ModeAccessPoint(ARObject):
60
+ def __init__(self):
61
+ super().__init__()
62
+
63
+ self.ident = None # type: ModeAccessPointIdent
64
+ self.mode_group_iref = None # type: RModeGroupInAtomicSWCInstanceRef
65
+
66
+ @property
67
+ def modeGroupIRef(self) -> RModeGroupInAtomicSWCInstanceRef:
68
+ return self.mode_group_iref
69
+
70
+ @modeGroupIRef.setter
71
+ def modeGroupIRef(self, value: RModeGroupInAtomicSWCInstanceRef):
72
+ self.mode_group_iref = value
42
73
 
43
74
  class AsynchronousServerCallPoint(ServerCallPoint):
44
75
  def __init__(self, parent: ARObject, short_name: str):
@@ -48,7 +79,15 @@ class AsynchronousServerCallResultPoint(ServerCallPoint):
48
79
  def __init__(self, parent: ARObject, short_name: str):
49
80
  super().__init__(parent, short_name)
50
81
 
51
- self.asynchronous_server_call_point_ref = None # Type:RefType
82
+ self.asynchronous_server_call_point_ref = None # type: RefType
83
+
84
+ @property
85
+ def asynchronousServerCallPointRef(self) -> RefType:
86
+ return self.asynchronous_server_call_point_ref
87
+
88
+ @asynchronousServerCallPointRef.setter
89
+ def asynchronousServerCallPointRef(self, value: RefType):
90
+ self.asynchronous_server_call_point_ref = value
52
91
 
53
92
  class InternalTriggeringPoint(AbstractAccessPoint):
54
93
  def __init__(self, parent: ARObject, short_name: str):
@@ -59,23 +98,31 @@ class InternalTriggeringPoint(AbstractAccessPoint):
59
98
  class RunnableEntity(ExecutableEntity):
60
99
  def __init__(self, parent: ARObject, short_name: str):
61
100
  super().__init__(parent, short_name)
62
- self.can_be_invoked_concurrently = False # Type: bool
63
- self.data_read_accesses = {} # Type: Dict[VariableAccess]
64
- self.data_received_point_by_arguments = {} # Type: Dict[VariableAccess]
65
- self.data_received_point_by_values = {} # Type: Dict[VariableAccess]
66
- self.data_send_points = {} # Type: Dict[VariableAccess]
67
- self.data_write_accesses = {} # Type: Dict[VariableAccess]
68
- self.written_local_variables = {} # Type: Dict[VariableAccess]
69
- self.read_local_variables = {} # Type: Dict[VariableAccess]
70
- self.external_triggering_points = {} # Type: Dict[InternalTriggeringPoint]
101
+ self.can_be_invoked_concurrently = None # type: ARBoolean
102
+ self.data_read_accesses = {} # type: Dict[str, VariableAccess]
103
+ self.data_received_point_by_arguments = {} # type: Dict[str, VariableAccess]
104
+ self.data_received_point_by_values = {} # type: Dict[str, VariableAccess]
105
+ self.data_send_points = {} # type: Dict[str, VariableAccess]
106
+ self.data_write_accesses = {} # type: Dict[str, VariableAccess]
107
+ self.written_local_variables = {} # type: Dict[str, VariableAccess]
108
+ self.read_local_variables = {} # type: Dict[str, VariableAccess]
109
+ self.external_triggering_points = {} # type: Dict[InternalTriggeringPoint]
71
110
  self.internal_triggering_points = {}
72
- self.mode_access_points = {}
111
+ self.mode_access_points = [] # type: List[ModeAccessPoint]
73
112
  self.mode_switch_points = {}
74
- self.parameter_accesses = {}
75
- self.server_call_points = {} # Type: Dict[ServerCallPoint]
76
- self.wait_points = {} # Type: Dict[WaitPoint]
113
+ self.parameter_accesses = {} # type: Dict[str, ParameterAccess]
114
+ self.server_call_points = {} # type: Dict[str, ServerCallPoint]
115
+ self.wait_points = {} # type: Dict[str, WaitPoint]
77
116
  self.symbol = ""
78
117
 
118
+ @property
119
+ def canBeInvokedConcurrently(self) -> ARBoolean:
120
+ return self.can_be_invoked_concurrently
121
+
122
+ @canBeInvokedConcurrently.setter
123
+ def canBeInvokedConcurrently(self, value: ARBoolean):
124
+ self.can_be_invoked_concurrently = value
125
+
79
126
  def _createVariableAccess(self, short_name, variable_accesses: Dict[str, VariableAccess]):
80
127
  if (short_name not in variable_accesses):
81
128
  variable_access = VariableAccess(self, short_name)
@@ -87,6 +134,12 @@ class RunnableEntity(ExecutableEntity):
87
134
 
88
135
  def getDataReadAccesses(self) -> List[VariableAccess]:
89
136
  return sorted(self.data_read_accesses.values(), key=lambda v: v.short_name)
137
+
138
+ def createDataWriteAccess(self, short_name: str) -> VariableAccess:
139
+ return self._createVariableAccess(short_name, self.data_write_accesses)
140
+
141
+ def getDataWriteAccesses(self) -> List[VariableAccess]:
142
+ return sorted(self.data_write_accesses.values(), key=lambda v: v.short_name)
90
143
 
91
144
  def createDataReceivePointByArgument(self, short_name: str) -> VariableAccess:
92
145
  return self._createVariableAccess(short_name, self.data_received_point_by_arguments)
@@ -118,6 +171,15 @@ class RunnableEntity(ExecutableEntity):
118
171
  def getWrittenLocalVariables(self) -> List[VariableAccess]:
119
172
  return sorted(self.written_local_variables.values(), key=lambda v: v.short_name)
120
173
 
174
+ def createParameterAccess(self, short_name: str) -> ParameterAccess:
175
+ if (short_name not in self.server_call_points):
176
+ parameter_access = ParameterAccess(self, short_name)
177
+ self.parameter_accesses[short_name] = parameter_access
178
+ return self.parameter_accesses[short_name]
179
+
180
+ def getParameterAccesses(self) -> List[ParameterAccess]:
181
+ return sorted(self.parameter_accesses.values(), key= lambda o: o.short_name)
182
+
121
183
  def createSynchronousServerCallPoint(self, short_name: str) -> SynchronousServerCallPoint:
122
184
  if (short_name not in self.server_call_points):
123
185
  server_call_point = SynchronousServerCallPoint(self, short_name)
@@ -147,6 +209,12 @@ class RunnableEntity(ExecutableEntity):
147
209
 
148
210
  def getInternalTriggeringPoints(self) -> List[InternalTriggeringPoint]:
149
211
  return filter(lambda o: isinstance(o, InternalTriggeringPoint), self.elements)
212
+
213
+ def addModeAccessPoint(self, point: ModeAccessPoint):
214
+ self.mode_access_points.append(point)
215
+
216
+ def getModeAccessPoints(self) -> List[ModeAccessPoint]:
217
+ return self.mode_access_points
150
218
 
151
219
  class AbstractEvent(Identifiable):
152
220
  def __init__(self, parent: ARObject, short_name: str):
@@ -155,7 +223,15 @@ class AbstractEvent(Identifiable):
155
223
  class RTEEvent(AbstractEvent):
156
224
  def __init__(self, parent: ARObject, short_name: str):
157
225
  super().__init__(parent, short_name)
158
- self.start_on_event_ref = None # type: RefType
226
+
227
+ self.start_on_event_ref = None # type: RefType
228
+ self.disabled_mode_irefs = [] # type: List[RModeInAtomicSwcInstanceRef]
229
+
230
+ def addDisabledModeIRef(self, iref: RModeInAtomicSwcInstanceRef):
231
+ self.disabled_mode_irefs.append(iref)
232
+
233
+ def getDisabledModeIRefs(self) -> List[RModeInAtomicSwcInstanceRef]:
234
+ return self.disabled_mode_irefs
159
235
 
160
236
  class AsynchronousServerCallReturnsEvent(RTEEvent):
161
237
  def __init__(self, parent: ARObject, short_name: str):
@@ -173,22 +249,36 @@ class DataReceivedEvent(RTEEvent):
173
249
  def __init__(self, parent: ARObject, short_name: str):
174
250
  super().__init__(parent, short_name)
175
251
 
176
- self.data_iref = None # type: RVariableInAtomicSwcInstanceRef
252
+ self.data_iref = None # type: RVariableInAtomicSwcInstanceRef
253
+
254
+ @property
255
+ def dataIRef(self) -> RVariableInAtomicSwcInstanceRef:
256
+ return self.data_iref
257
+
258
+ @dataIRef.setter
259
+ def dataIRef(self, value: RVariableInAtomicSwcInstanceRef):
260
+ self.data_iref = value
177
261
 
178
262
  class SwcModeSwitchEvent(RTEEvent):
179
263
  def __init__(self, parent: ARObject, short_name: str):
180
264
  super().__init__(parent, short_name)
181
265
 
182
- self._activation = ""
183
- self.mode_irefs = [] # type: List[RModeInAtomicSwcInstanceRef]
266
+ self._activation = None # type: ARLiteral
267
+ self.mode_irefs = [] # type: List[RModeInAtomicSwcInstanceRef]
268
+
269
+ def addModeIRef(self, iref: RModeInAtomicSwcInstanceRef):
270
+ self.mode_irefs.append(iref)
271
+
272
+ def getModeIRefs(self) -> List[RModeInAtomicSwcInstanceRef]:
273
+ return self.mode_irefs
184
274
 
185
275
  @property
186
- def activation(self) -> str:
276
+ def activation(self) -> ARLiteral:
187
277
  return self._activation
188
278
 
189
279
  @activation.setter
190
- def activation(self, value: str):
191
- if value not in ("ON-ENTRY", "ON-EXIT", "ON-TRANSITION"):
280
+ def activation(self, value: ARLiteral):
281
+ if value.getValue() not in ("ON-ENTRY", "ON-EXIT", "ON-TRANSITION"):
192
282
  raise ValueError("Invalid activation <%s> of SwcModeSwitchEvent <%s>" % (value, self.short_name))
193
283
  self._activation = value
194
284
 
@@ -206,6 +296,14 @@ class OperationInvokedEvent(RTEEvent):
206
296
  super().__init__(parent, short_name)
207
297
  self.operation_iref = None # type: POperationInAtomicSwcInstanceRef
208
298
 
299
+ @property
300
+ def operationIRef(self) -> POperationInAtomicSwcInstanceRef:
301
+ return self.operation_iref
302
+
303
+ @operationIRef.setter
304
+ def operationIRef(self, value: POperationInAtomicSwcInstanceRef):
305
+ self.operation_iref = value
306
+
209
307
  class InitEvent(RTEEvent):
210
308
  def __init__(self, parent: ARObject, short_name: str):
211
309
  super().__init__(parent, short_name)
@@ -229,10 +327,100 @@ class InternalTriggerOccurredEvent(RTEEvent):
229
327
 
230
328
  self.event_source_ref = None # type: RefType
231
329
 
330
+ class PortDefinedArgumentValue(ARObject):
331
+ def __init__(self):
332
+ super().__init__()
333
+
334
+ self.value = None # type: ValueSpecification
335
+ self.value_type = None # type: TRefType
336
+
337
+ class PortAPIOption(ARObject):
338
+ def __init__(self):
339
+ super().__init__()
340
+
341
+ self.enable_take_address = None # type: ARBoolean
342
+ self.indirect_api = None # type: ARBoolean
343
+ self.port_ref = None # type: RefType
344
+ self._port_arg_values = [] # type: List[PortDefinedArgumentValue]
345
+
346
+ def addPortArgValue(self, value:PortDefinedArgumentValue):
347
+ self._port_arg_values.append(value)
348
+
349
+ def getPortArgValues(self) -> List[PortDefinedArgumentValue]:
350
+ return self._port_arg_values
351
+
352
+ class ServiceDependency(Identifiable):
353
+ def __init__(self, parent: ARObject, short_name: str):
354
+ super().__init__(parent, short_name)
355
+
356
+ class SwcServiceDependency(ServiceDependency):
357
+ def __init__(self, parent: ARObject, short_name: str):
358
+ super().__init__(parent, short_name)
359
+
360
+ self._assigned_data = []
361
+ self._assigned_ports = []
362
+
363
+ def AddAssignedData(self, data: RoleBasedDataAssignment):
364
+ self._assigned_data.append(data)
365
+
366
+ def getAssignedData(self) -> List[RoleBasedDataAssignment]:
367
+ return self._assigned_data
368
+
369
+ def AddAssignedPort(self, data: RoleBasedPortAssignment):
370
+ self._assigned_ports.append(data)
371
+
372
+ def getAssignedPorts(self) -> List[RoleBasedPortAssignment]:
373
+ return self._assigned_ports
374
+
375
+ def createNvBlockNeeds(self, short_name: str) -> NvBlockNeeds:
376
+ if (short_name not in self.elements):
377
+ event = NvBlockNeeds(self, short_name)
378
+ self.elements[short_name] = event
379
+ return self.elements[short_name]
380
+
381
+ def getNvBlockNeeds(self) -> List[NvBlockNeeds]:
382
+ return sorted(filter(lambda c: isinstance(c, NvBlockNeeds), self.elements.values()), key=lambda e: e.short_name)
383
+
384
+ def getServiceNeeds(self) -> List[ServiceNeeds]:
385
+ return sorted(filter(lambda c: isinstance(c, ServiceNeeds), self.elements.values()), key=lambda e: e.short_name)
386
+
232
387
  class SwcInternalBehavior(InternalBehavior):
233
388
  def __init__(self, parent: ARObject, short_name: str):
234
389
  super().__init__(parent, short_name)
235
390
 
391
+ self.handle_termination_and_restart = None # type: str
392
+ self.supports_multiple_instantiation = None # type: ARBoolean
393
+ self.explicit_inter_runnable_variables = [] # type: List[VariableDataPrototype]
394
+ self.implicit_inter_runnable_variables = [] # type: List[VariableDataPrototype]
395
+ self.per_instance_memories = [] # type: List[PerInstanceMemory]
396
+ self.per_instance_parameters = [] # type: List[ParameterDataPrototype]
397
+ self.port_api_options = [] # type: List[PortAPIOption]
398
+ self.included_data_type_sets = [] # type: List[IncludedDataTypeSet]
399
+
400
+ def getExplicitInterRunnableVariables(self) -> List[VariableDataPrototype]:
401
+ return self.explicit_inter_runnable_variables
402
+
403
+ def getImplicitInterRunnableVariables(self) -> List[VariableDataPrototype]:
404
+ return self.implicit_inter_runnable_variables
405
+
406
+ def getPerInstanceMemories(self) -> List[PerInstanceMemory]:
407
+ return self.per_instance_memories
408
+
409
+ def getPerInstanceParameters(self) -> List[ParameterDataPrototype]:
410
+ return self.per_instance_parameters
411
+
412
+ def addPortAPIOption(self, option: PortAPIOption):
413
+ self.port_api_options.append(option)
414
+
415
+ def getPortAPIOptions(self) -> List[PortAPIOption]:
416
+ return self.port_api_options
417
+
418
+ def addIncludedDataTypeSet(self, set: IncludedDataTypeSet):
419
+ self.included_data_type_sets.append(set)
420
+
421
+ def getIncludedDataTypeSets(self) -> List[IncludedDataTypeSet]:
422
+ return self.included_data_type_sets
423
+
236
424
  def createOperationInvokedEvent(self, short_name: str) -> OperationInvokedEvent:
237
425
  if (short_name not in self.elements):
238
426
  event = OperationInvokedEvent(self, short_name)
@@ -268,8 +456,14 @@ class SwcInternalBehavior(InternalBehavior):
268
456
  event = InternalTriggerOccurredEvent(self, short_name)
269
457
  self.elements[short_name] = event
270
458
  return self.elements[short_name]
459
+
460
+ def createSwcServiceDependency(self, short_name: str) -> SwcServiceDependency:
461
+ if (short_name not in self.elements):
462
+ event = SwcServiceDependency(self, short_name)
463
+ self.elements[short_name] = event
464
+ return self.elements[short_name]
271
465
 
272
- def getEvents(self) -> List[RTEEvent]:
466
+ def getRteEvents(self) -> List[RTEEvent]:
273
467
  return sorted(filter(lambda c: isinstance(c, RTEEvent), self.elements.values()), key=lambda e: e.short_name)
274
468
 
275
469
  def getOperationInvokedEvents(self) -> List[OperationInvokedEvent]:
@@ -290,6 +484,9 @@ class SwcInternalBehavior(InternalBehavior):
290
484
  def getInternalTriggerOccurredEvents(self) -> List[InternalTriggerOccurredEvent]:
291
485
  return sorted(filter(lambda c: isinstance(c, InternalTriggerOccurredEvent), self.elements.values()), key= lambda e: e.short_name)
292
486
 
487
+ def getSwcServiceDependencies(self) -> List[SwcServiceDependency]:
488
+ return sorted(filter(lambda c: isinstance(c, SwcServiceDependency), self.elements.values()), key= lambda e: e.short_name)
489
+
293
490
  def getEvent(self, short_name: str) -> RTEEvent:
294
491
  if (not isinstance(self.elements[short_name], RTEEvent)):
295
492
  raise ValueError("Invalid Event Type <%s> of <%s>" % type(self.elements[short_name]), short_name)
@@ -299,6 +496,28 @@ class SwcInternalBehavior(InternalBehavior):
299
496
  if (short_name not in self.elements):
300
497
  prototype = VariableDataPrototype(self, short_name)
301
498
  self.elements[short_name] = prototype
499
+ self.explicit_inter_runnable_variables.append(prototype)
500
+ return self.elements[short_name]
501
+
502
+ def createImplicitInterRunnableVariable(self, short_name: str) -> VariableDataPrototype:
503
+ if (short_name not in self.elements):
504
+ prototype = VariableDataPrototype(self, short_name)
505
+ self.elements[short_name] = prototype
506
+ self.implicit_inter_runnable_variables.append(prototype)
507
+ return self.elements[short_name]
508
+
509
+ def createPerInstanceMemory(self, short_name: str) -> PerInstanceMemory:
510
+ if (short_name not in self.elements):
511
+ memory = PerInstanceMemory(self, short_name)
512
+ self.elements[short_name] = memory
513
+ self.per_instance_memories.append(memory)
514
+ return self.elements[short_name]
515
+
516
+ def createPerInstanceParameter(self, short_name: str) -> ParameterDataPrototype:
517
+ if (short_name not in self.elements):
518
+ prototype = ParameterDataPrototype(self, short_name)
519
+ self.elements[short_name] = prototype
520
+ self.per_instance_parameters.append(prototype)
302
521
  return self.elements[short_name]
303
522
 
304
523
  def getVariableDataPrototypes(self) -> List[VariableDataPrototype]:
@@ -315,6 +534,25 @@ class SwcInternalBehavior(InternalBehavior):
315
534
 
316
535
  def getRunnableEntity(self, short_name) -> RunnableEntity:
317
536
  return self.elements[short_name]
537
+
538
+ class PortGroup(Identifiable):
539
+ def __init__(self, parent: ARObject, short_name: str):
540
+ super().__init__(parent, short_name)
541
+
542
+ self._inner_group_iref = [] # type: List[InnerPortGroupInCompositionInstanceRef]
543
+ self._outer_port_ref = [] # type: List[RefType]
544
+
545
+ def addInnerGroupIRef(self, iref: InnerPortGroupInCompositionInstanceRef):
546
+ self._inner_group_iref.append(iref)
547
+
548
+ def getInnerGroupIRefs(self) -> List[InnerPortGroupInCompositionInstanceRef]:
549
+ return self._inner_group_iref
550
+
551
+ def addOuterPortRef(self, ref: RefType):
552
+ self._outer_port_ref.append(ref)
553
+
554
+ def getOuterPortRefs(self) -> List[RefType]:
555
+ return self._outer_port_ref
318
556
 
319
557
  class SwComponentType(ARElement):
320
558
  __metaclass__ = ABCMeta
@@ -322,33 +560,35 @@ class SwComponentType(ARElement):
322
560
  def __init__(self, parent: ARObject, short_name: str):
323
561
  super().__init__(parent, short_name)
324
562
 
325
- self.ports = [] # List[PortPrototype]
326
-
327
563
  def createPPortPrototype(self, short_name: str) -> PPortPrototype:
328
564
  prototype = PPortPrototype(self, short_name)
329
- self.ports.append(prototype)
330
565
  if (short_name not in self.elements):
331
566
  self.elements[short_name] = prototype
332
567
  return self.elements[short_name]
333
568
 
334
569
  def createRPortPrototype(self, short_name) -> RPortPrototype:
335
570
  prototype = RPortPrototype(self, short_name)
336
- self.ports.append(prototype)
337
571
  if (short_name not in self.elements):
338
572
  self.elements[short_name] = prototype
339
573
  return self.elements[short_name]
574
+
575
+ def createPortGroup(self, short_name) -> PortGroup:
576
+ port_group = PortGroup(self, short_name)
577
+ if (short_name not in self.elements):
578
+ self.elements[short_name] = port_group
579
+ return self.elements[short_name]
340
580
 
341
581
  def getPPortPrototypes(self) -> List[PPortPrototype]:
342
- #return list(sorted(filter(lambda c: isinstance(c, PPortPrototype), self.elements.values()), key= lambda o: o.short_name))
343
- return list(sorted(filter(lambda c: isinstance(c, PPortPrototype), self.ports), key= lambda o: o.short_name))
582
+ return list(sorted(filter(lambda c: isinstance(c, PPortPrototype), self.elements.values()), key= lambda o: o.short_name))
344
583
 
345
584
  def getRPortPrototypes(self) -> List[RPortPrototype]:
346
- #return list(sorted(filter(lambda c: isinstance(c, RPortPrototype), self.elements.values()), key= lambda o: o.short_name))
347
- return list(sorted(filter(lambda c: isinstance(c, RPortPrototype), self.ports), key= lambda o: o.short_name))
585
+ return list(sorted(filter(lambda c: isinstance(c, RPortPrototype), self.elements.values()), key= lambda o: o.short_name))
348
586
 
349
- def getPortPrototype(self) -> List[PortPrototype]:
350
- #return list(sorted(filter(lambda c: isinstance(c, PortPrototype), self.elements.values()), key= lambda o: o.short_name))
351
- return list(sorted(self.ports, key= lambda o: o.short_name))
587
+ def getPortPrototypes(self) -> List[PortPrototype]:
588
+ return list(sorted(filter(lambda c: isinstance(c, PortPrototype), self.elements.values()), key= lambda o: o.short_name))
589
+
590
+ def getPortGroups(self) -> List[PortGroup]:
591
+ return list(sorted(filter(lambda c: isinstance(c, PortGroup), self.elements.values()), key= lambda o: o.short_name))
352
592
 
353
593
  class AtomicSwComponentType(SwComponentType):
354
594
  __metaclass__ = ABCMeta
@@ -415,7 +655,7 @@ class DelegationSwConnector(SwConnector):
415
655
  def __init__(self, parent: ARObject, short_name: str):
416
656
  super().__init__(parent, short_name)
417
657
 
418
- self.inner_port_iref = None # type: PortInCompositionInstanceRef
658
+ self.inner_port_iref = None # type: PortInCompositionTypeInstanceRef
419
659
  self.outer_port_ref = None # type: RefType
420
660
 
421
661
  class PassThroughSwConnector(SwConnector):
@@ -439,6 +679,14 @@ class CompositionSwComponentType(SwComponentType):
439
679
  self._data_type_mapping_refs = [] # type: List[RefType]
440
680
  self.instantiation_rte_event_props = [] # type: List[InstantiationRTEEventProps]
441
681
 
682
+ def removeAllAssemblySwConnector(self):
683
+ for sw_connector in self.getAssemblySwConnectors():
684
+ self.elements.pop(sw_connector.short_name)
685
+
686
+ def removeAllDelegationSwConnector(self):
687
+ for sw_connector in self.getDelegationSwConnectors():
688
+ self.elements.pop(sw_connector.short_name)
689
+
442
690
  def createAssemblySwConnector(self, short_name: str) -> AssemblySwConnector:
443
691
  if (short_name not in self.elements):
444
692
  connector = AssemblySwConnector(self, short_name)
File without changes
@@ -0,0 +1,7 @@
1
+
2
+ from ..ar_object import ARObject
3
+ from ..fibex.fibex_core import FibexElement
4
+
5
+ class NmConfig(FibexElement):
6
+ def __init__(self, parent: ARObject, short_name: str):
7
+ super().__init__(parent, short_name)
@@ -0,0 +1,7 @@
1
+
2
+ from ..ar_object import ARObject
3
+ from ..fibex.fibex_core import FibexElement
4
+
5
+ class CanTpConfig(FibexElement):
6
+ def __init__(self, parent: ARObject, short_name: str):
7
+ super().__init__(parent, short_name)
@@ -0,0 +1,91 @@
1
+
2
+ from abc import ABCMeta
3
+ from typing import List
4
+
5
+ from armodel.models.ar_ref import RefType
6
+
7
+ from ..models.general_structure import Identifiable
8
+ from ..models.ar_object import ARObject
9
+
10
+ class EOCExecutableEntityRefAbstract(Identifiable):
11
+ __metaclass__ = ABCMeta
12
+
13
+ def __init__(self, parent: ARObject, short_name: str):
14
+ if type(self) == TimingConstraint:
15
+ raise NotImplementedError("TimingExtension is an abstract class.")
16
+
17
+ super().__init__(parent, short_name)
18
+
19
+ class EOCExecutableEntityRef(EOCExecutableEntityRefAbstract):
20
+ def __init__(self, parent: ARObject, short_name: str):
21
+ super().__init__(parent, short_name)
22
+
23
+ self.successor_refs = [] # List[RefType]
24
+
25
+ def addSuccessorRef(self, ref: RefType):
26
+ self.successor_refs.append(ref)
27
+
28
+ def getSuccessorRefs(self) -> List[RefType]:
29
+ return self.successor_refs
30
+
31
+ class TimingConstraint(Identifiable):
32
+ __metaclass__ = ABCMeta
33
+
34
+ def __init__(self, parent: ARObject, short_name: str):
35
+ if type(self) == TimingConstraint:
36
+ raise NotImplementedError("TimingExtension is an abstract class.")
37
+
38
+ super().__init__(parent, short_name)
39
+
40
+ self.timing_condition_ref = None # type: RefType
41
+
42
+ @property
43
+ def timingConditionRef(self) -> RefType:
44
+ return self.timing_condition_ref
45
+
46
+ @timingConditionRef.setter
47
+ def timingConditionRef(self, ref: RefType):
48
+ self.timing_condition_ref = ref
49
+
50
+ class ExecutionOrderConstraint(TimingConstraint):
51
+ def __init__(self, parent: ARObject, short_name: str):
52
+ super().__init__(parent, short_name)
53
+
54
+ self.ordered_elements = [] # type: List[EOCExecutableEntityRefAbstract]
55
+
56
+ def createEOCExecutableEntityRef(self, short_name: str)-> EOCExecutableEntityRef:
57
+ if short_name not in self.elements:
58
+ entity_ref = EOCExecutableEntityRef(self, short_name)
59
+ self.elements[short_name] = entity_ref
60
+ self.ordered_elements.append(entity_ref)
61
+ return self.elements[short_name]
62
+
63
+ def getOrderedElements(self) -> List[EOCExecutableEntityRefAbstract]:
64
+ return self.ordered_elements
65
+
66
+ class TimingExtension(Identifiable):
67
+ __metaclass__ = ABCMeta
68
+
69
+ def __init__(self, parent: ARObject, short_name: str):
70
+ if type(self) == TimingExtension:
71
+ raise NotImplementedError("TimingExtension is an abstract class.")
72
+
73
+ super().__init__(parent, short_name)
74
+
75
+ self.timing_requirements = [] # Type: List[TimingConstraint]
76
+
77
+ def createExecutionOrderConstraint(self, short_name: str)-> ExecutionOrderConstraint:
78
+ if short_name not in self.elements:
79
+ constraint = ExecutionOrderConstraint(self, short_name)
80
+ self.elements[short_name] = constraint
81
+ self.timing_requirements.append(constraint)
82
+ return self.elements[short_name]
83
+
84
+ def getTimingRequirements(self) -> List[TimingConstraint]:
85
+ return self.timing_requirements
86
+
87
+ class SwcTiming(TimingExtension):
88
+ def __init__(self, parent: ARObject, short_name: str):
89
+ super().__init__(parent, short_name)
90
+
91
+