armodel 1.4.0__py3-none-any.whl → 1.4.3__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 (58) hide show
  1. armodel/__init__.py +2 -1
  2. armodel/cli/arxml_dump_cli.py +8 -6
  3. armodel/cli/arxml_format_cli.py +72 -0
  4. armodel/cli/connector_update_cli.py +11 -4
  5. armodel/data_models/__init__.py +0 -0
  6. armodel/data_models/sw_connector.py +22 -0
  7. armodel/lib/data_analyzer.py +1 -1
  8. armodel/models/__init__.py +3 -2
  9. armodel/models/annotation.py +20 -0
  10. armodel/models/ar_object.py +163 -18
  11. armodel/models/ar_package.py +110 -14
  12. armodel/models/ar_ref.py +62 -6
  13. armodel/models/bsw_module_template.py +97 -26
  14. armodel/models/calibration.py +107 -4
  15. armodel/models/common_structure.py +112 -37
  16. armodel/models/communication.py +10 -1
  17. armodel/models/data_def_properties.py +16 -0
  18. armodel/models/data_dictionary.py +46 -9
  19. armodel/models/data_prototype.py +24 -5
  20. armodel/models/datatype.py +69 -20
  21. armodel/models/end_to_end_protection.py +67 -0
  22. armodel/models/general_structure.py +25 -15
  23. armodel/models/global_constraints.py +4 -4
  24. armodel/models/implementation.py +80 -32
  25. armodel/models/m2_msr.py +6 -4
  26. armodel/models/multilanguage_data.py +42 -0
  27. armodel/models/per_instance_memory.py +14 -0
  28. armodel/models/port_interface.py +27 -4
  29. armodel/models/port_prototype.py +37 -17
  30. armodel/models/record_layout.py +118 -0
  31. armodel/models/service_mapping.py +11 -0
  32. armodel/models/service_needs.py +48 -0
  33. armodel/models/sw_component.py +224 -39
  34. armodel/parser/abstract_arxml_parser.py +248 -0
  35. armodel/parser/arxml_parser.py +1280 -810
  36. armodel/parser/connector_xlsx_parser.py +190 -0
  37. armodel/parser/excel_parser.py +18 -0
  38. armodel/tests/test_armodel/models/test_ar_object.py +152 -0
  39. armodel/tests/test_armodel/models/test_ar_package.py +1 -1
  40. armodel/tests/test_armodel/models/test_common_structure.py +2 -2
  41. armodel/tests/test_armodel/models/test_data_dictionary.py +7 -7
  42. armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
  43. armodel/tests/test_armodel/models/test_datatype.py +4 -4
  44. armodel/tests/test_armodel/models/test_general_structure.py +1 -1
  45. armodel/tests/test_armodel/models/test_implementation.py +26 -0
  46. armodel/tests/test_armodel/models/test_m2_msr.py +4 -4
  47. armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
  48. armodel/tests/test_armodel/parser/test_parse_bswmd.py +70 -46
  49. armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
  50. armodel/writer/abstract_arxml_writer.py +123 -0
  51. armodel/writer/arxml_writer.py +1464 -350
  52. {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/METADATA +90 -3
  53. armodel-1.4.3.dist-info/RECORD +78 -0
  54. {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/WHEEL +1 -1
  55. {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/entry_points.txt +2 -0
  56. armodel-1.4.0.dist-info/RECORD +0 -60
  57. {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/LICENSE +0 -0
  58. {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/top_level.txt +0 -0
@@ -1,147 +1,61 @@
1
- from ..models.unit import Unit
1
+ import xml.etree.ElementTree as ET
2
+
3
+ from armodel.models.bsw_module_template import BswModeSenderPolicy
4
+
5
+ from .abstract_arxml_parser import AbstractARXMLParser
6
+
7
+ from ..models.port_interface import ModeSwitchInterface, PortInterface
8
+ from ..models.common_structure import MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
9
+ from ..models.implementation import BswImplementation, EngineeringObject
10
+ from ..models.general_structure import MultilanguageReferrable
11
+ from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultilanguageLongName
12
+ from ..models.data_def_properties import ValueList
13
+ from ..models.record_layout import SwRecordLayoutGroup, SwRecordLayoutGroupContent, SwRecordLayoutV
14
+ from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, BaseTypeDirectDefinition
15
+ from ..models.calibration import SwAxisGrouped, SwAxisIndividual, SwCalprmAxis, SwCalprmAxisSet
16
+ from ..models.communication import CompositeNetworkRepresentation
17
+ from ..models.end_to_end_protection import EndToEndDescription, EndToEndProtection, EndToEndProtectionSet, EndToEndProtectionVariablePrototype
18
+ from ..models.service_mapping import RoleBasedPortAssignment
19
+ from ..models.ar_package import AUTOSAR, ARPackage
20
+ from ..models.ar_object import ARLiteral
21
+ from ..models.service_needs import RoleBasedDataAssignment
22
+ from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
23
+ from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
24
+ from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype
25
+ from ..models.port_prototype import QueuedReceiverComSpec
26
+ from ..models.annotation import Annotation, GeneralAnnotation
2
27
  from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
3
28
 
4
- from ..models import AUTOSAR, ARPackage, ARObject, EcuAbstractionSwComponentType, AtomicSwComponentType, SwComponentType, CompositionSwComponentType
5
- from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
29
+ from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
6
30
  from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
7
- from ..models import RefType, AutosarVariableRef, ArVariableInImplementationDataInstanceRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
31
+ from ..models import AutosarVariableRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
8
32
  from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
9
- from ..models import DataPrototype, RPortPrototype, PPortPrototype
10
- from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec, QueuedReceiverComSpec
11
- from ..models import SenderComSpec, NonqueuedSenderComSpec
33
+ from ..models import RPortPrototype, PPortPrototype
34
+ from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec
35
+ from ..models import SenderComSpec, NonqueuedSenderComSpec, ServerComSpec
12
36
  from ..models import SenderReceiverInterface, ClientServerInterface, ClientServerOperation, ArgumentDataPrototype
13
- from ..models import AutosarDataType, ARElement, Identifiable, AdminData, Sdg, Sd, MultilanguageReferrable, Referrable, LLongName, MultilanguageLongName
37
+ from ..models import Identifiable, AdminData, Sdg, Sd
14
38
  from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
15
39
  from ..models import DelegationSwConnector
16
- from ..models import CompuMethod, CompuScale, Limit, CompuScales, Compu, CompuConst, CompuConstTextContent, CompuScaleConstantContents, CompuScaleRationalFormula, CompuRationalCoeffs, CompuNominatorDenominator
40
+ from ..models import CompuMethod, CompuScale, CompuScales, Compu, CompuConst, CompuConstTextContent, CompuScaleConstantContents, CompuScaleRationalFormula, CompuRationalCoeffs, CompuNominatorDenominator
17
41
  from ..models import InternalBehavior, ExecutableEntity
18
42
  from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
19
43
  from ..models import TransmissionAcknowledgementRequest
20
- from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
44
+ from ..models import BswModuleDescription, BswInternalBehavior, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
21
45
  from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
22
- from ..models import ConstantSpecification, RecordValueSpecification
46
+ from ..models import RecordValueSpecification
23
47
  from ..models import ApplicationRecordDataType
24
48
  from ..models import SwValueCont, SwValues
25
- from ..models import ARBoolean, ARLiteral
26
- from ..models import BaseType
27
49
 
28
- from typing import List
29
- from colorama import Fore
30
- import xml.etree.ElementTree as ET
31
- import re
32
- import logging
33
-
34
- class ARXMLParser:
35
- def __init__(self, options = None):
36
- self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
37
- self.options = {}
38
- self.options['warning'] = False
39
- self.logger = logging.getLogger()
50
+ class ARXMLParser(AbstractARXMLParser):
51
+ def __init__(self, options=None) -> None:
52
+ super().__init__(options)
40
53
 
41
- self._processOptions(options=options)
42
-
43
- def _processOptions(self, options):
44
- if options:
45
- if 'warning' in options:
46
- self.options['warning'] = options['warning']
47
-
48
- def _raiseError(self, error_msg):
49
- if (self.options['warning'] == True):
50
- self.logger.error(Fore.RED + error_msg + Fore.WHITE)
51
- else:
52
- raise ValueError(error_msg)
53
-
54
- def getPureTagName(self, tag):
55
- return re.sub(r'\{[\w:\/.]+\}(\w+)', r'\1', tag)
56
-
57
- def readChildElement(self, short_name: str, element: ET.Element, key: str) -> str:
58
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
59
- if (child_element != None):
60
- return child_element.text
61
- self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
62
-
63
- def readChildOptionalElement(self, element: ET.Element, key: str) -> str:
64
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
65
- if (child_element != None):
66
- return child_element.text
67
- return None
68
-
69
- def readChildElementLiteral(self, short_name: str, element: ET.Element, key: str) -> ARLiteral:
70
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
71
- if (child_element != None):
72
- literal = ARLiteral()
73
- self.readElementAttributes(child_element, literal)
74
- literal.value = child_element.text
75
- return literal
76
- self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
77
-
78
- def readChildOptionalElementLiteral(self, element: ET.Element, key: str) -> ARLiteral:
79
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
80
- if (child_element != None):
81
- self.logger.debug("readChildOptionalElementLiteral : %s" % child_element.text)
82
- literal = ARLiteral()
83
- self.readElementAttributes(child_element, literal)
84
- literal.value = child_element.text
85
- return literal
86
- return None
87
-
88
- def _convertStringToBooleanValue(self, value: str) -> bool:
89
- if (value == "true"):
90
- return True
91
- return False
92
-
93
- def readChildElementFloatValue(self, short_name: str, element: ET.Element, key: str) -> float:
94
- value = self.readChildElement(short_name, element, key)
95
- if (value == None):
96
- return None
97
- return float(value)
98
-
99
- def readChildElementBooleanValue(self, short_name: str, element: ET.Element, key: str) -> ARBoolean:
100
- literal = self.readChildElementLiteral(short_name, element, key)
101
- bool_value = ARBoolean()
102
- bool_value.timestamp = literal.timestamp
103
- bool_value.value = self._convertStringToBooleanValue(literal.value)
104
- return bool_value
105
-
106
- def readChildOptionalElementBooleanValue(self, element: ET.Element, key: str) -> ARBoolean:
107
- literal = self.readChildOptionalElementLiteral(element, key)
108
- if (literal == None):
109
- return None
110
- bool_value = ARBoolean()
111
- bool_value.timestamp = literal.timestamp
112
- bool_value.value = self._convertStringToBooleanValue(literal.value)
113
- return bool_value
114
-
115
- def _convertStringToNumberValue(self, value) -> int:
116
- m = re.match(r"0x([0-9a-f]+)", value, re.I)
117
- if (m):
118
- return int(m.group(1), 16)
119
- return int(value)
120
-
121
- def readChildElementNumberValue(self, short_name: str, element: ET.Element, key: str) -> int:
122
- value = self.readChildElement(short_name, element, key)
123
- return self._convertStringToNumberValue(value)
124
-
125
- def readChildOptionalElementNumberValue(self, element: ET.Element, key: str) -> int:
126
- value = self.readChildOptionalElement(element, key)
127
- if (value == None):
128
- return None
129
- return self._convertStringToNumberValue(value)
130
-
131
- def readChildLimitElement(self, element: ET.Element, key: str) -> Limit:
132
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
133
- if (child_element != None):
134
- limit = Limit()
135
- if ('INTERVAL-TYPE' in child_element.attrib):
136
- limit.interval_type = child_element.attrib['INTERVAL-TYPE']
137
- else:
138
- limit.interval_type = "CLOSED"
139
- limit.value = child_element.text
140
- return limit
141
- return None
142
-
143
- def readShortName(self, element: ET.Element) -> str:
144
- return self.readChildElement("", element, "SHORT-NAME")
54
+ def getShortName(self, element: ET.Element) -> str:
55
+ child_element = self.find(element, "SHORT-NAME")
56
+ if child_element is None:
57
+ raise ValueError("Short Name is required")
58
+ return child_element.text
145
59
 
146
60
  def readSd(self, element: ET.Element, sdg: Sdg):
147
61
  for child_element in element.findall("./xmlns:SD", self.nsmap):
@@ -154,7 +68,8 @@ class ARXMLParser:
154
68
  def readSdg(self, element: ET.Element, admin_data: AdminData):
155
69
  for child_element in element.findall("./xmlns:SDGS/xmlns:SDG", self.nsmap):
156
70
  sdg = Sdg()
157
- sdg.gid = child_element.attrib["GID"]
71
+ if 'GID' in child_element.attrib:
72
+ sdg.gid = child_element.attrib["GID"]
158
73
  self.readSd(child_element, sdg)
159
74
  admin_data.addSdg(sdg)
160
75
 
@@ -165,91 +80,73 @@ class ARXMLParser:
165
80
  admin_data = AdminData()
166
81
  self.readSdg(child_element, admin_data)
167
82
  identifiable.admin_data = admin_data
83
+
84
+ def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
85
+ self.readElementAttributes(element, referrable)
86
+ referrable.long_name = self.getMultilanguageLongName(element, "LONG-NAME")
168
87
 
169
88
  def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
170
- self.readElementAttributes(element, identifiable)
171
89
  self.readMultilanguageReferrable(element, identifiable)
172
- identifiable.category = self.readChildOptionalElement(element, "CATEGORY")
90
+ identifiable.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
91
+ identifiable.desc = self.getMultiLanguageOverviewParagraph(element, "DESC")
173
92
  self.readAdminData(element, identifiable)
174
-
175
- def _readChildRefElementDestAndValue(self, element) -> RefType:
176
- ref = RefType()
177
- ref.dest = element.attrib['DEST']
178
- ref.value = element.text
179
- return ref
180
-
181
- def readChildRefElement(self, short_name: str, element: ET.Element, key: str) -> RefType:
182
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
183
- if (child_element != None):
184
- return self._readChildRefElementDestAndValue(child_element)
185
- self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
186
-
187
- def readChildOptionalRefElement(self, element:ET.Element, key: str) -> RefType:
188
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
189
- if (child_element != None):
190
- return self._readChildRefElementDestAndValue(child_element)
191
- return None
192
-
193
- def readChildRefElementList(self, element: ET.Element, key: str) -> List[RefType]:
194
- child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
195
- results = []
196
- for child_element in child_elements:
197
- ref = RefType()
198
- ref.dest = child_element.attrib['DEST']
199
- ref.value = child_element.text
200
- results.append(ref)
201
- return results
202
-
203
- def readElementOptionalAttrib(self, element: ET.Element, key: str) -> str:
204
- if key in element.attrib:
205
- return element.attrib[key]
206
- return None
207
93
 
208
- def readMultilanguageLongName(self, element: ET.Element, long_name: MultilanguageLongName):
94
+ def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
209
95
  for child_element in element.findall("./xmlns:L-4", self.nsmap):
210
96
  l4 = LLongName()
211
97
  self.readElementAttributes(child_element, l4)
212
98
  l4.value = child_element.text
213
99
  if 'L' in child_element.attrib:
214
100
  l4.l = child_element.attrib['L']
215
- long_name.add_l4(l4)
101
+ long_name.addL4(l4)
216
102
 
217
- def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
218
- child_element = element.find("./xmlns:LONG-NAME", self.nsmap)
103
+ def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
104
+ long_name = None
105
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
219
106
  if child_element is not None:
220
- referrable.long_name = MultilanguageLongName()
221
- self.readElementAttributes(child_element, referrable.long_name)
222
- self.readMultilanguageLongName(child_element, referrable.long_name)
223
-
224
- def readElementAttributes(self, element: ET.Element, ar_object: ARObject):
225
- ar_object.timestamp = self.readElementOptionalAttrib(element, "T") # read the timestamp
226
- ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the uuid
227
-
228
- if ar_object.timestamp is not None:
229
- self.logger.debug("Timestamp: %s" % ar_object.timestamp)
230
- if ar_object.uuid is not None:
231
- self.logger.debug("UUID: %s" % ar_object.uuid)
107
+ long_name = MultilanguageLongName()
108
+ self.readElementAttributes(child_element, long_name)
109
+ self.readLLongName(child_element, long_name)
110
+ return long_name
111
+
112
+ def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
113
+ for child_element in element.findall("./xmlns:L-2", self.nsmap):
114
+ l2 = LOverviewParagraph()
115
+ self.readElementAttributes(child_element, l2)
116
+ l2.value = child_element.text
117
+ if 'L' in child_element.attrib:
118
+ l2.l = child_element.attrib['L']
119
+ paragraph.addL2(l2)
120
+
121
+ def getMultiLanguageOverviewParagraph(self, element: ET.Element, key: str) -> MultiLanguageOverviewParagraph:
122
+ paragraph = None
123
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
124
+ if child_element is not None:
125
+ paragraph = MultiLanguageOverviewParagraph()
126
+ self.readElementAttributes(child_element, paragraph)
127
+ self.readLOverviewParagraph(child_element, paragraph)
128
+ return paragraph
232
129
 
233
130
  def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
234
131
  child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
235
- if (child_element != None):
236
- autosar_variable_in_impl_datatype = ArVariableInImplementationDataInstanceRef()
237
- autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildOptionalRefElement(child_element, "PORT-PROTOTYPE-REF")
238
- if autosar_variable_in_impl_datatype.port_prototype_ref is None:
132
+ if (child_element is not None):
133
+ autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
134
+ autosar_variable_iref.port_prototype_ref = self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF")
135
+ if autosar_variable_iref.port_prototype_ref is None:
239
136
  self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
240
- autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildOptionalRefElement(child_element, "TARGET-DATA-PROTOTYPE-REF")
241
- if autosar_variable_in_impl_datatype.target_data_prototype_ref is None:
137
+ autosar_variable_iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
138
+ if autosar_variable_iref.target_data_prototype_ref is None:
242
139
  self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
243
- accessed_variable_ref.autosar_variable_in_impl_datatype = autosar_variable_in_impl_datatype
140
+ accessed_variable_ref.autosar_variable_iref = autosar_variable_iref
244
141
 
245
142
  def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
246
143
  child_element = element.find("./xmlns:ACCESSED-VARIABLE", self.nsmap)
247
- if (child_element != None):
248
- accessed_variable_ref.local_variable_ref = self.readChildOptionalRefElement(child_element, "LOCAL-VARIABLE-REF")
144
+ if (child_element is not None):
145
+ accessed_variable_ref.local_variable_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF")
249
146
 
250
147
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
251
148
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
252
- short_name = self.readShortName(child_element)
149
+ short_name = self.getShortName(child_element)
253
150
 
254
151
  self.logger.debug("readVariableAccesses %s" % short_name)
255
152
 
@@ -262,6 +159,9 @@ class ARXMLParser:
262
159
  elif (key == "DATA-READ-ACCESSS"):
263
160
  variable_access = parent.createDataReadAccess(short_name)
264
161
  self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
162
+ elif (key == "DATA-WRITE-ACCESSS"):
163
+ variable_access = parent.createDataWriteAccess(short_name)
164
+ self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
265
165
  elif (key == "DATA-SEND-POINTS"):
266
166
  variable_access = parent.createDataSendPoint(short_name)
267
167
  self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
@@ -274,47 +174,60 @@ class ARXMLParser:
274
174
  else:
275
175
  self._raiseError("Invalid key type <%s>" % key)
276
176
 
277
- # self.readIdentifiable(child_element, variable_access)
177
+ self.readIdentifiable(child_element, variable_access)
278
178
 
279
179
  def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
280
180
  for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
281
- ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
282
- if (ref != None):
283
- parent.implemented_entry_refs.append(ref)
181
+ ref = self.getChildElementOptionalRefType(child_element, "BSW-MODULE-ENTRY-REF")
182
+ if (ref is not None):
183
+ parent.addImplementedEntry(ref)
284
184
  self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
285
185
 
186
+ def readModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
187
+ self.readIdentifiable(element, prototype)
188
+ prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
189
+
286
190
  def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
287
191
  for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
288
- short_name = self.readShortName(child_element)
192
+ short_name = self.getShortName(child_element)
289
193
  self.logger.debug("readProvidedModeGroup %s" % short_name)
290
194
 
291
195
  mode_group = parent.createProvidedModeGroup(short_name)
292
- mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
196
+ self.readModeDeclarationGroupPrototype(child_element, mode_group)
293
197
 
294
198
  def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
295
199
  for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
296
- short_name = self.readShortName(child_element)
200
+ short_name = self.getShortName(child_element)
297
201
  self.logger.debug("readRequiredModeGroup %s" % short_name)
298
202
  mode_group = parent.createProvidedModeGroup(short_name)
299
- mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
203
+ mode_group.type_tref = self.getChildElementRefType(parent.short_name, child_element, "TYPE-TREF")
300
204
 
301
205
  def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
302
206
  child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
303
- if child_element != None:
304
- for ref in self.readChildRefElementList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
207
+ if child_element is not None:
208
+ for ref in self.getChildElementRefTypeList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
305
209
  entity.addCanEnterExclusiveAreaRef(ref)
306
210
 
307
211
  def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
212
+ self.logger.debug("readExecutableEntity %s" % entity.short_name)
213
+ self.readIdentifiable(element, entity)
308
214
  self.readCanEnterExclusiveAreaRefs(element, entity)
215
+ entity.minimum_start_interval = self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")
216
+
217
+ def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
218
+ for child_element in self.findall(element, "./MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
219
+ ref_type = self.getChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF")
220
+ if ref_type is not None:
221
+ entity.addManagedModeGroupRef(ref_type)
309
222
 
310
- def readBswModuleEntity(self, element, entity: BswModuleEntity):
223
+ def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
311
224
  self.readExecutableEntity(element, entity)
312
-
313
- entity.implemented_entry_ref = self.readChildRefElement(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
225
+ entity.implemented_entry_ref = self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
226
+ self.readBswModuleEntityManagedModeGroup(element, entity)
314
227
 
315
228
  def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
316
229
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
317
- short_name = self.readShortName(child_element)
230
+ short_name = self.getShortName(child_element)
318
231
  self.logger.debug("readBswCalledEntity %s" % short_name)
319
232
  entity = parent.createBswCalledEntity(short_name)
320
233
 
@@ -322,187 +235,299 @@ class ARXMLParser:
322
235
 
323
236
  def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
324
237
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
325
- short_name = self.readShortName(child_element)
238
+ short_name = self.getShortName(child_element)
326
239
  self.logger.debug("readBswSchedulableEntity %s" % short_name)
327
240
  entity = parent.createBswSchedulableEntity(short_name)
328
-
329
241
  self.readBswModuleEntity(child_element, entity)
330
242
 
331
243
  def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
332
- event.starts_on_event_ref = self.readChildRefElement(event.short_name, element, "STARTS-ON-EVENT-REF")
244
+ event.startsOnEventRef = self.getChildElementRefType(event.short_name, element, "STARTS-ON-EVENT-REF")
333
245
 
334
246
  def readBswScheduleEvent(self, element, event: BswScheduleEvent):
335
247
  self.readBswEvent(element, event)
336
248
 
337
249
  def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
338
250
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
339
- short_name = self.readShortName(child_element)
251
+ short_name = self.getShortName(child_element)
340
252
  self.logger.debug("readBswModeSwitchEvent %s" % short_name)
341
253
  event = parent.createBswModeSwitchEvent(short_name)
342
-
254
+ # Read the Inherit BswScheduleEvent
343
255
  self.readBswScheduleEvent(child_element, event)
344
256
 
345
257
  def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
346
258
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
347
- short_name = self.readShortName(child_element)
259
+ short_name = self.getShortName(child_element)
348
260
  self.logger.debug("readBswTimingEvent %s" % short_name)
349
261
  event = parent.createBswTimingEvent(short_name)
350
- event.period = self.readChildElementFloatValue(short_name, child_element, "PERIOD")
351
-
262
+ event.period = self.getChildElementOptionalFloatValue(child_element, "PERIOD")
263
+ # Read the Inherit BswScheduleEvent
352
264
  self.readBswScheduleEvent(child_element, event)
353
265
 
354
266
  def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
355
267
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
356
- short_name = self.readShortName(child_element)
268
+ short_name = self.getShortName(child_element)
357
269
  self.logger.debug("readBswDataReceivedEvent %s" % short_name)
358
270
  event = parent.createBswDataReceivedEvent(short_name)
359
- event.data_ref = self.readChildRefElement(parent.short_name, child_element, "DATA-REF")
360
-
271
+ event.data_ref = self.getChildElementRefType(parent.short_name, child_element, "DATA-REF")
272
+ # Read the Inherit BswScheduleEvent
361
273
  self.readBswScheduleEvent(child_element, event)
362
274
 
363
275
  def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
364
- for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
365
- short_name = self.readShortName(child_element)
276
+ for child_element in self.findall(element, "./EVENTS/BSW-INTERNAL-TRIGGER-OCCURRED-EVENT"):
277
+ short_name = self.getShortName(child_element)
366
278
  self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
367
279
  event = parent.createBswInternalTriggerOccurredEvent(short_name)
368
- event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
369
-
280
+ event.event_source_ref = self.getChildElementRefType(parent.short_name, child_element, "EVENT-SOURCE-REF")
281
+ # Read the Inherit BswScheduleEvent
370
282
  self.readBswScheduleEvent(child_element, event)
371
283
 
284
+ def getBswModeSenderPolicy(self, element: ET.Element) -> BswModeSenderPolicy:
285
+ policy = BswModeSenderPolicy()
286
+ policy.setProvidedModeGroupRef(self.getChildElementOptionalRefType(element, "PROVIDED-MODE-GROUP-REF"))
287
+ policy.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
288
+ return policy
289
+
290
+ def readBswInternalBehaviorModeSenderPolicy(self, element: ET.Element, parent: BswInternalBehavior):
291
+ for child_element in self.findall(element, "./MODE-SENDER-POLICYS/*"):
292
+ tag_name = self.getTagName(child_element)
293
+ if tag_name == "BSW-MODE-SENDER-POLICY":
294
+ parent.addModeSenderPolicy(self.getBswModeSenderPolicy(child_element))
295
+ else:
296
+ self._raiseError("Unsupported ModeSenderPolicy type <%s>." % tag_name)
297
+
372
298
  def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
373
299
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
374
- if child_element != None:
375
- for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
300
+ if child_element is not None:
301
+ for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
376
302
  behavior.addDataTypeMappingRef(ref)
377
303
 
378
304
  def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
305
+ self.readIdentifiable(element, behavior)
379
306
  for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
380
- short_name = self.readShortName(child_element)
307
+ short_name = self.getShortName(child_element)
381
308
  behavior.createExclusiveArea(short_name)
382
-
383
309
  self.readDataTypeMappingRefs(element, behavior)
384
310
 
385
- def readSwInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
311
+ def getRoleBasedDataAssignment(self, element: ET.Element) -> RoleBasedDataAssignment:
312
+ assignment = RoleBasedDataAssignment()
313
+ assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
314
+ assignment.used_parameter_element = self.getAutosarParameterRef(element, "USED-PARAMETER-ELEMENT")
315
+ assignment.used_pim_ref = self.getChildElementOptionalRefType(element, "USED-PIM-REF")
316
+ return assignment
317
+
318
+ def getRoleBasedPortAssignment(self, element: ET.Element) -> RoleBasedPortAssignment:
319
+ assignment = RoleBasedPortAssignment()
320
+ assignment.port_prototype_ref = self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF")
321
+ assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
322
+ return assignment
323
+
324
+ def readServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
325
+ self.readIdentifiable(element, dependency)
326
+
327
+ def readSwcServiceDependencyAssignedData(self, element: ET.Element, dependency: SwcServiceDependency):
328
+ for child_element in element.findall("./xmlns:ASSIGNED-DATAS/*", self.nsmap):
329
+ tag_name = self.getTagName(child_element.tag)
330
+ if (tag_name == "ROLE-BASED-DATA-ASSIGNMENT"):
331
+ dependency.AddAssignedData(self.getRoleBasedDataAssignment(child_element))
332
+ else:
333
+ self._raiseError("Unsupported assigned data <%s>" % tag_name)
334
+
335
+ def readSwcServiceDependencyAssignedPorts(self, element: ET.Element, dependency: SwcServiceDependency):
336
+ for child_element in element.findall("./xmlns:ASSIGNED-PORTS/*", self.nsmap):
337
+ tag_name = self.getTagName(child_element.tag)
338
+ if (tag_name == "ROLE-BASED-PORT-ASSIGNMENT"):
339
+ dependency.AddAssignedPort(self.getRoleBasedPortAssignment(child_element))
340
+ else:
341
+ self._raiseError("Unsupported assigned ports <%s>" % tag_name)
342
+
343
+ def readNvBlockNeeds(self, element: ET.Element, parent: SwcServiceDependency):
344
+ short_name = self.getShortName(element)
345
+ needs = parent.createNvBlockNeeds(short_name)
346
+ self.logger.debug("readNvBlockNeeds %s" % short_name)
347
+ needs.calc_ram_block_crc = self.getChildElementOptionalBooleanValue(element, "CALC-RAM-BLOCK-CRC")
348
+ needs.check_static_block_id = self.getChildElementOptionalBooleanValue(element, "CHECK-STATIC-BLOCK-ID")
349
+ needs.n_data_sets = self.getChildElementOptionalNumericalValue(element, "N-DATA-SETS")
350
+ needs.n_rom_blocks = self.getChildElementOptionalNumericalValue(element, "N-ROM-BLOCKS")
351
+ needs.readonly = self.getChildElementOptionalBooleanValue(element, "READONLY")
352
+ needs.reliability = self.getChildElementOptionalLiteral(element, "RELIABILITY")
353
+ needs.resistant_to_changed_sw = self.getChildElementOptionalBooleanValue(element, "RESISTANT-TO-CHANGED-SW")
354
+ needs.restore_at_start = self.getChildElementOptionalBooleanValue(element, "RESTORE-AT-START")
355
+ needs.store_at_shutdown = self.getChildElementOptionalBooleanValue(element, "STORE-AT-SHUTDOWN")
356
+ needs.write_only_once = self.getChildElementOptionalBooleanValue(element, "WRITE-ONLY-ONCE")
357
+ needs.write_verification = self.getChildElementOptionalBooleanValue(element, "WRITE-VERIFICATION")
358
+ needs.writing_priority = self.getChildElementOptionalLiteral(element, "WRITING-PRIORITY")
359
+
360
+ def readSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
361
+ for child_element in element.findall("./xmlns:SERVICE-NEEDS/*", self.nsmap):
362
+ tag_name = self.getTagName(child_element.tag)
363
+ if tag_name == "NV-BLOCK-NEEDS":
364
+ self.readNvBlockNeeds(child_element, parent)
365
+ else:
366
+ self._raiseError("Unsupported service needs <%s>" % tag_name)
367
+
368
+ def readSwcServiceDependency(self, element: ET.Element, parent: SwcInternalBehavior):
369
+ short_name = self.getShortName(element)
370
+ dependency = parent.createSwcServiceDependency(short_name)
371
+ self.logger.debug("readSwcServiceDependency %s" % short_name)
372
+ self.readServiceDependency(element, dependency)
373
+ self.readSwcServiceDependencyAssignedData(element, dependency)
374
+ self.readSwcServiceDependencyAssignedPorts(element, dependency)
375
+ self.readSwcServiceDependencyServiceNeeds(element, dependency)
376
+
377
+ def readSwcInternalBehaviorServiceDependencies(self, element: ET.Element, parent: SwcInternalBehavior):
378
+ for child_element in element.findall("./xmlns:SERVICE-DEPENDENCYS/*", self.nsmap):
379
+ tag_name = self.getTagName(child_element.tag)
380
+ if (tag_name == "SWC-SERVICE-DEPENDENCY"):
381
+ self.readSwcServiceDependency(child_element, parent)
382
+ else:
383
+ self._raiseError("Unsupported Service Dependencies <%s>" % tag_name)
384
+
385
+ def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
386
386
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
387
- short_name = self.readShortName(child_element)
387
+ short_name = self.getShortName(child_element)
388
388
  behavior = parent.createSwcInternalBehavior(short_name)
389
- self.logger.debug("readSwInternalBehavior %s" % behavior.full_name)
389
+ self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
390
390
 
391
391
  # read the internal behavior
392
392
  self.readInternalBehavior(child_element, behavior)
393
-
394
- self.readRunnableEntities(child_element, behavior)
395
- self.readOperationInvokedEvents(child_element, behavior)
396
- self.readTimingEvents(child_element, behavior)
397
- self.readInternalTriggerOccurredEvent(child_element, behavior)
393
+
394
+ # read the extra SwcInternalBehavior
395
+ self.readSwcInternalBehaviorRunnables(child_element, behavior)
396
+ self.readSwcInternalBehaviorEvents(child_element, behavior)
397
+ self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
398
398
  self.readExplicitInterRunnableVariables(child_element, behavior)
399
+ behavior.handle_termination_and_restart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
400
+ self.readPerInstanceMemories(child_element, behavior)
401
+ self.readPerInstanceParameter(child_element, behavior)
402
+ self.readPortAPIOptions(child_element, behavior)
403
+ behavior.supports_multiple_instantiation = self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION")
399
404
 
400
405
  def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
401
406
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
402
- short_name = self.readShortName(child_element)
407
+ short_name = self.getShortName(child_element)
403
408
  behavior = parent.createBswInternalBehavior(short_name)
404
409
  self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
405
410
 
406
411
  # read the internal behavior
407
412
  self.readInternalBehavior(child_element, behavior)
408
-
409
413
  self.readBswCalledEntity(child_element, behavior)
410
414
  self.readBswSchedulableEntity(child_element, behavior)
411
415
  self.readBswModeSwitchEvent(child_element, behavior)
412
416
  self.readBswTimingEvent(child_element, behavior)
413
417
  self.readBswDataReceivedEvent(child_element, behavior)
414
418
  self.readBswInternalTriggerOccurredEvent(child_element, behavior)
419
+ self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
415
420
 
416
421
  def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
417
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-DESCRIPTION", self.nsmap):
418
- short_name = self.readShortName(child_element)
419
- bsw_module_description = parent.createBswModuleDescription(short_name)
420
- bsw_module_description.module_id = self.readChildElementNumberValue(short_name, child_element, "MODULE-ID")
422
+ short_name = self.getShortName(element)
423
+ bsw_module_description = parent.createBswModuleDescription(short_name)
424
+ bsw_module_description.module_id = self.getChildElementOptionalNumericalValue(element, "MODULE-ID")
421
425
 
422
- self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
426
+ self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
423
427
 
424
- self.readBswModuleDescriptionImplementedEntry(child_element, bsw_module_description)
425
- self.readProvidedModeGroup(child_element, bsw_module_description)
426
- self.readRequiredModeGroup(child_element, bsw_module_description)
427
- self.readBswInternalBehavior(child_element, bsw_module_description)
428
+ self.readBswModuleDescriptionImplementedEntry(element, bsw_module_description)
429
+ self.readProvidedModeGroup(element, bsw_module_description)
430
+ self.readRequiredModeGroup(element, bsw_module_description)
431
+ self.readBswInternalBehavior(element, bsw_module_description)
428
432
 
429
433
  def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
430
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-ENTRY", self.nsmap):
431
- short_name = self.readShortName(child_element)
432
- entry = parent.createBswModuleEntry(short_name)
433
- entry.is_reentrant = self.readChildOptionalElementBooleanValue(child_element, "IS-REENTRANT")
434
- entry.is_synchronous = self.readChildOptionalElementBooleanValue(child_element, "IS-SYNCHRONOUS")
435
- entry.service_id = self.readChildOptionalElementNumberValue(child_element, "SERVICE-ID")
436
- entry.call_type = self.readChildOptionalElement(child_element, "CALL-TYPE")
437
- entry.execution_context = self.readChildOptionalElement(child_element, "EXECUTION-CONTEXT")
438
- entry.sw_service_impl_policy = self.readChildOptionalElement(child_element, "SW-SERVICE-IMPL-POLICY")
439
-
440
- #self.logger.debug("readBswModuleEntry \n%s" % entry)
441
- self.logger.debug("readBswModuleEntry %s" % entry.short_name)
434
+ short_name = self.getShortName(element)
435
+ entry = parent.createBswModuleEntry(short_name)
436
+ entry.is_reentrant = self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT")
437
+ entry.is_synchronous = self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS")
438
+ entry.service_id = self.getChildElementOptionalNumericalValue(element, "SERVICE-ID")
439
+ entry.call_type = self.getChildElementOptionalLiteral(element, "CALL-TYPE")
440
+ entry.execution_context = self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT")
441
+ entry.sw_service_impl_policy = self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY")
442
+
443
+ #self.logger.debug("readBswModuleEntry \n%s" % entry)
444
+ self.logger.debug("readBswModuleEntry %s" % entry.short_name)
445
+
446
+ def readEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
447
+ self.readElementAttributes(element, engineering_obj)
448
+ engineering_obj.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
449
+ .setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY"))
450
+
451
+ def getAutosarEngineeringObject(self, element: ET.Element) -> AutosarEngineeringObject:
452
+ obj = AutosarEngineeringObject()
453
+ self.readEngineeringObject(element, obj)
454
+ self.logger.debug("getAutosarEngineeringObject %s", obj.short_label)
455
+ return obj
442
456
 
443
457
  def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
444
- for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
445
- artifact_desc = AutosarEngineeringObject()
446
- artifact_desc.short_label = self.readChildElement(code_desc.short_name, child_element, "SHORT-LABEL")
447
- self.readIdentifiable(child_element, artifact_desc)
448
- code_desc.addArtifactDescriptor(artifact_desc)
458
+ for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/*", self.nsmap):
459
+ tag_name = self.getTagName(child_element.tag)
460
+ if tag_name == "AUTOSAR-ENGINEERING-OBJECT":
461
+ code_desc.addArtifactDescriptor(self.getAutosarEngineeringObject(child_element))
462
+ else:
463
+ self._raiseError("Unsupported Artifact Descriptor <%s>" % tag_name)
449
464
 
450
- self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
451
-
452
465
  def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
453
466
  for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
454
- short_name = self.readShortName(child_element)
467
+ short_name = self.getShortName(child_element)
455
468
  self.logger.debug("readCodeDescriptor %s" % short_name)
456
469
  code_desc = impl.createCodeDescriptor(short_name)
470
+ self.readIdentifiable(child_element, code_desc)
457
471
  self.readArtifactDescriptor(child_element, code_desc)
458
472
 
473
+ def readMemorySectionOptions(self, element: ET.Element, section: MemorySection):
474
+ child_element = element.find("./xmlns:OPTIONS", self.nsmap)
475
+ if child_element is not None:
476
+ for value in self.getChildElementLiteralValueList(child_element, "OPTION"):
477
+ section.addOption(value)
478
+
459
479
  def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
460
480
  for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
461
- short_name = self.readShortName(child_element)
481
+ short_name = self.getShortName(child_element)
462
482
  memory_section = consumption.createMemorySection(short_name)
463
- alignment = self.readChildOptionalElement(child_element, "ALIGNMENT")
464
- if (alignment != None):
465
- memory_section.alignment = alignment
466
- memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
483
+ self.readIdentifiable(child_element, memory_section)
484
+ memory_section.alignment = self.getChildElementOptionalLiteral(child_element, "ALIGNMENT")
485
+ self.readMemorySectionOptions(child_element, memory_section)
486
+ memory_section.size = self.getChildElementOptionalNumericalValue(child_element, "SIZE")
487
+ memory_section.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")
488
+ memory_section.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
467
489
  self.logger.debug("readMemorySections %s" % memory_section.short_name)
468
490
 
469
491
  def readResourceConsumption(self, element: ET.Element, impl: Implementation):
470
492
  child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
471
- if (child_element == None):
472
- self._raiseError("Invalid ResourceConsumption of Implementation <%s>" % impl.short_name)
473
- return
474
- short_name = self.readShortName(child_element)
475
- impl.resource_consumption = ResourceConsumption(impl, short_name)
476
- self.readMemorySections(child_element, impl.resource_consumption)
493
+ if (child_element is not None):
494
+ short_name = self.getShortName(child_element)
495
+ consumption = ResourceConsumption(impl, short_name)
496
+ self.readIdentifiable(child_element, consumption)
497
+ self.readMemorySections(child_element, consumption)
498
+ impl.setResourceConsumption(consumption)
477
499
 
478
500
  def readImplementation(self, element: ET.Element, impl: Implementation):
501
+ self.readIdentifiable(element, impl)
479
502
  self.readCodeDescriptor(element, impl)
480
- impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
503
+ impl.programming_language = self.getChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE")
481
504
  self.readResourceConsumption(element, impl)
482
- impl.sw_version = self.readChildOptionalElement(element, "SW-VERSION")
483
- impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
484
- impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
485
-
486
- def readBswImplementation(self, element: ET.Element, parent: ARPackage):
487
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
488
- short_name = self.readShortName(child_element)
489
- impl = parent.createBswImplementation(short_name)
490
- self.logger.debug("readBswImplementation %s" % impl.short_name)
505
+ impl.sw_version = self.getChildElementOptionalLiteral(element, "SW-VERSION")
506
+ impl.swc_bsw_mapping_ref = self.getChildElementOptionalRefType(element, "SWC-BSW-MAPPING-REF")
507
+ impl.used_code_generator = self.getChildElementOptionalLiteral(element, "USED-CODE-GENERATOR")
508
+ impl.vendor_id = self.getChildElementOptionalNumericalValue(element, "VENDOR-ID")
491
509
 
492
- self.readImplementation(child_element, impl)
510
+ def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
511
+ child_element = element.find("./xmlns:VENDOR-SPECIFIC-MODULE-DEF-REFS", self.nsmap)
512
+ if child_element is not None:
513
+ for ref in self.getChildElementRefTypeList(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
514
+ parent.addVendorSpecificModuleDefRef(ref)
493
515
 
494
- impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
495
- impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
516
+ def readBswImplementation(self, element: ET.Element, parent: ARPackage):
517
+ short_name = self.getShortName(element)
518
+ impl = parent.createBswImplementation(short_name)
519
+ self.logger.debug("readBswImplementation %s" % impl.short_name)
520
+ self.readImplementation(element, impl)
521
+ impl.ar_release_version = self.getChildElementOptionalLiteral(element, "AR-RELEASE-VERSION")
522
+ impl.behavior_ref = self.getChildElementOptionalRefType(element, "BEHAVIOR-REF")
523
+ self.readBswImplementationVendorSpecificModuleDefRefs(element, impl)
496
524
 
497
525
  def readSwcImplementation(self, element: ET.Element, parent: ARPackage):
498
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
499
- short_name = self.readShortName(child_element)
500
- impl = parent.createSwcImplementation(short_name)
501
- self.logger.debug("readSwcImplementation %s" % impl.short_name)
502
-
503
- self.readImplementation(child_element, impl)
504
-
505
- impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
526
+ short_name = self.getShortName(element)
527
+ impl = parent.createSwcImplementation(short_name)
528
+ self.logger.debug("readSwcImplementation %s" % impl.short_name)
529
+ self.readImplementation(element, impl)
530
+ impl.behavior_ref = self.getChildElementOptionalRefType(element, "BEHAVIOR-REF")
506
531
 
507
532
  def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
508
533
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
@@ -513,470 +538,617 @@ class ARXMLParser:
513
538
  def readDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
514
539
  self._readVariableAccesses(element, parent, "DATA-READ-ACCESSS")
515
540
 
541
+ def readDataWriteAccesses(self, element: ET.Element, parent: RunnableEntity):
542
+ self._readVariableAccesses(element, parent, "DATA-WRITE-ACCESSS")
543
+
516
544
  def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
517
545
  self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
518
546
 
547
+ def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
548
+ accessed_parameter = None
549
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
550
+ if child_element is not None:
551
+ accessed_parameter = AutosarParameterRef()
552
+ accessed_parameter.local_parameter_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF")
553
+ return accessed_parameter
554
+
555
+ def readParameterAccesses(self, element: ET.Element, parent: RunnableEntity):
556
+ for child_element in element.findall("./xmlns:PARAMETER-ACCESSS/xmlns:PARAMETER-ACCESS", self.nsmap):
557
+ short_name = self.getShortName(child_element)
558
+ self.logger.debug("readParameterAccesses %s" % short_name)
559
+ parameter_access = parent.createParameterAccess(short_name)
560
+ parameter_access.accessed_parameter = self.getAutosarParameterRef(child_element, "ACCESSED-PARAMETER")
561
+
519
562
  def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
520
563
  self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
521
564
 
522
565
  def readReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
523
566
  self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
524
567
 
525
- def readROperationIRef(self, element: ET.Element, parent: ServerCallPoint):
526
- child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
527
- if (child_element != None):
568
+ def readROperationIRef(self, element: ET.Element, key: str, parent: ServerCallPoint):
569
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
570
+ if (child_element is not None):
528
571
  operation_iref = ROperationInAtomicSwcInstanceRef()
529
- operation_iref.context_r_port_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-R-PORT-REF")
530
- operation_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-REQUIRED-OPERATION-REF")
572
+ operation_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
573
+ operation_iref.target_required_operation_ref = self.getChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF")
531
574
  parent.operation_iref = operation_iref
532
575
 
533
576
  def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
534
- child_element = element.find("./xmlns:DATA-IRE", self.nsmap)
535
- if (child_element != None):
577
+ child_element = element.find("./xmlns:DATA-IREF", self.nsmap)
578
+ if (child_element is not None):
536
579
  data_iref = RVariableInAtomicSwcInstanceRef()
537
- data_iref.context_r_port_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-R-PORT-REF")
538
- data_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-DATA-ELEMENT-REF")
580
+ data_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
581
+ data_iref.target_data_element_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF")
539
582
  parent.data_iref = data_iref
540
583
 
541
584
  def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
542
585
  for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
543
586
  mode_iref = RModeInAtomicSwcInstanceRef()
544
- mode_iref.context_port = self.readChildOptionalRefElement(child_element, "CONTEXT-PORT-REF")
545
- mode_iref.context_mode_declaration_group_prototype = self.readChildRefElement("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
546
- mode_iref.target_mode_declaration = self.readChildRefElement("", child_element, "TARGET-MODE-DECLARATION-REF")
587
+ mode_iref.context_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")
588
+ mode_iref.context_mode_declaration_group_prototype_ref = self.getChildElementRefType("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
589
+ mode_iref.target_mode_declaration_ref = self.getChildElementRefType("", child_element, "TARGET-MODE-DECLARATION-REF")
547
590
  parent.addModeIRef(mode_iref)
548
591
 
549
592
  def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
550
- for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:SYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
551
- short_name = self.readShortName(child_element)
552
- serverCallPoint = parent.createSynchronousServerCallPoint(short_name)
553
- serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
554
- self.readROperationIRef(child_element, serverCallPoint)
593
+ short_name = self.getShortName(element)
594
+ self.logger.debug("readSynchronousServerCallPoint %s" % short_name)
595
+ server_call_point = parent.createSynchronousServerCallPoint(short_name)
596
+ self.readIdentifiable(element, server_call_point)
597
+ server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
598
+ self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
555
599
 
556
600
  def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
557
- for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:ASYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
558
- short_name = self.readShortName(child_element)
559
- serverCallPoint = parent.createAsynchronousServerCallPoint(short_name)
560
- serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
561
- self.readROperationIRef(child_element, serverCallPoint)
601
+ short_name = self.getShortName(element)
602
+ self.logger.debug("readAsynchronousServerCallPoint %s" % short_name)
603
+ server_call_point = parent.createAsynchronousServerCallPoint(short_name)
604
+ self.readIdentifiable(element, server_call_point)
605
+ server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
606
+ self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
607
+
608
+ def readInternalBehaviorServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
609
+ for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/*", self.nsmap):
610
+ tag_name = self.getTagName(child_element.tag)
611
+ if tag_name == "SYNCHRONOUS-SERVER-CALL-POINT":
612
+ self.readSynchronousServerCallPoint(child_element, parent)
613
+ elif tag_name == "ASYNCHRONOUS-SERVER-CALL-POINT":
614
+ self.readAsynchronousServerCallPoint(child_element, parent)
615
+ else:
616
+ self._raiseError("Unsupported server call point type <%s>" % tag_name)
562
617
 
563
618
  def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
564
619
  for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
565
- short_name = self.readShortName(child_element)
620
+ short_name = self.getShortName(child_element)
566
621
  point = parent.createInternalTriggeringPoint(short_name)
567
- point.sw_impl_policy = self.readChildOptionalElement(child_element, "SW-IMPL-POLICY")
622
+ point.sw_impl_policy = self.getChildElementOptionalLiteral(child_element, "SW-IMPL-POLICY")
568
623
 
569
- def readRunnableEntities(self, element: ET.Element, parent: SwcInternalBehavior):
624
+ def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
570
625
  for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
571
- short_name = self.readShortName(child_element)
572
- runnable = parent.createRunnableEntity(short_name)
573
- runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
574
- runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
575
-
626
+ short_name = self.getShortName(child_element)
627
+ entity = parent.createRunnableEntity(short_name)
576
628
  self.logger.debug("readRunnableEntities %s" % short_name)
577
-
578
- self.readDataReceivePointByArguments(child_element, runnable)
579
- self.readDataReceivePointByValues(child_element, runnable)
580
- self.readDataReadAccesses(child_element, runnable)
581
- self.readDataSendPoints(child_element, runnable)
582
- self.readWrittenLocalVariables(child_element, runnable)
583
- self.readReadLocalVariables(child_element, runnable)
584
- self.readSynchronousServerCallPoint(child_element, runnable)
585
- self.readAsynchronousServerCallPoint(child_element, runnable)
586
- self.readInternalTriggeringPoint(child_element, runnable)
629
+
630
+ self.readExecutableEntity(child_element, entity)
631
+ entity.can_be_invoked_concurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
632
+ entity.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
633
+
634
+ self.readDataReceivePointByArguments(child_element, entity)
635
+ self.readDataReceivePointByValues(child_element, entity)
636
+ self.readDataReadAccesses(child_element, entity)
637
+ self.readDataWriteAccesses(child_element, entity)
638
+ self.readDataSendPoints(child_element, entity)
639
+ self.readParameterAccesses(child_element, entity)
640
+ self.readWrittenLocalVariables(child_element, entity)
641
+ self.readReadLocalVariables(child_element, entity)
642
+ self.readInternalBehaviorServerCallPoint(child_element, entity)
643
+ self.readInternalTriggeringPoint(child_element, entity)
644
+
645
+ def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
646
+ iref = RModeInAtomicSwcInstanceRef()
647
+ iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
648
+ iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
649
+ iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
650
+ iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
651
+ return iref
587
652
 
588
653
  def readRTEEvent(self, element: ET.Element, event: RTEEvent):
589
- event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
654
+ self.readIdentifiable(element, event)
655
+ event.start_on_event_ref = self.getChildElementOptionalRefType(element, "START-ON-EVENT-REF")
656
+ for child_element in element.findall("./xmlns:DISABLED-MODE-IREFS/xmlns:DISABLED-MODE-IREF", self.nsmap):
657
+ iref = self.getRModeInAtomicSwcInstanceRef(child_element)
658
+ event.addDisabledModeIRef(iref)
590
659
 
591
660
  def readOperationIRef(self, element: ET.Element, parent: OperationInvokedEvent):
592
661
  child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
593
- if (child_element != None):
662
+ if (child_element is not None):
594
663
  parent.operation_iref = POperationInAtomicSwcInstanceRef()
595
- parent.operation_iref.context_p_port_ref = self.readChildRefElement(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
596
- parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
597
-
598
- def readOperationInvokedEvents(self, element: ET.Element, parent: SwcInternalBehavior):
599
- for child_element in element.findall("./xmlns:EVENTS/xmlns:OPERATION-INVOKED-EVENT", self.nsmap):
600
- short_name = self.readShortName(child_element)
601
- event = parent.createOperationInvokedEvent(short_name)
602
- self.readOperationIRef(child_element, event)
603
- self.readRTEEvent(child_element, event)
604
-
664
+ parent.operation_iref.context_p_port_ref = self.getChildElementRefType(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
665
+ parent.operation_iref.target_provided_operation_ref = self.getChildElementRefType(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
666
+
667
+ def readOperationInvokedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
668
+ short_name = self.getShortName(element)
669
+ event = parent.createOperationInvokedEvent(short_name)
670
+ self.readOperationIRef(element, event)
671
+ self.readRTEEvent(element, event)
672
+
605
673
  def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
606
674
  for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
607
- short_name = self.readShortName(child_element)
675
+ short_name = self.getShortName(child_element)
608
676
  prototype = parent.createExplicitInterRunnableVariable(short_name)
609
- self.readSwDataDefProps(child_element, prototype)
610
- prototype.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
677
+ prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
678
+ prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
679
+ prototype.init_value = self.getInitValue(child_element)
680
+
681
+ def readPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
682
+ for child_element in element.findall("./xmlns:PER-INSTANCE-MEMORYS/xmlns:PER-INSTANCE-MEMORY", self.nsmap):
683
+ short_name = self.getShortName(child_element)
684
+ memory = behavior.createPerInstanceMemory(short_name)
685
+ self.readIdentifiable(child_element, memory)
686
+ memory.init_value = self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")
687
+ memory.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
688
+ memory.type = self.getChildElementOptionalLiteral(child_element, "TYPE")
689
+ memory.type_definition = self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION")
690
+
691
+ def readAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
692
+ prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
693
+
694
+ def readParameterDataPrototype(self, element: ET.Element, behavior: SwcInternalBehavior):
695
+ short_name = self.getShortName(element)
696
+ prototype = behavior.createParameterDataPrototype(short_name)
697
+ self.readIdentifiable(element, prototype)
698
+ self.readAutosarDataPrototype(element, prototype)
699
+ prototype.init_value = self.getInitValue(element)
700
+
701
+ def readPerInstanceParameter(self, element: ET.Element, behavior: SwcInternalBehavior):
702
+ for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
703
+ self.readParameterDataPrototype(child_element, behavior)
611
704
 
705
+ def readPortDefinedArgumentValue(self, element: ET.Element) -> PortDefinedArgumentValue:
706
+ argument_value = PortDefinedArgumentValue()
707
+ child_element = element.find("./xmlns:VALUE/*", self.nsmap)
708
+ if child_element is not None:
709
+ argument_value.value = self.getValueSpecification(child_element)
710
+ argument_value.value_type = self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF")
711
+ return argument_value
712
+
713
+ def readPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
714
+ for child_element in element.findall("./xmlns:PORT-API-OPTIONS/xmlns:PORT-API-OPTION", self.nsmap):
715
+ option = PortAPIOption()
716
+ option.enable_take_address = self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")
717
+ option.indirect_api = self.getChildElementOptionalBooleanValue(child_element, "INDIRECT-API")
718
+ option.port_ref = self.getChildElementOptionalRefType(child_element, "PORT-REF")
719
+ for argument_value_tag in child_element.findall("./xmlns:PORT-ARG-VALUES/xmlns:PORT-DEFINED-ARGUMENT-VALUE", self.nsmap):
720
+ option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
721
+ behavior.addPortAPIOption(option)
722
+
612
723
  def readInitEvents(self, element, parent: SwcInternalBehavior):
613
724
  for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
614
- short_name = self.readShortName(child_element)
725
+ short_name = self.getShortName(child_element)
615
726
  event = parent.createInitEvent(short_name)
616
-
617
727
  self.readRTEEvent(child_element, event)
618
728
 
619
- def readTimingEvents(self, element: ET.Element, parent: SwcInternalBehavior):
620
- for child_element in element.findall("./xmlns:EVENTS/xmlns:TIMING-EVENT", self.nsmap):
621
- short_name = self.readShortName(child_element)
622
- event = parent.createTimingEvent(short_name)
623
-
624
- self.readRTEEvent(child_element, event)
625
-
626
- offset = self.readChildOptionalElement(child_element, "OFFSET")
627
- if (offset != None):
628
- event.offset = (float)(offset)
629
- event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
729
+ def readTimingEvent(self, element: ET.Element, parent: SwcInternalBehavior):
730
+ short_name = self.getShortName(element)
731
+ event = parent.createTimingEvent(short_name)
732
+ self.readRTEEvent(element, event)
733
+ event.offset = self.getChildElementOptionalFloatValue(element, "OFFSET")
734
+ event.period = self.getChildElementOptionalFloatValue(element, "PERIOD")
630
735
 
631
736
  def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
632
- for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
633
- short_name = self.readShortName(child_element)
634
- event = parent.createDataReceivedEvent(short_name)
635
-
636
- self.readRTEEvent(child_element, event)
637
- self.readRVariableInAtomicSwcInstanceRef(child_element, event)
737
+ short_name = self.getShortName(element)
738
+ event = parent.createDataReceivedEvent(short_name)
739
+ self.readRTEEvent(element, event)
740
+ self.readRVariableInAtomicSwcInstanceRef(element, event)
638
741
 
639
742
  def readSwcModeSwitchEvent(self, element: ET.Element, parent: SwcInternalBehavior):
640
- for child_element in element.findall("./xmlns:EVENTS/xmlns:SWC-MODE-SWITCH-EVENT", self.nsmap):
641
- short_name = self.readShortName(child_element)
642
- event = parent.createSwcModeSwitchEvent(short_name)
643
-
644
- self.readRTEEvent(child_element, event)
645
- self.readRModeInAtomicSwcInstanceRef(child_element, event)
743
+ short_name = self.getShortName(element)
744
+ event = parent.createSwcModeSwitchEvent(short_name)
745
+ self.readRTEEvent(element, event)
746
+ event.activation = self.getChildElementOptionalLiteral(element, "ACTIVATION")
747
+ self.readRModeInAtomicSwcInstanceRef(element, event)
646
748
 
647
749
  def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
648
- for child_element in element.findall("./xmlns:EVENTS/xmlns:INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
649
- short_name = self.readShortName(child_element)
650
- event = parent.createInternalTriggerOccurredEvent(short_name)
651
-
652
- self.readRTEEvent(child_element, event)
653
- event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
654
-
655
- def readSwPointerTargetProps(self, element: ET.Element, parent: ARElement):
656
- child_element = element.find(
657
- "./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
750
+ short_name = self.getShortName(element)
751
+ event = parent.createInternalTriggerOccurredEvent(short_name)
752
+ self.readRTEEvent(element, event)
753
+ event.event_source_ref = self.getChildElementRefType(parent.short_name, element, "EVENT-SOURCE-REF")
754
+
755
+ def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
756
+ for child_element in element.findall("./xmlns:EVENTS/*", self.nsmap):
757
+ tag_name = self.getTagName(child_element.tag)
758
+ if tag_name == "TIMING-EVENT":
759
+ self.readTimingEvent(child_element, parent)
760
+ elif tag_name == "SWC-MODE-SWITCH-EVENT":
761
+ self.readSwcModeSwitchEvent(child_element, parent)
762
+ elif tag_name == "OPERATION-INVOKED-EVENT":
763
+ self.readOperationInvokedEvent(child_element, parent)
764
+ elif tag_name == "DATA-RECEIVED-EVENT":
765
+ self.readDataReceivedEvent(child_element, parent)
766
+ elif tag_name == "INTERNAL-TRIGGER-OCCURRED-EVENT":
767
+ self.readInternalTriggerOccurredEvent(child_element, parent)
768
+ else:
769
+ self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
658
770
 
659
- if (child_element != None):
771
+ def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
772
+ child_element = element.find("./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
773
+ if (child_element is not None):
660
774
  sw_pointer_target_props = SwPointerTargetProps()
661
- sw_pointer_target_props.target_category = self.readChildElement("", child_element, "TARGET-CATEGORY")
662
- self.readSwDataDefProps(child_element, sw_pointer_target_props)
775
+ sw_pointer_target_props.target_category = self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")
776
+ sw_pointer_target_props.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
663
777
  parent.sw_pointer_target_props = sw_pointer_target_props
664
778
 
665
- def parseSwDataDefProps(self, element: ET.Element) -> SwDataDefProps:
666
- child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
667
-
668
- if (child_element != None):
669
- sw_data_def_props = SwDataDefProps()
670
- sw_data_def_props.base_type_ref = self.readChildOptionalRefElement(child_element, "BASE-TYPE-REF")
671
- sw_data_def_props.data_constr_ref = self.readChildOptionalRefElement(child_element, "DATA-CONSTR-REF")
672
- sw_data_def_props.compu_method_ref = self.readChildOptionalRefElement(child_element, "COMPU-METHOD-REF")
673
- sw_data_def_props.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
674
- sw_data_def_props.sw_calibration_access = self.readChildOptionalElement(child_element, "SW-CALIBRATION-ACCESS")
675
- self.readSwPointerTargetProps(child_element, sw_data_def_props)
676
- return sw_data_def_props
677
-
678
- def readSwDataDefProps(self, element: ET.Element, parent: AutosarDataType):
679
- child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
680
-
681
- if (child_element != None):
682
- sw_data_def_props = SwDataDefProps()
683
- sw_data_def_props.base_type_ref = self.readChildOptionalRefElement(child_element, "BASE-TYPE-REF")
684
- sw_data_def_props.data_constr_ref = self.readChildOptionalRefElement(child_element, "DATA-CONSTR-REF")
685
- sw_data_def_props.compu_method_ref = self.readChildOptionalRefElement(child_element, "COMPU-METHOD-REF")
686
- sw_data_def_props.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
687
- sw_data_def_props.sw_calibration_access = self.readChildOptionalElement(child_element, "SW-CALIBRATION-ACCESS")
688
- self.readSwPointerTargetProps(child_element, sw_data_def_props)
689
- parent.sw_data_def_props = sw_data_def_props
690
-
691
- def readApplicationPrimitiveDataTypes(self, element: ET.Element, parent: ARPackage):
692
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-PRIMITIVE-DATA-TYPE", self.nsmap):
693
- short_name = self.readShortName(child_element)
694
- data_type = parent.createApplicationPrimitiveDataType(short_name)
695
- self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
696
- self.readIdentifiable(child_element, data_type)
697
- self.readSwDataDefProps(child_element, data_type)
779
+ def readGeneralAnnotation(self, element: ET.Element, annotation: GeneralAnnotation):
780
+ annotation.label = self.getMultilanguageLongName(element, "LABEL")
781
+
782
+ def readAnnotations(self, element: ET.Element, props: SwDataDefProps) :
783
+ for child_element in element.findall("./xmlns:ANNOTATIONS/xmlns:ANNOTATION", self.nsmap):
784
+ annotation = Annotation()
785
+ self.readGeneralAnnotation(child_element, annotation)
786
+ props.addAnnotation(annotation)
787
+
788
+ def getSwAxisIndividual(self, element: ET.Element) -> SwAxisIndividual:
789
+ props = SwAxisIndividual()
790
+ self.readElementAttributes(element, props)
791
+ props.setInputVariableTypeRef(self.getChildElementOptionalRefType(element, "INPUT-VARIABLE-TYPE-REF")) \
792
+ .setCompuMethodRef(self.getChildElementOptionalRefType(element, "COMPU-METHOD-REF")) \
793
+ .setSwMaxAxisPoints(self.getChildElementOptionalNumericalValue(element, "SW-MAX-AXIS-POINTS")) \
794
+ .setSwMinAxisPoints(self.getChildElementOptionalNumericalValue(element, "SW-MIN-AXIS-POINTS")) \
795
+ .setDataConstrRef(self.getChildElementOptionalRefType(element, "DATA-CONSTR-REF"))
796
+ return props
797
+
798
+ def getSwAxisGrouped(self, element: ET.Element) -> SwAxisGrouped:
799
+ props = SwAxisGrouped()
800
+ props.setSharedAxisTypeRef(self.getChildElementOptionalRefType(element, "SHARED-AXIS-TYPE-REF"))
801
+ return props
802
+
803
+ def getSwCalprmAxis(self, element: ET.Element) -> SwCalprmAxis:
804
+ axis = SwCalprmAxis()
805
+ axis.sw_axis_index = self.getChildElementOptionalNumericalValue(element, "SW-AXIS-INDEX")
806
+ axis.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
807
+ child_element = element.find("./xmlns:SW-AXIS-INDIVIDUAL", self.nsmap)
808
+ if child_element is not None:
809
+ axis.sw_calprm_axis_type_props = self.getSwAxisIndividual(child_element)
810
+ child_element = element.find("./xmlns:SW-AXIS-GROUPED", self.nsmap)
811
+ if child_element is not None:
812
+ axis.sw_calprm_axis_type_props = self.getSwAxisGrouped(child_element)
813
+
814
+ return axis
815
+
816
+ def getSwCalprmAxisSet(self, element: ET.Element, key: str) -> SwCalprmAxisSet:
817
+ set = SwCalprmAxisSet()
818
+ for child_element in element.findall("./xmlns:%s/*" % key, self.nsmap):
819
+ tag_name = self.getTagName(child_element.tag)
820
+ if tag_name == "SW-CALPRM-AXIS":
821
+ set.addSwCalprmAxis(self.getSwCalprmAxis(child_element))
822
+ return set
823
+
824
+ def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
825
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
826
+ sw_data_def_props = None
827
+ if child_element is not None:
828
+ conditional_tag = child_element.find("./xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
829
+ if conditional_tag is not None:
830
+ sw_data_def_props = SwDataDefProps()
831
+ self.readElementAttributes(child_element, sw_data_def_props)
832
+
833
+ self.readAnnotations(conditional_tag, sw_data_def_props)
834
+ sw_data_def_props.baseTypeRef = self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")
835
+ sw_data_def_props.dataConstrRef = self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")
836
+ sw_data_def_props.compuMethodRef = self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")
837
+ sw_data_def_props.swImplPolicy = self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")
838
+ sw_data_def_props.implementationDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")
839
+ sw_data_def_props.swCalibrationAccess = self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")
840
+ sw_data_def_props.swCalprmAxisSet = self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")
841
+ sw_data_def_props.swRecordLayoutRef = self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")
842
+ sw_data_def_props.valueAxisDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")
843
+ sw_data_def_props.setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
844
+ self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
845
+ self.readElementAttributes(conditional_tag, sw_data_def_props.conditional)
846
+ return sw_data_def_props
847
+
848
+ def readApplicationPrimitiveDataType(self, element: ET.Element, parent: ARPackage):
849
+ short_name = self.getShortName(element)
850
+ data_type = parent.createApplicationPrimitiveDataType(short_name)
851
+ self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
852
+ self.readIdentifiable(element, data_type)
853
+ data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
854
+
855
+ def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
856
+ prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
698
857
 
699
858
  def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
700
859
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
701
- short_name = self.readShortName(child_element)
860
+ short_name = self.getShortName(child_element)
702
861
  record_element = parent.createApplicationRecordElement(short_name)
703
862
  self.logger.debug("readApplicationRecordElements %s" % short_name)
704
863
  self.readIdentifiable(child_element, record_element)
705
- record_element.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
864
+ self.readApplicationCompositeElementDataPrototype(child_element, record_element)
706
865
 
707
866
  def readApplicationRecordDataTypes(self, element: ET.Element, parent: ARPackage):
708
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-DATA-TYPE", self.nsmap):
709
- short_name = self.readShortName(child_element)
710
- data_type = parent.createApplicationRecordDataType(short_name)
711
- self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
712
- self.readIdentifiable(child_element, data_type)
713
- self.readSwDataDefProps(child_element, data_type)
714
- self.readApplicationRecordElements(child_element, data_type)
715
-
716
- def readImplementationDataTypeElements(self, element: ET.Element, parent: ARElement):
867
+ short_name = self.getShortName(element)
868
+ data_type = parent.createApplicationRecordDataType(short_name)
869
+ self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
870
+ self.readIdentifiable(element, data_type)
871
+ data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
872
+ self.readApplicationRecordElements(element, data_type)
873
+
874
+ def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
717
875
  for child_element in element.findall("./xmlns:SUB-ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE-ELEMENT", self.nsmap):
718
- short_name = self.readShortName(child_element)
876
+ short_name = self.getShortName(child_element)
719
877
  type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
720
878
  self.readIdentifiable(child_element, type_element)
721
- type_element.array_size = self.readChildOptionalElement(child_element, "ARRAY-SIZE")
722
- type_element.array_size_semantics = self.readChildOptionalElement(child_element, "ARRAY-SIZE-SEMANTICS")
879
+ type_element.arraySize = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")
880
+ type_element.array_size_semantics = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS")
723
881
  self.readImplementationDataTypeElements(child_element, type_element)
724
- self.readSwDataDefProps(child_element, type_element)
725
-
726
- def readImplementationDataTypes(self, element: ET.Element, parent: ARPackage):
727
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE", self.nsmap):
728
- short_name = self.readShortName(child_element)
729
- data_type = parent.createImplementationDataType(short_name)
730
- self.readIdentifiable(child_element, data_type)
731
- self.readImplementationDataTypeElements(child_element, data_type)
732
- self.readSwDataDefProps(child_element, data_type)
733
- if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
734
- if (len(data_type.getImplementationDataTypeElements()) < 1):
735
- self._raiseError("Array Sub-Element of <%s> do not defined." % data_type.short_name)
736
- array_sub_element = data_type.getImplementationDataTypeElements()[0]
737
- if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
738
- data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementation_data_type_ref.value)
739
- elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
740
- continue
741
- else:
742
- self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
743
-
744
- def readBaseTypeDirectDefinition(self, element: ET.Element, parent: BaseType):
745
- parent.base_type_definition.base_type_size = int(self.readChildOptionalElement(element, "BASE-TYPE-SIZE"))
746
- parent.base_type_definition.base_type_encoding = self.readChildOptionalElementLiteral(element, "BASE-TYPE-ENCODING")
747
- parent.base_type_definition.native_declaration = self.readChildOptionalElementLiteral(element, "NATIVE-DECLARATION")
748
-
749
- def readSwBaseTypes(self, element: ET.Element, parent: ARPackage):
750
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
751
- short_name = self.readShortName(child_element)
752
- data_type = parent.createSwBaseType(short_name)
753
- self.readIdentifiable(child_element, data_type)
754
- self.readBaseTypeDirectDefinition(child_element, data_type)
755
-
756
- def readClientComSpec(self, element: ET.Element, parent: RPortPrototype):
757
- for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
758
- try:
759
- com_spec = ClientComSpec()
760
- self.readElementAttributes(child_element, com_spec)
761
- com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
762
- parent.addRequiredComSpec(com_spec)
763
- except ValueError as err:
764
- self.logger.error(parent.short_name + ": " + str(err))
882
+ type_element.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
883
+
884
+ def readImplementationDataType(self, element: ET.Element, parent: ARPackage):
885
+ short_name = self.getShortName(element)
886
+ data_type = parent.createImplementationDataType(short_name)
887
+ self.readAutosarDataType(element, data_type)
888
+ self.readImplementationDataTypeElements(element, data_type)
889
+ data_type.setTypeEmitter(self.getChildElementOptionalLiteral(element, "TYPE-EMITTER"))
890
+ if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
891
+ if (len(data_type.getImplementationDataTypeElements()) < 1):
892
+ self._raiseError("Array Sub-Element of <%s> do not defined." % data_type.short_name)
893
+ array_sub_element = data_type.getImplementationDataTypeElements()[0]
894
+ if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
895
+ data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementationDataTypeRef.value)
896
+ elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
897
+ return
898
+ else:
899
+ self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
765
900
 
766
- def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
767
- #FIXME: readchildElement
768
- com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
769
- self.readSwDataDefProps(element, com_spec)
770
- com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
771
- com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
901
+ def readBaseTypeDirectDefinition(self, element: ET.Element, definition: BaseTypeDirectDefinition):
902
+ definition.base_type_size = self.getChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE")
903
+ definition.base_type_encoding = self.getChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING")
904
+ definition.mem_alignment = self.getChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT")
905
+ definition.native_declaration = self.getChildElementOptionalLiteral(element, "NATIVE-DECLARATION")
906
+
907
+ def readSwBaseType(self, element: ET.Element, parent: ARPackage):
908
+ short_name = self.getShortName(element)
909
+ data_type = parent.createSwBaseType(short_name)
910
+ self.readIdentifiable(element, data_type)
911
+ self.readBaseTypeDirectDefinition(element, data_type.baseTypeDefinition)
772
912
 
773
- def readSwValues(self, element: ET.Element, key: str) -> SwValues:
913
+ def getApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str) -> ApplicationCompositeElementInPortInterfaceInstanceRef:
914
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
915
+ iref = None
916
+ if child_element is not None:
917
+ iref = ApplicationCompositeElementInPortInterfaceInstanceRef()
918
+ iref.root_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "ROOT-DATA-PROTOTYPE-REF")
919
+ iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
920
+ return iref
921
+
922
+ def getCompositeNetworkRepresentation(self, element: ET.Element) -> CompositeNetworkRepresentation:
923
+ self.logger.debug("getCompositeNetworkRepresentation")
924
+ representation = CompositeNetworkRepresentation()
925
+ representation.leaf_element_iref = self.getApplicationCompositeElementInPortInterfaceInstanceRef(element, "LEAF-ELEMENT-IREF")
926
+ representation.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
927
+ return representation
928
+
929
+ def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
930
+ self.readElementAttributes(element, com_spec)
931
+ for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
932
+ com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
933
+ com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
934
+ com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
935
+ com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
936
+ com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
937
+
938
+ def getSwValues(self, element: ET.Element, key: str) -> SwValues:
774
939
  child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
775
940
  if child_element is None:
776
941
  return None
777
- values = SwValues()
778
- v_element = child_element.find("./xmlns:V", self.nsmap)
779
- if v_element is not None:
780
- values.v = v_element.text
781
- self.logger.debug("readSwValues - V: %s" % values.v)
782
- return values
783
-
784
- def readSwValueCont(self, element: ET.Element) -> SwValueCont:
942
+ sw_values = SwValues()
943
+ self.readElementAttributes(child_element, sw_values)
944
+ for v in self.getChildElementFloatValueList(child_element, "V"):
945
+ sw_values.addV(v)
946
+ sw_values.vt = self.getChildElementOptionalLiteral(child_element, "VT")
947
+ return sw_values
948
+
949
+ def getValueList(self, element: ET.Element, key: str) -> ValueList:
950
+ value_list = None
951
+ child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
952
+ if child_element is not None:
953
+ self.logger.debug("getValueList %s" % key)
954
+ value_list = ValueList()
955
+ self.readElementAttributes(child_element, value_list)
956
+ value_list.v = self.getChildElementOptionalFloatValue(child_element, "V")
957
+ return value_list
958
+
959
+ def getSwValueCont(self, element: ET.Element) -> SwValueCont:
785
960
  cont = None
786
961
  child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
787
962
  if child_element is not None:
963
+ self.logger.debug("getSwValueCont")
788
964
  cont = SwValueCont()
789
- cont.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
790
- cont.sw_values_phys = self.readSwValues(child_element, "SW-VALUES-PHYS")
791
-
792
- self.logger.debug("readSwValueCont - Unit: %s" % cont.unit_ref.value)
965
+ self.readElementAttributes(child_element, cont)
966
+ cont.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
967
+ cont.sw_arraysize = self.getValueList(child_element, "SW-ARRAYSIZE")
968
+ cont.sw_values_phys = self.getSwValues(child_element, "SW-VALUES-PHYS")
793
969
  return cont
794
970
 
795
- def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
796
- value_spec.short_label = self.readChildOptionalElement(element, "SHORT-LABEL")
797
- self.readElementAttributes(element, value_spec)
798
-
799
- self.logger.debug("readValueSpecification")
800
-
801
971
  def readApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
802
972
  self.readValueSpecification(element, value_spec)
803
- value_spec.category = self.readChildOptionalElement(element, "CATEGORY")
804
- value_spec.sw_value_cont = self.readSwValueCont(element)
973
+ value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
974
+ value_spec.sw_value_cont = self.getSwValueCont(element)
805
975
 
806
976
  self.logger.debug("readApplicationValueSpecification Category %s" % value_spec.category)
807
977
 
808
- def readTextValueSpecification(self, element: ET.Element, value_spec: TextValueSpecification):
809
- self.readValueSpecification(element, value_spec)
810
- value_spec.value = self.readChildOptionalElement(element, "VALUE")
811
-
812
- self.logger.debug("readTextValueSpecification Value: %s" % value_spec.value)
813
-
814
- def readNumericalValueSpecification(self, element: ET.Element, value_spec: NumericalValueSpecification):
815
- self.readValueSpecification(element, value_spec)
816
- value_spec.value = self.readChildOptionalElement(element, "VALUE")
817
-
818
- self.logger.debug("readNumericalValueSpecification Value: %s" % value_spec.value)
819
-
820
- def readArrayValueSpecification(self, element: ET.Element, value_spec: ArrayValueSpecification):
821
- self.readValueSpecification(element, value_spec)
822
-
823
- child_elements = element.findall("./xmlns:ELEMENTS/xmlns:NUMERICAL-VALUE-SPECIFICATION", self.nsmap)
824
- for child_element in child_elements:
825
- sub_element = NumericalValueSpecification()
826
- self.readNumericalValueSpecification(child_element, sub_element)
827
- value_spec.add_element(sub_element)
828
-
829
- self.logger.debug("readArrayValueSpecification")
830
-
831
- def readConstantReference(self, element: ET.Element, value_spec: ConstantReference):
832
- self.readValueSpecification(element, value_spec)
833
-
834
- value_spec.constant_ref = self.readChildOptionalRefElement(element, "CONSTANT-REF")
835
-
836
- def readInitValue(self, element: ET.Element) -> ValueSpecification:
978
+ def getInitValue(self, element: ET.Element) -> ValueSpecification:
837
979
  value_spec = None
838
- child_element = element.find("./xmlns:INIT-VALUE", self.nsmap)
980
+ child_element = element.find("./xmlns:INIT-VALUE/*", self.nsmap)
839
981
  if child_element is not None:
840
- self.logger.debug("readInitValue")
841
- value_spec_tag = child_element.find("./xmlns:APPLICATION-VALUE-SPECIFICATION", self.nsmap)
842
- if value_spec_tag is not None:
843
- value_spec = ApplicationValueSpecification()
844
- self.readApplicationValueSpecification(value_spec_tag, value_spec)
845
- return value_spec
846
- value_spec_tag = child_element.find("./xmlns:TEXT-VALUE-SPECIFICATION", self.nsmap)
847
- if value_spec_tag is not None:
848
- value_spec = TextValueSpecification()
849
- self.readTextValueSpecification(value_spec_tag, value_spec)
850
- return value_spec
851
- value_spec_tag = child_element.find("./xmlns:NUMERICAL-VALUE-SPECIFICATION", self.nsmap)
852
- if value_spec_tag is not None:
853
- value_spec = NumericalValueSpecification()
854
- self.readNumericalValueSpecification(value_spec_tag, value_spec)
855
- return value_spec
856
- value_spec_tag = child_element.find("./xmlns:ARRAY-VALUE-SPECIFICATION", self.nsmap)
857
- if value_spec_tag is not None:
858
- value_spec = ArrayValueSpecification()
859
- self.readArrayValueSpecification(value_spec_tag, value_spec)
860
- return value_spec
861
- value_spec_tag = child_element.find("./xmlns:CONSTANT-REFERENCE", self.nsmap)
862
- if value_spec_tag is not None:
863
- value_spec = ConstantReference()
864
- self.readConstantReference(value_spec_tag, value_spec)
865
- return value_spec
866
-
982
+ self.logger.debug("getInitValue")
983
+ value_spec = self.getValueSpecification(child_element)
867
984
  return value_spec
985
+
986
+ def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
987
+ com_spec = ClientComSpec()
988
+ self.readElementAttributes(element, com_spec)
989
+ com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
990
+ return com_spec
991
+
992
+ def getQueuedReceiverComSpec(self, element: ET.Element) -> QueuedReceiverComSpec:
993
+ com_spec = QueuedReceiverComSpec()
994
+ self.readElementAttributes(element, com_spec)
995
+ self.readReceiverComSpec(element, com_spec)
996
+ com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
997
+ return com_spec
998
+
999
+ def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
1000
+ com_spec = NonqueuedReceiverComSpec()
1001
+ self.readElementAttributes(element, com_spec)
1002
+ self.readReceiverComSpec(element, com_spec)
1003
+ com_spec.alive_timeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
1004
+ com_spec.enable_updated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
1005
+ com_spec.handle_never_received = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
1006
+ com_spec.handel_timeout_type = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
1007
+ com_spec.init_value = self.getInitValue(element)
1008
+ return com_spec
1009
+
1010
+ def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
1011
+ for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/*", self.nsmap):
1012
+ tag_name = self.getTagName(child_element.tag)
1013
+ if tag_name == "NONQUEUED-RECEIVER-COM-SPEC":
1014
+ parent.addRequiredComSpec(self.getNonqueuedReceiverComSpec(child_element))
1015
+ elif tag_name == "CLIENT-COM-SPEC":
1016
+ parent.addRequiredComSpec(self.getClientComSpec(child_element))
1017
+ elif tag_name == "QUEUED-RECEIVER-COM-SPEC":
1018
+ parent.addRequiredComSpec(self.getQueuedReceiverComSpec(child_element))
1019
+ else:
1020
+ self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
868
1021
 
869
- def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
870
- for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
871
- com_spec = NonqueuedReceiverComSpec()
872
-
873
- self.readElementAttributes(child_element, com_spec)
874
- self.readReceiverComSpec(child_element, com_spec)
875
- try:
876
- # FIXME:
877
- com_spec.alive_timeout = self.readChildElementFloatValue("", child_element, "ALIVE-TIMEOUT")
878
- com_spec.enable_updated = self.readChildElementBooleanValue("", child_element, "ENABLE-UPDATE")
879
- com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
880
- com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
881
- except ValueError as err:
882
- self.logger.error(parent.short_name + ": " + str(err))
883
-
884
- com_spec.init_value = self.readInitValue(child_element)
885
-
886
- parent.addRequiredComSpec(com_spec)
887
-
888
- def readRPortPrototype(self, element, parent: AtomicSwComponentType):
1022
+ def readRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
889
1023
  for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
890
- short_name = self.readShortName(child_element)
1024
+ short_name = self.getShortName(child_element)
891
1025
  self.logger.debug("readRPortPrototype %s" % short_name)
892
-
893
1026
  prototype = parent.createRPortPrototype(short_name)
894
- self.readElementAttributes(child_element, prototype)
895
- prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
1027
+ self.readIdentifiable(child_element, prototype)
1028
+ prototype.required_interface_tref = self.getChildElementOptionalRefType(child_element, "REQUIRED-INTERFACE-TREF")
896
1029
 
897
- self.readClientComSpec(child_element, prototype)
898
- self.readNonqueuedReceiverComSpec(child_element, prototype)
1030
+ self.readRequiredComSpec(child_element, prototype)
899
1031
 
900
1032
  def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
901
1033
  child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
902
- if (child_element != None):
1034
+ if (child_element is not None):
903
1035
  acknowledge = TransmissionAcknowledgementRequest()
904
1036
  self.readElementAttributes(child_element, acknowledge)
905
- acknowledge.timeout = self.readChildElementFloatValue ("", child_element, "TIMEOUT")
1037
+ acknowledge.timeout = self.getChildElementOptionalFloatValue(child_element, "TIMEOUT")
906
1038
  return acknowledge
907
1039
  return None
908
1040
 
909
- def readSenderComSpec(self, element, com_spec: SenderComSpec):
910
- # FIXME:
1041
+ def readSenderComSpec(self, element:ET.Element, com_spec: SenderComSpec):
911
1042
  self.readElementAttributes(element, com_spec)
912
- com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
913
- com_spec.network_representation = self.parseSwDataDefProps(element)
914
- self.logger.debug("network_representation %s" % com_spec.network_representation)
915
- com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
1043
+ for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1044
+ com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1045
+ com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1046
+ com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1047
+ com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
916
1048
  com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
917
- com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
918
-
919
- def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
920
- for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
921
- com_spec = NonqueuedSenderComSpec()
922
- self.readSenderComSpec(child_element, com_spec)
923
-
924
- com_spec.init_value = self.readInitValue(child_element)
1049
+ com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
925
1050
 
926
- parent.addProvidedComSpec(com_spec)
1051
+ def getNonqueuedSenderComSpec(self, element) -> NonqueuedSenderComSpec:
1052
+ com_spec = NonqueuedSenderComSpec()
1053
+ self.readSenderComSpec(element, com_spec)
1054
+ com_spec.init_value = self.getInitValue(element)
1055
+ return com_spec
1056
+
1057
+ def getServerComSpec(self, element) -> ServerComSpec:
1058
+ com_spec = ServerComSpec()
1059
+ self.readSenderComSpec(element, com_spec)
1060
+ com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
1061
+ com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1062
+ return com_spec
1063
+
1064
+ def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
1065
+ for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/*", self.nsmap):
1066
+ tag_name = self.getTagName(child_element.tag)
1067
+ if tag_name == "NONQUEUED-SENDER-COM-SPEC":
1068
+ parent.addProvidedComSpec(self.getNonqueuedSenderComSpec(child_element))
1069
+ elif tag_name == "SERVER-COM-SPEC":
1070
+ parent.addProvidedComSpec(self.getServerComSpec(child_element))
1071
+ else:
1072
+ raise NotImplementedError("Unsupported RequiredComSpec <%s>" % tag_name)
927
1073
 
928
- def readPPortPrototype(self, element, parent: AtomicSwComponentType):
1074
+ def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
929
1075
  for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
930
- short_name = self.readShortName(child_element)
1076
+ short_name = self.getShortName(child_element)
931
1077
  self.logger.debug("readPPortPrototype %s" % short_name)
932
-
933
1078
  prototype = parent.createPPortPrototype(short_name)
934
- self.readElementAttributes(child_element, prototype)
935
- prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
936
- self.readNonqueuedSenderComSpec(child_element, prototype)
1079
+ self.readIdentifiable(child_element, prototype)
1080
+ prototype.provided_interface_tref = self.getChildElementOptionalRefType(child_element, "PROVIDED-INTERFACE-TREF")
1081
+
1082
+ self.readProvidedComSpec(child_element, prototype)
1083
+
1084
+ def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
1085
+ for child_element in element.findall("./xmlns:INNER-GROUP-IREFS/xmlns:INNER-GROUP-IREF", self.nsmap):
1086
+ inner_group_iref = InnerPortGroupInCompositionInstanceRef()
1087
+ inner_group_iref.contextRef = self.getChildElementOptionalRefType(child_element, "CONTEXT-REF")
1088
+ inner_group_iref.targetRef = self.getChildElementOptionalRefType(child_element, "TARGET-REF")
1089
+ parent.addInnerGroupIRef(inner_group_iref)
1090
+
1091
+ def readPortGroupOuterPortRefs(self, element: ET.Element, parent: PortGroup):
1092
+ for child_element in element.findall("./xmlns:OUTER-PORTS/xmlns:PORT-PROTOTYPE-REF-CONDITIONAL", self.nsmap):
1093
+ parent.addOuterPortRef(self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF"))
1094
+
1095
+ def readPortGroup(self, element: ET.Element, parent: SwComponentType):
1096
+ short_name = self.getShortName(element)
1097
+ self.logger.debug("readPortGroup %s" % short_name)
1098
+ port_group = parent.createPortGroup(short_name)
1099
+ self.readIdentifiable(element, port_group)
1100
+ self.readPortGroupInnerGroupIRefs(element, port_group)
1101
+ self.readPortGroupOuterPortRefs(element, port_group)
1102
+
1103
+ def readSwComponentTypePortGroups(self, element: ET.Element, parent: SwComponentType):
1104
+ for child_element in element.findall("./xmlns:PORT-GROUPS/*", self.nsmap):
1105
+ tag_name = self.getTagName(child_element.tag)
1106
+ if tag_name == "PORT-GROUP":
1107
+ self.readPortGroup(child_element, parent)
1108
+ else:
1109
+ self._raiseError("Unsupported Port Group type: %s" % tag_name)
937
1110
 
938
- def readSwComponentType(self, element, parent: SwComponentType):
1111
+ def readSwComponentType(self, element: ET.Element, parent: SwComponentType):
1112
+ self.readIdentifiable(element, parent)
939
1113
  self.readRPortPrototype(element, parent)
940
1114
  self.readPPortPrototype(element, parent)
1115
+ self.readSwComponentTypePortGroups(element, parent)
941
1116
 
942
1117
  def readAtomicSwComponentType(self, element, parent: AtomicSwComponentType):
943
1118
  self.readSwComponentType(element, parent)
944
- self.readSwInternalBehavior(element, parent)
945
-
946
- def readEcuAbstractionSwComponents(self, element, parent: ARPackage):
947
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:ECU-ABSTRACTION-SW-COMPONENT-TYPE", self.nsmap):
948
- short_name = self.readShortName(child_element)
949
- sw_component = parent.createEcuAbstractionSwComponentType(
950
- short_name)
951
- self.readAtomicSwComponentType(child_element, sw_component)
952
-
953
- def readApplicationSwComponentTypes(self, element, parent: ARPackage):
954
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-SW-COMPONENT-TYPE", self.nsmap):
955
- short_name = self.readShortName(child_element)
956
- sw_component = parent.createApplicationSwComponentType(short_name)
957
- self.readAtomicSwComponentType(child_element, sw_component)
958
-
959
- def readComplexDeviceDriverSwComponentTypes(self, element, parent: ARPackage):
960
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPLEX-DEVICE-DRIVER-SW-COMPONENT-TYPE", self.nsmap):
961
- short_name = self.readShortName(child_element)
962
- sw_component = parent.createApplicationSwComponentType(short_name)
963
- self.readAtomicSwComponentType(child_element, sw_component)
964
-
965
- def readSensorActuatorSwComponentType(self, element, parent: ARPackage):
966
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENSOR-ACTUATOR-SW-COMPONENT-TYPE", self.nsmap):
967
- short_name = self.readShortName(child_element)
968
- sw_component = parent.createSensorActuatorSwComponentType(short_name)
969
- self.readAtomicSwComponentType(child_element, sw_component)
970
-
971
- def readServiceSwComponentTypes(self, element, parent: ARPackage):
972
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SERVICE-SW-COMPONENT-TYPE", self.nsmap):
973
- short_name = self.readShortName(child_element)
974
- sw_component = parent.createServiceSwComponentType(short_name)
975
- self.readAtomicSwComponentType(child_element, sw_component)
976
-
977
- def readPPortInCompositionInstanceRef(self, element, p_port_in_composition_instance_ref: PPortInCompositionInstanceRef):
978
- p_port_in_composition_instance_ref.context_component_ref = self.readChildOptionalRefElement(element, "CONTEXT-COMPONENT-REF")
979
- p_port_in_composition_instance_ref.target_p_port_ref = self.readChildOptionalRefElement(element, "TARGET-P-PORT-REF")
1119
+ self.readSwcInternalBehavior(element, parent)
1120
+
1121
+ def readEcuAbstractionSwComponent(self, element, parent: ARPackage):
1122
+ short_name = self.getShortName(element)
1123
+ sw_component = parent.createEcuAbstractionSwComponentType(short_name)
1124
+ self.readAtomicSwComponentType(element, sw_component)
1125
+
1126
+ def readApplicationSwComponentTypes(self, element: ET.Element, parent: ARPackage):
1127
+ short_name = self.getShortName(element)
1128
+ sw_component = parent.createApplicationSwComponentType(short_name)
1129
+ self.readAtomicSwComponentType(element, sw_component)
1130
+
1131
+ def readComplexDeviceDriverSwComponentType(self, element: ET.Element, parent: ARPackage):
1132
+ short_name = self.getShortName(element)
1133
+ sw_component = parent.createComplexDeviceDriverSwComponentType(short_name)
1134
+ self.logger.debug("readComplexDeviceDriverSwComponentType <%s>" % short_name)
1135
+ self.readAtomicSwComponentType(element, sw_component)
1136
+
1137
+ def readSensorActuatorSwComponentType(self, element: ET.Element, parent: ARPackage):
1138
+ short_name = self.getShortName(element)
1139
+ sw_component = parent.createSensorActuatorSwComponentType(short_name)
1140
+ self.logger.debug("readSensorActuatorSwComponentType <%s>" % short_name)
1141
+ self.readAtomicSwComponentType(element, sw_component)
1142
+
1143
+ def readServiceSwComponentType(self, element: ET.Element, parent: ARPackage):
1144
+ short_name = self.getShortName(element)
1145
+ sw_component = parent.createServiceSwComponentType(short_name)
1146
+ self.logger.debug("readServiceSwComponentType <%s>" % short_name)
1147
+ self.readAtomicSwComponentType(element, sw_component)
1148
+
1149
+ def readPPortInCompositionInstanceRef(self, element: ET.Element, p_port_in_composition_instance_ref: PPortInCompositionInstanceRef):
1150
+ p_port_in_composition_instance_ref.context_component_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1151
+ p_port_in_composition_instance_ref.target_p_port_ref = self.getChildElementOptionalRefType(element, "TARGET-P-PORT-REF")
980
1152
 
981
1153
  self.logger.debug("PPortInCompositionInstanceRef")
982
1154
  self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
@@ -985,8 +1157,8 @@ class ARXMLParser:
985
1157
  % (p_port_in_composition_instance_ref.target_p_port_ref.dest, p_port_in_composition_instance_ref.target_p_port_ref.value))
986
1158
 
987
1159
  def readRPortInCompositionInstanceRef(self, element, r_port_in_composition_instance_ref: RPortInCompositionInstanceRef):
988
- r_port_in_composition_instance_ref.context_component_ref = self.readChildOptionalRefElement(element, "CONTEXT-COMPONENT-REF")
989
- r_port_in_composition_instance_ref.target_r_port_ref = self.readChildOptionalRefElement(element, "TARGET-R-PORT-REF")
1160
+ r_port_in_composition_instance_ref.context_component_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1161
+ r_port_in_composition_instance_ref.target_r_port_ref = self.getChildElementOptionalRefType(element, "TARGET-R-PORT-REF")
990
1162
 
991
1163
  self.logger.debug("RPortInCompositionInstanceRef")
992
1164
  self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
@@ -994,44 +1166,44 @@ class ARXMLParser:
994
1166
  self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
995
1167
  % (r_port_in_composition_instance_ref.target_r_port_ref.dest, r_port_in_composition_instance_ref.target_r_port_ref.value))
996
1168
 
997
- def readAssemblySwConnectorProviderIRef(self, element, parent: AssemblySwConnector):
1169
+ def readAssemblySwConnectorProviderIRef(self, element: ET.Element, parent: AssemblySwConnector):
998
1170
  child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
999
- if (child_element != None):
1171
+ if (child_element is not None):
1000
1172
  provide_iref = PPortInCompositionInstanceRef()
1001
1173
  self.readElementAttributes(child_element, provide_iref)
1002
1174
  self.readPPortInCompositionInstanceRef(child_element, provide_iref)
1003
1175
  parent.provider_iref = provide_iref
1004
1176
 
1005
- def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
1177
+ def readAssemblySwConnectorRequesterIRef(self, element: ET.Element, parent: AssemblySwConnector):
1006
1178
  child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
1007
- if (child_element != None):
1179
+ if (child_element is not None):
1008
1180
  requester_iref = RPortInCompositionInstanceRef()
1009
1181
  self.readElementAttributes(child_element, requester_iref)
1010
1182
  self.readRPortInCompositionInstanceRef(child_element, requester_iref)
1011
1183
  parent.requester_iref = requester_iref
1012
1184
 
1013
- def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
1185
+ def readAssemblySwConnectors(self, element: ET.Element, parent: CompositionSwComponentType):
1014
1186
  for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
1015
- short_name = self.readShortName(child_element)
1187
+ short_name = self.getShortName(child_element)
1016
1188
  self.logger.debug("readAssemblySwConnectors %s" % short_name)
1017
1189
 
1018
1190
  connector = parent.createAssemblySwConnector(short_name)
1019
- self.readElementAttributes(child_element, connector)
1191
+ self.readIdentifiable(child_element, connector)
1020
1192
  self.readAssemblySwConnectorProviderIRef(child_element, connector)
1021
1193
  self.readAssemblySwConnectorRequesterIRef(child_element, connector)
1022
1194
 
1023
1195
  def readDelegationSwConnectorInnerPortIRef(self, element, parent: DelegationSwConnector):
1024
1196
  inner_port_iref_element = element.find("./xmlns:INNER-PORT-IREF", self.nsmap)
1025
- if (inner_port_iref_element != None):
1197
+ if (inner_port_iref_element is not None):
1026
1198
  child_element = inner_port_iref_element.find("./xmlns:R-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
1027
- if (child_element != None):
1199
+ if (child_element is not None):
1028
1200
  r_port_in_composition_instance_ref = RPortInCompositionInstanceRef()
1029
1201
  self.readRPortInCompositionInstanceRef(child_element, r_port_in_composition_instance_ref)
1030
1202
  parent.inner_port_iref = r_port_in_composition_instance_ref
1031
1203
  return
1032
1204
 
1033
1205
  child_element = inner_port_iref_element.find("./xmlns:P-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
1034
- if (child_element != None):
1206
+ if (child_element is not None):
1035
1207
  p_port_in_composition_instance_ref = PPortInCompositionInstanceRef()
1036
1208
  self.readPPortInCompositionInstanceRef(child_element, p_port_in_composition_instance_ref)
1037
1209
  parent.inner_port_iref = p_port_in_composition_instance_ref
@@ -1041,111 +1213,126 @@ class ARXMLParser:
1041
1213
 
1042
1214
  def readDelegationSwConnectors(self, element, parent: CompositionSwComponentType):
1043
1215
  for child_element in element.findall("./xmlns:CONNECTORS/xmlns:DELEGATION-SW-CONNECTOR", self.nsmap):
1044
- short_name = self.readShortName(child_element)
1216
+ short_name = self.getShortName(child_element)
1045
1217
  self.logger.debug("readDelegationSwConnectors %s" % short_name)
1046
1218
 
1047
1219
  connector = parent.createDelegationSwConnector(short_name)
1048
- self.readElementAttributes(child_element, connector)
1220
+ self.readIdentifiable(child_element, connector)
1049
1221
  self.readDelegationSwConnectorInnerPortIRef(child_element, connector)
1050
1222
 
1051
1223
  if connector.inner_port_iref == None and connector.outer_port_iref == None:
1052
1224
  self._raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
1053
1225
 
1054
- connector.outer_port_ref = self.readChildOptionalRefElement(child_element, "OUTER-PORT-REF")
1226
+ connector.outer_port_ref = self.getChildElementOptionalRefType(child_element, "OUTER-PORT-REF")
1055
1227
  self.logger.debug("OUTER-PORT-REF DEST: %s, %s"
1056
1228
  % (connector.outer_port_ref.dest, connector.outer_port_ref.value))
1057
1229
 
1058
1230
  def readSwComponentPrototypes(self, element: ET.Element, parent: CompositionSwComponentType):
1059
1231
  for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
1060
- short_name = self.readShortName(child_element)
1232
+ short_name = self.getShortName(child_element)
1061
1233
  self.logger.debug("readSwComponentPrototypes %s" % short_name)
1062
-
1063
1234
  prototype = parent.createSwComponentPrototype(short_name)
1064
- self.readElementAttributes(child_element, prototype)
1065
- prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
1235
+ self.readIdentifiable(child_element, prototype)
1236
+ prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1066
1237
 
1067
- def readDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
1238
+ def readCompositionSwComponentTypeDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
1068
1239
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
1069
1240
  self.logger.debug("readDataTypeMappingSet")
1070
- if child_element != None:
1071
- for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
1241
+ if child_element is not None:
1242
+ for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
1072
1243
  parent.addDataTypeMapping(ref)
1073
1244
 
1074
- def readCompositionSwComponentTypes(self, element: ET.Element, parent: ARPackage):
1075
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
1076
- short_name = self.readShortName(child_element)
1077
- self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
1245
+ def readCompositionSwComponentType(self, element: ET.Element, parent: ARPackage):
1246
+ short_name = self.getShortName(element)
1247
+ self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
1248
+
1249
+ sw_component = parent.createCompositionSwComponentType(short_name)
1250
+ self.readIdentifiable(element, sw_component)
1251
+ self.readSwComponentType(element, sw_component)
1252
+ self.readSwComponentPrototypes(element, sw_component)
1253
+ self.readAssemblySwConnectors(element, sw_component)
1254
+ self.readDelegationSwConnectors(element, sw_component)
1255
+ self.readCompositionSwComponentTypeDataTypeMappingSet(element, sw_component)
1078
1256
 
1079
- sw_component = parent.createCompositionSwComponentType(short_name)
1080
- self.readIdentifiable(child_element, sw_component)
1081
- self.readSwComponentType(child_element, sw_component)
1082
- self.readSwComponentPrototypes(child_element, sw_component)
1083
- self.readAssemblySwConnectors(child_element, sw_component)
1084
- self.readDelegationSwConnectors(child_element, sw_component)
1085
- self.readDataTypeMappingSet(child_element, sw_component)
1257
+ self.logger.debug("ReadCompositionSwComponentTypes: <%s> (Done)" % short_name)
1086
1258
 
1087
- def readDataTypeMap(self, element: ET.Element, parent: DataTypeMappingSet):
1259
+ def readDataTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
1088
1260
  for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
1089
1261
  data_type_map = DataTypeMap()
1090
- data_type_map.application_data_type_ref = self.readChildOptionalRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
1091
- data_type_map.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1262
+ self.readElementAttributes(child_element, data_type_map)
1263
+ data_type_map.application_data_type_ref = self.getChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF")
1264
+ data_type_map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1092
1265
  parent.addDataTypeMap(data_type_map)
1093
1266
  # add the data type map to global namespace
1094
1267
  AUTOSAR.getInstance().addDataTypeMap(data_type_map)
1095
1268
 
1096
- def readDataTypeMappingSets(self, element: ET.Element, parent: ARPackage):
1097
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-TYPE-MAPPING-SET", self.nsmap):
1098
- short_name = self.readShortName(child_element)
1099
- mapping_set = parent.createDataTypeMappingSet(short_name)
1100
- self.readDataTypeMap(child_element, mapping_set)
1101
-
1102
- def readVariableDataPrototype(self, element: ET.Element, parent: SenderReceiverInterface):
1269
+ def readModeRequestTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
1270
+ for child_element in element.findall("./xmlns:MODE-REQUEST-TYPE-MAPS/xmlns:MODE-REQUEST-TYPE-MAP", self.nsmap):
1271
+ map = ModeRequestTypeMap()
1272
+ map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1273
+ map.mode_group_ref = self.getChildElementOptionalRefType(child_element, "MODE-GROUP-REF")
1274
+ parent.addModeRequestTypeMap(map)
1275
+
1276
+ def readDataTypeMappingSet(self, element: ET.Element, parent: ARPackage):
1277
+ short_name = self.getShortName(element)
1278
+ mapping_set = parent.createDataTypeMappingSet(short_name)
1279
+ self.readIdentifiable(element, mapping_set)
1280
+ self.readDataTypeMaps(element, mapping_set)
1281
+ self.readModeRequestTypeMaps(element, mapping_set)
1282
+
1283
+ def readDataElements(self, element: ET.Element, parent: SenderReceiverInterface):
1103
1284
  for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
1104
- short_name = self.readShortName(child_element)
1285
+ short_name = self.getShortName(child_element)
1105
1286
  prototype = parent.createDataElement(short_name)
1106
- self.readSwDataDefProps(child_element, prototype)
1107
- prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
1287
+ self.readIdentifiable(child_element, prototype)
1288
+ prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1289
+ self.readAutosarDataPrototype(child_element, prototype)
1290
+ prototype.init_value = self.getInitValue(child_element)
1108
1291
 
1109
1292
  def readSenderReceiverInterfaces(self, element, parent: ARPackage):
1110
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENDER-RECEIVER-INTERFACE", self.nsmap):
1111
- short_name = self.readShortName(child_element)
1112
- sr_interface = parent.createSenderReceiverInterface(short_name)
1113
- self.readVariableDataPrototype(child_element, sr_interface)
1293
+ short_name = self.getShortName(element)
1294
+ sr_interface = parent.createSenderReceiverInterface(short_name)
1295
+ self.readIdentifiable(element, sr_interface)
1296
+ sr_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1297
+ self.readDataElements(element, sr_interface)
1114
1298
 
1115
1299
  def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1116
1300
  for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
1117
- short_name = self.readShortName(child_element)
1301
+ short_name = self.getShortName(child_element)
1118
1302
  prototype = ArgumentDataPrototype(property, short_name)
1119
- prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
1120
- prototype.direction = self.readChildElement(short_name, child_element, "DIRECTION")
1303
+ prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1304
+ prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
1121
1305
  parent.addArgumentDataPrototype(prototype)
1122
1306
 
1123
1307
  def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
1124
1308
  child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
1125
- if child_element != None:
1126
- for ref in self.readChildRefElementList(child_element, "POSSIBLE-ERROR-REF"):
1309
+ if child_element is not None:
1310
+ for ref in self.getChildElementRefTypeList(child_element, "POSSIBLE-ERROR-REF"):
1127
1311
  parent.addPossibleErrorRef(ref)
1128
1312
 
1129
1313
  def readOperations(self, element: ET.Element, parent: ClientServerInterface):
1130
1314
  for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
1131
- short_name = self.readShortName(child_element)
1315
+ short_name = self.getShortName(child_element)
1132
1316
  operation = parent.createOperation(short_name)
1133
1317
  self.readArgumentDataPrototypes(child_element, operation)
1134
1318
  self.readPossibleErrorRefs(child_element, operation)
1135
1319
 
1136
1320
  def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
1137
1321
  for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
1138
- short_name = self.readShortName(child_element)
1322
+ short_name = self.getShortName(child_element)
1139
1323
  error = parent.createApplicationError(short_name)
1140
- error.error_code = self.readChildElementNumberValue(short_name, child_element, "ERROR-CODE")
1324
+ error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
1325
+
1326
+ def readPortInterface(self, element: ET.Element, port_interface: PortInterface):
1327
+ port_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1328
+ port_interface.serviceKind = self.getChildElementOptionalLiteral(element, "SERVICE-KIND")
1141
1329
 
1142
- def readClientServerInterfaces(self, element: ET.Element, parent: ARPackage):
1143
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CLIENT-SERVER-INTERFACE", self.nsmap):
1144
- short_name = self.readShortName(child_element)
1145
- cs_interface = parent.createClientServerInterface(short_name)
1146
- cs_interface.is_service = self.readChildElement(short_name, child_element, "IS-SERVICE")
1147
- self.readOperations(child_element, cs_interface)
1148
- self.readPossibleErrors(child_element, cs_interface)
1330
+ def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
1331
+ short_name = self.getShortName(element)
1332
+ cs_interface = parent.createClientServerInterface(short_name)
1333
+ self.readPortInterface(element, cs_interface)
1334
+ self.readOperations(element, cs_interface)
1335
+ self.readPossibleErrors(element, cs_interface)
1149
1336
 
1150
1337
  def readCompuConst(self, element: ET.Element, parent: CompuScale):
1151
1338
  child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
@@ -1154,8 +1341,9 @@ class ARXMLParser:
1154
1341
  contents = CompuScaleConstantContents()
1155
1342
  contents.compu_const = CompuConst()
1156
1343
  contents.compu_const.compu_const_content_type = CompuConstTextContent()
1157
- contents.compu_const.compu_const_content_type.vt = child_element.text
1158
- parent.compu_scale_contents = contents
1344
+ contents.compu_const.compu_const_content_type.vt = ARLiteral()
1345
+ contents.compu_const.compu_const_content_type.vt.setValue(child_element.text)
1346
+ parent.compuScaleContents = contents
1159
1347
 
1160
1348
  def readCompuNominatorDenominator(self, element: ET.Element, key: str, parent: CompuNominatorDenominator):
1161
1349
  for child_element in element.findall("./xmlns:%s/xmlns:V" % key, self.nsmap):
@@ -1172,7 +1360,7 @@ class ARXMLParser:
1172
1360
  contents.compu_rational_coeffs.compu_numerator = CompuNominatorDenominator()
1173
1361
  self.readCompuNominatorDenominator(child_element, "COMPU-DENOMINATOR", contents.compu_rational_coeffs.compu_denominator)
1174
1362
  self.readCompuNominatorDenominator(child_element, "COMPU-NUMERATOR", contents.compu_rational_coeffs.compu_numerator)
1175
- parent.compu_scale_contents = contents
1363
+ parent.compuScaleContents = contents
1176
1364
 
1177
1365
  def readCompuScaleContents(self, element: ET.Element, parent: CompuScale):
1178
1366
  self.readCompuConst(element, parent)
@@ -1181,165 +1369,446 @@ class ARXMLParser:
1181
1369
  def readCompuScales(self, element: ET.Element, parent: CompuScales):
1182
1370
  for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
1183
1371
  compu_scale = CompuScale()
1184
- compu_scale.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
1185
- compu_scale.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
1372
+ self.readElementAttributes(child_element, compu_scale)
1373
+ compu_scale.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
1374
+ compu_scale.lowerLimit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
1375
+ compu_scale.upperLimit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
1186
1376
  self.readCompuScaleContents(child_element, compu_scale)
1187
1377
  parent.addCompuScale(compu_scale)
1188
1378
 
1189
1379
  def readCompuInternalToPhys(self, element: ET.Element, parent: CompuMethod):
1190
1380
  child_element = element.find("./xmlns:COMPU-INTERNAL-TO-PHYS", self.nsmap)
1191
- if (child_element != None):
1381
+ if (child_element is not None):
1192
1382
  parent.compu_internal_to_phys = Compu()
1193
1383
  self.readElementAttributes(child_element, parent.compu_internal_to_phys)
1194
1384
  parent.compu_internal_to_phys.compu_content = CompuScales()
1195
1385
  self.readCompuScales(child_element, parent.compu_internal_to_phys.compu_content)
1196
1386
 
1197
- def readCompuMethods(self, element: ET.Element, parent: ARPackage):
1198
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
1199
- short_name = self.readShortName(child_element)
1200
- self.logger.debug("readCompuMethods %s" % short_name)
1201
- compu_method = parent.createCompuMethod(short_name)
1202
- self.readIdentifiable(child_element, compu_method)
1203
- compu_method.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
1204
- self.readCompuInternalToPhys(child_element, compu_method)
1387
+ def readCompuMethod(self, element: ET.Element, parent: ARPackage):
1388
+ short_name = self.getShortName(element)
1389
+ self.logger.debug("readCompuMethods %s" % short_name)
1390
+ compu_method = parent.createCompuMethod(short_name)
1391
+ self.readIdentifiable(element, compu_method)
1392
+ compu_method.unit_ref = self.getChildElementOptionalRefType(element, "UNIT-REF")
1393
+ self.readCompuInternalToPhys(element, compu_method)
1205
1394
 
1206
1395
  def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
1207
1396
  for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
1208
1397
  mapping = SwcBswRunnableMapping()
1209
- mapping.bsw_entity_ref = self.readChildOptionalRefElement(child_element, "BSW-ENTITY-REF")
1210
- mapping.swc_runnable_ref = self.readChildOptionalRefElement(child_element, "SWC-RUNNABLE-REF")
1398
+ mapping.bswEntityRef = self.getChildElementOptionalRefType(child_element, "BSW-ENTITY-REF")
1399
+ mapping.swcRunnableRef = self.getChildElementOptionalRefType(child_element, "SWC-RUNNABLE-REF")
1211
1400
  parent.addRunnableMapping(mapping)
1212
1401
 
1213
1402
  def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
1214
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-BSW-MAPPING", self.nsmap):
1215
- short_name = self.readShortName(child_element)
1216
- self.logger.debug("readSwcBswMappings %s" % short_name)
1217
- swc_bsw_mapping = parent.createSwcBswMapping(short_name)
1218
- swc_bsw_mapping.bsw_behavior_ref = self.readChildOptionalRefElement(child_element, "BSW-BEHAVIOR-REF")
1219
- self.readSwcBswRunnableMappings(child_element, swc_bsw_mapping)
1220
- swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
1403
+ short_name = self.getShortName(element)
1404
+ self.logger.debug("readSwcBswMappings %s" % short_name)
1405
+ swc_bsw_mapping = parent.createSwcBswMapping(short_name)
1406
+ swc_bsw_mapping.bswBehaviorRef = self.getChildElementOptionalRefType(element, "BSW-BEHAVIOR-REF")
1407
+ self.readSwcBswRunnableMappings(element, swc_bsw_mapping)
1408
+ swc_bsw_mapping.swcBehaviorRef = self.getChildElementOptionalRefType(element, "SWC-BEHAVIOR-REF")
1221
1409
 
1222
1410
  def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
1223
- value_spec.short_label = self.readChildOptionalElement(element, "SHORT-LABEL")
1224
-
1225
- def readSwValueCont(self, element: ET.Element, spec: ApplicationValueSpecification):
1226
- child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
1227
- if child_element is not None:
1228
- sw_value_cont = SwValueCont()
1229
- sw_value_cont.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
1230
- sw_value_cont.sw_values_phys = self.readSwValues(child_element, "SW-VALUES-PHYS")
1231
- spec.sw_value_cont = sw_value_cont
1411
+ self.readElementAttributes(element, value_spec)
1412
+ value_spec.short_label = self.getChildElementOptionalLiteral(element, "SHORT-LABEL")
1413
+ self.logger.debug("readValueSpecification")
1232
1414
 
1233
- def readApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
1415
+ def getApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
1416
+ self.logger.debug("getApplicationValueSpecification")
1234
1417
  value_spec = ApplicationValueSpecification()
1235
1418
  self.readValueSpecification(element, value_spec)
1236
- value_spec.category = self.readChildOptionalElement(element, "CATEGORY")
1237
- self.readSwValueCont(element, value_spec)
1419
+ value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
1420
+ value_spec.sw_value_cont = self.getSwValueCont(element)
1421
+ return value_spec
1422
+
1423
+ def getNumericalValueSpecification(self, element: ET.Element) -> NumericalValueSpecification:
1424
+ self.logger.debug("getNumericalValueSpecification")
1425
+ value_spec = NumericalValueSpecification()
1426
+ self.readValueSpecification(element, value_spec)
1427
+ value_spec.value = self.getChildElementOptionalFloatValue(element, "VALUE")
1428
+ return value_spec
1429
+
1430
+ def getTextValueSpecification(self, element: ET.Element) -> TextValueSpecification:
1431
+ self.logger.debug("getTextValueSpecification")
1432
+ value_spec = TextValueSpecification()
1433
+ self.readValueSpecification(element, value_spec)
1434
+ value_spec.value = self.getChildElementOptionalLiteral(element, "VALUE")
1435
+ return value_spec
1436
+
1437
+ def getArrayValueSpecification(self, element: ET.Element) -> ArrayValueSpecification:
1438
+ self.logger.debug("getArrayValueSpecification")
1439
+ value_spec = ArrayValueSpecification()
1440
+ self.readValueSpecification(element, value_spec)
1441
+ child_elements = element.findall("./xmlns:ELEMENTS/*", self.nsmap)
1442
+ for child_element in child_elements:
1443
+ value_spec.add_element(self.getValueSpecification(child_element))
1444
+ return value_spec
1445
+
1446
+ def getConstantReference(self, element: ET.Element) -> ConstantReference:
1447
+ self.logger.debug("getConstantReference")
1448
+ value_spec = ConstantReference()
1449
+ self.readValueSpecification(element, value_spec)
1450
+ value_spec.constant_ref = self.getChildElementOptionalRefType(element, "CONSTANT-REF")
1451
+ return value_spec
1452
+
1453
+ def getValueSpecification(self, element: ET.Element) -> ValueSpecification:
1454
+ tag_name = self.getTagName(element.tag)
1455
+ if tag_name == "APPLICATION-VALUE-SPECIFICATION":
1456
+ value_spec = self.getApplicationValueSpecification(element)
1457
+ elif tag_name == "RECORD-VALUE-SPECIFICATION":
1458
+ value_spec = self.getRecordValueSpecification(element)
1459
+ elif tag_name == "NUMERICAL-VALUE-SPECIFICATION":
1460
+ value_spec = self.getNumericalValueSpecification(element)
1461
+ elif tag_name == "ARRAY-VALUE-SPECIFICATION":
1462
+ value_spec = self.getArrayValueSpecification(element)
1463
+ elif tag_name == "TEXT-VALUE-SPECIFICATION":
1464
+ value_spec = self.getTextValueSpecification(element)
1465
+ elif tag_name == "CONSTANT-REFERENCE":
1466
+ value_spec = self.getConstantReference(element)
1467
+ else:
1468
+ raise NotImplementedError("Unsupported RecordValueSpecificationField %s" % tag_name)
1238
1469
  return value_spec
1239
1470
 
1240
1471
  def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
1241
1472
  for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
1242
- if child_element.tag == "{http://autosar.org/schema/r4.0}APPLICATION-VALUE-SPECIFICATION":
1243
- value_spec = self.readApplicationValueSpecification(child_element)
1244
- elif child_element.tag == "{http://autosar.org/schema/r4.0}RECORD-VALUE-SPECIFICATION":
1245
- value_spec = self.readRecordValueSpecification(child_element)
1246
- else:
1247
- raise NotImplementedError("Unsupported VALUE-SPEC %s" % child_element.tag)
1248
- spec.add_field(value_spec)
1473
+ spec.add_field(self.getValueSpecification(child_element))
1249
1474
 
1250
- def readRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1475
+ def getRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1251
1476
  value_spec = RecordValueSpecification()
1252
1477
  self.readValueSpecification(element, value_spec)
1253
1478
  self.readRecordValueSpecificationFields(element, value_spec)
1254
1479
  return value_spec
1255
1480
 
1256
1481
  def readConstantSpecification(self, element: ET.Element, parent: ARPackage):
1257
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CONSTANT-SPECIFICATION", self.nsmap):
1258
- short_name = self.readShortName(child_element)
1259
- self.logger.debug("readConstantSpecification %s" % short_name)
1260
- spec = parent.createConstantSpecification(short_name)
1261
- self.readIdentifiable(child_element, spec)
1262
- for value_spec_tag in child_element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
1263
- if value_spec_tag.tag == "{http://autosar.org/schema/r4.0}APPLICATION-VALUE-SPECIFICATION":
1264
- spec.value_spec = self.readApplicationValueSpecification(value_spec_tag)
1265
- elif value_spec_tag.tag == "{http://autosar.org/schema/r4.0}RECORD-VALUE-SPECIFICATION":
1266
- spec.value_spec = self.readRecordValueSpecification(value_spec_tag)
1267
- else:
1268
- raise NotImplementedError("Unsupported VALUE-SPEC %s" % value_spec_tag.tag)
1482
+ short_name = self.getShortName(element)
1483
+ self.logger.debug("readConstantSpecification %s" % short_name)
1484
+ spec = parent.createConstantSpecification(short_name)
1485
+ self.readIdentifiable(element, spec)
1486
+ for value_spec_tag in element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
1487
+ spec.value_spec = self.getValueSpecification(value_spec_tag)
1269
1488
 
1270
1489
  def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
1271
1490
  child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
1272
1491
  if child_element is not None:
1273
1492
  constrs = InternalConstrs()
1274
- constrs.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
1275
- constrs.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
1276
- parent.internal_constrs = constrs
1493
+ self.readElementAttributes(child_element, constrs)
1494
+ constrs.lower_limit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
1495
+ constrs.upper_limit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
1496
+ parent.internalConstrs = constrs
1277
1497
 
1278
1498
  def readPhysConstrs(self, element: ET.Element, parent: DataConstrRule):
1279
1499
  child_element = element.find("./xmlns:PHYS-CONSTRS", self.nsmap)
1280
1500
  if child_element is not None:
1281
1501
  constrs = PhysConstrs()
1282
- constrs.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
1283
- constrs.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
1284
- constrs.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
1285
- parent.phys_constrs = constrs
1502
+ self.readElementAttributes(child_element, constrs)
1503
+ constrs.lower_limit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
1504
+ constrs.upper_limit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
1505
+ constrs.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
1506
+ parent.physConstrs = constrs
1286
1507
 
1287
1508
  def readDataConstrRule(self, element: ET.Element, parent: DataConstr):
1288
1509
  for child_element in element.findall("./xmlns:DATA-CONSTR-RULES/xmlns:DATA-CONSTR-RULE", self.nsmap):
1289
1510
  self.logger.debug("readDataConstrRule")
1290
1511
  rule = DataConstrRule()
1512
+ self.readElementAttributes(child_element, rule)
1513
+ rule.constrLevel = self.getChildElementOptionalNumericalValue(child_element, "CONSTR-LEVEL")
1291
1514
  self.readInternalConstrs(child_element, rule)
1292
1515
  self.readPhysConstrs(child_element, rule)
1293
1516
  parent.addDataConstrRule(rule)
1294
1517
 
1295
1518
  def readDataConstr(self, element: ET.Element, parent: ARPackage):
1296
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-CONSTR", self.nsmap):
1297
- short_name = self.readShortName(child_element)
1298
- self.logger.debug("readDataConstr %s" % short_name)
1299
- constr = parent.createDataConstr(short_name)
1300
- self.readIdentifiable(child_element, constr)
1301
- self.readDataConstrRule(child_element, constr)
1519
+ short_name = self.getShortName(element)
1520
+ self.logger.debug("readDataConstr %s" % short_name)
1521
+ constr = parent.createDataConstr(short_name)
1522
+ self.readIdentifiable(element, constr)
1523
+ self.readDataConstrRule(element, constr)
1302
1524
 
1303
1525
  def readUnit(self, element: ET.Element, parent: ARPackage):
1304
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:UNIT", self.nsmap):
1305
- short_name = self.readShortName(child_element)
1306
- self.logger.debug("readUnit %s" % short_name)
1307
- unit = parent.createUnit(short_name)
1308
- self.readIdentifiable(child_element, unit)
1309
- unit.display_name = self.readChildOptionalElementLiteral(child_element, "DISPLAY-NAME")
1526
+ short_name = self.getShortName(element)
1527
+ self.logger.debug("readUnit %s" % short_name)
1528
+ unit = parent.createUnit(short_name)
1529
+ self.readIdentifiable(element, unit)
1530
+ unit.display_name = self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")
1531
+
1532
+ def readEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
1533
+ child_element = element.find("./xmlns:DATA-IDS", self.nsmap)
1534
+ if child_element is not None:
1535
+ for value in self.getChildElementNumericalValueList(child_element, "DATA-ID"):
1536
+ parent.addDataId(value)
1537
+
1538
+ def getEndToEndDescription(self, element: ET.Element, key: str) -> EndToEndDescription:
1539
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
1540
+ desc = None
1541
+ if (child_element is not None):
1542
+ desc = EndToEndDescription()
1543
+ desc.category = self.getChildElementOptionalLiteral(child_element, "CATEGORY")
1544
+ self.readEndToEndDescriptionDataId(child_element, desc)
1545
+ desc.dataIdMode = self.getChildElementOptionalNumericalValue(child_element, "DATA-ID-MODE")
1546
+ desc.maxDeltaCounterInit = self.getChildElementOptionalNumericalValue(child_element, "MAX-DELTA-COUNTER-INIT")
1547
+ desc.crcOffset = self.getChildElementOptionalNumericalValue(child_element, "CRC-OFFSET")
1548
+ desc.counterOffset = self.getChildElementOptionalNumericalValue(child_element, "COUNTER-OFFSET")
1549
+ return desc
1550
+
1551
+ def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
1552
+ iref = VariableDataPrototypeInSystemInstanceRef()
1553
+ iref.contextComponentRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1554
+ iref.contextCompositionRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
1555
+ iref.contextPortRef = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
1556
+ iref.targetDataPrototypeRef = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
1557
+ return iref
1558
+
1559
+ def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
1560
+ prototype = EndToEndProtectionVariablePrototype()
1561
+ for child_element in element.findall("./xmlns:RECEIVER-IREFS/xmlns:RECEIVER-IREF", self.nsmap):
1562
+ prototype.addReceiverIref(self.getVariableDataPrototypeInSystemInstanceRef(child_element))
1563
+ child_element = element.find("./xmlns:SENDER-IREF", self.nsmap)
1564
+ if child_element is not None:
1565
+ prototype.senderIRef = self.getVariableDataPrototypeInSystemInstanceRef(child_element)
1566
+ return prototype
1567
+
1568
+ def readEndToEndProtectionVariablePrototypes(self, element: ET.Element, parent: EndToEndProtection):
1569
+ for child_element in element.findall("./xmlns:END-TO-END-PROTECTION-VARIABLE-PROTOTYPES/*", self.nsmap):
1570
+ tag_name = self.getTagName(child_element.tag)
1571
+ if tag_name == "END-TO-END-PROTECTION-VARIABLE-PROTOTYPE":
1572
+ parent.addEndToEndProtectionVariablePrototype(self.getEndToEndProtectionVariablePrototype(child_element))
1573
+ else:
1574
+ self._raiseError("Unsupported End To End Protection Variable Prototype <%s>" % tag_name)
1575
+
1576
+ def readEndToEndProtection(self, element: ET.Element, parent: EndToEndProtectionSet):
1577
+ short_name = self.getShortName(element)
1578
+ self.logger.debug("readEndToEndProtection %s" % short_name)
1579
+ protection = parent.createEndToEndProtection(short_name)
1580
+ self.readIdentifiable(element, protection)
1581
+ protection.endToEndProfile = self.getEndToEndDescription(element, "END-TO-END-PROFILE")
1582
+ self.readEndToEndProtectionVariablePrototypes(element, protection)
1583
+
1584
+ def readEndToEndProtections(self, element: ET.Element, parent: EndToEndProtectionSet):
1585
+ for child_element in element.findall("./xmlns:END-TO-END-PROTECTIONS/*", self.nsmap):
1586
+ tag_name = self.getTagName(child_element.tag)
1587
+ if tag_name == "END-TO-END-PROTECTION":
1588
+ self.readEndToEndProtection(child_element, parent)
1589
+
1590
+ def readEndToEndProtectionSet(self, element: ET.Element, parent: ARPackage):
1591
+ short_name = self.getShortName(element)
1592
+ self.logger.debug("readEndToEndProtectionSet %s" % short_name)
1593
+ protection_set = parent.createEndToEndProtectionSet(short_name)
1594
+ self.readEndToEndProtections(element, protection_set)
1595
+
1596
+ def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
1597
+ self.readIdentifiable(element, data_type)
1598
+ data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1599
+
1600
+ def readApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
1601
+ self.readAutosarDataType(element, data_type)
1602
+
1603
+ def readApplicationCompositeDataType(self, element: ET.Element, data_type: ApplicationCompositeDataType):
1604
+ self.readApplicationDataType(element, data_type)
1605
+
1606
+ def readDataPrototype(self, element: ET.Element, prototype: DataPrototype):
1607
+ self.readIdentifiable(element, prototype)
1608
+
1609
+ def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
1610
+ self.readDataPrototype(element, prototype)
1611
+ prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
1612
+
1613
+ def readApplicationArrayElement(self, element: ET.Element, parent: ApplicationArrayDataType):
1614
+ child_element = element.find("./xmlns:ELEMENT", self.nsmap)
1615
+ if child_element is not None:
1616
+ short_name = self.getShortName(child_element)
1617
+ self.logger.debug("readApplicationArrayElement %s" % short_name)
1618
+ array_element = parent.createApplicationArrayElement(short_name)
1619
+ self.readApplicationCompositeElementDataPrototype(child_element, array_element)
1620
+ array_element.setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
1621
+ array_element.setMaxNumberOfElements(self.getChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS"))
1622
+
1623
+ def readApplicationArrayDataType(self, element: ET.Element, parent: ARPackage):
1624
+ short_name = self.getShortName(element)
1625
+ self.logger.debug("readApplicationArrayDataType %s" % short_name)
1626
+ data_type = parent.createApplicationArrayDataType(short_name)
1627
+ self.readApplicationCompositeDataType(element, data_type)
1628
+ self.readApplicationArrayElement(element, data_type)
1629
+
1630
+ def getSwRecordLayoutV(self, element: ET.Element, key: str) -> SwRecordLayoutV:
1631
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
1632
+ layout_v = None
1633
+ if child_element is not None:
1634
+ layout_v = SwRecordLayoutV()
1635
+ layout_v.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
1636
+ .setBaseTypeRef(self.getChildElementOptionalRefType(child_element, "BASE-TYPE-REF")) \
1637
+ .setSwRecordLayoutVAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-V-AXIS")) \
1638
+ .setSwRecordLayoutVProp(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP")) \
1639
+ .setSwRecordLayoutVIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX"))
1640
+ return layout_v
1641
+
1642
+ def getSwRecordLayoutGroup(self, element: ET.Element, key: str) -> SwRecordLayoutGroup:
1643
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
1644
+ group = None
1645
+ if child_element is not None:
1646
+ group = SwRecordLayoutGroup()
1647
+ group.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
1648
+ .setCategory(self.getChildElementOptionalLiteral(child_element, "CATEGORY")) \
1649
+ .setSwRecordLayoutGroupAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
1650
+ .setSwRecordLayoutGroupIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX")) \
1651
+ .setSwRecordLayoutGroupFrom(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM")) \
1652
+ .setSwRecordLayoutGroupTo(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO")) \
1653
+
1654
+ group_content = SwRecordLayoutGroupContent()
1655
+ group_content.swRecordLayoutGroup = self.getSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP")
1656
+ group_content.swRecordLayoutV = self.getSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V")
1657
+
1658
+ if group_content.swRecordLayoutGroup is not None:
1659
+ group.setSwRecordLayoutGroupContentType(group_content)
1660
+ elif group_content.swRecordLayoutV is not None:
1661
+ group.setSwRecordLayoutGroupContentType(group_content)
1662
+
1663
+ return group
1664
+
1665
+ def readSwRecordLayout(self, element: ET.Element, parent: ARPackage):
1666
+ short_name = self.getShortName(element)
1667
+ self.logger.debug("readSwRecordLayout %s" % short_name)
1668
+ layout = parent.createSwRecordLayout(short_name)
1669
+ self.readIdentifiable(element, layout)
1670
+ layout.setSwRecordLayoutGroup(self.getSwRecordLayoutGroup(element, "SW-RECORD-LAYOUT-GROUP"))
1671
+
1672
+ def readSwAddrMethod(self, element: ET.Element, parent: ARPackage):
1673
+ short_name = self.getShortName(element)
1674
+ self.logger.debug("readSwAddrMethod %s" % short_name)
1675
+ layout = parent.createSwAddrMethod(short_name)
1676
+
1677
+ def readTriggerInterface(self, element: ET.Element, parent: ARPackage):
1678
+ short_name = self.getShortName(element)
1679
+ self.logger.debug("readTriggerInterface %s" % short_name)
1680
+ trigger_if = parent.createTriggerInterface(short_name)
1681
+
1682
+ def readModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
1683
+ for child_element in element.findall("./xmlns:MODE-DECLARATIONS/xmlns:MODE-DECLARATION", self.nsmap):
1684
+ short_name = self.getShortName(child_element)
1685
+ declaration = parent.createModeDeclaration(short_name)
1686
+ declaration.setValue(self.getChildElementOptionalNumericalValue(child_element, "VALUE"))
1687
+
1688
+ def readModeDeclarationGroup(self, element: ET.Element, parent: ARPackage):
1689
+ short_name = self.getShortName(element)
1690
+ self.logger.debug("readModeDeclarationGroup %s" % short_name)
1691
+ group = parent.createModeDeclarationGroup(short_name)
1692
+ self.readIdentifiable(element, group)
1693
+ self.readModeDeclarationGroupModeDeclaration(element, group)
1694
+ group.setInitialModeRef(self.getChildElementOptionalRefType(element, "INITIAL-MODE-REF"))
1695
+ group.setOnTransitionValue(self.getChildElementOptionalNumericalValue(element, "ON-TRANSITION-VALUE"))
1696
+
1697
+ def readModeSwitchInterfaceModeGroup(self, element: ET.Element, parent: ModeSwitchInterface):
1698
+ child_element = self.find(element, "MODE-GROUP")
1699
+ if child_element is not None:
1700
+ short_name = self.getShortName(child_element)
1701
+ mode_group = parent.createModeGroup(short_name)
1702
+ self.readIdentifiable(child_element, mode_group)
1703
+ mode_group.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1704
+
1705
+ def readModeSwitchInterface(self, element: ET.Element, parent: ARPackage):
1706
+ short_name = self.getShortName(element)
1707
+ self.logger.debug("readModeSwitchInterface %s" % short_name)
1708
+ mode_interface = parent.createModeSwitchInterface(short_name)
1709
+ self.readPortInterface(element, mode_interface)
1710
+ self.readModeSwitchInterfaceModeGroup(element, mode_interface)
1711
+
1712
+ def readARPackageElements(self, element: ET.Element, parent: ARPackage):
1713
+ for child_element in self.findall(element, "./ELEMENTS/*"):
1714
+ tag_name = self.getTagName(child_element.tag)
1715
+ if tag_name == "COMPOSITION-SW-COMPONENT-TYPE":
1716
+ self.readCompositionSwComponentType(child_element, parent)
1717
+ elif tag_name == "COMPLEX-DEVICE-DRIVER-SW-COMPONENT-TYPE":
1718
+ self.readComplexDeviceDriverSwComponentType(child_element, parent)
1719
+ elif tag_name == "SWC-IMPLEMENTATION":
1720
+ self.readSwcImplementation(child_element, parent)
1721
+ elif tag_name == "APPLICATION-PRIMITIVE-DATA-TYPE":
1722
+ self.readApplicationPrimitiveDataType(child_element, parent)
1723
+ elif tag_name == "APPLICATION-RECORD-DATA-TYPE":
1724
+ self.readApplicationRecordDataTypes(child_element, parent)
1725
+ elif tag_name == "SW-BASE-TYPE":
1726
+ self.readSwBaseType(child_element, parent)
1727
+ elif tag_name == "COMPU-METHOD":
1728
+ self.readCompuMethod(child_element, parent)
1729
+ elif tag_name == "CONSTANT-SPECIFICATION":
1730
+ self.readConstantSpecification(child_element, parent)
1731
+ elif tag_name == "DATA-CONSTR":
1732
+ self.readDataConstr(child_element, parent)
1733
+ elif tag_name == "END-TO-END-PROTECTION-SET":
1734
+ self.readEndToEndProtectionSet(child_element, parent)
1735
+ elif tag_name == "SENDER-RECEIVER-INTERFACE":
1736
+ self.readSenderReceiverInterfaces(child_element, parent)
1737
+ elif tag_name == "UNIT":
1738
+ self.readUnit(child_element, parent)
1739
+ elif tag_name == "BSW-MODULE-DESCRIPTION":
1740
+ self.readBswModuleDescription(child_element, parent)
1741
+ elif tag_name == "BSW-MODULE-ENTRY":
1742
+ self.readBswModuleEntry(child_element, parent)
1743
+ elif tag_name == "SWC-BSW-MAPPING":
1744
+ self.readSwcBswMappings(child_element, parent)
1745
+ elif tag_name == "BSW-IMPLEMENTATION":
1746
+ self.readBswImplementation(child_element, parent)
1747
+ elif tag_name == "IMPLEMENTATION-DATA-TYPE":
1748
+ self.readImplementationDataType(child_element, parent)
1749
+ elif tag_name == "CLIENT-SERVER-INTERFACE":
1750
+ self.readClientServerInterface(child_element, parent)
1751
+ elif tag_name == "APPLICATION-SW-COMPONENT-TYPE":
1752
+ self.readApplicationSwComponentTypes(child_element, parent)
1753
+ elif tag_name == "ECU-ABSTRACTION-SW-COMPONENT-TYPE":
1754
+ self.readEcuAbstractionSwComponent(child_element, parent)
1755
+ elif tag_name == "APPLICATION-ARRAY-DATA-TYPE":
1756
+ self.readApplicationArrayDataType(child_element, parent)
1757
+ elif tag_name == "SW-RECORD-LAYOUT":
1758
+ self.readSwRecordLayout(child_element, parent)
1759
+ elif tag_name == "SW-ADDR-METHOD":
1760
+ self.readSwAddrMethod(child_element, parent)
1761
+ elif tag_name == "TRIGGER-INTERFACE":
1762
+ self.readTriggerInterface(child_element, parent)
1763
+ elif tag_name == "SERVICE-SW-COMPONENT-TYPE":
1764
+ self.readServiceSwComponentType(child_element, parent)
1765
+ elif tag_name == "SENSOR-ACTUATOR-SW-COMPONENT-TYPE":
1766
+ self.readSensorActuatorSwComponentType(child_element, parent)
1767
+ elif tag_name == "DATA-TYPE-MAPPING-SET":
1768
+ self.readDataTypeMappingSet(child_element, parent)
1769
+ elif tag_name == "MODE-DECLARATION-GROUP":
1770
+ self.readModeDeclarationGroup(child_element, parent)
1771
+ elif tag_name == "MODE-SWITCH-INTERFACE":
1772
+ self.readModeSwitchInterface(child_element, parent)
1773
+ elif tag_name == "SYSTEM":
1774
+ pass
1775
+ elif tag_name == "ECU-INSTANCE":
1776
+ pass
1777
+ elif tag_name == "GATEWAY":
1778
+ pass
1779
+ elif tag_name == "I-SIGNAL-I-PDU-GROUP":
1780
+ pass
1781
+ elif tag_name == "CAN-CLUSTER":
1782
+ pass
1783
+ elif tag_name == "CAN-FRAME":
1784
+ pass
1785
+ elif tag_name == "I-SIGNAL":
1786
+ pass
1787
+ elif tag_name == "I-SIGNAL-GROUP":
1788
+ pass
1789
+ elif tag_name == "I-SIGNAL-I-PDU":
1790
+ pass
1791
+ elif tag_name == "SYSTEM-SIGNAL":
1792
+ pass
1793
+ elif tag_name == "SYSTEM-SIGNAL-GROUP":
1794
+ pass
1795
+ else:
1796
+ self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
1797
+ #pass
1798
+
1799
+
1310
1800
 
1311
1801
  def readARPackages(self, element: ET.Element, parent: ARPackage):
1312
1802
  for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
1313
- short_name = self.readShortName(child_element)
1803
+ short_name = self.getShortName(child_element)
1314
1804
  ar_package = parent.createARPackage(short_name)
1315
1805
 
1316
1806
  self.logger.debug("readARPackages %s" % ar_package.full_name)
1317
1807
 
1318
- self.readElementAttributes(child_element, ar_package)
1319
-
1320
- self.readSenderReceiverInterfaces(child_element, ar_package)
1321
- self.readClientServerInterfaces(child_element, ar_package)
1322
- self.readDataTypeMappingSets(child_element, ar_package)
1808
+ self.readIdentifiable(child_element, ar_package)
1809
+ self.readARPackageElements(child_element, ar_package)
1323
1810
  self.readARPackages(child_element, ar_package)
1324
- self.readApplicationPrimitiveDataTypes(child_element, ar_package)
1325
- self.readApplicationRecordDataTypes(child_element, ar_package)
1326
- self.readImplementationDataTypes(child_element, ar_package)
1327
- self.readSwBaseTypes(child_element, ar_package)
1328
- self.readCompuMethods(child_element, ar_package)
1329
- self.readEcuAbstractionSwComponents(child_element, ar_package)
1330
- self.readApplicationSwComponentTypes(child_element, ar_package)
1331
- self.readComplexDeviceDriverSwComponentTypes(child_element, ar_package)
1332
- self.readSensorActuatorSwComponentType(child_element, ar_package)
1333
- self.readServiceSwComponentTypes(child_element, ar_package)
1334
- self.readCompositionSwComponentTypes(child_element, ar_package)
1335
- self.readBswModuleDescription(child_element, ar_package)
1336
- self.readBswModuleEntry(child_element, ar_package)
1337
- self.readSwcBswMappings(child_element, ar_package)
1338
- self.readBswImplementation(child_element, ar_package)
1339
- self.readSwcImplementation(child_element, ar_package)
1340
- self.readConstantSpecification(child_element, ar_package)
1341
- self.readDataConstr(child_element, ar_package)
1342
- self.readUnit(child_element, ar_package)
1811
+
1343
1812
 
1344
1813
  def load(self, filename, document: AUTOSAR):
1345
1814
  self.logger.info("Load %s ..." % filename)
@@ -1349,4 +1818,5 @@ class ARXMLParser:
1349
1818
  if (self.getPureTagName(root.tag) != "AUTOSAR"):
1350
1819
  self._raiseError("Invalid ARXML file <%s>" % filename)
1351
1820
 
1821
+ self.getAUTOSARInfo(root, document)
1352
1822
  self.readARPackages(root, document)