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
@@ -1,17 +1,42 @@
1
1
  from typing import List
2
2
  import xml.etree.ElementTree as ET
3
-
4
- from armodel.models.fibex.fibex_4_multiplatform import FrameMapping, IPduMapping, ISignalMapping
5
-
6
- from ..models.fibex.fibex_core import Frame
3
+ import os
4
+
5
+ from ..models.ar_ref import RefType
6
+ from ..models.m2.autosar_templates.common_structure.implementation import ImplementationProps
7
+ from ..models.m2.autosar_templates.common_structure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
8
+ from ..models.m2.autosar_templates.generic_structure.abstract_structure import AnyInstanceRef
9
+ from ..models.m2.autosar_templates.sw_component_template.composition.instance_refs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
10
+ from ..models.m2.autosar_templates.sw_component_template.port_interface.instance_refs import ApplicationCompositeElementInPortInterfaceInstanceRef
11
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.instance_refs_usage import AutosarParameterRef, AutosarVariableRef, VariableInAtomicSWCTypeInstanceRef
12
+ from ..models.m2.autosar_templates.system_template.instance_refs import VariableDataPrototypeInSystemInstanceRef
13
+ from ..models.m2.autosar_templates.sw_component_template.components.instance_refs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
14
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior import RunnableEntityArgument
15
+ from ..models.m2.autosar_templates.sw_component_template.components import PortGroup, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
16
+ from ..models.m2.autosar_templates.sw_component_template.composition import AssemblySwConnector, CompositionSwComponentType, DelegationSwConnector
17
+
18
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.mode_declaration_group import ModeAccessPoint, ModeSwitchPoint
19
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.server_call import ServerCallPoint
20
+ from ..models.m2.autosar_templates.sw_component_template.communication import ClientComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
21
+ from ..models.fibex.lin_communication import LinFrameTriggering
22
+ from ..models.fibex.fibex_core.core_topology import AbstractCanCluster, CanPhysicalChannel, CommunicationCluster, LinPhysicalChannel, PhysicalChannel
23
+ from ..models.m2.msr.data_dictionary.data_def_properties import SwDataDefProps
24
+ from ..models.m2.msr.documentation.block_elements import DocumentationBlock
25
+ from ..models.m2.autosar_templates.system_template import System, SystemMapping
26
+ from ..models.m2.autosar_templates.system_template.data_mapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
27
+ from ..models.m2.autosar_templates.system_template.network_management import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
28
+ from ..models.fibex.can_communication import CanFrameTriggering, RxIdentifierRange
29
+ from ..models.m2.autosar_templates.ecuc_description_template import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
30
+ from ..models.fibex.fibex_4_multiplatform import ISignalMapping
31
+ from ..models.fibex.fibex_core.core_communication import Frame, FrameTriggering, IPdu, ISignalIPdu, ISignalTriggering, PduTriggering
7
32
  from ..models.internal_behavior import IncludedDataTypeSet
8
33
  from ..models.timing import ExecutionOrderConstraint, TimingExtension
9
34
  from ..models.bsw_module_template import BswModeSenderPolicy
10
- from ..models.port_interface import ModeSwitchInterface, PortInterface
35
+ from ..models.m2.autosar_templates.sw_component_template.port_interface import InvalidationPolicy, ModeSwitchInterface, ParameterInterface, PortInterface
11
36
  from ..models.common_structure import IncludedModeDeclarationGroupSet, MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
12
37
  from ..models.implementation import BswImplementation, EngineeringObject
13
38
  from ..models.general_structure import MultilanguageReferrable
14
- from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultilanguageLongName
39
+ from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultiLanguageParagraph, MultilanguageLongName
15
40
  from ..models.data_def_properties import ValueList
16
41
  from ..models.record_layout import SwRecordLayoutGroup, SwRecordLayoutGroupContent, SwRecordLayoutV
17
42
  from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, BaseTypeDirectDefinition
@@ -22,31 +47,23 @@ from ..models.service_mapping import RoleBasedPortAssignment
22
47
  from ..models.ar_package import AUTOSAR, ARPackage
23
48
  from ..models.ar_object import ARLiteral
24
49
  from ..models.service_needs import RoleBasedDataAssignment
25
- from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, RModeGroupInAtomicSWCInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
26
- from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, ModeAccessPoint, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
27
- from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype
50
+ from ..models.sw_component import AtomicSwComponentType, PortAPIOption, PortDefinedArgumentValue, ServiceDependency, SwcServiceDependency
51
+ from ..models.m2.autosar_templates.sw_component_template.data_type.data_prototypes import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
28
52
  from ..models.port_prototype import ModeSwitchReceiverComSpec, QueuedReceiverComSpec
29
53
  from ..models.annotation import Annotation, GeneralAnnotation
30
54
  from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
31
55
 
32
- from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
56
+ from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
33
57
  from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
34
- from ..models import AutosarVariableRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
35
- from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
36
- from ..models import RPortPrototype, PPortPrototype
37
- from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec
38
- from ..models import SenderComSpec, NonqueuedSenderComSpec, ServerComSpec
58
+
59
+ from ..models import ImplementationDataType, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap
39
60
  from ..models import SenderReceiverInterface, ClientServerInterface, ClientServerOperation, ArgumentDataPrototype
40
61
  from ..models import Identifiable, AdminData, Sdg, Sd
41
- from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
42
- from ..models import DelegationSwConnector
43
62
  from ..models import CompuMethod, CompuScale, CompuScales, Compu, CompuConst, CompuConstTextContent, CompuScaleConstantContents, CompuScaleRationalFormula, CompuRationalCoeffs, CompuNominatorDenominator
44
63
  from ..models import InternalBehavior, ExecutableEntity
45
64
  from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
46
65
  from ..models import TransmissionAcknowledgementRequest
47
66
  from ..models import BswModuleDescription, BswInternalBehavior, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
48
- from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
49
- from ..models import RecordValueSpecification
50
67
  from ..models import ApplicationRecordDataType
51
68
  from ..models import SwValueCont, SwValues
52
69
 
@@ -55,29 +72,31 @@ from .abstract_arxml_parser import AbstractARXMLParser
55
72
  class ARXMLParser(AbstractARXMLParser):
56
73
  def __init__(self, options=None) -> None:
57
74
  super().__init__(options)
75
+
76
+ def getChildElementRxIdentifierRange(self, element: ET.Element, key: str) -> RxIdentifierRange:
77
+ child_element = self.find(element, key)
78
+ range = None
79
+ if child_element is not None:
80
+ range = RxIdentifierRange()
81
+ range.setLowerCanId(self.getChildElementOptionalNumericalValue(child_element, "LOWER-CAN-ID")) \
82
+ .setUpperCanId(self.getChildElementOptionalNumericalValue(child_element, "UPPER-CAN-ID"))
83
+ return range
58
84
 
59
- def getShortName(self, element: ET.Element) -> str:
60
- child_element = self.find(element, "SHORT-NAME")
61
- if child_element is None:
62
- raise ValueError("Short Name is required")
63
- return child_element.text
64
-
65
85
  def readSd(self, element: ET.Element, sdg: Sdg):
66
86
  for child_element in self.findall(element, "./SD"):
67
87
  sd = Sd()
68
88
  if 'GID' in child_element.attrib:
69
- sd.gid = child_element.attrib['GID']
70
- sd.value = child_element.text
89
+ sd.setGID(child_element.attrib['GID'])
90
+ sd.setValue(child_element.text)
71
91
  sdg.addSd(sd)
72
92
 
73
93
  def getSdg(self, element: ET.Element) -> Sdg:
74
94
  sdg = Sdg()
75
95
  if 'GID' in element.attrib:
76
- sdg.gid = element.attrib["GID"]
96
+ sdg.setGID(element.attrib["GID"])
77
97
  self.readSd(element, sdg)
78
- child_element = self.find(element, "./SDG")
79
- if child_element is not None:
80
- sdg.sdg_contents_type = self.getSdg(child_element)
98
+ for child_element in self.findall(element, "SDG"):
99
+ sdg.addSdgContentsType(self.getSdg(child_element))
81
100
  return sdg
82
101
 
83
102
  def readSdgs(self, element: ET.Element, admin_data: AdminData):
@@ -90,16 +109,21 @@ class ARXMLParser(AbstractARXMLParser):
90
109
  self.logger.debug("readAdminData")
91
110
  admin_data = AdminData()
92
111
  self.readSdgs(child_element, admin_data)
93
- identifiable.admin_data = admin_data
112
+ identifiable.setAdminData(admin_data)
94
113
 
95
114
  def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
96
115
  self.readElementAttributes(element, referrable)
97
- referrable.long_name = self.getMultilanguageLongName(element, "LONG-NAME")
116
+ referrable.setLongName(self.getMultilanguageLongName(element, "LONG-NAME"))
98
117
 
99
118
  def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
100
119
  self.readMultilanguageReferrable(element, identifiable)
101
- identifiable.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
102
- identifiable.desc = self.getMultiLanguageOverviewParagraph(element, "DESC")
120
+
121
+ for annotation in self.getAnnotations(element):
122
+ identifiable.addAnnotation(annotation)
123
+
124
+ identifiable.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
125
+ .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC"))
126
+
103
127
  self.readAdminData(element, identifiable)
104
128
 
105
129
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
@@ -137,24 +161,31 @@ class ARXMLParser(AbstractARXMLParser):
137
161
  self.readElementAttributes(child_element, paragraph)
138
162
  self.readLOverviewParagraph(child_element, paragraph)
139
163
  return paragraph
140
-
141
- def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
142
- child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
143
- if (child_element is not None):
164
+
165
+ def getVariableInAtomicSWCTypeInstanceRef(self, element: ET.Element) -> VariableInAtomicSWCTypeInstanceRef:
166
+ autosar_variable_iref = None
167
+ if element is not None:
144
168
  autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
145
- self.readElementAttributes(child_element, autosar_variable_iref)
146
- autosar_variable_iref.port_prototype_ref = self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF")
147
- if autosar_variable_iref.port_prototype_ref is None:
148
- self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
149
- autosar_variable_iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
150
- if autosar_variable_iref.target_data_prototype_ref is None:
151
- self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
152
- accessed_variable_ref.autosar_variable_iref = autosar_variable_iref
153
-
154
- def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
155
- child_element = element.find("./xmlns:ACCESSED-VARIABLE", self.nsmap)
169
+ self.readElementAttributes(element, autosar_variable_iref)
170
+ autosar_variable_iref.setPortPrototypeRef(self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF"))
171
+ autosar_variable_iref.setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
172
+ return autosar_variable_iref
173
+
174
+ def getAutosarVariableInImplDatatype(self, element: ET.Element) -> AutosarVariableRef:
175
+ child_element = self.find(element, "ACCESSED-VARIABLE")
176
+ accessed_variable_ref = None
177
+ if (child_element is not None):
178
+ accessed_variable_ref = AutosarVariableRef()
179
+ accessed_variable_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
180
+ return accessed_variable_ref
181
+
182
+ def getLocalVariableRef(self, element: ET.Element) -> AutosarVariableRef:
183
+ child_element = self.find(element, "ACCESSED-VARIABLE")
184
+ accessed_variable_ref = None
156
185
  if (child_element is not None):
157
- accessed_variable_ref.local_variable_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF")
186
+ accessed_variable_ref = AutosarVariableRef()
187
+ accessed_variable_ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
188
+ return accessed_variable_ref
158
189
 
159
190
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
160
191
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
@@ -164,25 +195,25 @@ class ARXMLParser(AbstractARXMLParser):
164
195
 
165
196
  if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
166
197
  variable_access = parent.createDataReceivePointByArgument(short_name)
167
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
198
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
168
199
  elif (key == "DATA-RECEIVE-POINT-BY-VALUES"):
169
200
  variable_access = parent.createDataReceivePointByValue(short_name)
170
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
201
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
171
202
  elif (key == "DATA-READ-ACCESSS"):
172
203
  variable_access = parent.createDataReadAccess(short_name)
173
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
204
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
174
205
  elif (key == "DATA-WRITE-ACCESSS"):
175
206
  variable_access = parent.createDataWriteAccess(short_name)
176
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
207
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
177
208
  elif (key == "DATA-SEND-POINTS"):
178
209
  variable_access = parent.createDataSendPoint(short_name)
179
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
210
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
180
211
  elif (key == "WRITTEN-LOCAL-VARIABLES"):
181
212
  variable_access = parent.createWrittenLocalVariable(short_name)
182
- self.readLocalVariableRef(child_element, variable_access.accessed_variable_ref)
213
+ variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
183
214
  elif (key == "READ-LOCAL-VARIABLES"):
184
215
  variable_access = parent.createReadLocalVariable(short_name)
185
- self.readLocalVariableRef(child_element, variable_access.accessed_variable_ref)
216
+ variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
186
217
  else:
187
218
  self._raiseError("Invalid key type <%s>" % key)
188
219
 
@@ -215,16 +246,15 @@ class ARXMLParser(AbstractARXMLParser):
215
246
  mode_group.type_tref = self.getChildElementRefType(parent.short_name, child_element, "TYPE-TREF")
216
247
 
217
248
  def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
218
- child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
219
- if child_element is not None:
220
- for ref in self.getChildElementRefTypeList(child_element, "./CAN-ENTER-EXCLUSIVE-AREA-REF"):
221
- entity.addCanEnterExclusiveAreaRef(ref)
249
+ for ref in self.getChildElementRefTypeList(element, "CAN-ENTER-EXCLUSIVE-AREA-REFS/CAN-ENTER-EXCLUSIVE-AREA-REF"):
250
+ entity.addCanEnterExclusiveAreaRef(ref)
222
251
 
223
252
  def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
224
253
  self.logger.debug("readExecutableEntity %s" % entity.short_name)
225
254
  self.readIdentifiable(element, entity)
226
255
  self.readCanEnterExclusiveAreaRefs(element, entity)
227
- entity.minimum_start_interval = self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")
256
+ entity.setMinimumStartInterval(self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")) \
257
+ .setSwAddrMethodRef(self.getChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF"))
228
258
 
229
259
  def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
230
260
  for child_element in self.findall(element, "./MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
@@ -234,7 +264,7 @@ class ARXMLParser(AbstractARXMLParser):
234
264
 
235
265
  def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
236
266
  self.readExecutableEntity(element, entity)
237
- entity.implemented_entry_ref = self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
267
+ entity.setImplementedEntryRef(self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF"))
238
268
  self.readBswModuleEntityManagedModeGroup(element, entity)
239
269
 
240
270
  def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
@@ -523,7 +553,7 @@ class ARXMLParser(AbstractARXMLParser):
523
553
  short_name = self.getShortName(child_element)
524
554
  memory_section = consumption.createMemorySection(short_name)
525
555
  self.readIdentifiable(child_element, memory_section)
526
- memory_section.alignment = self.getChildElementOptionalLiteral(child_element, "ALIGNMENT")
556
+ memory_section.setAlignment(self.getChildElementOptionalLiteral(child_element, "ALIGNMENT"))
527
557
  self.readMemorySectionOptions(child_element, memory_section)
528
558
  memory_section.size = self.getChildElementOptionalNumericalValue(child_element, "SIZE")
529
559
  memory_section.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")
@@ -586,6 +616,11 @@ class ARXMLParser(AbstractARXMLParser):
586
616
  def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
587
617
  self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
588
618
 
619
+ def getRunnableEntityArgument(self, element: ET.Element) -> RunnableEntityArgument:
620
+ argument = RunnableEntityArgument()
621
+ argument.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
622
+ return argument
623
+
589
624
  def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
590
625
  accessed_parameter = None
591
626
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
@@ -613,22 +648,22 @@ class ARXMLParser(AbstractARXMLParser):
613
648
  operation_iref = ROperationInAtomicSwcInstanceRef()
614
649
  operation_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
615
650
  operation_iref.target_required_operation_ref = self.getChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF")
616
- parent.operation_iref = operation_iref
651
+ parent.setOperationIRef(operation_iref)
617
652
 
618
653
  def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
619
654
  child_element = self.find(element, "DATA-IREF")
620
655
  if (child_element is not None):
621
656
  data_iref = RVariableInAtomicSwcInstanceRef()
622
- data_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
623
- data_iref.target_data_element_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF")
624
- parent.data_iref = data_iref
657
+ data_iref.setContextRPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")) \
658
+ .setTargetDataElementRef(self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF"))
659
+ parent.setDataIRef(data_iref)
625
660
 
626
661
  def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
627
662
  for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
628
663
  mode_iref = RModeInAtomicSwcInstanceRef()
629
- mode_iref.context_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")
630
- mode_iref.context_mode_declaration_group_prototype_ref = self.getChildElementRefType("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
631
- mode_iref.target_mode_declaration_ref = self.getChildElementRefType("", child_element, "TARGET-MODE-DECLARATION-REF")
664
+ mode_iref.setContextPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")) \
665
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
666
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF"))
632
667
  parent.addModeIRef(mode_iref)
633
668
 
634
669
  def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
@@ -636,7 +671,7 @@ class ARXMLParser(AbstractARXMLParser):
636
671
  self.logger.debug("readSynchronousServerCallPoint %s" % short_name)
637
672
  server_call_point = parent.createSynchronousServerCallPoint(short_name)
638
673
  self.readIdentifiable(element, server_call_point)
639
- server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
674
+ server_call_point.setTimeout(self.getChildElementOptionalFloatValue(element, "TIMEOUT"))
640
675
  self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
641
676
 
642
677
  def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
@@ -644,11 +679,11 @@ class ARXMLParser(AbstractARXMLParser):
644
679
  self.logger.debug("readAsynchronousServerCallPoint %s" % short_name)
645
680
  server_call_point = parent.createAsynchronousServerCallPoint(short_name)
646
681
  self.readIdentifiable(element, server_call_point)
647
- server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
682
+ server_call_point.setTimeout(self.getChildElementOptionalFloatValue(element, "TIMEOUT"))
648
683
  self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
649
684
 
650
685
  def readInternalBehaviorServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
651
- for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/*", self.nsmap):
686
+ for child_element in self.findall(element, "SERVER-CALL-POINTS/*"):
652
687
  tag_name = self.getTagName(child_element.tag)
653
688
  if tag_name == "SYNCHRONOUS-SERVER-CALL-POINT":
654
689
  self.readSynchronousServerCallPoint(child_element, parent)
@@ -665,10 +700,10 @@ class ARXMLParser(AbstractARXMLParser):
665
700
 
666
701
  def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
667
702
  iref = RModeInAtomicSwcInstanceRef()
668
- iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
669
- iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
670
- iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
671
- iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
703
+ iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
704
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
705
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
706
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF"))
672
707
  return iref
673
708
 
674
709
  def getRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> RModeGroupInAtomicSWCInstanceRef:
@@ -676,45 +711,72 @@ class ARXMLParser(AbstractARXMLParser):
676
711
  iref = None
677
712
  if child_element is not None:
678
713
  iref = RModeGroupInAtomicSWCInstanceRef()
679
- iref.contextRPort = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
680
- iref.targetModeGroup = self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF")
714
+ iref.setContextRPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")) \
715
+ .setTargetModeGroupRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF"))
716
+ return iref
717
+
718
+ def getPModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> PModeGroupInAtomicSwcInstanceRef:
719
+ child_element = self.find(element, "MODE-GROUP-IREF")
720
+ iref = None
721
+ if child_element is not None:
722
+ iref = PModeGroupInAtomicSwcInstanceRef()
723
+ iref.setContextPPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF")) \
724
+ .setTargetModeGroupRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF"))
681
725
  return iref
682
726
 
683
727
  def readModeAccessPoints(self, element: ET.Element, parent: RunnableEntity):
684
728
  for child_element in self.findall(element, "MODE-ACCESS-POINTS/MODE-ACCESS-POINT"):
685
729
  point = ModeAccessPoint()
686
- point.modeGroupIRef = self.getRModeGroupInAtomicSWCInstanceRef(child_element)
730
+ point.setModeGroupIRef(self.getRModeGroupInAtomicSWCInstanceRef(child_element))
687
731
  parent.addModeAccessPoint(point)
688
732
 
733
+ def readModeSwitchPoints(self, element: ET.Element, parent: RunnableEntity):
734
+ for child_element in self.findall(element, "MODE-SWITCH-POINTS/MODE-SWITCH-POINT"):
735
+ point = parent.createModeSwitchPoint(self.getShortName(child_element))
736
+ point.setModeGroupIRef(self.getPModeGroupInAtomicSWCInstanceRef(child_element))
737
+
738
+ def readRunnableEntityArguments(self, element: ET.Element, entity: RunnableEntity):
739
+ for child_element in self.findall(element, "ARGUMENTS/*"):
740
+ tag_name = self.getTagName(child_element)
741
+ if tag_name == "RUNNABLE-ENTITY-ARGUMENT":
742
+ entity.addArgument(self.getRunnableEntityArgument(child_element))
743
+ else:
744
+ raise NotImplementedError("Unsupported Arguments of runnable entity <%s>" % tag_name)
745
+
746
+ def readRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
747
+ self.readExecutableEntity(element, entity)
748
+ self.readRunnableEntityArguments(element, entity)
749
+
750
+ entity.setCanBeInvokedConcurrently(self.getChildElementOptionalBooleanValue(element, "CAN-BE-INVOKED-CONCURRENTLY"))
751
+ entity.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
752
+
753
+ self.readDataReceivePointByArguments(element, entity)
754
+ self.readDataReceivePointByValues(element, entity)
755
+ self.readDataReadAccesses(element, entity)
756
+ self.readDataWriteAccesses(element, entity)
757
+ self.readDataSendPoints(element, entity)
758
+ self.readInternalBehaviorServerCallPoint(element, entity)
759
+ self.readInternalTriggeringPoints(element, entity)
760
+ self.readModeAccessPoints(element, entity)
761
+ self.readModeSwitchPoints(element, entity)
762
+ self.readParameterAccesses(element, entity)
763
+ self.readReadLocalVariables(element, entity)
764
+ self.readWrittenLocalVariables(element, entity)
765
+
689
766
  def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
690
767
  for child_element in self.findall(element, "RUNNABLES/RUNNABLE-ENTITY"):
691
768
  short_name = self.getShortName(child_element)
692
769
  entity = parent.createRunnableEntity(short_name)
693
770
  self.logger.debug("readRunnableEntities %s" % short_name)
694
771
 
695
- self.readExecutableEntity(child_element, entity)
696
- entity.canBeInvokedConcurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
697
- entity.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
698
- entity.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDR-METHOD-REF")
699
-
700
- self.readDataReceivePointByArguments(child_element, entity)
701
- self.readDataReceivePointByValues(child_element, entity)
702
- self.readDataReadAccesses(child_element, entity)
703
- self.readDataWriteAccesses(child_element, entity)
704
- self.readDataSendPoints(child_element, entity)
705
- self.readParameterAccesses(child_element, entity)
706
- self.readWrittenLocalVariables(child_element, entity)
707
- self.readReadLocalVariables(child_element, entity)
708
- self.readInternalBehaviorServerCallPoint(child_element, entity)
709
- self.readInternalTriggeringPoints(child_element, entity)
710
- self.readModeAccessPoints(child_element, entity)
772
+ self.readRunnableEntity(child_element, entity)
711
773
 
712
774
  def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
713
775
  iref = RModeInAtomicSwcInstanceRef()
714
- iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
715
- iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
716
- iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
717
- iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
776
+ iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
777
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
778
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
779
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF"))
718
780
  return iref
719
781
 
720
782
  def readRTEEvent(self, element: ET.Element, event: RTEEvent):
@@ -736,32 +798,35 @@ class ARXMLParser(AbstractARXMLParser):
736
798
  event = parent.createOperationInvokedEvent(short_name)
737
799
  self.readOperationIRef(element, event)
738
800
  self.readRTEEvent(element, event)
739
-
801
+
802
+ def readVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
803
+ self.readAutosarDataPrototype(element, prototype)
804
+ prototype.setInitValue(self.getInitValue(element))
805
+
740
806
  def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
741
807
  for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
742
808
  short_name = self.getShortName(child_element)
743
809
  prototype = parent.createExplicitInterRunnableVariable(short_name)
744
- prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
745
- prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
746
- prototype.init_value = self.getInitValue(child_element)
810
+ self.readVariableDataPrototype(child_element, prototype)
747
811
 
748
812
  def readPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
749
813
  for child_element in element.findall("./xmlns:PER-INSTANCE-MEMORYS/xmlns:PER-INSTANCE-MEMORY", self.nsmap):
750
814
  short_name = self.getShortName(child_element)
751
815
  memory = behavior.createPerInstanceMemory(short_name)
752
816
  self.readIdentifiable(child_element, memory)
753
- memory.init_value = self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")
754
- memory.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
755
- memory.type = self.getChildElementOptionalLiteral(child_element, "TYPE")
756
- memory.type_definition = self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION")
817
+ memory.setInitValue(self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")) \
818
+ .setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")) \
819
+ .setType(self.getChildElementOptionalLiteral(child_element, "TYPE")) \
820
+ .setTypeDefinition(self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION"))
757
821
 
758
822
  def readAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
759
- prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
823
+ self.readDataPrototype(element, prototype)
824
+ prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
760
825
 
761
826
  def readParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
762
827
  self.readIdentifiable(element, prototype)
763
828
  self.readAutosarDataPrototype(element, prototype)
764
- prototype.init_value = self.getInitValue(element)
829
+ prototype.setInitValue(self.getInitValue(element))
765
830
 
766
831
  def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
767
832
  for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
@@ -837,21 +902,53 @@ class ARXMLParser(AbstractARXMLParser):
837
902
  self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
838
903
 
839
904
  def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
840
- child_element = element.find("./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
841
- if (child_element is not None):
905
+ child_element = self.find(element, "SW-POINTER-TARGET-PROPS")
906
+ if child_element is not None:
842
907
  sw_pointer_target_props = SwPointerTargetProps()
843
908
  sw_pointer_target_props.target_category = self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")
844
909
  sw_pointer_target_props.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
845
- parent.sw_pointer_target_props = sw_pointer_target_props
910
+ parent.swPointerTargetProps = sw_pointer_target_props
911
+
912
+ def readLParagraph(self, element: ET.Element, paragraph: MultiLanguageParagraph):
913
+ for child_element in self.findall(element, "./L-1"):
914
+ l1 = LOverviewParagraph()
915
+ self.readElementAttributes(child_element, l1)
916
+ l1.value = child_element.text
917
+ if 'L' in child_element.attrib:
918
+ l1.l = child_element.attrib['L']
919
+ paragraph.addL1(l1)
920
+
921
+ def getMultiLanguageParagraphs(self, element: ET.Element, key: str) -> List[MultiLanguageParagraph]:
922
+ paragraphs = []
923
+ for child_element in self.findall(element, key):
924
+ paragraph = MultiLanguageParagraph()
925
+ self.readElementAttributes(child_element, paragraph)
926
+ self.readLParagraph(child_element, paragraph)
927
+ paragraphs.append(paragraph)
928
+ return paragraphs
929
+
930
+ def getDocumentationBlock(self, element: ET.Element, key: str) -> DocumentationBlock:
931
+ block = None
932
+ child_element = self.find(element, key)
933
+ if child_element is not None:
934
+ block = DocumentationBlock()
935
+ self.readElementAttributes(child_element, block)
936
+ for paragraph in self.getMultiLanguageParagraphs(child_element, "P"):
937
+ block.addP(paragraph)
938
+ return block
846
939
 
847
940
  def readGeneralAnnotation(self, element: ET.Element, annotation: GeneralAnnotation):
848
- annotation.label = self.getMultilanguageLongName(element, "LABEL")
941
+ annotation.setAnnotationOrigin(self.getChildElementOptionalLiteral(element, 'ANNOTATION-ORIGIN')) \
942
+ .setAnnotationText(self.getDocumentationBlock(element, "ANNOTATION-TEXT")) \
943
+ .setLabel(self.getMultilanguageLongName(element, "LABEL"))
849
944
 
850
- def readAnnotations(self, element: ET.Element, props: SwDataDefProps) :
945
+ def getAnnotations(self, element: ET.Element) -> List[Annotation]:
946
+ annotations = []
851
947
  for child_element in element.findall("./xmlns:ANNOTATIONS/xmlns:ANNOTATION", self.nsmap):
852
948
  annotation = Annotation()
853
949
  self.readGeneralAnnotation(child_element, annotation)
854
- props.addAnnotation(annotation)
950
+ annotations.append(annotation)
951
+ return annotations
855
952
 
856
953
  def getSwAxisIndividual(self, element: ET.Element) -> SwAxisIndividual:
857
954
  props = SwAxisIndividual()
@@ -888,6 +985,11 @@ class ARXMLParser(AbstractARXMLParser):
888
985
  if tag_name == "SW-CALPRM-AXIS":
889
986
  set.addSwCalprmAxis(self.getSwCalprmAxis(child_element))
890
987
  return set
988
+
989
+ def readSwDataDefProsInvalidValue(self, element: ET.Element, props: SwDataDefProps):
990
+ child_element = self.find(element, "INVALID-VALUE/*")
991
+ if child_element is not None:
992
+ props.setInvalidValue(self.getValueSpecification(child_element))
891
993
 
892
994
  def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
893
995
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
@@ -898,30 +1000,36 @@ class ARXMLParser(AbstractARXMLParser):
898
1000
  sw_data_def_props = SwDataDefProps()
899
1001
  self.readElementAttributes(child_element, sw_data_def_props)
900
1002
 
901
- self.readAnnotations(conditional_tag, sw_data_def_props)
902
- sw_data_def_props.baseTypeRef = self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")
903
- sw_data_def_props.dataConstrRef = self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")
904
- sw_data_def_props.compuMethodRef = self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")
905
- sw_data_def_props.swImplPolicy = self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")
906
- sw_data_def_props.implementationDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")
907
- sw_data_def_props.swCalibrationAccess = self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")
908
- sw_data_def_props.swCalprmAxisSet = self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")
909
- sw_data_def_props.swRecordLayoutRef = self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")
910
- sw_data_def_props.valueAxisDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")
911
- sw_data_def_props.setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1003
+ for annotation in self.getAnnotations(conditional_tag):
1004
+ sw_data_def_props.addAnnotation(annotation)
1005
+
1006
+ sw_data_def_props.setBaseTypeRef(self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")) \
1007
+ .setDataConstrRef(self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")) \
1008
+ .setCompuMethodRef(self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")) \
1009
+ .setSwImplPolicy(self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")) \
1010
+ .setImplementationDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")) \
1011
+ .setSwCalibrationAccess(self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")) \
1012
+ .setSwCalprmAxisSet(self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")) \
1013
+ .setSwRecordLayoutRef(self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")) \
1014
+ .setValueAxisDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")) \
1015
+ .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1016
+ self.readSwDataDefProsInvalidValue(conditional_tag, sw_data_def_props)
912
1017
  self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
913
1018
  self.readElementAttributes(conditional_tag, sw_data_def_props.conditional)
914
1019
  return sw_data_def_props
1020
+
1021
+ def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
1022
+ self.readIdentifiable(element, data_type)
1023
+ data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
915
1024
 
916
1025
  def readApplicationPrimitiveDataType(self, element: ET.Element, parent: ARPackage):
917
1026
  short_name = self.getShortName(element)
918
1027
  data_type = parent.createApplicationPrimitiveDataType(short_name)
919
1028
  self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
920
- self.readIdentifiable(element, data_type)
921
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1029
+ self.readAutosarDataType(element, data_type)
922
1030
 
923
1031
  def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
924
- prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
1032
+ prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
925
1033
 
926
1034
  def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
927
1035
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
@@ -936,7 +1044,7 @@ class ARXMLParser(AbstractARXMLParser):
936
1044
  data_type = parent.createApplicationRecordDataType(short_name)
937
1045
  self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
938
1046
  self.readIdentifiable(element, data_type)
939
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1047
+ data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
940
1048
  self.readApplicationRecordElements(element, data_type)
941
1049
 
942
1050
  def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
@@ -944,10 +1052,10 @@ class ARXMLParser(AbstractARXMLParser):
944
1052
  short_name = self.getShortName(child_element)
945
1053
  type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
946
1054
  self.readIdentifiable(child_element, type_element)
947
- type_element.arraySize = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")
948
- type_element.array_size_semantics = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS")
1055
+ type_element.setArraySize(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")) \
1056
+ .setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
949
1057
  self.readImplementationDataTypeElements(child_element, type_element)
950
- type_element.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1058
+ type_element.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
951
1059
 
952
1060
  def readImplementationDataType(self, element: ET.Element, parent: ARPackage):
953
1061
  short_name = self.getShortName(element)
@@ -955,16 +1063,26 @@ class ARXMLParser(AbstractARXMLParser):
955
1063
  self.readAutosarDataType(element, data_type)
956
1064
  self.readImplementationDataTypeElements(element, data_type)
957
1065
  data_type.setTypeEmitter(self.getChildElementOptionalLiteral(element, "TYPE-EMITTER"))
958
- if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
1066
+ if (data_type.getCategory().getValue() == ImplementationDataType.CATEGORY_ARRAY):
959
1067
  if (len(data_type.getImplementationDataTypeElements()) < 1):
960
1068
  self._raiseError("Array Sub-Element of <%s> do not defined." % data_type.short_name)
1069
+
961
1070
  array_sub_element = data_type.getImplementationDataTypeElements()[0]
962
- if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
963
- data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementationDataTypeRef.value)
964
- elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
1071
+ if (array_sub_element.category.getValue() == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
1072
+ data_type.setArrayElementType(array_sub_element.swDataDefProps.implementationDataTypeRef.value)
1073
+ elif (array_sub_element.category.getValue() == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
965
1074
  return
966
1075
  else:
967
- self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
1076
+ self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category.value, data_type.short_name))
1077
+ elif (data_type.getCategory().getValue() == ImplementationDataType.CATEGORY_TYPE_STRUCTURE):
1078
+ if (len(data_type.getImplementationDataTypeElements()) < 1):
1079
+ self._raiseError("Structure Sub-Element of <%s> do not defined." % data_type.short_name)
1080
+ self.readImplementationDataTypeSymbolProps(element, data_type)
1081
+ struct_sub_element = data_type.getImplementationDataTypeElements()[0]
1082
+ if (struct_sub_element.getCategory().getValue() == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
1083
+ data_type.setStructElementType(struct_sub_element.getSwDataDefProps().getImplementationDataTypeRef().getValue())
1084
+ else:
1085
+ self._raiseError("The category <%s> of structure sub-element <%s> does not support." % (struct_sub_element.category.value, data_type.short_name))
968
1086
 
969
1087
  def readBaseTypeDirectDefinition(self, element: ET.Element, definition: BaseTypeDirectDefinition):
970
1088
  definition.base_type_size = self.getChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE")
@@ -983,8 +1101,8 @@ class ARXMLParser(AbstractARXMLParser):
983
1101
  iref = None
984
1102
  if child_element is not None:
985
1103
  iref = ApplicationCompositeElementInPortInterfaceInstanceRef()
986
- iref.root_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "ROOT-DATA-PROTOTYPE-REF")
987
- iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
1104
+ iref.setRootDataPrototypeRef(self.getChildElementOptionalRefType(child_element, "ROOT-DATA-PROTOTYPE-REF"))\
1105
+ .setTargetDataPrototypeRef(self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF"))
988
1106
  return iref
989
1107
 
990
1108
  def getCompositeNetworkRepresentation(self, element: ET.Element) -> CompositeNetworkRepresentation:
@@ -994,14 +1112,14 @@ class ARXMLParser(AbstractARXMLParser):
994
1112
  representation.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
995
1113
  return representation
996
1114
 
997
- def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
1115
+ def readReceiverComSpec(self, element: ET.Element, com_spec: ReceiverComSpec):
998
1116
  self.readElementAttributes(element, com_spec)
999
- for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1117
+ for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
1000
1118
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1001
- com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1002
- com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1003
- com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1004
- com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1119
+ com_spec.dataElementRef = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1120
+ com_spec.networkRepresentation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1121
+ com_spec.handleOutOfRange = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1122
+ com_spec.usesEndToEndProtection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1005
1123
 
1006
1124
  def getSwValues(self, element: ET.Element, key: str) -> SwValues:
1007
1125
  child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
@@ -1045,7 +1163,7 @@ class ARXMLParser(AbstractARXMLParser):
1045
1163
 
1046
1164
  def getInitValue(self, element: ET.Element) -> ValueSpecification:
1047
1165
  value_spec = None
1048
- child_element = element.find("./xmlns:INIT-VALUE/*", self.nsmap)
1166
+ child_element = self.find(element, "INIT-VALUE/*")
1049
1167
  if child_element is not None:
1050
1168
  self.logger.debug("getInitValue")
1051
1169
  value_spec = self.getValueSpecification(child_element)
@@ -1057,11 +1175,18 @@ class ARXMLParser(AbstractARXMLParser):
1057
1175
  com_spec.operationRef = self.getChildElementOptionalRefType(element, "OPERATION-REF")
1058
1176
  return com_spec
1059
1177
 
1178
+ def getParameterRequireComSpec(self, element: ET.Element) -> ParameterRequireComSpec:
1179
+ com_spec = ParameterRequireComSpec()
1180
+ self.readElementAttributes(element, com_spec)
1181
+ com_spec.setInitValue(self.getInitValue(element)) \
1182
+ .setParameterRef(self.getChildElementOptionalRefType(element, "PARAMETER-REF"))
1183
+ return com_spec
1184
+
1060
1185
  def getQueuedReceiverComSpec(self, element: ET.Element) -> QueuedReceiverComSpec:
1061
1186
  com_spec = QueuedReceiverComSpec()
1062
1187
  self.readElementAttributes(element, com_spec)
1063
1188
  self.readReceiverComSpec(element, com_spec)
1064
- com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1189
+ com_spec.queueLength = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1065
1190
  return com_spec
1066
1191
 
1067
1192
  def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
@@ -1074,11 +1199,11 @@ class ARXMLParser(AbstractARXMLParser):
1074
1199
  com_spec = NonqueuedReceiverComSpec()
1075
1200
  self.readElementAttributes(element, com_spec)
1076
1201
  self.readReceiverComSpec(element, com_spec)
1077
- com_spec.alive_timeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
1078
- com_spec.enable_updated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
1079
- com_spec.handle_never_received = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
1080
- com_spec.handel_timeout_type = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
1081
- com_spec.init_value = self.getInitValue(element)
1202
+ com_spec.aliveTimeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
1203
+ com_spec.enableUpdated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
1204
+ com_spec.handleNeverReceived = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
1205
+ com_spec.handleTimeoutType = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
1206
+ com_spec.initValue = self.getInitValue(element)
1082
1207
  return com_spec
1083
1208
 
1084
1209
  def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
@@ -1092,6 +1217,8 @@ class ARXMLParser(AbstractARXMLParser):
1092
1217
  parent.addRequiredComSpec(self.getQueuedReceiverComSpec(child_element))
1093
1218
  elif tag_name == "MODE-SWITCH-RECEIVER-COM-SPEC":
1094
1219
  parent.addRequiredComSpec(self.getModeSwitchReceiverComSpec(child_element))
1220
+ elif tag_name == "PARAMETER-REQUIRE-COM-SPEC":
1221
+ parent.addRequiredComSpec(self.getParameterRequireComSpec(child_element))
1095
1222
  else:
1096
1223
  self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1097
1224
 
@@ -1100,12 +1227,12 @@ class ARXMLParser(AbstractARXMLParser):
1100
1227
  self.logger.debug("readRPortPrototype %s" % short_name)
1101
1228
  prototype = parent.createRPortPrototype(short_name)
1102
1229
  self.readIdentifiable(element, prototype)
1103
- prototype.required_interface_tref = self.getChildElementOptionalRefType(element, "REQUIRED-INTERFACE-TREF")
1230
+ prototype.setRequiredInterfaceTRef(self.getChildElementOptionalRefType(element, "REQUIRED-INTERFACE-TREF"))
1104
1231
 
1105
1232
  self.readRequiredComSpec(element, prototype)
1106
1233
 
1107
1234
  def readAtomicSwComponentTypePorts(self, element: ET.Element, sw_component: AtomicSwComponentType):
1108
- for child_element in element.findall("./xmlns:PORTS/*", self.nsmap):
1235
+ for child_element in self.findall(element, "PORTS/*"):
1109
1236
  tag_name = self.getTagName(child_element)
1110
1237
  if tag_name == "P-PORT-PROTOTYPE":
1111
1238
  self.readPPortPrototype(child_element, sw_component)
@@ -1127,23 +1254,33 @@ class ARXMLParser(AbstractARXMLParser):
1127
1254
  self.readElementAttributes(element, com_spec)
1128
1255
  for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1129
1256
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1130
- com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1131
- com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1132
- com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1133
- com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
1134
- com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1257
+ com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
1258
+ .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
1259
+ .setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")) \
1260
+ .setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element)) \
1261
+ .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1135
1262
 
1136
1263
  def getNonqueuedSenderComSpec(self, element) -> NonqueuedSenderComSpec:
1137
1264
  com_spec = NonqueuedSenderComSpec()
1138
1265
  self.readSenderComSpec(element, com_spec)
1139
- com_spec.init_value = self.getInitValue(element)
1266
+ com_spec.setInitValue(self.getInitValue(element))
1140
1267
  return com_spec
1141
1268
 
1142
1269
  def getServerComSpec(self, element) -> ServerComSpec:
1143
1270
  com_spec = ServerComSpec()
1271
+ com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF")) \
1272
+ .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1273
+ return com_spec
1274
+
1275
+ def getQueuedSenderComSpec(self, element) -> QueuedSenderComSpec:
1276
+ com_spec = QueuedSenderComSpec()
1144
1277
  self.readSenderComSpec(element, com_spec)
1145
- com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
1146
- com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1278
+ return com_spec
1279
+
1280
+ def getModeSwitchSenderComSpec(self, element) -> ModeSwitchSenderComSpec:
1281
+ com_spec = ModeSwitchSenderComSpec()
1282
+ com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
1283
+ .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1147
1284
  return com_spec
1148
1285
 
1149
1286
  def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
@@ -1153,6 +1290,10 @@ class ARXMLParser(AbstractARXMLParser):
1153
1290
  parent.addProvidedComSpec(self.getNonqueuedSenderComSpec(child_element))
1154
1291
  elif tag_name == "SERVER-COM-SPEC":
1155
1292
  parent.addProvidedComSpec(self.getServerComSpec(child_element))
1293
+ elif tag_name == "QUEUED-SENDER-COM-SPEC":
1294
+ parent.addProvidedComSpec(self.getQueuedSenderComSpec(child_element))
1295
+ elif tag_name == "MODE-SWITCH-SENDER-COM-SPEC":
1296
+ parent.addProvidedComSpec(self.getModeSwitchSenderComSpec(child_element))
1156
1297
  else:
1157
1298
  self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1158
1299
 
@@ -1161,19 +1302,19 @@ class ARXMLParser(AbstractARXMLParser):
1161
1302
  self.logger.debug("readPPortPrototype %s" % short_name)
1162
1303
  prototype = parent.createPPortPrototype(short_name)
1163
1304
  self.readIdentifiable(element, prototype)
1164
- prototype.provided_interface_tref = self.getChildElementOptionalRefType(element, "PROVIDED-INTERFACE-TREF")
1305
+ prototype.setProvidedInterfaceTRef(self.getChildElementOptionalRefType(element, "PROVIDED-INTERFACE-TREF"))
1165
1306
 
1166
1307
  self.readProvidedComSpec(element, prototype)
1167
1308
 
1168
1309
  def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
1169
- for child_element in element.findall("./xmlns:INNER-GROUP-IREFS/xmlns:INNER-GROUP-IREF", self.nsmap):
1310
+ for child_element in self.findall(element, "INNER-GROUP-IREFS/INNER-GROUP-IREF"):
1170
1311
  inner_group_iref = InnerPortGroupInCompositionInstanceRef()
1171
- inner_group_iref.contextRef = self.getChildElementOptionalRefType(child_element, "CONTEXT-REF")
1172
- inner_group_iref.targetRef = self.getChildElementOptionalRefType(child_element, "TARGET-REF")
1312
+ #inner_group_iref.contextRef = self.getChildElementOptionalRefType(child_element, "CONTEXT-REF")
1313
+ inner_group_iref.setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
1173
1314
  parent.addInnerGroupIRef(inner_group_iref)
1174
1315
 
1175
1316
  def readPortGroupOuterPortRefs(self, element: ET.Element, parent: PortGroup):
1176
- for child_element in element.findall("./xmlns:OUTER-PORTS/xmlns:PORT-PROTOTYPE-REF-CONDITIONAL", self.nsmap):
1317
+ for child_element in self.findall(element, "OUTER-PORTS/PORT-PROTOTYPE-REF-CONDITIONAL"):
1177
1318
  parent.addOuterPortRef(self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF"))
1178
1319
 
1179
1320
  def readPortGroup(self, element: ET.Element, parent: SwComponentType):
@@ -1230,40 +1371,40 @@ class ARXMLParser(AbstractARXMLParser):
1230
1371
  self.readAtomicSwComponentType(element, sw_component)
1231
1372
 
1232
1373
  def readPPortInCompositionInstanceRef(self, element: ET.Element, p_port_in_composition_instance_ref: PPortInCompositionInstanceRef):
1233
- p_port_in_composition_instance_ref.context_component_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1234
- p_port_in_composition_instance_ref.target_p_port_ref = self.getChildElementOptionalRefType(element, "TARGET-P-PORT-REF")
1374
+ p_port_in_composition_instance_ref.setContextComponentRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")) \
1375
+ .setTargetPPortRef(self.getChildElementOptionalRefType(element, "TARGET-P-PORT-REF"))
1235
1376
 
1236
1377
  self.logger.debug("PPortInCompositionInstanceRef")
1237
1378
  self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
1238
- % (p_port_in_composition_instance_ref.context_component_ref.dest, p_port_in_composition_instance_ref.context_component_ref.value))
1379
+ % (p_port_in_composition_instance_ref.getContextComponentRef().getDest(), p_port_in_composition_instance_ref.getContextComponentRef().getValue()))
1239
1380
  self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
1240
- % (p_port_in_composition_instance_ref.target_p_port_ref.dest, p_port_in_composition_instance_ref.target_p_port_ref.value))
1381
+ % (p_port_in_composition_instance_ref.getTargetPPortRef().getDest(), p_port_in_composition_instance_ref.getTargetPPortRef().getValue()))
1241
1382
 
1242
1383
  def readRPortInCompositionInstanceRef(self, element, r_port_in_composition_instance_ref: RPortInCompositionInstanceRef):
1243
- r_port_in_composition_instance_ref.context_component_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1244
- r_port_in_composition_instance_ref.target_r_port_ref = self.getChildElementOptionalRefType(element, "TARGET-R-PORT-REF")
1384
+ r_port_in_composition_instance_ref.setContextComponentRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")) \
1385
+ .setTargetRPortRef(self.getChildElementOptionalRefType(element, "TARGET-R-PORT-REF"))
1245
1386
 
1246
1387
  self.logger.debug("RPortInCompositionInstanceRef")
1247
1388
  self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
1248
- % (r_port_in_composition_instance_ref.context_component_ref.dest, r_port_in_composition_instance_ref.context_component_ref.value))
1389
+ % (r_port_in_composition_instance_ref.getContextComponentRef().getDest(), r_port_in_composition_instance_ref.getContextComponentRef().getValue()))
1249
1390
  self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
1250
- % (r_port_in_composition_instance_ref.target_r_port_ref.dest, r_port_in_composition_instance_ref.target_r_port_ref.value))
1391
+ % (r_port_in_composition_instance_ref.getTargetRPortRef().getDest(), r_port_in_composition_instance_ref.getTargetRPortRef().getValue()))
1251
1392
 
1252
1393
  def readAssemblySwConnectorProviderIRef(self, element: ET.Element, parent: AssemblySwConnector):
1253
- child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
1394
+ child_element = self.find(element, "PROVIDER-IREF")
1254
1395
  if (child_element is not None):
1255
1396
  provide_iref = PPortInCompositionInstanceRef()
1256
1397
  self.readElementAttributes(child_element, provide_iref)
1257
1398
  self.readPPortInCompositionInstanceRef(child_element, provide_iref)
1258
- parent.provider_iref = provide_iref
1399
+ parent.setProviderIRef(provide_iref)
1259
1400
 
1260
1401
  def readAssemblySwConnectorRequesterIRef(self, element: ET.Element, parent: AssemblySwConnector):
1261
- child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
1402
+ child_element = self.find(element, "REQUESTER-IREF")
1262
1403
  if (child_element is not None):
1263
1404
  requester_iref = RPortInCompositionInstanceRef()
1264
1405
  self.readElementAttributes(child_element, requester_iref)
1265
1406
  self.readRPortInCompositionInstanceRef(child_element, requester_iref)
1266
- parent.requester_iref = requester_iref
1407
+ parent.setRequesterIRef(requester_iref)
1267
1408
 
1268
1409
  def readAssemblySwConnectors(self, element: ET.Element, parent: CompositionSwComponentType):
1269
1410
  for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
@@ -1276,26 +1417,26 @@ class ARXMLParser(AbstractARXMLParser):
1276
1417
  self.readAssemblySwConnectorRequesterIRef(child_element, connector)
1277
1418
 
1278
1419
  def readDelegationSwConnectorInnerPortIRef(self, element, parent: DelegationSwConnector):
1279
- inner_port_iref_element = element.find("./xmlns:INNER-PORT-IREF", self.nsmap)
1420
+ inner_port_iref_element = self.find(element, "INNER-PORT-IREF")
1280
1421
  if (inner_port_iref_element is not None):
1281
- child_element = inner_port_iref_element.find("./xmlns:R-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
1422
+ child_element = self.find(inner_port_iref_element, "R-PORT-IN-COMPOSITION-INSTANCE-REF")
1282
1423
  if (child_element is not None):
1283
1424
  r_port_in_composition_instance_ref = RPortInCompositionInstanceRef()
1284
1425
  self.readRPortInCompositionInstanceRef(child_element, r_port_in_composition_instance_ref)
1285
- parent.inner_port_iref = r_port_in_composition_instance_ref
1426
+ parent.setInnerPortIRref(r_port_in_composition_instance_ref)
1286
1427
  return
1287
1428
 
1288
- child_element = inner_port_iref_element.find("./xmlns:P-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
1429
+ child_element = self.find(inner_port_iref_element, "P-PORT-IN-COMPOSITION-INSTANCE-REF")
1289
1430
  if (child_element is not None):
1290
1431
  p_port_in_composition_instance_ref = PPortInCompositionInstanceRef()
1291
1432
  self.readPPortInCompositionInstanceRef(child_element, p_port_in_composition_instance_ref)
1292
- parent.inner_port_iref = p_port_in_composition_instance_ref
1433
+ parent.setInnerPortIRref(p_port_in_composition_instance_ref)
1293
1434
  return
1294
1435
 
1295
1436
  self._raiseError("Unsupported child element of INNER-PORT-IREF")
1296
1437
 
1297
1438
  def readDelegationSwConnectors(self, element, parent: CompositionSwComponentType):
1298
- for child_element in element.findall("./xmlns:CONNECTORS/xmlns:DELEGATION-SW-CONNECTOR", self.nsmap):
1439
+ for child_element in self.findall(element, "CONNECTORS/DELEGATION-SW-CONNECTOR"):
1299
1440
  short_name = self.getShortName(child_element)
1300
1441
  self.logger.debug("readDelegationSwConnectors %s" % short_name)
1301
1442
 
@@ -1303,12 +1444,12 @@ class ARXMLParser(AbstractARXMLParser):
1303
1444
  self.readIdentifiable(child_element, connector)
1304
1445
  self.readDelegationSwConnectorInnerPortIRef(child_element, connector)
1305
1446
 
1306
- if connector.inner_port_iref == None and connector.outer_port_iref == None:
1447
+ if connector.getInnerPortIRref() == None and connector.getOuterPortRef() == None:
1307
1448
  self._raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
1308
1449
 
1309
- connector.outer_port_ref = self.getChildElementOptionalRefType(child_element, "OUTER-PORT-REF")
1450
+ connector.setOuterPortRef(self.getChildElementOptionalRefType(child_element, "OUTER-PORT-REF"))
1310
1451
  self.logger.debug("OUTER-PORT-REF DEST: %s, %s"
1311
- % (connector.outer_port_ref.dest, connector.outer_port_ref.value))
1452
+ % (connector.getOuterPortRef().getDest(), connector.getOuterPortRef().getValue()))
1312
1453
 
1313
1454
  def readSwComponentPrototypes(self, element: ET.Element, parent: CompositionSwComponentType):
1314
1455
  for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
@@ -1316,7 +1457,7 @@ class ARXMLParser(AbstractARXMLParser):
1316
1457
  self.logger.debug("readSwComponentPrototypes %s" % short_name)
1317
1458
  prototype = parent.createSwComponentPrototype(short_name)
1318
1459
  self.readIdentifiable(child_element, prototype)
1319
- prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1460
+ prototype.typeTRef = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1320
1461
 
1321
1462
  def readCompositionSwComponentTypeDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
1322
1463
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
@@ -1364,30 +1505,47 @@ class ARXMLParser(AbstractARXMLParser):
1364
1505
  self.readDataTypeMaps(element, mapping_set)
1365
1506
  self.readModeRequestTypeMaps(element, mapping_set)
1366
1507
 
1367
- def readDataElements(self, element: ET.Element, parent: SenderReceiverInterface):
1508
+ def readSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1368
1509
  for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
1369
1510
  short_name = self.getShortName(child_element)
1370
- prototype = parent.createDataElement(short_name)
1511
+ prototype = sr_interface.createDataElement(short_name)
1371
1512
  self.readIdentifiable(child_element, prototype)
1372
- prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1513
+ prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1373
1514
  self.readAutosarDataPrototype(child_element, prototype)
1374
- prototype.init_value = self.getInitValue(child_element)
1515
+ prototype.initValue = self.getInitValue(child_element)
1516
+
1517
+ def readSenderReceiverInterfaceInvalidationPolicies(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1518
+ for child_element in self.findall(element, "INVALIDATION-POLICYS/INVALIDATION-POLICY"):
1519
+ policy = InvalidationPolicy()
1520
+ policy.setDataElementRef(self.getChildElementOptionalRefType(child_element, "DATA-ELEMENT-REF")) \
1521
+ .setHandleInvalid(self.getChildElementOptionalLiteral(child_element, "HANDLE-INVALID"))
1522
+ sr_interface.addInvalidationPolicy(policy)
1523
+
1524
+ def readInvalidationPolicys(self, element: ET.Element, parent: SenderReceiverInterface):
1525
+ for child_element in element.findall("./xmlns:INVALIDATION-POLICYS/xmlns:INVALIDATION-POLICY", self.nsmap):
1526
+ # short_name = self.getShortName(child_element)
1527
+ policy = parent.createInvalidationPolicy()
1528
+ self.readIdentifiable(child_element, policy)
1529
+ policy.data_element_ref = self.getChildElementOptionalRefType(child_element, "DATA-ELEMENT-REF")
1530
+ policy.handle_invalid = self.getChildElementOptionalLiteral(child_element, "HANDLE-INVALID")
1375
1531
 
1376
1532
  def readSenderReceiverInterfaces(self, element, parent: ARPackage):
1377
1533
  short_name = self.getShortName(element)
1378
1534
  sr_interface = parent.createSenderReceiverInterface(short_name)
1379
1535
  self.readIdentifiable(element, sr_interface)
1380
- sr_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1381
- self.readDataElements(element, sr_interface)
1536
+ sr_interface.isService = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1537
+ self.readSenderReceiverInterfaceDataElements(element, sr_interface)
1538
+ self.readSenderReceiverInterfaceInvalidationPolicies(element, sr_interface)
1382
1539
 
1383
1540
  def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1384
1541
  for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
1385
1542
  short_name = self.getShortName(child_element)
1386
1543
  prototype = ArgumentDataPrototype(property, short_name)
1387
1544
  self.readIdentifiable(child_element, prototype)
1388
- prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1389
- prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1545
+ prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1546
+ prototype.typeTRef = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1390
1547
  prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
1548
+ prototype.server_argument_impl_policy = self.getChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY")
1391
1549
  parent.addArgumentDataPrototype(prototype)
1392
1550
 
1393
1551
  def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
@@ -1408,10 +1566,11 @@ class ARXMLParser(AbstractARXMLParser):
1408
1566
  for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
1409
1567
  short_name = self.getShortName(child_element)
1410
1568
  error = parent.createApplicationError(short_name)
1569
+ self.readIdentifiable(child_element, error) # some errors has its uuid
1411
1570
  error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
1412
1571
 
1413
1572
  def readPortInterface(self, element: ET.Element, port_interface: PortInterface):
1414
- port_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1573
+ port_interface.isService = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1415
1574
  port_interface.serviceKind = self.getChildElementOptionalLiteral(element, "SERVICE-KIND")
1416
1575
 
1417
1576
  def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
@@ -1458,6 +1617,7 @@ class ARXMLParser(AbstractARXMLParser):
1458
1617
  for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
1459
1618
  compu_scale = CompuScale()
1460
1619
  self.readElementAttributes(child_element, compu_scale)
1620
+ compu_scale.short_label = self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")
1461
1621
  compu_scale.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
1462
1622
  compu_scale.lowerLimit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
1463
1623
  compu_scale.upperLimit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
@@ -1528,14 +1688,14 @@ class ARXMLParser(AbstractARXMLParser):
1528
1688
  self.readValueSpecification(element, value_spec)
1529
1689
  child_elements = element.findall("./xmlns:ELEMENTS/*", self.nsmap)
1530
1690
  for child_element in child_elements:
1531
- value_spec.add_element(self.getValueSpecification(child_element))
1691
+ value_spec.addElement(self.getValueSpecification(child_element))
1532
1692
  return value_spec
1533
1693
 
1534
1694
  def getConstantReference(self, element: ET.Element) -> ConstantReference:
1535
1695
  self.logger.debug("getConstantReference")
1536
1696
  value_spec = ConstantReference()
1537
1697
  self.readValueSpecification(element, value_spec)
1538
- value_spec.constant_ref = self.getChildElementOptionalRefType(element, "CONSTANT-REF")
1698
+ value_spec.setConstantRef(self.getChildElementOptionalRefType(element, "CONSTANT-REF"))
1539
1699
  return value_spec
1540
1700
 
1541
1701
  def getValueSpecification(self, element: ET.Element) -> ValueSpecification:
@@ -1558,7 +1718,7 @@ class ARXMLParser(AbstractARXMLParser):
1558
1718
 
1559
1719
  def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
1560
1720
  for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
1561
- spec.add_field(self.getValueSpecification(child_element))
1721
+ spec.addField(self.getValueSpecification(child_element))
1562
1722
 
1563
1723
  def getRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1564
1724
  value_spec = RecordValueSpecification()
@@ -1571,8 +1731,8 @@ class ARXMLParser(AbstractARXMLParser):
1571
1731
  self.logger.debug("readConstantSpecification %s" % short_name)
1572
1732
  spec = parent.createConstantSpecification(short_name)
1573
1733
  self.readIdentifiable(element, spec)
1574
- for value_spec_tag in element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
1575
- spec.value_spec = self.getValueSpecification(value_spec_tag)
1734
+ for value_spec_tag in self.findall(element, "VALUE-SPEC/*"):
1735
+ spec.setValueSpec(self.getValueSpecification(value_spec_tag))
1576
1736
 
1577
1737
  def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
1578
1738
  child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
@@ -1615,7 +1775,11 @@ class ARXMLParser(AbstractARXMLParser):
1615
1775
  self.logger.debug("readUnit %s" % short_name)
1616
1776
  unit = parent.createUnit(short_name)
1617
1777
  self.readIdentifiable(element, unit)
1618
- unit.display_name = self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")
1778
+ unit.setDisplayName(self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")) \
1779
+ .setFactorSiToUnit(self.getChildElementOptionalFloatValue(element, "FACTOR-SI-TO-UNIT")) \
1780
+ .setOffsetSiToUnit(self.getChildElementOptionalFloatValue(element, "OFFSET-SI-TO-UNIT")) \
1781
+ .setPhysicalDimensionRef(self.getChildElementOptionalRefType(element, "PHYSICAL-DIMENSION-REF"))
1782
+
1619
1783
 
1620
1784
  def readEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
1621
1785
  child_element = element.find("./xmlns:DATA-IDS", self.nsmap)
@@ -1637,11 +1801,13 @@ class ARXMLParser(AbstractARXMLParser):
1637
1801
  return desc
1638
1802
 
1639
1803
  def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
1640
- iref = VariableDataPrototypeInSystemInstanceRef()
1641
- iref.context_component_refs = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1642
- iref.context_composition_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
1643
- iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
1644
- iref.target_data_prototype_ref = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
1804
+ iref = None
1805
+ if element is not None:
1806
+ iref = VariableDataPrototypeInSystemInstanceRef()
1807
+ #iref.addContextComponentRef() = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1808
+ iref.setContextCompositionRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")) \
1809
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
1810
+ .setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
1645
1811
  return iref
1646
1812
 
1647
1813
  def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
@@ -1683,7 +1849,21 @@ class ARXMLParser(AbstractARXMLParser):
1683
1849
 
1684
1850
  def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
1685
1851
  self.readIdentifiable(element, data_type)
1686
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1852
+ data_type.swDataDefProps = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1853
+
1854
+ def readImplementationProps(self, element: ET.Element, props: ImplementationProps):
1855
+ props.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
1856
+
1857
+ def readSymbolProps(self, element: ET.Element, props: SymbolProps):
1858
+ self.readImplementationProps(element, props)
1859
+
1860
+ def readImplementationDataTypeSymbolProps(self, element: ET.Element, data_type: ImplementationDataType):
1861
+ child_element = element.find("./xmlns:SYMBOL-PROPS", self.nsmap)
1862
+ if child_element is not None:
1863
+ short_name = self.getShortName(child_element)
1864
+ self.logger.debug("readSymbolProps %s" % short_name)
1865
+ props = data_type.createSymbolProps(short_name)
1866
+ self.readSymbolProps(child_element, props)
1687
1867
 
1688
1868
  def readApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
1689
1869
  self.readAutosarDataType(element, data_type)
@@ -1835,11 +2015,128 @@ class ARXMLParser(AbstractARXMLParser):
1835
2015
  self.readIdentifiable(element, timing)
1836
2016
  self.readTimingExtension(element, timing)
1837
2017
 
2018
+ def readFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2019
+ for ref in self.getChildElementRefTypeList(element, 'FRAME-PORT-REFS/FRAME-PORT-REF'):
2020
+ triggering.addFramePortRef(ref)
2021
+ triggering.setFrameRef(self.getChildElementOptionalRefType(element, "FRAME-REF"))
2022
+ for child_element in self.findall(element, 'PDU-TRIGGERINGS/PDU-TRIGGERING-REF-CONDITIONAL'):
2023
+ triggering.addPduTriggeringRef(self.getChildElementOptionalRefType(child_element, "PDU-TRIGGERING-REF"))
2024
+
2025
+ def readCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
2026
+ self.logger.debug("Read CanFrameTriggering %s" % triggering.getShortName())
2027
+ self.readIdentifiable(element, triggering)
2028
+ self.readFrameTriggering(element, triggering)
2029
+ triggering.setCanAddressingMode(self.getChildElementOptionalLiteral(element, "CAN-ADDRESSING-MODE")) \
2030
+ .setCanFdFrameSupport(self.getChildElementOptionalBooleanValue(element, "CAN-FD-FRAME-SUPPORT")) \
2031
+ .setCanFrameRxBehavior(self.getChildElementOptionalLiteral(element, "CAN-FRAME-RX-BEHAVIOR")) \
2032
+ .setCanFrameTxBehavior(self.getChildElementOptionalLiteral(element, "CAN-FRAME-TX-BEHAVIOR")) \
2033
+ .setIdentifier(self.getChildElementOptionalNumericalValue(element, "IDENTIFIER")) \
2034
+ .setRxIdentifierRange(self.getChildElementRxIdentifierRange(element, "RX-IDENTIFIER-RANGE"))
2035
+
2036
+
2037
+ def readLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
2038
+ self.logger.debug("Read LinFrameTriggering %s" % triggering.getShortName())
2039
+ self.readIdentifiable(element, triggering)
2040
+ self.readFrameTriggering(element, triggering)
2041
+ triggering.setIdentifier(self.getChildElementOptionalNumericalValue(element, "IDENTIFIER")) \
2042
+ .setLinChecksum(self.getChildElementOptionalLiteral(element, "LIN-CHECKSUM"))
2043
+
2044
+ def readISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
2045
+ self.logger.debug("Read ISignalTriggering %s" % triggering.getShortName())
2046
+ self.readIdentifiable(element, triggering)
2047
+ triggering.setISignalGroupRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-GROUP-REF"))
2048
+ for ref in self.getChildElementRefTypeList(element, 'I-SIGNAL-PORT-REFS/I-SIGNAL-PORT-REF'):
2049
+ triggering.addISignalPortRef(ref)
2050
+ triggering.setISignalRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-REF"))
2051
+
2052
+ def readPduTriggering(self, element: ET.Element, triggering: PduTriggering):
2053
+ self.logger.debug("Read PduTriggering %s" % triggering.getShortName())
2054
+ self.readIdentifiable(element, triggering)
2055
+ for ref in self.getChildElementRefTypeList(element, 'I-PDU-PORT-REFS/I-PDU-PORT-REF'):
2056
+ triggering.addIPduPortRef(ref)
2057
+ triggering.setIPduRef(self.getChildElementOptionalRefType(element, "I-PDU-REF"))
2058
+ for child_element in self.findall(element, 'I-SIGNAL-TRIGGERINGS/I-SIGNAL-TRIGGERING-REF-CONDITIONAL'):
2059
+ triggering.addISignalTriggeringRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-TRIGGERING-REF"))
2060
+
2061
+ def readPhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
2062
+ for child_element in self.findall(element, 'COMM-CONNECTORS/COMMUNICATION-CONNECTOR-REF-CONDITIONAL'):
2063
+ channel.addCommConnectorRef(self.getChildElementOptionalRefType(child_element, "COMMUNICATION-CONNECTOR-REF"))
2064
+
2065
+ for child_element in self.findall(element, "FRAME-TRIGGERINGS/*"):
2066
+ tag_name = self.getTagName(child_element)
2067
+ if tag_name == "CAN-FRAME-TRIGGERING":
2068
+ triggering = channel.createCanFrameTriggering(self.getShortName(child_element))
2069
+ self.readCanFrameTriggering(child_element, triggering)
2070
+ elif tag_name == "LIN-FRAME-TRIGGERING":
2071
+ triggering = channel.createLinFrameTriggering(self.getShortName(child_element))
2072
+ self.readLinFrameTriggering(child_element, triggering)
2073
+ else:
2074
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2075
+
2076
+ for child_element in self.findall(element, "I-SIGNAL-TRIGGERINGS/*"):
2077
+ tag_name = self.getTagName(child_element)
2078
+ if tag_name == "I-SIGNAL-TRIGGERING":
2079
+ triggering = channel.createISignalTriggering(self.getShortName(child_element))
2080
+ self.readISignalTriggering(child_element, triggering)
2081
+ else:
2082
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2083
+
2084
+ for child_element in self.findall(element, "PDU-TRIGGERINGS/*"):
2085
+ tag_name = self.getTagName(child_element)
2086
+ if tag_name == "PDU-TRIGGERING":
2087
+ triggering = channel.createPduTriggering(self.getShortName(child_element))
2088
+ self.readPduTriggering(child_element, triggering)
2089
+ else:
2090
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2091
+
2092
+ def readCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2093
+ self.readIdentifiable(element, channel)
2094
+ self.readPhysicalChannel(element, channel)
2095
+
2096
+ def readLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2097
+ self.readIdentifiable(element, channel)
2098
+ self.readPhysicalChannel(element, channel)
2099
+
2100
+ def readCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2101
+ for child_element in self.findall(element, "PHYSICAL-CHANNELS/*"):
2102
+ tag_name = self.getTagName(child_element)
2103
+ if tag_name == "CAN-PHYSICAL-CHANNEL":
2104
+ channel = cluster.createCanPhysicalChannel(self.getShortName(child_element))
2105
+ self.readCanPhysicalChannel(child_element, channel)
2106
+ elif tag_name == "LIN-PHYSICAL-CHANNEL":
2107
+ channel = cluster.createLinPhysicalChannel(self.getShortName(child_element))
2108
+ self.readLinPhysicalChannel(child_element, channel)
2109
+ else:
2110
+ raise NotImplementedError("Unsupported Physical Channel <%s>" % tag_name)
2111
+
2112
+
2113
+ def readCommunicationCluster(self, element: ET.Element, cluster: CommunicationCluster):
2114
+ cluster.setBaudrate(self.getChildElementOptionalNumericalValue(element, "BAUDRATE"))
2115
+ self.readCommunicationClusterPhysicalChannels(element, cluster)
2116
+ cluster.setProtocolName(self.getChildElementOptionalLiteral(element, "PROTOCOL-NAME")) \
2117
+ .setProtocolVersion(self.getChildElementOptionalLiteral(element, "PROTOCOL-VERSION"))
2118
+
2119
+ def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2120
+ cluster.setCanFdBaudrate(self.getChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE"))
2121
+
1838
2122
  def readLinCluster(self, element: ET.Element, parent: ARPackage):
1839
2123
  short_name = self.getShortName(element)
1840
2124
  self.logger.debug("readLinCluster %s" % short_name)
1841
2125
  cluster = parent.createLinCluster(short_name)
1842
2126
  self.readIdentifiable(element, cluster)
2127
+ child_element = self.find(element, "LIN-CLUSTER-VARIANTS/LIN-CLUSTER-CONDITIONAL")
2128
+ if child_element is not None:
2129
+ self.readCommunicationCluster(child_element, cluster)
2130
+
2131
+ def readCanCluster(self, element: ET.Element, parent: ARPackage):
2132
+ short_name = self.getShortName(element)
2133
+ self.logger.debug("readCanCluster %s" % short_name)
2134
+ cluster = parent.createCanCluster(short_name)
2135
+ self.readIdentifiable(element, cluster)
2136
+ child_element = self.find(element, "CAN-CLUSTER-VARIANTS/CAN-CLUSTER-CONDITIONAL")
2137
+ if child_element is not None:
2138
+ self.readCommunicationCluster(child_element, cluster)
2139
+ self.readAbstractCanCluster(child_element, cluster)
1843
2140
 
1844
2141
  def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
1845
2142
  for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
@@ -1867,24 +2164,126 @@ class ARXMLParser(AbstractARXMLParser):
1867
2164
  self.logger.debug("readNmPdu %s" % short_name)
1868
2165
  pdu = parent.createNmPdu(short_name)
1869
2166
  self.readIdentifiable(element, pdu)
2167
+ self.readIPdu(element, pdu)
1870
2168
 
1871
2169
  def readNPdu(self, element: ET.Element, parent: ARPackage):
1872
2170
  short_name = self.getShortName(element)
1873
2171
  self.logger.debug("readNPdu %s" % short_name)
1874
2172
  pdu = parent.createNPdu(short_name)
1875
2173
  self.readIdentifiable(element, pdu)
2174
+ self.readIPdu(element, pdu)
1876
2175
 
2176
+ def readIPdu(self, element: ET.Element, pdu: IPdu):
2177
+ pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
2178
+
1877
2179
  def readDcmIPdu(self, element: ET.Element, parent: ARPackage):
1878
2180
  short_name = self.getShortName(element)
1879
2181
  self.logger.debug("readDcmIPdu %s" % short_name)
1880
2182
  pdu = parent.createDcmIPdu(short_name)
1881
2183
  self.readIdentifiable(element, pdu)
2184
+ self.readIPdu(element, pdu)
2185
+ pdu.setDiagPduType(self.getChildElementOptionalLiteral(element, "DIAG-PDU-TYPE"))
2186
+
2187
+ def readSecuredIPdu(self, element: ET.Element, parent: ARPackage):
2188
+ short_name = self.getShortName(element)
2189
+ self.logger.debug("readSecuredIPdu %s" % short_name)
2190
+ pdu = parent.createSecuredIPdu(short_name)
2191
+ self.readIdentifiable(element, pdu)
2192
+ self.readIPdu(element, pdu)
2193
+
2194
+ def readNmNode(self, element: ET.Element, nm_node: NmNode):
2195
+ nm_node.setControllerRef(self.getChildElementOptionalRefType(element, "CONTROLLER-REF")) \
2196
+ .setNmIfEcuRef(self.getChildElementOptionalRefType(element, "NM-IF-ECU-REF")) \
2197
+ .setNmNodeId(self.getChildElementOptionalNumericalValue(element, "NM-NODE-ID"))
2198
+ for ref in self.getChildElementRefTypeList(element, "RX-NM-PDU-REFS/RX-NM-PDU-REF"):
2199
+ nm_node.addRxNmPduRef(ref)
2200
+ for ref in self.getChildElementRefTypeList(element, "TX-NM-PDU-REFS/TX-NM-PDU-REF"):
2201
+ nm_node.addTxNmPduRefs(ref)
2202
+
2203
+ def readCanNmNode(self, element: ET.Element, parent: NmCluster):
2204
+ short_name = self.getShortName(element)
2205
+ self.logger.debug("readCanNmNode %s" % short_name)
2206
+ nm_node = parent.createCanNmNode(short_name) # type: CanNmNode
2207
+ self.readIdentifiable(element, nm_node)
2208
+ self.readNmNode(element, nm_node)
2209
+
2210
+ nm_node.setNmMsgCycleOffset(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-OFFSET")) \
2211
+ .setNmMsgReducedTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-REDUCED-TIME")) \
2212
+ .setNmRangeConfig(self.getChildElementRxIdentifierRange(element, "NM-RANGE-CONFIG"))
2213
+
2214
+ def readNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2215
+ self.logger.debug("readNmConfigNmNodes %s" % parent.short_name)
2216
+ for child_element in self.findall(element, "NM-NODES/*"):
2217
+ tag_name = self.getTagName(child_element)
2218
+ if tag_name == "CAN-NM-NODE":
2219
+ self.readCanNmNode(child_element, parent)
2220
+ else:
2221
+ self._raiseError("Unsupported Nm Node <%s>" % tag_name)
2222
+
2223
+ def getCanNmClusterCoupling(self, element: ET.Element) -> CanNmClusterCoupling:
2224
+ coupling = CanNmClusterCoupling()
2225
+
2226
+ for ref in self.getChildElementRefTypeList(element, "COUPLED-CLUSTER-REFS/COUPLED-CLUSTER-REF"):
2227
+ coupling.addCoupledClusterRef(ref)
1882
2228
 
2229
+ coupling.setNmBusloadReductionEnabled(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ENABLED")) \
2230
+ .setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
2231
+
2232
+ return coupling
2233
+
2234
+ def readNmConfigNmClusterCouplings(self, element: ET.Element, nm_config: NmConfig):
2235
+ self.logger.debug("readNmClusterNmClusterCouplings %s" % nm_config.getShortName())
2236
+ for child_element in self.findall(element, "NM-CLUSTER-COUPLINGS/*"):
2237
+ tag_name = self.getTagName(child_element)
2238
+ if tag_name == "CAN-NM-CLUSTER-COUPLING":
2239
+ nm_config.addNmClusterCouplings(self.getCanNmClusterCoupling(child_element))
2240
+ else:
2241
+ self._raiseError("Unsupported Nm Node <%s>" % tag_name)
2242
+
2243
+ def readNmCluster(self, element: ET.Element, cluster: NmCluster):
2244
+ cluster.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF")) \
2245
+ .setNmChannelId(self.getChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID")) \
2246
+ .setNmChannelSleepMaster(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER"))
2247
+ self.readNmClusterNmNodes(element, cluster)
2248
+ cluster.setNmSynchronizingNetwork(self.getChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK"))
2249
+
2250
+ def readCanNmCluster(self, element: ET.Element, parent: NmConfig):
2251
+ short_name = self.getShortName(element)
2252
+ self.logger.debug("readCanNmCluster %s" % short_name)
2253
+ cluster = parent.createCanNmCluster(short_name) # type: CanNmCluster
2254
+ self.readIdentifiable(element, cluster)
2255
+ self.readNmCluster(element, cluster)
2256
+
2257
+ cluster.setNmBusloadReductionActive(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ACTIVE")) \
2258
+ .setNmCarWakeUpRxEnabled(self.getChildElementOptionalBooleanValue(element, "NM-CAR-WAKE-UP-RX-ENABLED")) \
2259
+ .setNmCbvPosition(self.getChildElementOptionalNumericalValue(element, "NM-CBV-POSITION")) \
2260
+ .setNmChannelActive(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-ACTIVE")) \
2261
+ .setNmImmediateNmCycleTime(self.getChildElementOptionalFloatValue(element, "NM-IMMEDIATE-NM-CYCLE-TIME")) \
2262
+ .setNmImmediateNmTransmissions(self. getChildElementOptionalNumericalValue(element, "NM-IMMEDIATE-NM-TRANSMISSIONS")) \
2263
+ .setNmMessageTimeoutTime(self.getChildElementOptionalFloatValue(element, "NM-MESSAGE-TIMEOUT-TIME")) \
2264
+ .setNmMsgCycleTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-TIME")) \
2265
+ .setNmNetworkTimeout(self.getChildElementOptionalFloatValue(element, "NM-NETWORK-TIMEOUT")) \
2266
+ .setNmNidPosition(self. getChildElementOptionalNumericalValue(element, "NM-NID-POSITION")) \
2267
+ .setNmRemoteSleepIndicationTime(self.getChildElementOptionalFloatValue(element, "NM-REMOTE-SLEEP-INDICATION-TIME")) \
2268
+ .setNmRepeatMessageTime(self.getChildElementOptionalFloatValue(element, "NM-REPEAT-MESSAGE-TIME")) \
2269
+ .setNmUserDataLength(self. getChildElementOptionalNumericalValue(element, "NM-USER-DATA-LENGTH")) \
2270
+ .setNmWaitBusSleepTime(self.getChildElementOptionalFloatValue(element, "NM-WAIT-BUS-SLEEP-TIME"))
2271
+
2272
+ def readNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2273
+ for child_element in self.findall(element, "NM-CLUSTERS/*"):
2274
+ tag_name = self.getTagName(child_element)
2275
+ if tag_name == "CAN-NM-CLUSTER":
2276
+ self.readCanNmCluster(child_element, parent)
2277
+ else:
2278
+ self._raiseError("Unsupported Nm Cluster <%s>" % tag_name)
2279
+
1883
2280
  def readNmConfig(self, element: ET.Element, parent: ARPackage):
1884
2281
  short_name = self.getShortName(element)
1885
2282
  self.logger.debug("NmConfig %s" % short_name)
1886
- pdu = parent.createNmConfig(short_name)
1887
- self.readIdentifiable(element, pdu)
2283
+ config = parent.createNmConfig(short_name) # type: NmConfig
2284
+ self.readIdentifiable(element, config)
2285
+ self.readNmConfigNmClusters(element, config)
2286
+ self.readNmConfigNmClusterCouplings(element, config)
1888
2287
 
1889
2288
  def readCanTpConfig(self, element: ET.Element, parent: ARPackage):
1890
2289
  short_name = self.getShortName(element)
@@ -1898,6 +2297,12 @@ class ARXMLParser(AbstractARXMLParser):
1898
2297
  frame = parent.createCanFrame(short_name)
1899
2298
  self.readFrame(element, frame)
1900
2299
 
2300
+ def readEcuInstance(self, element: ET.Element, parent: ARPackage):
2301
+ short_name = self.getShortName(element)
2302
+ self.logger.debug("EcuInstance %s" % short_name)
2303
+ instance = parent.createEcuInstance(short_name)
2304
+ self.readIdentifiable(element, instance)
2305
+
1901
2306
  '''
1902
2307
  def getFrameMappings(self, element: ET.Element) -> List[FrameMapping]:
1903
2308
  mappings = []
@@ -1949,6 +2354,274 @@ class ARXMLParser(AbstractARXMLParser):
1949
2354
  signal.networkRepresentationProps = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")
1950
2355
  signal.systemSignalRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF")
1951
2356
 
2357
+ def readEcucValueCollectionEcucValues(self, element: ET.Element, parent: EcucValueCollection):
2358
+ for child_element in self.findall(element, "ECUC-VALUES/ECUC-MODULE-CONFIGURATION-VALUES-REF-CONDITIONAL"):
2359
+ ref = self.getChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF")
2360
+ if (ref is not None):
2361
+ parent.addEcucValueRef(ref)
2362
+ self.logger.debug("EcucValue <%s> of EcucValueCollection <%s> has been added", ref.value, parent.short_name)
2363
+
2364
+ def readEcucValueCollection(self, element: ET.Element, parent: ARPackage):
2365
+ short_name = self.getShortName(element)
2366
+ self.logger.debug("EcucValueCollection %s" % short_name)
2367
+ collection = parent.createEcucValueCollection(short_name)
2368
+ self.readIdentifiable(element, collection)
2369
+ collection.setEcuExtractRef(self.getChildElementOptionalRefType(element, "ECU-EXTRACT-REF"))
2370
+ self.readEcucValueCollectionEcucValues(element, collection)
2371
+
2372
+ def readEcucParameterValue(self, element: ET.Element, param_value: EcucParameterValue):
2373
+ param_value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2374
+ for annotation in self.getAnnotations(element):
2375
+ param_value.addAnnotation(annotation)
2376
+
2377
+ def getEcucTextualParamValue(self, element: ET.Element) -> EcucTextualParamValue:
2378
+ param_value = EcucTextualParamValue()
2379
+ self.readEcucParameterValue(element, param_value)
2380
+ param_value.setValue(self.getChildElementOptionalLiteral(element, "VALUE"))
2381
+ return param_value
2382
+
2383
+ def getEcucNumericalParamValue(self, element: ET.Element) -> EcucNumericalParamValue:
2384
+ param_value = EcucNumericalParamValue()
2385
+ self.readEcucParameterValue(element, param_value)
2386
+ param_value.setValue(self.getChildElementOptionalNumericalValue(element, "VALUE"))
2387
+ return param_value
2388
+
2389
+ def readEcucContainerValueParameterValues(self, element: ET.Element, container_value: EcucContainerValue):
2390
+ for child_element in self.findall(element, "PARAMETER-VALUES/*"):
2391
+ tag_name = self.getTagName(child_element)
2392
+ if tag_name == "ECUC-TEXTUAL-PARAM-VALUE":
2393
+ container_value.addParameterValue(self.getEcucTextualParamValue(child_element))
2394
+ elif tag_name == "ECUC-NUMERICAL-PARAM-VALUE":
2395
+ container_value.addParameterValue(self.getEcucNumericalParamValue(child_element))
2396
+ else:
2397
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % tag_name)
2398
+
2399
+ def readEcucAbstractReferenceValue(self, element: ET.Element, value: EcucAbstractReferenceValue):
2400
+ value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2401
+ for annotation in self.getAnnotations(element):
2402
+ value.addAnnotation(annotation)
2403
+
2404
+ def getEcucReferenceValue(self, element: ET.Element) -> EcucReferenceValue:
2405
+ value = EcucReferenceValue()
2406
+ self.readEcucAbstractReferenceValue(element, value)
2407
+ value.setValueRef(self.getChildElementOptionalRefType(element, "VALUE-REF"))
2408
+ return value
2409
+
2410
+ def getAnyInstanceRef(self, element: ET.Element, key) -> AnyInstanceRef:
2411
+ instance_ref = None
2412
+ child_element = self.find(element, key)
2413
+ if child_element is not None:
2414
+ instance_ref = AnyInstanceRef()
2415
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF")) \
2416
+ .setContextElementRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-ELEMENT-REF")) \
2417
+ .setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
2418
+ return instance_ref
2419
+
2420
+ def getEcucInstanceReferenceValue(self, element: ET.Element) -> EcucInstanceReferenceValue:
2421
+ value = EcucInstanceReferenceValue()
2422
+ self.readEcucAbstractReferenceValue(element, value)
2423
+ value.setValueIRef(self.getAnyInstanceRef(element, "VALUE-IREF"))
2424
+ return value
2425
+
2426
+ def readEcucContainerValueReferenceValues(self, element: ET.Element, container_value: EcucContainerValue):
2427
+ for child_element in self.findall(element, "REFERENCE-VALUES/*"):
2428
+ tag_name = self.getTagName(child_element)
2429
+ if tag_name == "ECUC-REFERENCE-VALUE":
2430
+ container_value.addReferenceValue(self.getEcucReferenceValue(child_element))
2431
+ elif tag_name == "ECUC-INSTANCE-REFERENCE-VALUE":
2432
+ container_value.addReferenceValue(self.getEcucInstanceReferenceValue(child_element))
2433
+ else:
2434
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % tag_name)
2435
+
2436
+ def readEcucContainerValue(self, element: ET.Element, container_value: EcucContainerValue):
2437
+ self.readIdentifiable(element, container_value)
2438
+ container_value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2439
+ self.readEcucContainerValueParameterValues(element, container_value)
2440
+ self.readEcucContainerValueReferenceValues(element, container_value)
2441
+ self.readEcucContainerValueSubContainers(element, container_value)
2442
+
2443
+ def readEcucContainerValueEcucContainerValue(self, element: ET.Element, parent: EcucContainerValue):
2444
+ short_name = self.getShortName(element)
2445
+ self.logger.debug("EcucContainerValue %s" % short_name)
2446
+ container_value = parent.createSubContainer(short_name)
2447
+ self.readEcucContainerValue(element, container_value)
2448
+
2449
+ def readEcucContainerValueSubContainers(self, element: ET.Element, parent: EcucContainerValue):
2450
+ for child_element in self.findall(element, "SUB-CONTAINERS/*"):
2451
+ tag_name = self.getTagName(child_element)
2452
+ if tag_name == "ECUC-CONTAINER-VALUE":
2453
+ self.readEcucContainerValueEcucContainerValue(child_element, parent)
2454
+ else:
2455
+ raise NotImplementedError("Unsupported Sub Container %s" % tag_name)
2456
+
2457
+ def readEcucModuleConfigurationValuesEcucContainerValue(self, element: ET.Element, parent: EcucModuleConfigurationValues):
2458
+ short_name = self.getShortName(element)
2459
+ self.logger.debug("EcucContainerValue %s" % short_name)
2460
+ container_value = parent.createContainer(short_name)
2461
+ self.readEcucContainerValue(element, container_value)
2462
+
2463
+ def readEcucModuleConfigurationValuesContainers(self, element: ET.Element, values: EcucModuleConfigurationValues):
2464
+ for child_element in self.findall(element, "CONTAINERS/*"):
2465
+ tag_name = self.getTagName(child_element)
2466
+ if tag_name == "ECUC-CONTAINER-VALUE":
2467
+ self.readEcucModuleConfigurationValuesEcucContainerValue(child_element, values)
2468
+ else:
2469
+ raise NotImplementedError("Unsupported Container %s" % tag_name)
2470
+
2471
+ def readEcucModuleConfigurationValues(self, element: ET.Element, parent: ARPackage):
2472
+ short_name = self.getShortName(element)
2473
+ self.logger.debug("EcucModuleConfigurationValues %s" % short_name)
2474
+ values = parent.createEcucModuleConfigurationValues(short_name)
2475
+ self.readIdentifiable(element, values)
2476
+ values.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2477
+ values.setImplementationConfigVariant(self.getChildElementOptionalLiteral(element, "IMPLEMENTATION-CONFIG-VARIANT"))
2478
+ values.setModuleDescriptionRef(self.getChildElementOptionalRefType(element, "MODULE-DESCRIPTION-REF"))
2479
+ self.readEcucModuleConfigurationValuesContainers(element, values)
2480
+
2481
+ def readPhysicalDimensions(self, element: ET.Element, parent: ARPackage):
2482
+ short_name = self.getShortName(element)
2483
+ self.logger.debug("readPhysicalDimensions %s" % short_name)
2484
+ dimension = parent.createPhysicalDimension(short_name)
2485
+ self.readIdentifiable(element, dimension)
2486
+ dimension.setCurrentExp(self.getChildElementOptionalNumericalValue(element, "CURRENT-EXP")) \
2487
+ .setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP")) \
2488
+
2489
+ '''
2490
+ def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
2491
+ mappings = []
2492
+ for child_element in self.findall(element, tag_name):
2493
+ mapping = IPduMapping()
2494
+ mapping.sourceIPduRef = self.getChildElementOptionalRefType(child_element, "SOURCE-IPDU-REF")
2495
+ mapping.targetIPduRef = self.getChildElementOptionalRefType(child_element, "TARGET-IPDU-REF")
2496
+ mappings.append(mapping)
2497
+ return mappings
2498
+ '''
2499
+
2500
+ def readISignalGroup(self, element: ET.Element, parent: ARPackage):
2501
+ short_name = self.getShortName(element)
2502
+ self.logger.debug("ISignalGroup %s" % short_name)
2503
+ group = parent.createISignalGroup(short_name)
2504
+ self.readIdentifiable(element, group)
2505
+ for ref_type in self.getChildElementRefTypeList(element, "I-SIGNAL-REFS/I-SIGNAL-REF"):
2506
+ group.addISignalRef(ref_type)
2507
+ group.systemSignalGroupRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-GROUP-REF")
2508
+
2509
+ def readSystemSignal(self, element: ET.Element, parent: ARPackage):
2510
+ short_name = self.getShortName(element)
2511
+ self.logger.debug("SystemSignal %s" % short_name)
2512
+ signal = parent.createSystemSignal(short_name)
2513
+ self.readIdentifiable(element, signal)
2514
+ signal.setDynamicLength(self.getChildElementOptionalBooleanValue(element, "DYNAMIC-LENGTH"))
2515
+
2516
+ def readSystemSignalGroup(self, element: ET.Element, parent: ARPackage):
2517
+ short_name = self.getShortName(element)
2518
+ self.logger.debug("SystemSignalGroup %s" % short_name)
2519
+ group = parent.createSystemSignalGroup(short_name)
2520
+ self.readIdentifiable(element, group)
2521
+ for ref_type in self.getChildElementRefTypeList(element, "SYSTEM-SIGNAL-REFS/SYSTEM-SIGNAL-REF"):
2522
+ group.addSystemSignalRefs(ref_type)
2523
+
2524
+ def readISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
2525
+ for child_element in self.findall(element, "I-SIGNAL-TO-PDU-MAPPINGS/I-SIGNAL-TO-I-PDU-MAPPING"):
2526
+ short_name = self.getShortName(child_element)
2527
+ mapping = parent.createISignalToPduMappings(short_name)
2528
+ self.readIdentifiable(child_element, mapping)
2529
+ mapping.setISignalRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-REF")) \
2530
+ .setISignalGroupRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF")) \
2531
+ .setPackingByteOrder(self.getChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER")) \
2532
+ .setStartPosition(self.getChildElementOptionalNumericalValue(child_element, "START-POSITION")) \
2533
+ .setTransferProperty(self.getChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY")) \
2534
+ .setUpdateIndicationBitPosition(self.getChildElementOptionalNumericalValue(child_element, "UPDATE-INDICATION-BIT-POSITION"))
2535
+
2536
+ def readISignalIPdu(self, element: ET.Element, parent: ARPackage):
2537
+ short_name = self.getShortName(element)
2538
+ self.logger.debug("ISignalIPdu %s" % short_name)
2539
+ i_pdu = parent.createISignalIPdu(short_name)
2540
+ self.readIdentifiable(element, i_pdu)
2541
+ i_pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
2542
+ self.readISignalToPduMappings(element, i_pdu)
2543
+ i_pdu.setUnusedBitPattern(self.getChildElementOptionalLiteral(element, "UNUSED-BIT-PATTERN"))
2544
+
2545
+ def getISignalIPduRefs(self, element: ET.Element) -> List[RefType]:
2546
+ ref_types = []
2547
+ for child_element in self.findall(element, "I-SIGNAL-I-PDUS/I-SIGNAL-I-PDU-REF-CONDITIONAL"):
2548
+ ref_types.append(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-I-PDU-REF"))
2549
+ return ref_types
2550
+
2551
+ def readISignalIPduGroup(self, element: ET.Element, parent: ARPackage):
2552
+ short_name = self.getShortName(element)
2553
+ self.logger.debug("ISignalIPduGroup %s" % short_name)
2554
+ group = parent.createISignalIPduGroup(short_name)
2555
+ self.readIdentifiable(element, group)
2556
+ group.communicationDirection = self.getChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION")
2557
+ group.communicationMode = self.getChildElementOptionalLiteral(element, "COMMUNICATION-MODE")
2558
+ for ref_type in self.getChildElementRefTypeList(element, "CONTAINED-I-SIGNAL-I-PDU-GROUP-REFS/CONTAINED-I-SIGNAL-I-PDU-GROUP-REF"):
2559
+ group.addContainedISignalIPduGroupRef(ref_type)
2560
+ for ref_type in self.getISignalIPduRefs(element):
2561
+ group.addISignalIPduRef(ref_type)
2562
+
2563
+ def getSenderReceiverToSignalMapping(self, element: ET.Element) -> SenderReceiverToSignalMapping:
2564
+ mapping = SenderReceiverToSignalMapping()
2565
+ mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
2566
+ mapping.setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
2567
+ return mapping
2568
+
2569
+ def getSenderReceiverToSignalGroupMapping(self, element: ET.Element) -> SenderReceiverToSignalGroupMapping:
2570
+ mapping = SenderReceiverToSignalGroupMapping()
2571
+ mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
2572
+ mapping.setSignalGroupRef(self.getChildElementOptionalRefType(element, "SIGNAL-GROUP-REF"))
2573
+ return mapping
2574
+
2575
+ def readSystemMappingDataMappings(self, element: ET.Element, mapping: SystemMapping):
2576
+ for child_element in self.findall(element, "DATA-MAPPINGS/*"):
2577
+ tag_name = self.getTagName(child_element)
2578
+ if tag_name == "SENDER-RECEIVER-TO-SIGNAL-MAPPING":
2579
+ mapping.addDataMapping(self.getSenderReceiverToSignalMapping(child_element))
2580
+ elif tag_name == "SENDER-RECEIVER-TO-SIGNAL-GROUP-MAPPING":
2581
+ mapping.addDataMapping(self.getSenderReceiverToSignalGroupMapping(child_element))
2582
+ else:
2583
+ raise NotImplementedError("Unsupported Data Mapping %s" % tag_name)
2584
+
2585
+ def readSystemMapping(self, element: ET.Element, parent: System):
2586
+ short_name = self.getShortName(element)
2587
+ self.logger.debug("SystemMapping %s" % short_name)
2588
+ mapping = parent.createSystemMapping(short_name)
2589
+ self.readIdentifiable(element, mapping)
2590
+ self.readSystemMappingDataMappings(element, mapping)
2591
+
2592
+ def readSystemMappings(self, element: ET.Element, system: System):
2593
+ for child_element in self.findall(element, "MAPPINGS/*"):
2594
+ tag_name = self.getTagName(child_element)
2595
+ if tag_name == "SYSTEM-MAPPING":
2596
+ self.readSystemMapping(child_element, system)
2597
+ else:
2598
+ raise NotImplementedError("Unsupported Mapping %s" % tag_name)
2599
+
2600
+ def readSystem(self, element: ET.Element, parent: ARPackage):
2601
+ short_name = self.getShortName(element)
2602
+ self.logger.debug("System %s" % short_name)
2603
+ system = parent.createSystem(short_name)
2604
+ self.readIdentifiable(element, system)
2605
+
2606
+ system.setEcuExtractVersion(self.getChildElementOptionalLiteral(element, "ECU-EXTRACT-VERSION"))
2607
+ for child_element in self.findall(element, "FIBEX-ELEMENTS/FIBEX-ELEMENT-REF-CONDITIONAL"):
2608
+ system.addFibexElementRef(self.getChildElementOptionalRefType(child_element, "FIBEX-ELEMENT-REF"))
2609
+ self.readSystemMappings(element, system)
2610
+
2611
+ def readParameterInterfaceParameters(self, element: ET.Element, parent: ParameterInterface):
2612
+ for child_element in element.findall("./xmlns:PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
2613
+ short_name = self.getShortName(child_element)
2614
+ prototype = parent.createParameter(short_name)
2615
+ self.readParameterDataPrototype(child_element, prototype)
2616
+
2617
+ def readParameterInterface(self, element: ET.Element, parent: ARPackage):
2618
+ short_name = self.getShortName(element)
2619
+ self.logger.debug("ParameterInterface %s" % short_name)
2620
+ pi_interface = parent.createParameterInterface(short_name)
2621
+ self.readIdentifiable(element, pi_interface)
2622
+ self.readParameterInterfaceParameters(element, pi_interface)
2623
+
2624
+
1952
2625
  def readARPackageElements(self, element: ET.Element, parent: ARPackage):
1953
2626
  for child_element in self.findall(element, "./ELEMENTS/*"):
1954
2627
  tag_name = self.getTagName(child_element.tag)
@@ -2022,38 +2695,46 @@ class ARXMLParser(AbstractARXMLParser):
2022
2695
  self.readNPdu(child_element, parent)
2023
2696
  elif tag_name == "DCM-I-PDU":
2024
2697
  self.readDcmIPdu(child_element, parent)
2698
+ elif tag_name == "SECURED-I-PDU":
2699
+ self.readSecuredIPdu(child_element, parent)
2025
2700
  elif tag_name == "NM-CONFIG":
2026
2701
  self.readNmConfig(child_element, parent)
2027
2702
  elif tag_name == "CAN-TP-CONFIG":
2028
2703
  self.readCanTpConfig(child_element, parent)
2029
- elif tag_name == "SYSTEM":
2704
+ elif tag_name == "LIN-TP-CONFIG":
2030
2705
  pass
2706
+ elif tag_name == "SYSTEM":
2707
+ self.readSystem(child_element, parent)
2031
2708
  elif tag_name == "ECU-INSTANCE":
2032
- pass
2709
+ self.readEcuInstance(child_element, parent)
2033
2710
  elif tag_name == "GATEWAY":
2034
2711
  self.readGateway(child_element, parent)
2035
2712
  elif tag_name == "I-SIGNAL-I-PDU-GROUP":
2036
- pass
2713
+ self.readISignalIPduGroup(child_element, parent)
2037
2714
  elif tag_name == "CAN-CLUSTER":
2038
- pass
2715
+ self.readCanCluster(child_element, parent)
2039
2716
  elif tag_name == "CAN-FRAME":
2040
2717
  self.readCanFrame(child_element, parent)
2041
2718
  elif tag_name == "I-SIGNAL":
2042
2719
  self.readISignal(child_element, parent)
2043
- pass
2044
2720
  elif tag_name == "I-SIGNAL-GROUP":
2045
- pass
2721
+ self.readISignalGroup(child_element, parent)
2046
2722
  elif tag_name == "I-SIGNAL-I-PDU":
2047
- pass
2723
+ self.readISignalIPdu(child_element, parent)
2048
2724
  elif tag_name == "SYSTEM-SIGNAL":
2049
- pass
2725
+ self.readSystemSignal(child_element, parent)
2050
2726
  elif tag_name == "SYSTEM-SIGNAL-GROUP":
2051
- pass
2727
+ self.readSystemSignalGroup(child_element, parent)
2728
+ elif tag_name == "ECUC-VALUE-COLLECTION":
2729
+ self.readEcucValueCollection(child_element, parent)
2730
+ elif tag_name == "ECUC-MODULE-CONFIGURATION-VALUES":
2731
+ self.readEcucModuleConfigurationValues(child_element, parent)
2732
+ elif tag_name == "PHYSICAL-DIMENSION":
2733
+ self.readPhysicalDimensions(child_element, parent)
2734
+ elif tag_name == "PARAMETER-INTERFACE":
2735
+ self.readParameterInterface(child_element, parent)
2052
2736
  else:
2053
2737
  self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
2054
- #pass
2055
-
2056
-
2057
2738
 
2058
2739
  def readARPackages(self, element: ET.Element, parent: ARPackage):
2059
2740
  for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
@@ -2068,7 +2749,7 @@ class ARXMLParser(AbstractARXMLParser):
2068
2749
 
2069
2750
 
2070
2751
  def load(self, filename, document: AUTOSAR):
2071
- self.logger.info("Load %s ..." % filename)
2752
+ self.logger.info("Load %s ..." % os.path.realpath(filename))
2072
2753
 
2073
2754
  tree = ET.parse(filename)
2074
2755
  root = tree.getroot()
@@ -2077,3 +2758,5 @@ class ARXMLParser(AbstractARXMLParser):
2077
2758
 
2078
2759
  self.getAUTOSARInfo(root, document)
2079
2760
  self.readARPackages(root, document)
2761
+
2762
+ document.reload()