armodel 1.2.0__py3-none-any.whl → 1.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. armodel/cli/arxml_dump_cli.py +8 -8
  2. armodel/cli/connector2xlsx_cli.py +75 -0
  3. armodel/cli/connector_update_cli.py +70 -0
  4. armodel/cli/swc_list_cli.py +81 -0
  5. armodel/lib/__init__.py +3 -0
  6. armodel/lib/cli_args_parser.py +36 -0
  7. armodel/lib/data_analyzer.py +34 -0
  8. armodel/lib/sw_component.py +34 -0
  9. armodel/models/__init__.py +6 -1
  10. armodel/models/ar_object.py +40 -1
  11. armodel/models/ar_package.py +35 -1
  12. armodel/models/ar_ref.py +12 -2
  13. armodel/models/bsw_module_template.py +3 -2
  14. armodel/models/calibration.py +16 -0
  15. armodel/models/common_structure.py +92 -0
  16. armodel/models/communication.py +8 -0
  17. armodel/models/datatype.py +23 -5
  18. armodel/models/general_structure.py +48 -3
  19. armodel/models/global_constraints.py +40 -0
  20. armodel/models/m2_msr.py +76 -2
  21. armodel/models/port_prototype.py +21 -16
  22. armodel/models/sw_component.py +49 -18
  23. armodel/models/unit.py +14 -0
  24. armodel/parser/arxml_parser.py +595 -151
  25. armodel/parser/excel_parser.py +0 -0
  26. armodel/report/__init__.py +1 -0
  27. armodel/report/connector_xls_report.py +76 -0
  28. armodel/report/excel_report.py +42 -0
  29. armodel/tests/__init__.py +0 -0
  30. armodel/tests/test_armodel/__init__.py +0 -0
  31. armodel/tests/test_armodel/models/__init__.py +0 -0
  32. armodel/tests/test_armodel/models/test_ar_package.py +294 -0
  33. armodel/tests/test_armodel/models/test_ar_ref.py +74 -0
  34. armodel/tests/test_armodel/models/test_bsw_module_template.py +46 -0
  35. armodel/tests/test_armodel/models/test_common_structure.py +73 -0
  36. armodel/tests/test_armodel/models/test_data_dictionary.py +29 -0
  37. armodel/tests/test_armodel/models/test_data_prototype.py +86 -0
  38. armodel/tests/test_armodel/models/test_datatype.py +239 -0
  39. armodel/tests/test_armodel/models/test_general_structure.py +50 -0
  40. armodel/tests/test_armodel/models/test_m2_msr.py +77 -0
  41. armodel/tests/test_armodel/models/test_port_interface.py +198 -0
  42. armodel/tests/test_armodel/models/test_port_prototype.py +14 -0
  43. armodel/tests/test_armodel/parser/__init__.py +0 -0
  44. armodel/tests/test_armodel/parser/test_parse_bswmd.py +168 -0
  45. armodel/writer/__init__.py +1 -0
  46. armodel/writer/arxml_writer.py +641 -0
  47. {armodel-1.2.0.dist-info → armodel-1.4.0.dist-info}/METADATA +69 -5
  48. armodel-1.4.0.dist-info/RECORD +60 -0
  49. {armodel-1.2.0.dist-info → armodel-1.4.0.dist-info}/WHEEL +1 -1
  50. armodel-1.4.0.dist-info/entry_points.txt +5 -0
  51. armodel-1.2.0.dist-info/RECORD +0 -27
  52. armodel-1.2.0.dist-info/entry_points.txt +0 -3
  53. {armodel-1.2.0.dist-info → armodel-1.4.0.dist-info}/LICENSE +0 -0
  54. {armodel-1.2.0.dist-info → armodel-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,6 @@
1
+ from ..models.unit import Unit
2
+ from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
3
+
1
4
  from ..models import AUTOSAR, ARPackage, ARObject, EcuAbstractionSwComponentType, AtomicSwComponentType, SwComponentType, CompositionSwComponentType
2
5
  from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
3
6
  from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
@@ -7,14 +10,23 @@ from ..models import DataPrototype, RPortPrototype, PPortPrototype
7
10
  from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec, QueuedReceiverComSpec
8
11
  from ..models import SenderComSpec, NonqueuedSenderComSpec
9
12
  from ..models import SenderReceiverInterface, ClientServerInterface, ClientServerOperation, ArgumentDataPrototype
10
- from ..models import AutosarDataType, ARElement
11
- from ..models import AssemblySwConnector, ProvidedPortPrototypeInstanceRef, RequiredPortPrototypeInstanceRef
12
- from ..models import CompuMethod, CompuScale, Limit, CompuScales, Compu, CompuConst, CompuConstTextContent
13
+ from ..models import AutosarDataType, ARElement, Identifiable, AdminData, Sdg, Sd, MultilanguageReferrable, Referrable, LLongName, MultilanguageLongName
14
+ from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
15
+ from ..models import DelegationSwConnector
16
+ from ..models import CompuMethod, CompuScale, Limit, CompuScales, Compu, CompuConst, CompuConstTextContent, CompuScaleConstantContents, CompuScaleRationalFormula, CompuRationalCoeffs, CompuNominatorDenominator
13
17
  from ..models import InternalBehavior, ExecutableEntity
14
18
  from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
19
+ from ..models import TransmissionAcknowledgementRequest
15
20
  from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
21
+ from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
22
+ from ..models import ConstantSpecification, RecordValueSpecification
23
+ from ..models import ApplicationRecordDataType
24
+ from ..models import SwValueCont, SwValues
25
+ from ..models import ARBoolean, ARLiteral
26
+ from ..models import BaseType
16
27
 
17
28
  from typing import List
29
+ from colorama import Fore
18
30
  import xml.etree.ElementTree as ET
19
31
  import re
20
32
  import logging
@@ -24,6 +36,7 @@ class ARXMLParser:
24
36
  self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
25
37
  self.options = {}
26
38
  self.options['warning'] = False
39
+ self.logger = logging.getLogger()
27
40
 
28
41
  self._processOptions(options=options)
29
42
 
@@ -31,49 +44,73 @@ class ARXMLParser:
31
44
  if options:
32
45
  if 'warning' in options:
33
46
  self.options['warning'] = options['warning']
34
-
35
47
 
36
48
  def _raiseError(self, error_msg):
37
49
  if (self.options['warning'] == True):
38
- logging.error(error_msg)
50
+ self.logger.error(Fore.RED + error_msg + Fore.WHITE)
39
51
  else:
40
52
  raise ValueError(error_msg)
41
53
 
42
54
  def getPureTagName(self, tag):
43
55
  return re.sub(r'\{[\w:\/.]+\}(\w+)', r'\1', tag)
44
56
 
45
- def readChildElement(self, short_name: str, element, key: str) -> str:
57
+ def readChildElement(self, short_name: str, element: ET.Element, key: str) -> str:
46
58
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
47
59
  if (child_element != None):
48
60
  return child_element.text
49
61
  self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
50
62
 
51
- def readChildOptionalElement(self, element, key) -> str:
63
+ def readChildOptionalElement(self, element: ET.Element, key: str) -> str:
52
64
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
53
65
  if (child_element != None):
54
66
  return child_element.text
55
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))
56
77
 
57
- def _convertStringToBooleanValue(self, value) -> bool:
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:
58
89
  if (value == "true"):
59
90
  return True
60
91
  return False
61
-
62
- def readChildElementFloatValue(self, short_name, element, key) -> float:
92
+
93
+ def readChildElementFloatValue(self, short_name: str, element: ET.Element, key: str) -> float:
63
94
  value = self.readChildElement(short_name, element, key)
64
95
  if (value == None):
65
96
  return None
66
97
  return float(value)
67
98
 
68
- def readChildElementBooleanValue(self, short_name, element, key) -> bool:
69
- value = self.readChildElement(short_name, element, key)
70
- return self._convertStringToBooleanValue(value)
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
71
105
 
72
- def readChildOptionalElementBooleanValue(self, element, key) -> bool:
73
- value = self.readChildOptionalElement(element, key)
74
- if (value == None):
106
+ def readChildOptionalElementBooleanValue(self, element: ET.Element, key: str) -> ARBoolean:
107
+ literal = self.readChildOptionalElementLiteral(element, key)
108
+ if (literal == None):
75
109
  return None
76
- return self._convertStringToBooleanValue(value)
110
+ bool_value = ARBoolean()
111
+ bool_value.timestamp = literal.timestamp
112
+ bool_value.value = self._convertStringToBooleanValue(literal.value)
113
+ return bool_value
77
114
 
78
115
  def _convertStringToNumberValue(self, value) -> int:
79
116
  m = re.match(r"0x([0-9a-f]+)", value, re.I)
@@ -81,17 +118,17 @@ class ARXMLParser:
81
118
  return int(m.group(1), 16)
82
119
  return int(value)
83
120
 
84
- def readChildElementNumberValue(self, short_name, element, key) -> int:
121
+ def readChildElementNumberValue(self, short_name: str, element: ET.Element, key: str) -> int:
85
122
  value = self.readChildElement(short_name, element, key)
86
123
  return self._convertStringToNumberValue(value)
87
124
 
88
- def readChildOptionalElementNumberValue(self, element, key) -> int:
125
+ def readChildOptionalElementNumberValue(self, element: ET.Element, key: str) -> int:
89
126
  value = self.readChildOptionalElement(element, key)
90
127
  if (value == None):
91
128
  return None
92
129
  return self._convertStringToNumberValue(value)
93
130
 
94
- def readChildLimitElement(self, element, key) -> Limit:
131
+ def readChildLimitElement(self, element: ET.Element, key: str) -> Limit:
95
132
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
96
133
  if (child_element != None):
97
134
  limit = Limit()
@@ -102,9 +139,38 @@ class ARXMLParser:
102
139
  limit.value = child_element.text
103
140
  return limit
104
141
  return None
105
-
106
- def readShortName(self, element) -> str:
142
+
143
+ def readShortName(self, element: ET.Element) -> str:
107
144
  return self.readChildElement("", element, "SHORT-NAME")
145
+
146
+ def readSd(self, element: ET.Element, sdg: Sdg):
147
+ for child_element in element.findall("./xmlns:SD", self.nsmap):
148
+ sd = Sd()
149
+ sd.gid = child_element.attrib['GID']
150
+ sd.value = child_element.text
151
+
152
+ sdg.addSd(sd)
153
+
154
+ def readSdg(self, element: ET.Element, admin_data: AdminData):
155
+ for child_element in element.findall("./xmlns:SDGS/xmlns:SDG", self.nsmap):
156
+ sdg = Sdg()
157
+ sdg.gid = child_element.attrib["GID"]
158
+ self.readSd(child_element, sdg)
159
+ admin_data.addSdg(sdg)
160
+
161
+ def readAdminData(self, element: ET.Element, identifiable: Identifiable):
162
+ child_element = element.find("./xmlns:ADMIN-DATA", self.nsmap)
163
+ if child_element is not None:
164
+ self.logger.debug("readAdminData")
165
+ admin_data = AdminData()
166
+ self.readSdg(child_element, admin_data)
167
+ identifiable.admin_data = admin_data
168
+
169
+ def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
170
+ self.readElementAttributes(element, identifiable)
171
+ self.readMultilanguageReferrable(element, identifiable)
172
+ identifiable.category = self.readChildOptionalElement(element, "CATEGORY")
173
+ self.readAdminData(element, identifiable)
108
174
 
109
175
  def _readChildRefElementDestAndValue(self, element) -> RefType:
110
176
  ref = RefType()
@@ -112,19 +178,19 @@ class ARXMLParser:
112
178
  ref.value = element.text
113
179
  return ref
114
180
 
115
- def readChildRefElement(self, short_name, element, key) -> RefType:
181
+ def readChildRefElement(self, short_name: str, element: ET.Element, key: str) -> RefType:
116
182
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
117
183
  if (child_element != None):
118
184
  return self._readChildRefElementDestAndValue(child_element)
119
185
  self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
120
186
 
121
- def readChildOptionalRefElement(self, element, key) -> RefType:
187
+ def readChildOptionalRefElement(self, element:ET.Element, key: str) -> RefType:
122
188
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
123
189
  if (child_element != None):
124
190
  return self._readChildRefElementDestAndValue(child_element)
125
191
  return None
126
192
 
127
- def readChildRefElementList(self, element, key) -> List[RefType]:
193
+ def readChildRefElementList(self, element: ET.Element, key: str) -> List[RefType]:
128
194
  child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
129
195
  results = []
130
196
  for child_element in child_elements:
@@ -133,13 +199,47 @@ class ARXMLParser:
133
199
  ref.value = child_element.text
134
200
  results.append(ref)
135
201
  return results
136
-
137
- def readAutosarVariableInImplDatatype(self, element, accessed_variable_ref: AutosarVariableRef):
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
+
208
+ def readMultilanguageLongName(self, element: ET.Element, long_name: MultilanguageLongName):
209
+ for child_element in element.findall("./xmlns:L-4", self.nsmap):
210
+ l4 = LLongName()
211
+ self.readElementAttributes(child_element, l4)
212
+ l4.value = child_element.text
213
+ if 'L' in child_element.attrib:
214
+ l4.l = child_element.attrib['L']
215
+ long_name.add_l4(l4)
216
+
217
+ def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
218
+ child_element = element.find("./xmlns:LONG-NAME", self.nsmap)
219
+ 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)
232
+
233
+ def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
138
234
  child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
139
235
  if (child_element != None):
140
236
  autosar_variable_in_impl_datatype = ArVariableInImplementationDataInstanceRef()
141
237
  autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildOptionalRefElement(child_element, "PORT-PROTOTYPE-REF")
142
- autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildRefElement("", child_element, "TARGET-DATA-PROTOTYPE-REF")
238
+ if autosar_variable_in_impl_datatype.port_prototype_ref is None:
239
+ 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:
242
+ self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
143
243
  accessed_variable_ref.autosar_variable_in_impl_datatype = autosar_variable_in_impl_datatype
144
244
 
145
245
  def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
@@ -147,9 +247,12 @@ class ARXMLParser:
147
247
  if (child_element != None):
148
248
  accessed_variable_ref.local_variable_ref = self.readChildOptionalRefElement(child_element, "LOCAL-VARIABLE-REF")
149
249
 
150
- def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
250
+ def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
151
251
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
152
252
  short_name = self.readShortName(child_element)
253
+
254
+ self.logger.debug("readVariableAccesses %s" % short_name)
255
+
153
256
  if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
154
257
  variable_access = parent.createDataReceivePointByArgument(short_name)
155
258
  self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
@@ -171,35 +274,37 @@ class ARXMLParser:
171
274
  else:
172
275
  self._raiseError("Invalid key type <%s>" % key)
173
276
 
174
- def readBswModuleDescriptionImplementedEntry(self, element, parent: BswModuleDescription):
277
+ # self.readIdentifiable(child_element, variable_access)
278
+
279
+ def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
175
280
  for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
176
281
  ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
177
282
  if (ref != None):
178
283
  parent.implemented_entry_refs.append(ref)
179
- logging.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
284
+ self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
180
285
 
181
- def readProvidedModeGroup(self, element, parent: BswModuleDescription):
286
+ def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
182
287
  for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
183
288
  short_name = self.readShortName(child_element)
184
- logging.debug("readProvidedModeGroup %s" % short_name)
289
+ self.logger.debug("readProvidedModeGroup %s" % short_name)
185
290
 
186
291
  mode_group = parent.createProvidedModeGroup(short_name)
187
292
  mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
188
293
 
189
- def readRequiredModeGroup(self, element, parent: BswModuleDescription):
294
+ def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
190
295
  for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
191
296
  short_name = self.readShortName(child_element)
192
- logging.debug("readRequiredModeGroup %s" % short_name)
297
+ self.logger.debug("readRequiredModeGroup %s" % short_name)
193
298
  mode_group = parent.createProvidedModeGroup(short_name)
194
299
  mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
195
300
 
196
- def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
301
+ def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
197
302
  child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
198
303
  if child_element != None:
199
304
  for ref in self.readChildRefElementList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
200
305
  entity.addCanEnterExclusiveAreaRef(ref)
201
306
 
202
- def readExecutableEntity(self, element, entity: ExecutableEntity):
307
+ def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
203
308
  self.readCanEnterExclusiveAreaRefs(element, entity)
204
309
 
205
310
  def readBswModuleEntity(self, element, entity: BswModuleEntity):
@@ -207,81 +312,81 @@ class ARXMLParser:
207
312
 
208
313
  entity.implemented_entry_ref = self.readChildRefElement(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
209
314
 
210
- def readBswCalledEntity(self, element, parent: BswInternalBehavior):
315
+ def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
211
316
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
212
317
  short_name = self.readShortName(child_element)
213
- logging.debug("readBswCalledEntity %s" % short_name)
318
+ self.logger.debug("readBswCalledEntity %s" % short_name)
214
319
  entity = parent.createBswCalledEntity(short_name)
215
320
 
216
321
  self.readBswModuleEntity(child_element, entity)
217
322
 
218
- def readBswSchedulableEntity(self, element, parent: BswInternalBehavior):
323
+ def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
219
324
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
220
325
  short_name = self.readShortName(child_element)
221
- logging.debug("readBswSchedulableEntity %s" % short_name)
326
+ self.logger.debug("readBswSchedulableEntity %s" % short_name)
222
327
  entity = parent.createBswSchedulableEntity(short_name)
223
328
 
224
329
  self.readBswModuleEntity(child_element, entity)
225
330
 
226
- def readBswEvent(self, element, event: BswScheduleEvent):
331
+ def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
227
332
  event.starts_on_event_ref = self.readChildRefElement(event.short_name, element, "STARTS-ON-EVENT-REF")
228
333
 
229
334
  def readBswScheduleEvent(self, element, event: BswScheduleEvent):
230
335
  self.readBswEvent(element, event)
231
336
 
232
- def readBswModeSwitchEvent(self, element, parent: BswInternalBehavior):
337
+ def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
233
338
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
234
339
  short_name = self.readShortName(child_element)
235
- logging.debug("readBswModeSwitchEvent %s" % short_name)
340
+ self.logger.debug("readBswModeSwitchEvent %s" % short_name)
236
341
  event = parent.createBswModeSwitchEvent(short_name)
237
342
 
238
343
  self.readBswScheduleEvent(child_element, event)
239
344
 
240
- def readBswTimingEvent(self, element, parent: BswInternalBehavior):
345
+ def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
241
346
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
242
347
  short_name = self.readShortName(child_element)
243
- logging.debug("readBswTimingEvent %s" % short_name)
348
+ self.logger.debug("readBswTimingEvent %s" % short_name)
244
349
  event = parent.createBswTimingEvent(short_name)
245
350
  event.period = self.readChildElementFloatValue(short_name, child_element, "PERIOD")
246
351
 
247
352
  self.readBswScheduleEvent(child_element, event)
248
353
 
249
- def readBswDataReceivedEvent(self, element, parent: BswInternalBehavior):
354
+ def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
250
355
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
251
356
  short_name = self.readShortName(child_element)
252
- logging.debug("readBswDataReceivedEvent %s" % short_name)
357
+ self.logger.debug("readBswDataReceivedEvent %s" % short_name)
253
358
  event = parent.createBswDataReceivedEvent(short_name)
254
359
  event.data_ref = self.readChildRefElement(parent.short_name, child_element, "DATA-REF")
255
360
 
256
361
  self.readBswScheduleEvent(child_element, event)
257
362
 
258
- def readBswInternalTriggerOccurredEvent(self, element, parent: BswInternalBehavior):
363
+ def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
259
364
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
260
365
  short_name = self.readShortName(child_element)
261
- logging.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
366
+ self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
262
367
  event = parent.createBswInternalTriggerOccurredEvent(short_name)
263
368
  event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
264
369
 
265
370
  self.readBswScheduleEvent(child_element, event)
266
371
 
267
- def readDataTypeMappingRefs(self, element, behavior: InternalBehavior):
372
+ def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
268
373
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
269
374
  if child_element != None:
270
375
  for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
271
376
  behavior.addDataTypeMappingRef(ref)
272
377
 
273
- def readInternalBehavior(self, element, behavior: InternalBehavior):
378
+ def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
274
379
  for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
275
380
  short_name = self.readShortName(child_element)
276
381
  behavior.createExclusiveArea(short_name)
277
382
 
278
383
  self.readDataTypeMappingRefs(element, behavior)
279
384
 
280
- def readSwInternalBehavior(self, element, parent: AtomicSwComponentType):
385
+ def readSwInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
281
386
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
282
387
  short_name = self.readShortName(child_element)
283
388
  behavior = parent.createSwcInternalBehavior(short_name)
284
- logging.debug("readBswInternalBehavior %s" % behavior.full_name)
389
+ self.logger.debug("readSwInternalBehavior %s" % behavior.full_name)
285
390
 
286
391
  # read the internal behavior
287
392
  self.readInternalBehavior(child_element, behavior)
@@ -292,11 +397,11 @@ class ARXMLParser:
292
397
  self.readInternalTriggerOccurredEvent(child_element, behavior)
293
398
  self.readExplicitInterRunnableVariables(child_element, behavior)
294
399
 
295
- def readBswInternalBehavior(self, element, parent: BswModuleDescription):
400
+ def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
296
401
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
297
402
  short_name = self.readShortName(child_element)
298
403
  behavior = parent.createBswInternalBehavior(short_name)
299
- logging.debug("readBswInternalBehavior %s" % behavior.full_name)
404
+ self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
300
405
 
301
406
  # read the internal behavior
302
407
  self.readInternalBehavior(child_element, behavior)
@@ -308,20 +413,20 @@ class ARXMLParser:
308
413
  self.readBswDataReceivedEvent(child_element, behavior)
309
414
  self.readBswInternalTriggerOccurredEvent(child_element, behavior)
310
415
 
311
- def readBswModuleDescription(self, element, parent: ARPackage):
416
+ def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
312
417
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-DESCRIPTION", self.nsmap):
313
418
  short_name = self.readShortName(child_element)
314
419
  bsw_module_description = parent.createBswModuleDescription(short_name)
315
420
  bsw_module_description.module_id = self.readChildElementNumberValue(short_name, child_element, "MODULE-ID")
316
421
 
317
- logging.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
422
+ self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
318
423
 
319
424
  self.readBswModuleDescriptionImplementedEntry(child_element, bsw_module_description)
320
425
  self.readProvidedModeGroup(child_element, bsw_module_description)
321
426
  self.readRequiredModeGroup(child_element, bsw_module_description)
322
427
  self.readBswInternalBehavior(child_element, bsw_module_description)
323
428
 
324
- def readBswModuleEntry(self, element, parent: ARPackage):
429
+ def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
325
430
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-ENTRY", self.nsmap):
326
431
  short_name = self.readShortName(child_element)
327
432
  entry = parent.createBswModuleEntry(short_name)
@@ -332,26 +437,26 @@ class ARXMLParser:
332
437
  entry.execution_context = self.readChildOptionalElement(child_element, "EXECUTION-CONTEXT")
333
438
  entry.sw_service_impl_policy = self.readChildOptionalElement(child_element, "SW-SERVICE-IMPL-POLICY")
334
439
 
335
- #logging.debug("readBswModuleEntry \n%s" % entry)
336
- logging.debug("readBswModuleEntry %s" % entry.short_name)
440
+ #self.logger.debug("readBswModuleEntry \n%s" % entry)
441
+ self.logger.debug("readBswModuleEntry %s" % entry.short_name)
337
442
 
338
- def readArtifactDescriptor(self, element, code_desc: Code):
443
+ def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
339
444
  for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
340
445
  artifact_desc = AutosarEngineeringObject()
341
446
  artifact_desc.short_label = self.readChildElement(code_desc.short_name, child_element, "SHORT-LABEL")
342
- artifact_desc.category = self.readChildElement(code_desc.short_name, child_element, "CATEGORY")
447
+ self.readIdentifiable(child_element, artifact_desc)
343
448
  code_desc.addArtifactDescriptor(artifact_desc)
344
449
 
345
- logging.debug("readArtifactDescriptor %s", artifact_desc.short_label)
450
+ self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
346
451
 
347
- def readCodeDescriptor(self, element, impl: Implementation):
452
+ def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
348
453
  for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
349
454
  short_name = self.readShortName(child_element)
350
- logging.debug("readCodeDescriptor %s" % short_name)
455
+ self.logger.debug("readCodeDescriptor %s" % short_name)
351
456
  code_desc = impl.createCodeDescriptor(short_name)
352
457
  self.readArtifactDescriptor(child_element, code_desc)
353
458
 
354
- def readMemorySections(self, element, consumption: ResourceConsumption):
459
+ def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
355
460
  for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
356
461
  short_name = self.readShortName(child_element)
357
462
  memory_section = consumption.createMemorySection(short_name)
@@ -359,9 +464,9 @@ class ARXMLParser:
359
464
  if (alignment != None):
360
465
  memory_section.alignment = alignment
361
466
  memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
362
- logging.debug("readMemorySections %s" % memory_section.short_name)
467
+ self.logger.debug("readMemorySections %s" % memory_section.short_name)
363
468
 
364
- def readResourceConsumption(self, element, impl: Implementation):
469
+ def readResourceConsumption(self, element: ET.Element, impl: Implementation):
365
470
  child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
366
471
  if (child_element == None):
367
472
  self._raiseError("Invalid ResourceConsumption of Implementation <%s>" % impl.short_name)
@@ -370,7 +475,7 @@ class ARXMLParser:
370
475
  impl.resource_consumption = ResourceConsumption(impl, short_name)
371
476
  self.readMemorySections(child_element, impl.resource_consumption)
372
477
 
373
- def readImplementation(self, element, impl: Implementation):
478
+ def readImplementation(self, element: ET.Element, impl: Implementation):
374
479
  self.readCodeDescriptor(element, impl)
375
480
  impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
376
481
  self.readResourceConsumption(element, impl)
@@ -378,22 +483,22 @@ class ARXMLParser:
378
483
  impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
379
484
  impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
380
485
 
381
- def readBswImplementation(self, element, parent: ARPackage):
486
+ def readBswImplementation(self, element: ET.Element, parent: ARPackage):
382
487
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
383
488
  short_name = self.readShortName(child_element)
384
489
  impl = parent.createBswImplementation(short_name)
385
- logging.debug("readBswImplementation %s" % impl.short_name)
490
+ self.logger.debug("readBswImplementation %s" % impl.short_name)
386
491
 
387
492
  self.readImplementation(child_element, impl)
388
493
 
389
494
  impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
390
495
  impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
391
496
 
392
- def readSwcImplementation(self, element, parent: ARPackage):
497
+ def readSwcImplementation(self, element: ET.Element, parent: ARPackage):
393
498
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
394
499
  short_name = self.readShortName(child_element)
395
500
  impl = parent.createSwcImplementation(short_name)
396
- logging.debug("readSwcImplementation %s" % impl.short_name)
501
+ self.logger.debug("readSwcImplementation %s" % impl.short_name)
397
502
 
398
503
  self.readImplementation(child_element, impl)
399
504
 
@@ -402,22 +507,22 @@ class ARXMLParser:
402
507
  def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
403
508
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
404
509
 
405
- def readDataReceivePointByValues(self, element, parent: RunnableEntity):
510
+ def readDataReceivePointByValues(self, element: ET.Element, parent: RunnableEntity):
406
511
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-VALUES")
407
512
 
408
- def readDataReadAccesses(self, element, parent: RunnableEntity):
513
+ def readDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
409
514
  self._readVariableAccesses(element, parent, "DATA-READ-ACCESSS")
410
515
 
411
- def readDataSendPoints(self, element, parent: RunnableEntity):
516
+ def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
412
517
  self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
413
518
 
414
- def readWrittenLocalVariables(self, element, parent: RunnableEntity):
519
+ def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
415
520
  self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
416
521
 
417
- def readReadLocalVariables(self, element, parent: RunnableEntity):
522
+ def readReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
418
523
  self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
419
524
 
420
- def readROperationIRef(self, element, parent: ServerCallPoint):
525
+ def readROperationIRef(self, element: ET.Element, parent: ServerCallPoint):
421
526
  child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
422
527
  if (child_element != None):
423
528
  operation_iref = ROperationInAtomicSwcInstanceRef()
@@ -425,7 +530,7 @@ class ARXMLParser:
425
530
  operation_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-REQUIRED-OPERATION-REF")
426
531
  parent.operation_iref = operation_iref
427
532
 
428
- def readRVariableInAtomicSwcInstanceRef(self, element, parent: DataReceivedEvent):
533
+ def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
429
534
  child_element = element.find("./xmlns:DATA-IRE", self.nsmap)
430
535
  if (child_element != None):
431
536
  data_iref = RVariableInAtomicSwcInstanceRef()
@@ -433,7 +538,7 @@ class ARXMLParser:
433
538
  data_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-DATA-ELEMENT-REF")
434
539
  parent.data_iref = data_iref
435
540
 
436
- def readRModeInAtomicSwcInstanceRef(self, element, parent: SwcModeSwitchEvent):
541
+ def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
437
542
  for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
438
543
  mode_iref = RModeInAtomicSwcInstanceRef()
439
544
  mode_iref.context_port = self.readChildOptionalRefElement(child_element, "CONTEXT-PORT-REF")
@@ -441,33 +546,35 @@ class ARXMLParser:
441
546
  mode_iref.target_mode_declaration = self.readChildRefElement("", child_element, "TARGET-MODE-DECLARATION-REF")
442
547
  parent.addModeIRef(mode_iref)
443
548
 
444
- def readSynchronousServerCallPoint(self, element, parent: RunnableEntity):
549
+ def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
445
550
  for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:SYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
446
551
  short_name = self.readShortName(child_element)
447
552
  serverCallPoint = parent.createSynchronousServerCallPoint(short_name)
448
553
  serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
449
554
  self.readROperationIRef(child_element, serverCallPoint)
450
555
 
451
- def readAsynchronousServerCallPoint(self, element, parent: RunnableEntity):
556
+ def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
452
557
  for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:ASYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
453
558
  short_name = self.readShortName(child_element)
454
559
  serverCallPoint = parent.createAsynchronousServerCallPoint(short_name)
455
560
  serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
456
561
  self.readROperationIRef(child_element, serverCallPoint)
457
562
 
458
- def readInternalTriggeringPoint(self, element, parent: RunnableEntity):
563
+ def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
459
564
  for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
460
565
  short_name = self.readShortName(child_element)
461
566
  point = parent.createInternalTriggeringPoint(short_name)
462
567
  point.sw_impl_policy = self.readChildOptionalElement(child_element, "SW-IMPL-POLICY")
463
568
 
464
- def readRunnableEntities(self, element, parent: SwcInternalBehavior):
569
+ def readRunnableEntities(self, element: ET.Element, parent: SwcInternalBehavior):
465
570
  for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
466
571
  short_name = self.readShortName(child_element)
467
572
  runnable = parent.createRunnableEntity(short_name)
468
573
  runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
469
574
  runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
470
575
 
576
+ self.logger.debug("readRunnableEntities %s" % short_name)
577
+
471
578
  self.readDataReceivePointByArguments(child_element, runnable)
472
579
  self.readDataReceivePointByValues(child_element, runnable)
473
580
  self.readDataReadAccesses(child_element, runnable)
@@ -478,24 +585,24 @@ class ARXMLParser:
478
585
  self.readAsynchronousServerCallPoint(child_element, runnable)
479
586
  self.readInternalTriggeringPoint(child_element, runnable)
480
587
 
481
- def readRTEEvent(self, element, event: RTEEvent):
588
+ def readRTEEvent(self, element: ET.Element, event: RTEEvent):
482
589
  event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
483
590
 
484
- def readOperationIRef(self, element, parent: OperationInvokedEvent):
591
+ def readOperationIRef(self, element: ET.Element, parent: OperationInvokedEvent):
485
592
  child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
486
593
  if (child_element != None):
487
594
  parent.operation_iref = POperationInAtomicSwcInstanceRef()
488
595
  parent.operation_iref.context_p_port_ref = self.readChildRefElement(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
489
596
  parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
490
597
 
491
- def readOperationInvokedEvents(self, element, parent: SwcInternalBehavior):
598
+ def readOperationInvokedEvents(self, element: ET.Element, parent: SwcInternalBehavior):
492
599
  for child_element in element.findall("./xmlns:EVENTS/xmlns:OPERATION-INVOKED-EVENT", self.nsmap):
493
600
  short_name = self.readShortName(child_element)
494
601
  event = parent.createOperationInvokedEvent(short_name)
495
602
  self.readOperationIRef(child_element, event)
496
603
  self.readRTEEvent(child_element, event)
497
604
 
498
- def readExplicitInterRunnableVariables(self, element, parent: SwcInternalBehavior):
605
+ def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
499
606
  for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
500
607
  short_name = self.readShortName(child_element)
501
608
  prototype = parent.createExplicitInterRunnableVariable(short_name)
@@ -509,7 +616,7 @@ class ARXMLParser:
509
616
 
510
617
  self.readRTEEvent(child_element, event)
511
618
 
512
- def readTimingEvents(self, element, parent: SwcInternalBehavior):
619
+ def readTimingEvents(self, element: ET.Element, parent: SwcInternalBehavior):
513
620
  for child_element in element.findall("./xmlns:EVENTS/xmlns:TIMING-EVENT", self.nsmap):
514
621
  short_name = self.readShortName(child_element)
515
622
  event = parent.createTimingEvent(short_name)
@@ -521,7 +628,7 @@ class ARXMLParser:
521
628
  event.offset = (float)(offset)
522
629
  event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
523
630
 
524
- def readDataReceivedEvent(self, element, parent: SwcInternalBehavior):
631
+ def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
525
632
  for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
526
633
  short_name = self.readShortName(child_element)
527
634
  event = parent.createDataReceivedEvent(short_name)
@@ -529,7 +636,7 @@ class ARXMLParser:
529
636
  self.readRTEEvent(child_element, event)
530
637
  self.readRVariableInAtomicSwcInstanceRef(child_element, event)
531
638
 
532
- def readSwcModeSwitchEvent(self, element, parent: SwcInternalBehavior):
639
+ def readSwcModeSwitchEvent(self, element: ET.Element, parent: SwcInternalBehavior):
533
640
  for child_element in element.findall("./xmlns:EVENTS/xmlns:SWC-MODE-SWITCH-EVENT", self.nsmap):
534
641
  short_name = self.readShortName(child_element)
535
642
  event = parent.createSwcModeSwitchEvent(short_name)
@@ -537,7 +644,7 @@ class ARXMLParser:
537
644
  self.readRTEEvent(child_element, event)
538
645
  self.readRModeInAtomicSwcInstanceRef(child_element, event)
539
646
 
540
- def readInternalTriggerOccurredEvent(self, element, parent: SwcInternalBehavior):
647
+ def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
541
648
  for child_element in element.findall("./xmlns:EVENTS/xmlns:INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
542
649
  short_name = self.readShortName(child_element)
543
650
  event = parent.createInternalTriggerOccurredEvent(short_name)
@@ -545,7 +652,7 @@ class ARXMLParser:
545
652
  self.readRTEEvent(child_element, event)
546
653
  event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
547
654
 
548
- def readSwPointerTargetProps(self, element, parent: ARElement):
655
+ def readSwPointerTargetProps(self, element: ET.Element, parent: ARElement):
549
656
  child_element = element.find(
550
657
  "./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
551
658
 
@@ -555,7 +662,20 @@ class ARXMLParser:
555
662
  self.readSwDataDefProps(child_element, sw_pointer_target_props)
556
663
  parent.sw_pointer_target_props = sw_pointer_target_props
557
664
 
558
- def readSwDataDefProps(self, element, parent: ARElement):
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):
559
679
  child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
560
680
 
561
681
  if (child_element != None):
@@ -568,37 +688,46 @@ class ARXMLParser:
568
688
  self.readSwPointerTargetProps(child_element, sw_data_def_props)
569
689
  parent.sw_data_def_props = sw_data_def_props
570
690
 
571
- def readApplicationPrimitiveDataTypes(self, element, parent: ARPackage):
691
+ def readApplicationPrimitiveDataTypes(self, element: ET.Element, parent: ARPackage):
572
692
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-PRIMITIVE-DATA-TYPE", self.nsmap):
573
693
  short_name = self.readShortName(child_element)
574
694
  data_type = parent.createApplicationPrimitiveDataType(short_name)
575
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
695
+ self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
696
+ self.readIdentifiable(child_element, data_type)
576
697
  self.readSwDataDefProps(child_element, data_type)
577
698
 
578
- def readApplicationRecordDataTypes(self, element, parent: ARPackage):
699
+ def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
700
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
701
+ short_name = self.readShortName(child_element)
702
+ record_element = parent.createApplicationRecordElement(short_name)
703
+ self.logger.debug("readApplicationRecordElements %s" % short_name)
704
+ self.readIdentifiable(child_element, record_element)
705
+ record_element.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
706
+
707
+ def readApplicationRecordDataTypes(self, element: ET.Element, parent: ARPackage):
579
708
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-DATA-TYPE", self.nsmap):
580
709
  short_name = self.readShortName(child_element)
581
710
  data_type = parent.createApplicationRecordDataType(short_name)
582
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
711
+ self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
712
+ self.readIdentifiable(child_element, data_type)
583
713
  self.readSwDataDefProps(child_element, data_type)
714
+ self.readApplicationRecordElements(child_element, data_type)
584
715
 
585
- # TODO: add read APPLICATION-RECORD-ELEMENT
586
-
587
- def readImplementationDataTypeElements(self, element, parent: ARElement):
716
+ def readImplementationDataTypeElements(self, element: ET.Element, parent: ARElement):
588
717
  for child_element in element.findall("./xmlns:SUB-ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE-ELEMENT", self.nsmap):
589
718
  short_name = self.readShortName(child_element)
590
719
  type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
591
- type_element.category = self.readChildElement(short_name, child_element, "CATEGORY")
720
+ self.readIdentifiable(child_element, type_element)
592
721
  type_element.array_size = self.readChildOptionalElement(child_element, "ARRAY-SIZE")
593
722
  type_element.array_size_semantics = self.readChildOptionalElement(child_element, "ARRAY-SIZE-SEMANTICS")
594
723
  self.readImplementationDataTypeElements(child_element, type_element)
595
724
  self.readSwDataDefProps(child_element, type_element)
596
725
 
597
- def readImplementationDataTypes(self, element, parent: ARPackage):
726
+ def readImplementationDataTypes(self, element: ET.Element, parent: ARPackage):
598
727
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE", self.nsmap):
599
728
  short_name = self.readShortName(child_element)
600
729
  data_type = parent.createImplementationDataType(short_name)
601
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
730
+ self.readIdentifiable(child_element, data_type)
602
731
  self.readImplementationDataTypeElements(child_element, data_type)
603
732
  self.readSwDataDefProps(child_element, data_type)
604
733
  if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
@@ -612,30 +741,136 @@ class ARXMLParser:
612
741
  else:
613
742
  self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
614
743
 
615
- def readSwDataTypes(self, element, parent: ARPackage):
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):
616
750
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
617
751
  short_name = self.readShortName(child_element)
618
752
  data_type = parent.createSwBaseType(short_name)
753
+ self.readIdentifiable(child_element, data_type)
754
+ self.readBaseTypeDirectDefinition(child_element, data_type)
619
755
 
620
- def readClientComSpec(self, element, parent: RPortPrototype):
756
+ def readClientComSpec(self, element: ET.Element, parent: RPortPrototype):
621
757
  for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
622
758
  try:
623
759
  com_spec = ClientComSpec()
760
+ self.readElementAttributes(child_element, com_spec)
624
761
  com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
625
762
  parent.addRequiredComSpec(com_spec)
626
763
  except ValueError as err:
627
- print(parent.short_name + ": " + str(err))
764
+ self.logger.error(parent.short_name + ": " + str(err))
628
765
 
629
766
  def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
630
767
  #FIXME: readchildElement
631
768
  com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
769
+ self.readSwDataDefProps(element, com_spec)
632
770
  com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
633
771
  com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
634
772
 
773
+ def readSwValues(self, element: ET.Element, key: str) -> SwValues:
774
+ child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
775
+ if child_element is None:
776
+ 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:
785
+ cont = None
786
+ child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
787
+ if child_element is not None:
788
+ 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)
793
+ return cont
794
+
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
+ def readApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
802
+ self.readValueSpecification(element, value_spec)
803
+ value_spec.category = self.readChildOptionalElement(element, "CATEGORY")
804
+ value_spec.sw_value_cont = self.readSwValueCont(element)
805
+
806
+ self.logger.debug("readApplicationValueSpecification Category %s" % value_spec.category)
807
+
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:
837
+ value_spec = None
838
+ child_element = element.find("./xmlns:INIT-VALUE", self.nsmap)
839
+ 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
+
867
+ return value_spec
868
+
635
869
  def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
636
870
  for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
637
-
638
871
  com_spec = NonqueuedReceiverComSpec()
872
+
873
+ self.readElementAttributes(child_element, com_spec)
639
874
  self.readReceiverComSpec(child_element, com_spec)
640
875
  try:
641
876
  # FIXME:
@@ -644,39 +879,59 @@ class ARXMLParser:
644
879
  com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
645
880
  com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
646
881
  except ValueError as err:
647
- print(parent.short_name + ": " + str(err))
882
+ self.logger.error(parent.short_name + ": " + str(err))
883
+
884
+ com_spec.init_value = self.readInitValue(child_element)
648
885
 
649
886
  parent.addRequiredComSpec(com_spec)
650
887
 
651
888
  def readRPortPrototype(self, element, parent: AtomicSwComponentType):
652
889
  for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
653
890
  short_name = self.readShortName(child_element)
654
- logging.debug("readRPortPrototype %s" % short_name)
891
+ self.logger.debug("readRPortPrototype %s" % short_name)
655
892
 
656
893
  prototype = parent.createRPortPrototype(short_name)
894
+ self.readElementAttributes(child_element, prototype)
657
895
  prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
658
896
 
659
897
  self.readClientComSpec(child_element, prototype)
660
898
  self.readNonqueuedReceiverComSpec(child_element, prototype)
661
899
 
900
+ def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
901
+ child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
902
+ if (child_element != None):
903
+ acknowledge = TransmissionAcknowledgementRequest()
904
+ self.readElementAttributes(child_element, acknowledge)
905
+ acknowledge.timeout = self.readChildElementFloatValue ("", child_element, "TIMEOUT")
906
+ return acknowledge
907
+ return None
908
+
662
909
  def readSenderComSpec(self, element, com_spec: SenderComSpec):
663
910
  # FIXME:
911
+ self.readElementAttributes(element, com_spec)
664
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)
665
915
  com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
916
+ com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
666
917
  com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
667
918
 
668
919
  def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
669
920
  for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
670
921
  com_spec = NonqueuedSenderComSpec()
671
922
  self.readSenderComSpec(child_element, com_spec)
923
+
924
+ com_spec.init_value = self.readInitValue(child_element)
925
+
672
926
  parent.addProvidedComSpec(com_spec)
673
927
 
674
928
  def readPPortPrototype(self, element, parent: AtomicSwComponentType):
675
929
  for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
676
930
  short_name = self.readShortName(child_element)
677
- logging.debug("readPPortPrototype %s" % short_name)
931
+ self.logger.debug("readPPortPrototype %s" % short_name)
678
932
 
679
933
  prototype = parent.createPPortPrototype(short_name)
934
+ self.readElementAttributes(child_element, prototype)
680
935
  prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
681
936
  self.readNonqueuedSenderComSpec(child_element, prototype)
682
937
 
@@ -719,50 +974,117 @@ class ARXMLParser:
719
974
  sw_component = parent.createServiceSwComponentType(short_name)
720
975
  self.readAtomicSwComponentType(child_element, sw_component)
721
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")
980
+
981
+ self.logger.debug("PPortInCompositionInstanceRef")
982
+ self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
983
+ % (p_port_in_composition_instance_ref.context_component_ref.dest, p_port_in_composition_instance_ref.context_component_ref.value))
984
+ self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
985
+ % (p_port_in_composition_instance_ref.target_p_port_ref.dest, p_port_in_composition_instance_ref.target_p_port_ref.value))
986
+
987
+ 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")
990
+
991
+ self.logger.debug("RPortInCompositionInstanceRef")
992
+ self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
993
+ % (r_port_in_composition_instance_ref.context_component_ref.dest, r_port_in_composition_instance_ref.context_component_ref.value))
994
+ self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
995
+ % (r_port_in_composition_instance_ref.target_r_port_ref.dest, r_port_in_composition_instance_ref.target_r_port_ref.value))
996
+
722
997
  def readAssemblySwConnectorProviderIRef(self, element, parent: AssemblySwConnector):
723
998
  child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
724
999
  if (child_element != None):
725
- provider_iref = ProvidedPortPrototypeInstanceRef()
726
- provider_iref.context_component_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-COMPONENT-REF")
727
- provider_iref.target_p_port_ref = self.readChildOptionalRefElement(child_element, "TARGET-P-PORT-REF")
728
- parent.provider_iref = provider_iref
1000
+ provide_iref = PPortInCompositionInstanceRef()
1001
+ self.readElementAttributes(child_element, provide_iref)
1002
+ self.readPPortInCompositionInstanceRef(child_element, provide_iref)
1003
+ parent.provider_iref = provide_iref
729
1004
 
730
1005
  def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
731
1006
  child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
732
1007
  if (child_element != None):
733
- requester_iref = RequiredPortPrototypeInstanceRef()
734
- requester_iref.context_component_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-COMPONENT-REF")
735
- requester_iref.target_r_port_ref = self.readChildOptionalRefElement(child_element, "TARGET-R-PORT-REF")
1008
+ requester_iref = RPortInCompositionInstanceRef()
1009
+ self.readElementAttributes(child_element, requester_iref)
1010
+ self.readRPortInCompositionInstanceRef(child_element, requester_iref)
736
1011
  parent.requester_iref = requester_iref
737
1012
 
738
1013
  def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
739
1014
  for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
740
1015
  short_name = self.readShortName(child_element)
741
- logging.debug("readAssemblySwConnectors %s" % short_name)
1016
+ self.logger.debug("readAssemblySwConnectors %s" % short_name)
742
1017
 
743
1018
  connector = parent.createAssemblySwConnector(short_name)
1019
+ self.readElementAttributes(child_element, connector)
744
1020
  self.readAssemblySwConnectorProviderIRef(child_element, connector)
745
1021
  self.readAssemblySwConnectorRequesterIRef(child_element, connector)
746
1022
 
747
- def readSwComponentPrototypes(self, element, parent: CompositionSwComponentType):
1023
+ def readDelegationSwConnectorInnerPortIRef(self, element, parent: DelegationSwConnector):
1024
+ inner_port_iref_element = element.find("./xmlns:INNER-PORT-IREF", self.nsmap)
1025
+ if (inner_port_iref_element != None):
1026
+ child_element = inner_port_iref_element.find("./xmlns:R-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
1027
+ if (child_element != None):
1028
+ r_port_in_composition_instance_ref = RPortInCompositionInstanceRef()
1029
+ self.readRPortInCompositionInstanceRef(child_element, r_port_in_composition_instance_ref)
1030
+ parent.inner_port_iref = r_port_in_composition_instance_ref
1031
+ return
1032
+
1033
+ child_element = inner_port_iref_element.find("./xmlns:P-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
1034
+ if (child_element != None):
1035
+ p_port_in_composition_instance_ref = PPortInCompositionInstanceRef()
1036
+ self.readPPortInCompositionInstanceRef(child_element, p_port_in_composition_instance_ref)
1037
+ parent.inner_port_iref = p_port_in_composition_instance_ref
1038
+ return
1039
+
1040
+ self._raiseError("Unsupported child element of INNER-PORT-IREF")
1041
+
1042
+ def readDelegationSwConnectors(self, element, parent: CompositionSwComponentType):
1043
+ for child_element in element.findall("./xmlns:CONNECTORS/xmlns:DELEGATION-SW-CONNECTOR", self.nsmap):
1044
+ short_name = self.readShortName(child_element)
1045
+ self.logger.debug("readDelegationSwConnectors %s" % short_name)
1046
+
1047
+ connector = parent.createDelegationSwConnector(short_name)
1048
+ self.readElementAttributes(child_element, connector)
1049
+ self.readDelegationSwConnectorInnerPortIRef(child_element, connector)
1050
+
1051
+ if connector.inner_port_iref == None and connector.outer_port_iref == None:
1052
+ self._raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
1053
+
1054
+ connector.outer_port_ref = self.readChildOptionalRefElement(child_element, "OUTER-PORT-REF")
1055
+ self.logger.debug("OUTER-PORT-REF DEST: %s, %s"
1056
+ % (connector.outer_port_ref.dest, connector.outer_port_ref.value))
1057
+
1058
+ def readSwComponentPrototypes(self, element: ET.Element, parent: CompositionSwComponentType):
748
1059
  for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
749
1060
  short_name = self.readShortName(child_element)
750
- logging.debug("readSwComponentPrototypes %s" % short_name)
1061
+ self.logger.debug("readSwComponentPrototypes %s" % short_name)
751
1062
 
752
1063
  prototype = parent.createSwComponentPrototype(short_name)
1064
+ self.readElementAttributes(child_element, prototype)
753
1065
  prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
754
1066
 
755
- def readCompositionSwComponentTypes(self, element, parent: ARPackage):
1067
+ def readDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
1068
+ child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
1069
+ self.logger.debug("readDataTypeMappingSet")
1070
+ if child_element != None:
1071
+ for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
1072
+ parent.addDataTypeMapping(ref)
1073
+
1074
+ def readCompositionSwComponentTypes(self, element: ET.Element, parent: ARPackage):
756
1075
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
757
1076
  short_name = self.readShortName(child_element)
758
- logging.debug("readCompositionSwComponentTypes: <%s>" % short_name)
1077
+ self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
759
1078
 
760
1079
  sw_component = parent.createCompositionSwComponentType(short_name)
1080
+ self.readIdentifiable(child_element, sw_component)
761
1081
  self.readSwComponentType(child_element, sw_component)
762
1082
  self.readSwComponentPrototypes(child_element, sw_component)
763
1083
  self.readAssemblySwConnectors(child_element, sw_component)
1084
+ self.readDelegationSwConnectors(child_element, sw_component)
1085
+ self.readDataTypeMappingSet(child_element, sw_component)
764
1086
 
765
- def readDataTypeMap(self, element, parent: DataTypeMappingSet):
1087
+ def readDataTypeMap(self, element: ET.Element, parent: DataTypeMappingSet):
766
1088
  for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
767
1089
  data_type_map = DataTypeMap()
768
1090
  data_type_map.application_data_type_ref = self.readChildOptionalRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
@@ -771,13 +1093,13 @@ class ARXMLParser:
771
1093
  # add the data type map to global namespace
772
1094
  AUTOSAR.getInstance().addDataTypeMap(data_type_map)
773
1095
 
774
- def readDataTypeMappingSets(self, element, parent: ARPackage):
1096
+ def readDataTypeMappingSets(self, element: ET.Element, parent: ARPackage):
775
1097
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-TYPE-MAPPING-SET", self.nsmap):
776
1098
  short_name = self.readShortName(child_element)
777
1099
  mapping_set = parent.createDataTypeMappingSet(short_name)
778
1100
  self.readDataTypeMap(child_element, mapping_set)
779
1101
 
780
- def readVariableDataPrototype(self, element, parent: SenderReceiverInterface):
1102
+ def readVariableDataPrototype(self, element: ET.Element, parent: SenderReceiverInterface):
781
1103
  for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
782
1104
  short_name = self.readShortName(child_element)
783
1105
  prototype = parent.createDataElement(short_name)
@@ -790,7 +1112,7 @@ class ARXMLParser:
790
1112
  sr_interface = parent.createSenderReceiverInterface(short_name)
791
1113
  self.readVariableDataPrototype(child_element, sr_interface)
792
1114
 
793
- def readArgumentDataPrototypes(self, element, parent: ClientServerOperation):
1115
+ def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
794
1116
  for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
795
1117
  short_name = self.readShortName(child_element)
796
1118
  prototype = ArgumentDataPrototype(property, short_name)
@@ -798,26 +1120,26 @@ class ARXMLParser:
798
1120
  prototype.direction = self.readChildElement(short_name, child_element, "DIRECTION")
799
1121
  parent.addArgumentDataPrototype(prototype)
800
1122
 
801
- def readPossibleErrorRefs(self, element, parent: ClientServerOperation):
1123
+ def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
802
1124
  child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
803
1125
  if child_element != None:
804
1126
  for ref in self.readChildRefElementList(child_element, "POSSIBLE-ERROR-REF"):
805
1127
  parent.addPossibleErrorRef(ref)
806
1128
 
807
- def readOperations(self, element, parent: ClientServerInterface):
1129
+ def readOperations(self, element: ET.Element, parent: ClientServerInterface):
808
1130
  for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
809
1131
  short_name = self.readShortName(child_element)
810
1132
  operation = parent.createOperation(short_name)
811
1133
  self.readArgumentDataPrototypes(child_element, operation)
812
1134
  self.readPossibleErrorRefs(child_element, operation)
813
1135
 
814
- def readPossibleErrors(self, element, parent: ClientServerInterface):
1136
+ def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
815
1137
  for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
816
1138
  short_name = self.readShortName(child_element)
817
1139
  error = parent.createApplicationError(short_name)
818
1140
  error.error_code = self.readChildElementNumberValue(short_name, child_element, "ERROR-CODE")
819
1141
 
820
- def readClientServerInterfaces(self, element, parent: ARPackage):
1142
+ def readClientServerInterfaces(self, element: ET.Element, parent: ARPackage):
821
1143
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CLIENT-SERVER-INTERFACE", self.nsmap):
822
1144
  short_name = self.readShortName(child_element)
823
1145
  cs_interface = parent.createClientServerInterface(short_name)
@@ -825,56 +1147,175 @@ class ARXMLParser:
825
1147
  self.readOperations(child_element, cs_interface)
826
1148
  self.readPossibleErrors(child_element, cs_interface)
827
1149
 
828
- def readCompuConstTextContent(self, element, parent: CompuConstTextContent):
1150
+ def readCompuConst(self, element: ET.Element, parent: CompuScale):
829
1151
  child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
830
- if (child_element != None):
831
- parent.vt = child_element.text
832
-
833
- def readCompuScales(self, element, parent: CompuScales):
1152
+ if (child_element is not None):
1153
+ self.logger.debug("readCompuConst VT: %s" % child_element.text)
1154
+ contents = CompuScaleConstantContents()
1155
+ contents.compu_const = CompuConst()
1156
+ 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
1159
+
1160
+ def readCompuNominatorDenominator(self, element: ET.Element, key: str, parent: CompuNominatorDenominator):
1161
+ for child_element in element.findall("./xmlns:%s/xmlns:V" % key, self.nsmap):
1162
+ self.logger.debug("readCompuNominatorDenominator - %s: %s" % (key, child_element.text))
1163
+ parent.add_v(child_element.text)
1164
+
1165
+ def readCompuRationCoeffs(self, element: ET.Element, parent: CompuScale):
1166
+ child_element = element.find("./xmlns:COMPU-RATIONAL-COEFFS", self.nsmap)
1167
+ if (child_element is not None):
1168
+ self.logger.debug("readCompuRationCoeffs")
1169
+ contents = CompuScaleRationalFormula()
1170
+ contents.compu_rational_coeffs = CompuRationalCoeffs()
1171
+ contents.compu_rational_coeffs.compu_denominator = CompuNominatorDenominator()
1172
+ contents.compu_rational_coeffs.compu_numerator = CompuNominatorDenominator()
1173
+ self.readCompuNominatorDenominator(child_element, "COMPU-DENOMINATOR", contents.compu_rational_coeffs.compu_denominator)
1174
+ self.readCompuNominatorDenominator(child_element, "COMPU-NUMERATOR", contents.compu_rational_coeffs.compu_numerator)
1175
+ parent.compu_scale_contents = contents
1176
+
1177
+ def readCompuScaleContents(self, element: ET.Element, parent: CompuScale):
1178
+ self.readCompuConst(element, parent)
1179
+ self.readCompuRationCoeffs(element, parent)
1180
+
1181
+ def readCompuScales(self, element: ET.Element, parent: CompuScales):
834
1182
  for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
835
1183
  compu_scale = CompuScale()
836
1184
  compu_scale.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
837
1185
  compu_scale.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
838
- compu_scale.compu_inverse_value = CompuConstTextContent()
839
- self.readCompuConstTextContent(child_element, compu_scale.compu_inverse_value)
1186
+ self.readCompuScaleContents(child_element, compu_scale)
840
1187
  parent.addCompuScale(compu_scale)
841
1188
 
842
- def readCompuInternalToPhys(self, element, parent: CompuMethod):
1189
+ def readCompuInternalToPhys(self, element: ET.Element, parent: CompuMethod):
843
1190
  child_element = element.find("./xmlns:COMPU-INTERNAL-TO-PHYS", self.nsmap)
844
1191
  if (child_element != None):
845
1192
  parent.compu_internal_to_phys = Compu()
1193
+ self.readElementAttributes(child_element, parent.compu_internal_to_phys)
846
1194
  parent.compu_internal_to_phys.compu_content = CompuScales()
847
1195
  self.readCompuScales(child_element, parent.compu_internal_to_phys.compu_content)
848
1196
 
849
- def readCompuMethods(self, element, parent: ARPackage):
1197
+ def readCompuMethods(self, element: ET.Element, parent: ARPackage):
850
1198
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
851
1199
  short_name = self.readShortName(child_element)
1200
+ self.logger.debug("readCompuMethods %s" % short_name)
852
1201
  compu_method = parent.createCompuMethod(short_name)
853
- compu_method.category = self.readChildOptionalElement(child_element, "CATEGORY")
1202
+ self.readIdentifiable(child_element, compu_method)
1203
+ compu_method.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
854
1204
  self.readCompuInternalToPhys(child_element, compu_method)
855
1205
 
856
- def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
1206
+ def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
857
1207
  for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
858
1208
  mapping = SwcBswRunnableMapping()
859
1209
  mapping.bsw_entity_ref = self.readChildOptionalRefElement(child_element, "BSW-ENTITY-REF")
860
1210
  mapping.swc_runnable_ref = self.readChildOptionalRefElement(child_element, "SWC-RUNNABLE-REF")
861
1211
  parent.addRunnableMapping(mapping)
862
1212
 
863
- def readSwcBswMappings(self, element, parent: ARPackage):
1213
+ def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
864
1214
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-BSW-MAPPING", self.nsmap):
865
1215
  short_name = self.readShortName(child_element)
1216
+ self.logger.debug("readSwcBswMappings %s" % short_name)
866
1217
  swc_bsw_mapping = parent.createSwcBswMapping(short_name)
867
-
868
1218
  swc_bsw_mapping.bsw_behavior_ref = self.readChildOptionalRefElement(child_element, "BSW-BEHAVIOR-REF")
869
1219
  self.readSwcBswRunnableMappings(child_element, swc_bsw_mapping)
870
1220
  swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
871
1221
 
872
- def readARPackages(self, element, parent):
1222
+ 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
1232
+
1233
+ def readApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
1234
+ value_spec = ApplicationValueSpecification()
1235
+ self.readValueSpecification(element, value_spec)
1236
+ value_spec.category = self.readChildOptionalElement(element, "CATEGORY")
1237
+ self.readSwValueCont(element, value_spec)
1238
+ return value_spec
1239
+
1240
+ def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
1241
+ 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)
1249
+
1250
+ def readRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1251
+ value_spec = RecordValueSpecification()
1252
+ self.readValueSpecification(element, value_spec)
1253
+ self.readRecordValueSpecificationFields(element, value_spec)
1254
+ return value_spec
1255
+
1256
+ 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)
1269
+
1270
+ def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
1271
+ child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
1272
+ if child_element is not None:
1273
+ 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
1277
+
1278
+ def readPhysConstrs(self, element: ET.Element, parent: DataConstrRule):
1279
+ child_element = element.find("./xmlns:PHYS-CONSTRS", self.nsmap)
1280
+ if child_element is not None:
1281
+ 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
1286
+
1287
+ def readDataConstrRule(self, element: ET.Element, parent: DataConstr):
1288
+ for child_element in element.findall("./xmlns:DATA-CONSTR-RULES/xmlns:DATA-CONSTR-RULE", self.nsmap):
1289
+ self.logger.debug("readDataConstrRule")
1290
+ rule = DataConstrRule()
1291
+ self.readInternalConstrs(child_element, rule)
1292
+ self.readPhysConstrs(child_element, rule)
1293
+ parent.addDataConstrRule(rule)
1294
+
1295
+ 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)
1302
+
1303
+ 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")
1310
+
1311
+ def readARPackages(self, element: ET.Element, parent: ARPackage):
873
1312
  for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
874
1313
  short_name = self.readShortName(child_element)
875
1314
  ar_package = parent.createARPackage(short_name)
876
1315
 
877
- logging.debug("readARPackages %s" % ar_package.full_name)
1316
+ self.logger.debug("readARPackages %s" % ar_package.full_name)
1317
+
1318
+ self.readElementAttributes(child_element, ar_package)
878
1319
 
879
1320
  self.readSenderReceiverInterfaces(child_element, ar_package)
880
1321
  self.readClientServerInterfaces(child_element, ar_package)
@@ -883,7 +1324,7 @@ class ARXMLParser:
883
1324
  self.readApplicationPrimitiveDataTypes(child_element, ar_package)
884
1325
  self.readApplicationRecordDataTypes(child_element, ar_package)
885
1326
  self.readImplementationDataTypes(child_element, ar_package)
886
- self.readSwDataTypes(child_element, ar_package)
1327
+ self.readSwBaseTypes(child_element, ar_package)
887
1328
  self.readCompuMethods(child_element, ar_package)
888
1329
  self.readEcuAbstractionSwComponents(child_element, ar_package)
889
1330
  self.readApplicationSwComponentTypes(child_element, ar_package)
@@ -896,13 +1337,16 @@ class ARXMLParser:
896
1337
  self.readSwcBswMappings(child_element, ar_package)
897
1338
  self.readBswImplementation(child_element, ar_package)
898
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)
899
1343
 
900
1344
  def load(self, filename, document: AUTOSAR):
1345
+ self.logger.info("Load %s ..." % filename)
1346
+
901
1347
  tree = ET.parse(filename)
902
1348
  root = tree.getroot()
903
1349
  if (self.getPureTagName(root.tag) != "AUTOSAR"):
904
1350
  self._raiseError("Invalid ARXML file <%s>" % filename)
905
1351
 
906
- print("Load %s ..." % filename)
907
-
908
1352
  self.readARPackages(root, document)