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.
- armodel/__init__.py +2 -1
- armodel/cli/arxml_dump_cli.py +9 -7
- armodel/cli/arxml_format_cli.py +72 -0
- armodel/cli/connector_update_cli.py +11 -4
- armodel/data_models/__init__.py +0 -0
- armodel/data_models/sw_connector.py +22 -0
- armodel/lib/data_analyzer.py +1 -1
- armodel/models/__init__.py +3 -2
- armodel/models/annotation.py +20 -0
- armodel/models/ar_object.py +163 -18
- armodel/models/ar_package.py +228 -24
- armodel/models/ar_ref.py +85 -6
- armodel/models/bsw_module_template.py +113 -27
- armodel/models/calibration.py +107 -4
- armodel/models/common_structure.py +142 -52
- armodel/models/communication.py +10 -1
- armodel/models/data_def_properties.py +16 -0
- armodel/models/data_dictionary.py +46 -9
- armodel/models/data_prototype.py +24 -5
- armodel/models/datatype.py +69 -20
- armodel/models/end_to_end_protection.py +67 -0
- armodel/models/fibex/__init__.py +0 -0
- armodel/models/fibex/can_communication.py +6 -0
- armodel/models/fibex/fibex_4_multiplatform.py +145 -0
- armodel/models/fibex/fibex_core.py +341 -0
- armodel/models/fibex/lin_communication.py +17 -0
- armodel/models/fibex/lin_topology.py +7 -0
- armodel/models/general_structure.py +44 -18
- armodel/models/global_constraints.py +4 -4
- armodel/models/implementation.py +79 -32
- armodel/models/internal_behavior.py +63 -0
- armodel/models/m2_msr.py +6 -4
- armodel/models/mode_declaration.py +8 -0
- armodel/models/multilanguage_data.py +42 -0
- armodel/models/per_instance_memory.py +14 -0
- armodel/models/port_interface.py +27 -4
- armodel/models/port_prototype.py +57 -19
- armodel/models/record_layout.py +118 -0
- armodel/models/rpt_scenario.py +20 -0
- armodel/models/service_mapping.py +11 -0
- armodel/models/service_needs.py +48 -0
- armodel/models/sw_component.py +293 -45
- armodel/models/system_template/__init__.py +0 -0
- armodel/models/system_template/network_management.py +7 -0
- armodel/models/system_template/transport_protocols.py +7 -0
- armodel/models/timing.py +91 -0
- armodel/parser/abstract_arxml_parser.py +248 -0
- armodel/parser/arxml_parser.py +1571 -844
- armodel/parser/connector_xlsx_parser.py +190 -0
- armodel/parser/excel_parser.py +18 -0
- armodel/tests/test_armodel/models/test_ar_object.py +152 -0
- armodel/tests/test_armodel/models/test_ar_package.py +1 -1
- armodel/tests/test_armodel/models/test_common_structure.py +2 -2
- armodel/tests/test_armodel/models/test_data_dictionary.py +7 -7
- armodel/tests/test_armodel/models/test_data_prototype.py +3 -3
- armodel/tests/test_armodel/models/test_datatype.py +11 -11
- armodel/tests/test_armodel/models/test_general_structure.py +1 -1
- armodel/tests/test_armodel/models/test_implementation.py +26 -0
- armodel/tests/test_armodel/models/test_m2_msr.py +4 -4
- armodel/tests/test_armodel/models/test_port_interface.py +5 -5
- armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +74 -42
- armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
- armodel/writer/abstract_arxml_writer.py +123 -0
- armodel/writer/arxml_writer.py +1701 -358
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/METADATA +114 -3
- armodel-1.5.0.dist-info/RECORD +91 -0
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/WHEEL +1 -1
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/entry_points.txt +2 -0
- armodel-1.4.0.dist-info/RECORD +0 -60
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/LICENSE +0 -0
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/top_level.txt +0 -0
armodel/models/ar_package.py
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
1
|
+
from typing import Dict, List
|
|
2
|
+
|
|
3
|
+
from armodel.models.fibex.can_communication import CanFrame
|
|
4
|
+
from armodel.models.fibex.fibex_4_multiplatform import Gateway
|
|
5
|
+
|
|
6
|
+
from .system_template.transport_protocols import CanTpConfig
|
|
7
|
+
from .system_template.network_management import NmConfig
|
|
8
|
+
from .fibex.fibex_core import DcmIPdu, ISignal, NPdu, NmPdu
|
|
9
|
+
from .fibex.lin_communication import LinUnconditionalFrame
|
|
10
|
+
from .fibex.lin_topology import LinCluster
|
|
11
|
+
from .timing import SwcTiming
|
|
12
|
+
from .data_dictionary import SwAddrMethod
|
|
13
|
+
from .record_layout import SwRecordLayout
|
|
14
|
+
from .end_to_end_protection import EndToEndProtectionSet
|
|
3
15
|
from .unit import Unit
|
|
4
16
|
from .general_structure import Identifiable, ARObject, Referrable, CollectableElement, SwcBswMapping
|
|
5
|
-
from .port_interface import SenderReceiverInterface, ClientServerInterface
|
|
6
|
-
from .sw_component import SwComponentType, EcuAbstractionSwComponentType, AtomicSwComponentType, ApplicationSwComponentType
|
|
7
|
-
from .
|
|
17
|
+
from .port_interface import ModeSwitchInterface, SenderReceiverInterface, ClientServerInterface, TriggerInterface
|
|
18
|
+
from .sw_component import SwComponentType, EcuAbstractionSwComponentType, AtomicSwComponentType, ApplicationSwComponentType
|
|
19
|
+
from .sw_component import ServiceSwComponentType, CompositionSwComponentType, SensorActuatorSwComponentType, ComplexDeviceDriverSwComponentType
|
|
20
|
+
from .datatype import ApplicationArrayDataType, ImplementationDataType, ApplicationDataType, DataTypeMappingSet, DataTypeMap, SwBaseType, ApplicationPrimitiveDataType, ApplicationRecordDataType
|
|
8
21
|
from .m2_msr import CompuMethod
|
|
9
|
-
from .common_structure import ConstantSpecification
|
|
22
|
+
from .common_structure import ConstantSpecification, ModeDeclarationGroup
|
|
10
23
|
from .implementation import BswImplementation, SwcImplementation, Implementation
|
|
11
24
|
from .bsw_module_template import BswModuleDescription, BswModuleEntry
|
|
12
25
|
from .global_constraints import DataConstr
|
|
@@ -16,14 +29,28 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
16
29
|
Identifiable.__init__(self, parent, short_name)
|
|
17
30
|
CollectableElement.__init__(self)
|
|
18
31
|
|
|
32
|
+
self._ar_packages = {} # type: Dict[str, ARPackage]
|
|
33
|
+
|
|
19
34
|
def getARPackages(self): # type: (...) -> List[ARPackage]
|
|
20
|
-
return list(
|
|
35
|
+
return list(sorted(self._ar_packages.values(), key= lambda a: a.short_name))
|
|
36
|
+
#return list(filter(lambda e: isinstance(e, ARPackage), self.elements.values()))
|
|
21
37
|
|
|
22
38
|
def createARPackage(self, short_name: str):
|
|
39
|
+
'''
|
|
23
40
|
if (short_name not in self.elements):
|
|
24
41
|
ar_package = ARPackage(self, short_name)
|
|
25
42
|
self.elements[short_name] = ar_package
|
|
26
43
|
return self.elements[short_name]
|
|
44
|
+
'''
|
|
45
|
+
if short_name not in self._ar_packages:
|
|
46
|
+
ar_package = ARPackage(self, short_name)
|
|
47
|
+
self._ar_packages[short_name] = ar_package
|
|
48
|
+
return self._ar_packages[short_name]
|
|
49
|
+
|
|
50
|
+
def getElement(self, short_name: str) -> Referrable:
|
|
51
|
+
if (short_name in self._ar_packages):
|
|
52
|
+
return self._ar_packages[short_name]
|
|
53
|
+
return CollectableElement.getElement(self, short_name)
|
|
27
54
|
|
|
28
55
|
def createEcuAbstractionSwComponentType(self, short_name: str) -> EcuAbstractionSwComponentType:
|
|
29
56
|
if (short_name not in self.elements):
|
|
@@ -32,10 +59,16 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
32
59
|
return self.elements[short_name]
|
|
33
60
|
|
|
34
61
|
def createApplicationSwComponentType(self, short_name: str) -> ApplicationSwComponentType:
|
|
35
|
-
if
|
|
62
|
+
if short_name not in self.elements:
|
|
36
63
|
sw_component = ApplicationSwComponentType(self, short_name)
|
|
37
64
|
self.elements[short_name] = sw_component
|
|
38
65
|
return self.elements[short_name]
|
|
66
|
+
|
|
67
|
+
def createComplexDeviceDriverSwComponentType(self, short_name: str) -> ComplexDeviceDriverSwComponentType:
|
|
68
|
+
if short_name not in self.elements:
|
|
69
|
+
sw_component = ComplexDeviceDriverSwComponentType(self, short_name)
|
|
70
|
+
self.elements[short_name] = sw_component
|
|
71
|
+
return self.elements[short_name]
|
|
39
72
|
|
|
40
73
|
def createServiceSwComponentType(self, short_name: str) -> ServiceSwComponentType:
|
|
41
74
|
if (short_name not in self.elements):
|
|
@@ -129,8 +162,8 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
129
162
|
|
|
130
163
|
def createSwcBswMapping(self, short_name: str) -> SwcBswMapping:
|
|
131
164
|
if (short_name not in self.elements):
|
|
132
|
-
|
|
133
|
-
self.elements[short_name] =
|
|
165
|
+
mapping = SwcBswMapping(self, short_name)
|
|
166
|
+
self.elements[short_name] = mapping
|
|
134
167
|
return self.elements[short_name]
|
|
135
168
|
|
|
136
169
|
def createConstantSpecification(self, short_name: str) -> ConstantSpecification:
|
|
@@ -141,24 +174,132 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
141
174
|
|
|
142
175
|
def createDataConstr(self, short_name: str) -> DataConstr:
|
|
143
176
|
if (short_name not in self.elements):
|
|
144
|
-
|
|
145
|
-
self.elements[short_name] =
|
|
177
|
+
constr = DataConstr(self, short_name)
|
|
178
|
+
self.elements[short_name] = constr
|
|
146
179
|
return self.elements[short_name]
|
|
147
180
|
|
|
148
181
|
def createUnit(self, short_name: str) -> Unit:
|
|
149
182
|
if (short_name not in self.elements):
|
|
150
|
-
|
|
183
|
+
unit = Unit(self, short_name)
|
|
184
|
+
self.elements[short_name] = unit
|
|
185
|
+
return self.elements[short_name]
|
|
186
|
+
|
|
187
|
+
def createEndToEndProtectionSet(self, short_name: str) -> EndToEndProtectionSet:
|
|
188
|
+
if (short_name not in self.elements):
|
|
189
|
+
spec = EndToEndProtectionSet(self, short_name)
|
|
151
190
|
self.elements[short_name] = spec
|
|
152
191
|
return self.elements[short_name]
|
|
153
|
-
|
|
192
|
+
|
|
193
|
+
def createApplicationArrayDataType(self, short_name: str) -> ApplicationArrayDataType:
|
|
194
|
+
if (short_name not in self.elements):
|
|
195
|
+
data_type = ApplicationArrayDataType(self, short_name)
|
|
196
|
+
self.elements[short_name] = data_type
|
|
197
|
+
return self.elements[short_name]
|
|
198
|
+
|
|
199
|
+
def createSwRecordLayout(self, short_name: str) -> SwRecordLayout:
|
|
200
|
+
if (short_name not in self.elements):
|
|
201
|
+
layout = SwRecordLayout(self, short_name)
|
|
202
|
+
self.elements[short_name] = layout
|
|
203
|
+
return self.elements[short_name]
|
|
204
|
+
|
|
205
|
+
def createSwAddrMethod(self, short_name: str) -> SwAddrMethod:
|
|
206
|
+
if (short_name not in self.elements):
|
|
207
|
+
method = SwAddrMethod(self, short_name)
|
|
208
|
+
self.elements[short_name] = method
|
|
209
|
+
return self.elements[short_name]
|
|
210
|
+
|
|
211
|
+
def createTriggerInterface(self, short_name: str) -> TriggerInterface:
|
|
212
|
+
if (short_name not in self.elements):
|
|
213
|
+
trigger_interface = TriggerInterface(self, short_name)
|
|
214
|
+
self.elements[short_name] = trigger_interface
|
|
215
|
+
return self.elements[short_name]
|
|
216
|
+
|
|
217
|
+
def createModeDeclarationGroup(self, short_name: str) -> ModeDeclarationGroup:
|
|
218
|
+
if (short_name not in self.elements):
|
|
219
|
+
group = ModeDeclarationGroup(self, short_name)
|
|
220
|
+
self.elements[short_name] = group
|
|
221
|
+
return self.elements[short_name]
|
|
222
|
+
|
|
223
|
+
def createModeSwitchInterface(self, short_name: str) -> ModeSwitchInterface:
|
|
224
|
+
if (short_name not in self.elements):
|
|
225
|
+
switch_interface = ModeSwitchInterface(self, short_name)
|
|
226
|
+
self.elements[short_name] = switch_interface
|
|
227
|
+
return self.elements[short_name]
|
|
228
|
+
|
|
229
|
+
def createSwcTiming(self, short_name: str) -> SwcTiming:
|
|
230
|
+
if (short_name not in self.elements):
|
|
231
|
+
timing = SwcTiming(self, short_name)
|
|
232
|
+
self.elements[short_name] = timing
|
|
233
|
+
return self.elements[short_name]
|
|
234
|
+
|
|
235
|
+
def createLinCluster(self, short_name: str) -> LinCluster:
|
|
236
|
+
if (short_name not in self.elements):
|
|
237
|
+
cluster = LinCluster(self, short_name)
|
|
238
|
+
self.elements[short_name] = cluster
|
|
239
|
+
return self.elements[short_name]
|
|
240
|
+
|
|
241
|
+
def createLinUnconditionalFrame(self, short_name: str) -> LinUnconditionalFrame:
|
|
242
|
+
if (short_name not in self.elements):
|
|
243
|
+
frame = LinUnconditionalFrame(self, short_name)
|
|
244
|
+
self.elements[short_name] = frame
|
|
245
|
+
return self.elements[short_name]
|
|
246
|
+
|
|
247
|
+
def createNmPdu(self, short_name: str) -> NmPdu:
|
|
248
|
+
if (short_name not in self.elements):
|
|
249
|
+
pdu = NmPdu(self, short_name)
|
|
250
|
+
self.elements[short_name] = pdu
|
|
251
|
+
return self.elements[short_name]
|
|
252
|
+
|
|
253
|
+
def createNPdu(self, short_name: str) -> NPdu:
|
|
254
|
+
if (short_name not in self.elements):
|
|
255
|
+
pdu = NPdu(self, short_name)
|
|
256
|
+
self.elements[short_name] = pdu
|
|
257
|
+
return self.elements[short_name]
|
|
258
|
+
|
|
259
|
+
def createDcmIPdu(self, short_name: str) -> DcmIPdu:
|
|
260
|
+
if (short_name not in self.elements):
|
|
261
|
+
pdu = DcmIPdu(self, short_name)
|
|
262
|
+
self.elements[short_name] = pdu
|
|
263
|
+
return self.elements[short_name]
|
|
264
|
+
|
|
265
|
+
def createNmConfig(self, short_name: str) -> NmConfig:
|
|
266
|
+
if (short_name not in self.elements):
|
|
267
|
+
config = NmConfig(self, short_name)
|
|
268
|
+
self.elements[short_name] = config
|
|
269
|
+
return self.elements[short_name]
|
|
270
|
+
|
|
271
|
+
def createCanTpConfig(self, short_name: str) -> CanTpConfig:
|
|
272
|
+
if (short_name not in self.elements):
|
|
273
|
+
config = CanTpConfig(self, short_name)
|
|
274
|
+
self.elements[short_name] = config
|
|
275
|
+
return self.elements[short_name]
|
|
276
|
+
|
|
277
|
+
def createCanFrame(self, short_name: str) -> CanFrame:
|
|
278
|
+
if (short_name not in self.elements):
|
|
279
|
+
frame = CanFrame(self, short_name)
|
|
280
|
+
self.elements[short_name] = frame
|
|
281
|
+
return self.elements[short_name]
|
|
282
|
+
|
|
283
|
+
def createGateway(self, short_name: str) -> Gateway:
|
|
284
|
+
if (short_name not in self.elements):
|
|
285
|
+
gateway = Gateway(self, short_name)
|
|
286
|
+
self.elements[short_name] = gateway
|
|
287
|
+
return self.elements[short_name]
|
|
288
|
+
|
|
289
|
+
def createISignal(self, short_name: str) -> ISignal:
|
|
290
|
+
if (short_name not in self.elements):
|
|
291
|
+
signal = ISignal(self, short_name)
|
|
292
|
+
self.elements[short_name] = signal
|
|
293
|
+
return self.elements[short_name]
|
|
294
|
+
|
|
154
295
|
def getApplicationPrimitiveDataTypes(self) -> List[ApplicationPrimitiveDataType]:
|
|
155
|
-
return list(filter(lambda a: isinstance(a, ApplicationPrimitiveDataType), self.elements.values()))
|
|
296
|
+
return list(sorted(filter(lambda a: isinstance(a, ApplicationPrimitiveDataType), self.elements.values()), key= lambda o:o.short_name))
|
|
156
297
|
|
|
157
298
|
def getApplicationDataType(self) -> List[ApplicationDataType]:
|
|
158
299
|
return list(sorted(filter(lambda a: isinstance(a, ApplicationDataType), self.elements.values()), key= lambda o:o.short_name))
|
|
159
300
|
|
|
160
301
|
def getImplementationDataTypes(self) -> List[ImplementationDataType]:
|
|
161
|
-
return list(filter(lambda a: isinstance(a, ImplementationDataType), self.elements.values()))
|
|
302
|
+
return list(sorted(filter(lambda a: isinstance(a, ImplementationDataType), self.elements.values()), key= lambda o:o.short_name))
|
|
162
303
|
|
|
163
304
|
def getSwBaseTypes(self) -> List[SwBaseType]:
|
|
164
305
|
return list(filter(lambda a: isinstance(a, SwBaseType), self.elements.values()))
|
|
@@ -174,6 +315,9 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
174
315
|
|
|
175
316
|
def getCompositionSwComponentTypes(self) -> List[CompositionSwComponentType]:
|
|
176
317
|
return list(filter(lambda a : isinstance(a, CompositionSwComponentType), self.elements.values()))
|
|
318
|
+
|
|
319
|
+
def getComplexDeviceDriverSwComponentTypes(self) -> List[ComplexDeviceDriverSwComponentType]:
|
|
320
|
+
return list(sorted(filter(lambda a : isinstance(a, ComplexDeviceDriverSwComponentType), self.elements.values()), key = lambda a: a.short_name))
|
|
177
321
|
|
|
178
322
|
def getSenderReceiverInterfaces(self) -> List[SenderReceiverInterface]:
|
|
179
323
|
return list(filter(lambda a : isinstance(a, SenderReceiverInterface), self.elements.values()))
|
|
@@ -213,8 +357,59 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
213
357
|
|
|
214
358
|
def getUnits(self) -> List[Unit]:
|
|
215
359
|
return list(filter(lambda a: isinstance(a, Unit), self.elements.values()))
|
|
360
|
+
|
|
361
|
+
def getApplicationArrayDataTypes(self) -> List[ApplicationArrayDataType]:
|
|
362
|
+
return list(sorted(filter(lambda a : isinstance(a, ApplicationArrayDataType), self.elements.values()), key = lambda a: a.short_name))
|
|
363
|
+
|
|
364
|
+
def getSwRecordLayouts(self) -> List[SwRecordLayout]:
|
|
365
|
+
return list(sorted(filter(lambda a : isinstance(a, SwRecordLayout), self.elements.values()), key = lambda a: a.short_name))
|
|
216
366
|
|
|
217
|
-
|
|
367
|
+
def getSwAddrMethods(self) -> List[SwAddrMethod]:
|
|
368
|
+
return list(sorted(filter(lambda a : isinstance(a, SwAddrMethod), self.elements.values()), key = lambda a: a.short_name))
|
|
369
|
+
|
|
370
|
+
def getTriggerInterfaces(self) -> List[TriggerInterface]:
|
|
371
|
+
return list(sorted(filter(lambda a : isinstance(a, TriggerInterface), self.elements.values()), key = lambda a: a.short_name))
|
|
372
|
+
|
|
373
|
+
def getModeDeclarationGroups(self) -> List[ModeDeclarationGroup]:
|
|
374
|
+
return list(sorted(filter(lambda a : isinstance(a, ModeDeclarationGroup), self.elements.values()), key = lambda a: a.short_name))
|
|
375
|
+
|
|
376
|
+
def getModeSwitchInterfaces(self) -> List[ModeSwitchInterface]:
|
|
377
|
+
return list(sorted(filter(lambda a : isinstance(a, ModeSwitchInterface), self.elements.values()), key = lambda a: a.short_name))
|
|
378
|
+
|
|
379
|
+
def getSwcTimings(self) -> List[SwcTiming]:
|
|
380
|
+
return list(sorted(filter(lambda a : isinstance(a, SwcTiming), self.elements.values()), key = lambda a: a.short_name))
|
|
381
|
+
|
|
382
|
+
def getLinClusters(self) -> List[LinCluster]:
|
|
383
|
+
return list(sorted(filter(lambda a : isinstance(a, LinCluster), self.elements.values()), key = lambda a: a.short_name))
|
|
384
|
+
|
|
385
|
+
def getLinUnconditionalFrames(self) -> List[LinUnconditionalFrame]:
|
|
386
|
+
return list(sorted(filter(lambda a : isinstance(a, LinUnconditionalFrame), self.elements.values()), key = lambda a: a.short_name))
|
|
387
|
+
|
|
388
|
+
def getNmPdus(self) -> List[NmPdu]:
|
|
389
|
+
return list(sorted(filter(lambda a : isinstance(a, NmPdu), self.elements.values()), key = lambda a: a.short_name))
|
|
390
|
+
|
|
391
|
+
def getNPdus(self) -> List[NPdu]:
|
|
392
|
+
return list(sorted(filter(lambda a : isinstance(a, NPdu), self.elements.values()), key = lambda a: a.short_name))
|
|
393
|
+
|
|
394
|
+
def getDcmIPdus(self) -> List[DcmIPdu]:
|
|
395
|
+
return list(sorted(filter(lambda a : isinstance(a, DcmIPdu), self.elements.values()), key = lambda a: a.short_name))
|
|
396
|
+
|
|
397
|
+
def getNmConfigs(self) -> List[NmConfig]:
|
|
398
|
+
return list(sorted(filter(lambda a : isinstance(a, NmConfig), self.elements.values()), key = lambda a: a.short_name))
|
|
399
|
+
|
|
400
|
+
def getCanTpConfigs(self) -> List[CanTpConfig]:
|
|
401
|
+
return list(sorted(filter(lambda a : isinstance(a, CanTpConfig), self.elements.values()), key = lambda a: a.short_name))
|
|
402
|
+
|
|
403
|
+
def getCanFrames(self) -> List[CanFrame]:
|
|
404
|
+
return list(sorted(filter(lambda a : isinstance(a, CanFrame), self.elements.values()), key = lambda a: a.short_name))
|
|
405
|
+
|
|
406
|
+
def getGateways(self) -> List[Gateway]:
|
|
407
|
+
return list(sorted(filter(lambda a : isinstance(a, Gateway), self.elements.values()), key = lambda a: a.short_name))
|
|
408
|
+
|
|
409
|
+
def getISignals(self) -> List[ISignal]:
|
|
410
|
+
return list(sorted(filter(lambda a : isinstance(a, ISignal), self.elements.values()), key = lambda a: a.short_name))
|
|
411
|
+
|
|
412
|
+
class AUTOSAR (CollectableElement):
|
|
218
413
|
__instance = None
|
|
219
414
|
|
|
220
415
|
@staticmethod
|
|
@@ -228,26 +423,35 @@ class AUTOSAR (CollectableElement):
|
|
|
228
423
|
raise Exception("The AUTOSAR is singleton!")
|
|
229
424
|
CollectableElement.__init__(self)
|
|
230
425
|
|
|
231
|
-
self.
|
|
426
|
+
self.schema_location = ""
|
|
232
427
|
self._appl_impl_type_maps = {}
|
|
233
428
|
self._impl_appl_type_maps = {}
|
|
234
429
|
AUTOSAR.__instance = self
|
|
235
430
|
|
|
431
|
+
self._ar_packages = {} # type: Dict[str, ARPackage]
|
|
432
|
+
|
|
236
433
|
@property
|
|
237
434
|
def full_name(self):
|
|
238
435
|
return ""
|
|
239
436
|
|
|
240
437
|
def clear(self):
|
|
438
|
+
self._ar_packages = {}
|
|
241
439
|
self.elements = {}
|
|
242
440
|
|
|
441
|
+
def getElement(self, short_name: str) -> Referrable:
|
|
442
|
+
if (short_name in self._ar_packages):
|
|
443
|
+
return self._ar_packages[short_name]
|
|
444
|
+
return CollectableElement.getElement(self, short_name)
|
|
445
|
+
|
|
243
446
|
def getARPackages(self) -> List[ARPackage]:
|
|
244
|
-
return list(filter(lambda e: isinstance(e, ARPackage), self.elements.values()))
|
|
447
|
+
#return list(filter(lambda e: isinstance(e, ARPackage), self.elements.values()))
|
|
448
|
+
return list(sorted(self._ar_packages.values(), key= lambda a: a.short_name))
|
|
245
449
|
|
|
246
450
|
def createARPackage(self, short_name: str) -> ARPackage:
|
|
247
|
-
if (short_name not in self.
|
|
451
|
+
if (short_name not in self._ar_packages):
|
|
248
452
|
ar_package = ARPackage(self, short_name)
|
|
249
|
-
self.
|
|
250
|
-
return self.
|
|
453
|
+
self._ar_packages[short_name] = ar_package
|
|
454
|
+
return self._ar_packages[short_name]
|
|
251
455
|
|
|
252
456
|
def find(self, referred_name: str) -> Referrable:
|
|
253
457
|
short_name_list = referred_name.split("/")
|
|
@@ -264,11 +468,11 @@ class AUTOSAR (CollectableElement):
|
|
|
264
468
|
def getDataType(self, data_type: ImplementationDataType) -> ImplementationDataType:
|
|
265
469
|
if (isinstance(data_type, ImplementationDataType) or isinstance(data_type, SwBaseType)):
|
|
266
470
|
if (data_type.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
|
|
267
|
-
referred_type = self.find(data_type.sw_data_def_props.
|
|
471
|
+
referred_type = self.find(data_type.sw_data_def_props.implementationDataTypeRef.value)
|
|
268
472
|
return self.getDataType(referred_type)
|
|
269
473
|
if (data_type.category == ImplementationDataType.CATEGORY_DATA_REFERENCE):
|
|
270
474
|
if (data_type.sw_data_def_props.sw_pointer_target_props.target_category == "VALUE"):
|
|
271
|
-
referred_type = self.find(data_type.sw_data_def_props.sw_pointer_target_props.sw_data_def_props.
|
|
475
|
+
referred_type = self.find(data_type.sw_data_def_props.sw_pointer_target_props.sw_data_def_props.baseTypeRef.value)
|
|
272
476
|
return self.getDataType(referred_type)
|
|
273
477
|
return data_type
|
|
274
478
|
else:
|
armodel/models/ar_ref.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from abc import ABCMeta
|
|
2
|
+
from typing import List
|
|
2
3
|
from .ar_object import ARObject
|
|
3
4
|
|
|
4
5
|
class RefType(ARObject):
|
|
@@ -14,16 +15,34 @@ class TRefType(RefType):
|
|
|
14
15
|
class AutosarVariableRef(ARObject):
|
|
15
16
|
def __init__(self):
|
|
16
17
|
super().__init__()
|
|
17
|
-
self.autosar_variable_iref = None
|
|
18
|
-
self.autosar_variable_in_impl_datatype = None
|
|
18
|
+
self.autosar_variable_iref = None # type: VariableInAtomicSWCTypeInstanceRef
|
|
19
|
+
self.autosar_variable_in_impl_datatype = None # type: ArVariableInImplementationDataInstanceRef
|
|
19
20
|
self.local_variable_ref = None
|
|
20
21
|
|
|
22
|
+
class AutosarParameterRef(ARObject):
|
|
23
|
+
def __init__(self):
|
|
24
|
+
super().__init__()
|
|
25
|
+
|
|
26
|
+
self.autosar_parameter_iref = None # type: ParameterInAtomicSWCTypeInstanceRef
|
|
27
|
+
self.local_parameter_ref = None # type: RefType
|
|
28
|
+
|
|
21
29
|
class AtpInstanceRef(ARObject, metaclass=ABCMeta):
|
|
22
30
|
def __init__(self):
|
|
23
31
|
if type(self) == AtpInstanceRef:
|
|
24
32
|
raise NotImplementedError("AtpInstanceRef is an abstract class.")
|
|
33
|
+
|
|
34
|
+
super().__init__()
|
|
35
|
+
|
|
36
|
+
class VariableInAtomicSWCTypeInstanceRef(AtpInstanceRef):
|
|
37
|
+
def __init__(self):
|
|
25
38
|
super().__init__()
|
|
26
39
|
|
|
40
|
+
self.base_ref = None # type: RefType
|
|
41
|
+
self.context_data_prototype_ref = None # type: RefType
|
|
42
|
+
self.port_prototype_ref = None # type: RefType
|
|
43
|
+
self.root_variable_data_prototype_ref = None # type: RefType
|
|
44
|
+
self.target_data_prototype_ref = None # type: RefType
|
|
45
|
+
|
|
27
46
|
class PortInCompositionTypeInstanceRef(AtpInstanceRef, metaclass=ABCMeta):
|
|
28
47
|
def __init__(self):
|
|
29
48
|
if type(self) == PortInCompositionTypeInstanceRef:
|
|
@@ -95,7 +114,67 @@ class RModeInAtomicSwcInstanceRef(AtpInstanceRef):
|
|
|
95
114
|
def __init__(self):
|
|
96
115
|
super().__init__()
|
|
97
116
|
|
|
98
|
-
self.base_ref = None
|
|
99
|
-
self.
|
|
100
|
-
self.
|
|
101
|
-
self.
|
|
117
|
+
self.base_ref = None # type: RefType
|
|
118
|
+
self.context_mode_declaration_group_prototype_ref = None # type: RefType
|
|
119
|
+
self.context_port_ref = None # type: RefType
|
|
120
|
+
self.target_mode_declaration_ref = None # type: RefType
|
|
121
|
+
|
|
122
|
+
class ParameterInAtomicSWCTypeInstanceRef(AtpInstanceRef):
|
|
123
|
+
def __init__(self):
|
|
124
|
+
super().__init__()
|
|
125
|
+
|
|
126
|
+
self.base_ref = None # type: RefType
|
|
127
|
+
self.context_data_prototype_ref = None # type: RefType
|
|
128
|
+
self.port_prototype_ref = None # type: RefType
|
|
129
|
+
self.root_parameter_data_prototype_ref = None # type: RefType
|
|
130
|
+
self.target_data_prototype_ref = None # type: RefType
|
|
131
|
+
|
|
132
|
+
class ApplicationCompositeElementInPortInterfaceInstanceRef(AtpInstanceRef):
|
|
133
|
+
def __init__(self):
|
|
134
|
+
super().__init__()
|
|
135
|
+
|
|
136
|
+
self.base_ref = None # type: RefType
|
|
137
|
+
self.context_data_prototype_ref = None # type: RefType
|
|
138
|
+
self.root_data_prototype_ref = None # type: RefType
|
|
139
|
+
self.target_data_prototype_ref = None # type: RefType
|
|
140
|
+
|
|
141
|
+
class InnerPortGroupInCompositionInstanceRef(AtpInstanceRef):
|
|
142
|
+
def __init__(self):
|
|
143
|
+
super().__init__()
|
|
144
|
+
|
|
145
|
+
self.baseRef = None # type: RefType
|
|
146
|
+
self.contextRef = None # type: RefType
|
|
147
|
+
self.targetRef = None # type: RefType
|
|
148
|
+
|
|
149
|
+
class VariableDataPrototypeInSystemInstanceRef(AtpInstanceRef):
|
|
150
|
+
def __init__(self):
|
|
151
|
+
super().__init__()
|
|
152
|
+
|
|
153
|
+
self.base_ref = None # type: RefType
|
|
154
|
+
self.context_component_refs = [] # type: List[RefType]
|
|
155
|
+
self.context_composition_ref = None # type: RefType
|
|
156
|
+
self.context_port_ref = None # type: RefType
|
|
157
|
+
self.target_data_prototype_ref = None # type: RefType
|
|
158
|
+
|
|
159
|
+
class RModeGroupInAtomicSWCInstanceRef(AtpInstanceRef):
|
|
160
|
+
def __init__(self):
|
|
161
|
+
super().__init__()
|
|
162
|
+
|
|
163
|
+
self.context_r_port = None # type: RefType
|
|
164
|
+
self.target_mode_group = None # type: RefType
|
|
165
|
+
|
|
166
|
+
@property
|
|
167
|
+
def contextRPort(self) -> RefType:
|
|
168
|
+
return self.context_r_port
|
|
169
|
+
|
|
170
|
+
@contextRPort.setter
|
|
171
|
+
def contextRPort(self, value: RefType):
|
|
172
|
+
self.context_r_port = value
|
|
173
|
+
|
|
174
|
+
@property
|
|
175
|
+
def targetModeGroup(self) -> RefType:
|
|
176
|
+
return self.target_mode_group
|
|
177
|
+
|
|
178
|
+
@targetModeGroup.setter
|
|
179
|
+
def targetModeGroup(self, value: RefType):
|
|
180
|
+
self.target_mode_group = value
|