armodel 1.7.6__py3-none-any.whl → 1.7.8__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 (69) hide show
  1. armodel/cli/arxml_dump_cli.py +33 -22
  2. armodel/cli/arxml_format_cli.py +25 -13
  3. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +95 -21
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +359 -59
  5. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +134 -35
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +17 -7
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +10 -1
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +18 -2
  9. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +20 -19
  10. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/HwElementCategory.py +59 -0
  11. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/__init__.py +145 -0
  12. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +215 -157
  13. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +69 -35
  14. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +17 -1
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +19 -5
  16. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +113 -39
  17. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +3 -2
  18. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/DataPrototypes.py +41 -16
  19. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +10 -3
  20. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/EndToEndProtection.py +13 -6
  21. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +111 -38
  22. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AccessCount.py +9 -1
  23. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +5 -4
  24. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +26 -8
  25. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +28 -6
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +167 -5
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DoIp.py +29 -0
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/EcuResourceMapping.py +45 -0
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +31 -21
  30. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetFrame.py +5 -3
  31. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +9 -0
  32. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayCommunication.py +76 -0
  33. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayTopology.py +654 -0
  34. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/__init__.py +0 -0
  35. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +539 -77
  36. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +158 -40
  37. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +28 -6
  38. armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +2 -0
  39. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +245 -130
  40. armodel/models/M2/AUTOSARTemplates/SystemTemplate/SWmapping.py +27 -0
  41. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Transformer/__init__.py +524 -0
  42. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +592 -17
  43. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +33 -21
  44. armodel/models/M2/MSR/AsamHdo/AdminData.py +1 -2
  45. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +3 -1
  46. armodel/models/M2/MSR/AsamHdo/SpecialData.py +35 -8
  47. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +0 -3
  48. armodel/models/__init__.py +8 -0
  49. armodel/parser/abstract_arxml_parser.py +34 -27
  50. armodel/parser/arxml_parser.py +1778 -616
  51. armodel/parser/file_parser.py +5 -3
  52. armodel/tests/test_armodel/models/test_ar_package.py +6 -11
  53. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -3
  54. armodel/tests/test_armodel/models/test_datatype.py +1 -1
  55. armodel/tests/test_armodel/models/test_port_interface.py +116 -117
  56. armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +218 -0
  57. armodel/tests/test_armodel/parser/test_sw_components.py +54 -22
  58. armodel/tests/test_armodel/parser/test_system.py +2 -8
  59. armodel/transformer/__init__.py +0 -0
  60. armodel/transformer/abstract.py +6 -0
  61. armodel/transformer/admin_data.py +31 -0
  62. armodel/writer/abstract_arxml_writer.py +27 -33
  63. armodel/writer/arxml_writer.py +1875 -599
  64. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/METADATA +81 -3
  65. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/RECORD +69 -56
  66. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/LICENSE +0 -0
  67. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/WHEEL +0 -0
  68. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/entry_points.txt +0 -0
  69. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/top_level.txt +0 -0
@@ -4,14 +4,15 @@ from .....M2.MSR.Documentation.TextModel.MultilanguageData import MultilanguageL
4
4
  from .....M2.MSR.Documentation.Annotation import Annotation
5
5
  from .....M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph
6
6
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
7
- from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral
7
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, CategoryString
8
8
  from abc import ABCMeta
9
9
  from typing import List
10
10
 
11
- class Referrable(ARObject, metaclass = ABCMeta):
11
+
12
+ class Referrable(ARObject, metaclass=ABCMeta):
12
13
  def __init__(self, parent: ARObject, short_name: str):
13
14
 
14
- if type(self) == Referrable:
15
+ if type(self) is Referrable:
15
16
  raise NotImplementedError("Referrable is an abstract class.")
16
17
 
17
18
  ARObject.__init__(self)
@@ -40,14 +41,15 @@ class Referrable(ARObject, metaclass = ABCMeta):
40
41
  def getFullName(self) -> str:
41
42
  return self.full_name
42
43
 
43
- class MultilanguageReferrable(Referrable, metaclass = ABCMeta):
44
+
45
+ class MultilanguageReferrable(Referrable, metaclass=ABCMeta):
44
46
  def __init__(self, parent: ARObject, short_name: str):
45
- if type(self) == MultilanguageReferrable:
47
+ if type(self) is MultilanguageReferrable:
46
48
  raise NotImplementedError("MultilanguageReferrable is an abstract class.")
47
49
 
48
50
  super().__init__(parent, short_name)
49
51
 
50
- #self._parent = parent
52
+ # self._parent = parent
51
53
  self.longName = None # type: MultilanguageLongName
52
54
 
53
55
  def getLongName(self) -> MultilanguageLongName:
@@ -58,15 +60,15 @@ class MultilanguageReferrable(Referrable, metaclass = ABCMeta):
58
60
  return self
59
61
 
60
62
 
61
- class CollectableElement(ARObject, metaclass = ABCMeta):
63
+ class CollectableElement(ARObject, metaclass=ABCMeta):
62
64
  def __init__(self):
63
- if type(self) == CollectableElement:
65
+ if type(self) is CollectableElement:
64
66
  raise NotImplementedError("CollectableElement is an abstract class.")
65
67
 
66
68
  self.elements = {} # type: dict[str, Referrable]
67
69
 
68
70
  def getTotalElement(self) -> int:
69
- #return len(list(filter(lambda a: not isinstance(a, ARPackage) , self.elements.values())))
71
+ # return len(list(filter(lambda a: not isinstance(a, ARPackage) , self.elements.values())))
70
72
  return len(self.elements.values())
71
73
 
72
74
  def removeElement(self, key):
@@ -78,16 +80,22 @@ class CollectableElement(ARObject, metaclass = ABCMeta):
78
80
  return self.elements.values()
79
81
 
80
82
  def addElement(self, element: Referrable):
81
- self.elements[element.getShortName()] = element
83
+ short_name = element.getShortName()
84
+ if not self.IsElementExists(short_name):
85
+ self.elements[short_name] = element
82
86
 
83
87
  def getElement(self, short_name: str) -> Referrable:
84
88
  if (short_name not in self.elements):
85
89
  return None
86
90
  return self.elements[short_name]
91
+
92
+ def IsElementExists(self, short_name: str) -> bool:
93
+ return short_name in self.elements
94
+
87
95
 
88
- class Identifiable(MultilanguageReferrable, CollectableElement, metaclass = ABCMeta):
96
+ class Identifiable(MultilanguageReferrable, CollectableElement, metaclass=ABCMeta):
89
97
  def __init__(self, parent: ARObject, short_name: str):
90
- if type(self) == Identifiable:
98
+ if type(self) is Identifiable:
91
99
  raise NotImplementedError("Identifiable is an abstract class.")
92
100
 
93
101
  MultilanguageReferrable.__init__(self, parent, short_name)
@@ -95,7 +103,7 @@ class Identifiable(MultilanguageReferrable, CollectableElement, metaclass = ABCM
95
103
 
96
104
  self.annotations = [] # type: List[Annotation]
97
105
  self.adminData = None # type: AdminData
98
- self.category = None # type: ARLiteral
106
+ self.category = None # type: CategoryString
99
107
  self.introduction = None # type: DocumentationBlock
100
108
  self.desc = None # type: MultiLanguageOverviewParagraph
101
109
 
@@ -103,8 +111,12 @@ class Identifiable(MultilanguageReferrable, CollectableElement, metaclass = ABCM
103
111
  return self.adminData
104
112
 
105
113
  def setAdminData(self, value):
106
- self.adminData = value
114
+ if value is not None:
115
+ self.adminData = value
107
116
  return self
117
+
118
+ def removeAdminData(self):
119
+ self.adminData = None
108
120
 
109
121
  def getDesc(self):
110
122
  return self.desc
@@ -117,7 +129,10 @@ class Identifiable(MultilanguageReferrable, CollectableElement, metaclass = ABCM
117
129
  return self.category
118
130
 
119
131
  def setCategory(self, value):
120
- self.category = value
132
+ if isinstance(value, str):
133
+ self.category = CategoryString().setValue(value)
134
+ else:
135
+ self.category = value
121
136
  return self
122
137
 
123
138
  def getIntroduction(self):
@@ -127,7 +142,6 @@ class Identifiable(MultilanguageReferrable, CollectableElement, metaclass = ABCM
127
142
  self.introduction = value
128
143
  return self
129
144
 
130
-
131
145
  def addAnnotation(self, annotation: Annotation):
132
146
  self.annotations.append(annotation)
133
147
  return self
@@ -138,44 +152,64 @@ class Identifiable(MultilanguageReferrable, CollectableElement, metaclass = ABCM
138
152
 
139
153
  class PackageableElement(Identifiable, metaclass=ABCMeta):
140
154
  def __init__(self, parent: ARObject, short_name: str):
141
- if type(self) == PackageableElement:
155
+ if type(self) is PackageableElement:
142
156
  raise NotImplementedError("PackageableElement is an abstract class.")
143
157
  super().__init__(parent, short_name)
144
158
 
145
159
 
146
160
  class ARElement(PackageableElement, metaclass=ABCMeta):
147
161
  def __init__(self, parent: ARObject, short_name: str):
148
- if type(self) == ARElement:
162
+ if type(self) is ARElement:
149
163
  raise NotImplementedError("ARElement is an abstract class.")
150
164
  super().__init__(parent, short_name)
151
165
 
152
166
 
153
167
  class Describable(ARObject, metaclass=ABCMeta):
154
168
  def __init__(self):
155
- if type(self) == Describable:
169
+ if type(self) is Describable:
156
170
  raise NotImplementedError("Describable is an abstract class.")
157
171
 
158
172
  super().__init__()
159
173
 
160
- self._desc = None
161
- self._category = None
162
- self._adminData = None
163
- self._introduction = None
174
+ self.desc = None
175
+ self.category = None
176
+ self.adminData = None
177
+ self.introduction = None
164
178
 
165
- @property
166
- def desc(self):
167
- return self._desc
179
+ def getDesc(self):
180
+ return self.desc
168
181
 
169
- @desc.setter
170
- def desc(self, value):
171
- self._desc = value
182
+ def setDesc(self, value):
183
+ if value is not None:
184
+ self.desc = value
185
+ return self
172
186
 
173
- @property
174
- def category(self):
175
- return self._category
187
+ def getCategory(self):
188
+ return self.category
189
+
190
+ def setCategory(self, value):
191
+ if value is not None:
192
+ self.category = value
193
+ return self
176
194
 
177
- @category.setter
178
- def category(self, value: ARLiteral):
179
- self._category = value
195
+ def getAdminData(self):
196
+ return self.adminData
180
197
 
198
+ def setAdminData(self, value):
199
+ if value is not None:
200
+ self.adminData = value
201
+ return self
202
+
203
+ def removeAdminData(self):
204
+ self.adminData = None
181
205
 
206
+ def getIntroduction(self):
207
+ return self.introduction
208
+
209
+ def setIntroduction(self, value):
210
+ if value is not None:
211
+ self.introduction = value
212
+ return self
213
+
214
+
215
+
@@ -21,7 +21,9 @@ class ARType(metaclass = ABCMeta):
21
21
  return self.value
22
22
 
23
23
  def setValue(self, val):
24
- self.value = val
24
+ if val is not None:
25
+ self.value = val
26
+ return self
25
27
 
26
28
  def getText(self) -> str:
27
29
  return str(self)
@@ -506,5 +508,19 @@ class MacAddressString(ARLiteral):
506
508
  * xml.xsd.pattern=([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}
507
509
  * xml.xsd.type=string
508
510
  '''
511
+ def __init__(self):
512
+ super().__init__()
513
+
514
+ class CategoryString(ARLiteral):
515
+ '''
516
+ This represents the pattern applicable to categories.
517
+ It is basically the same as Identifier but has a different semantics. Therefore it is modeled as a primitive
518
+ of its own.
519
+
520
+ Tags:
521
+ * xml.xsd.customType=CATEGORY-STRING
522
+ * xml.xsd.pattern=[a-zA-Z][a-zA-Z0-9_]*
523
+ * xml.xsd.type=string
524
+ '''
509
525
  def __init__(self):
510
526
  super().__init__()
@@ -3,7 +3,7 @@ from typing import List
3
3
  from ....M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps
4
4
  from ....M2.AUTOSARTemplates.CommonStructure import ValueSpecification
5
5
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
6
- from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, ARLiteral, ARNumerical, ARPositiveInteger, Boolean
6
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, ARLiteral, ARNumerical, ARPositiveInteger, Boolean, TimeValue
7
7
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
8
8
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
9
9
  from ....M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
@@ -295,15 +295,29 @@ class ReceiverComSpec(RPortComSpec):
295
295
 
296
296
  def getCompositeNetworkRepresentations(self) -> List[CompositeNetworkRepresentation]:
297
297
  return self.compositeNetworkRepresentations
298
+
299
+ class ModeSwitchedAckRequest(ARObject):
300
+ def __init__(self):
301
+ super().__init__()
302
+
303
+ self.timeout = None # type: TimeValue
304
+
305
+ def getTimeout(self):
306
+ return self.timeout
307
+
308
+ def setTimeout(self, value):
309
+ if value is not None:
310
+ self.timeout = value
311
+ return self
298
312
 
299
313
  class ModeSwitchSenderComSpec(RPortComSpec):
300
314
  def __init__(self):
301
315
  super().__init__()
302
316
 
303
- self.enhancedModeApi = None # type: ARBoolean
304
- self.modeGroupRef = None # type: RefType
305
- self.modeSwitchedAck = None # type: ModeSwitchedAckRequest
306
- self.queueLength = None # type: ARPositiveInteger
317
+ self.enhancedModeApi = None # type: ARBoolean
318
+ self.modeGroupRef = None # type: RefType
319
+ self.modeSwitchedAck = None # type: ModeSwitchedAckRequest
320
+ self.queueLength = None # type: ARPositiveInteger
307
321
 
308
322
  def getEnhancedModeApi(self):
309
323
  return self.enhancedModeApi
@@ -8,12 +8,17 @@ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiab
8
8
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
9
9
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import TRefType
10
10
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean, RefType
11
- from .....M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, RPortComSpec, ServerComSpec
11
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec
12
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Communication import NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec
13
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Communication import ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec
14
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.Communication import RPortComSpec, ServerComSpec
15
+
12
16
 
13
17
  class SymbolProps(ImplementationProps):
14
18
  def __init__(self, parent: ARObject, short_name: str):
15
19
  super().__init__(parent, short_name)
16
20
 
21
+
17
22
  class PortPrototype(Identifiable):
18
23
  def __init__(self, parent: ARObject, short_name: str):
19
24
  super().__init__(parent, short_name)
@@ -83,6 +88,7 @@ class PortPrototype(Identifiable):
83
88
  self.triggerPortAnnotations.append(value)
84
89
  return self
85
90
 
91
+
86
92
  class AbstractProvidedPortPrototype(PortPrototype):
87
93
  def __init__(self, parent: ARObject, short_name: str):
88
94
  super().__init__(parent, short_name)
@@ -91,7 +97,7 @@ class AbstractProvidedPortPrototype(PortPrototype):
91
97
 
92
98
  def _validateRPortComSpec(self, com_spec: PPortComSpec):
93
99
  if isinstance(com_spec, NonqueuedSenderComSpec):
94
- if com_spec.dataElementRef == None:
100
+ if com_spec.dataElementRef is None:
95
101
  raise ValueError(
96
102
  "operation of NonqueuedSenderComSpec is invalid")
97
103
  if com_spec.dataElementRef.dest != "VARIABLE-DATA-PROTOTYPE":
@@ -170,6 +176,7 @@ class PPortPrototype(AbstractProvidedPortPrototype):
170
176
  self.providedInterfaceTRef = value
171
177
  return self
172
178
 
179
+
173
180
  class RPortPrototype(AbstractRequiredPortPrototype):
174
181
  def __init__(self, parent: ARObject, short_name: str):
175
182
  super().__init__(parent, short_name)
@@ -191,6 +198,7 @@ class RPortPrototype(AbstractRequiredPortPrototype):
191
198
  self.requiredInterfaceTRef = value
192
199
  return self
193
200
 
201
+
194
202
  class PRPortPrototype(PortPrototype):
195
203
  def __init__(self, parent, short_name):
196
204
  super().__init__(parent, short_name)
@@ -220,6 +228,7 @@ class PRPortPrototype(PortPrototype):
220
228
  self.providedRequiredInterface = value
221
229
  return self
222
230
 
231
+
223
232
  class PortGroup(Identifiable):
224
233
  def __init__(self, parent: ARObject, short_name: str):
225
234
  super().__init__(parent, short_name)
@@ -239,70 +248,105 @@ class PortGroup(Identifiable):
239
248
  def getOuterPortRefs(self) -> List[RefType]:
240
249
  return self._outer_port_ref
241
250
 
242
- class SwComponentType(ARElement, metaclass = ABCMeta):
251
+
252
+ class SwComponentType(ARElement, metaclass=ABCMeta):
243
253
  def __init__(self, parent: ARObject, short_name: str):
244
254
  super().__init__(parent, short_name)
245
255
 
256
+ self.ports = [] # type: List[PortPrototype]
257
+ self.portGroups = [] # type: List[PortGroup]
258
+
259
+ def getPorts(self):
260
+ return self.ports
261
+
246
262
  def createPPortPrototype(self, short_name: str) -> PPortPrototype:
247
- if (short_name not in self.elements):
248
- prototype = PPortPrototype(self, short_name)
249
- self.addElement(prototype)
250
- return self.getElement(short_name)
263
+ prototype = PPortPrototype(self, short_name)
264
+ self.addElement(prototype)
265
+ self.ports.append(prototype)
266
+ return prototype
251
267
 
252
268
  def createRPortPrototype(self, short_name) -> RPortPrototype:
253
- if (short_name not in self.elements):
254
- prototype = RPortPrototype(self, short_name)
255
- self.addElement(prototype)
256
- return self.getElement(short_name)
269
+ prototype = RPortPrototype(self, short_name)
270
+ self.addElement(prototype)
271
+ self.ports.append(prototype)
272
+ return prototype
257
273
 
258
274
  def createPRPortPrototype(self, short_name) -> PRPortPrototype:
259
- if (short_name not in self.elements):
260
- prototype = PRPortPrototype(self, short_name)
261
- self.addElement(prototype)
262
- return self.getElement(short_name)
275
+ prototype = PRPortPrototype(self, short_name)
276
+ self.addElement(prototype)
277
+ self.ports.append(prototype)
278
+ return prototype
263
279
 
264
- def createPortGroup(self, short_name) -> PortGroup:
265
- port_group = PortGroup(self, short_name)
266
- if (short_name not in self.elements):
267
- self.elements[short_name] = port_group
268
- return self.elements[short_name]
269
-
270
280
  def getPPortPrototypes(self) -> List[PPortPrototype]:
271
- return list(sorted(filter(lambda c: isinstance(c, PPortPrototype), self.elements.values()), key= lambda o: o.short_name))
281
+ return list(sorted(filter(lambda c: isinstance(c, PPortPrototype), self.ports), key=lambda o: o.short_name))
272
282
 
273
283
  def getRPortPrototypes(self) -> List[RPortPrototype]:
274
- return list(sorted(filter(lambda c: isinstance(c, RPortPrototype), self.elements.values()), key= lambda o: o.short_name))
284
+ return list(sorted(filter(lambda c: isinstance(c, RPortPrototype), self.ports), key=lambda o: o.short_name))
275
285
 
276
286
  def getPRPortPrototypes(self) -> List[PRPortPrototype]:
277
- return list(sorted(filter(lambda c: isinstance(c, PRPortPrototype), self.elements.values()), key= lambda o: o.short_name))
287
+ return list(sorted(filter(lambda c: isinstance(c, PRPortPrototype), self.ports), key=lambda o: o.short_name))
278
288
 
279
289
  def getPortPrototypes(self) -> List[PortPrototype]:
280
- return list(sorted(filter(lambda c: isinstance(c, PortPrototype), self.elements.values()), key= lambda o: o.short_name))
281
-
290
+ return list(sorted(filter(lambda c: isinstance(c, PortPrototype), self.ports), key=lambda o: o.short_name))
291
+
282
292
  def getPortGroups(self) -> List[PortGroup]:
283
- return list(sorted(filter(lambda c: isinstance(c, PortGroup), self.elements.values()), key= lambda o: o.short_name))
293
+ return self.portGroups
284
294
 
295
+ def createPortGroup(self, short_name) -> PortGroup:
296
+ port_group = PortGroup(self, short_name)
297
+ self.addElement(port_group)
298
+ self.portGroups.append(port_group)
299
+ return port_group
300
+
285
301
 
286
- class AtomicSwComponentType(SwComponentType, metaclass = ABCMeta):
302
+ class AtomicSwComponentType(SwComponentType, metaclass=ABCMeta):
287
303
  def __init__(self, parent: ARObject, short_name: str):
288
304
  super().__init__(parent, short_name)
289
305
 
306
+ self.internalBehavior = None # type: SwcInternalBehavior
307
+ self.symbolProps = None # type: SymbolProps
308
+
309
+ def getInternalBehavior(self):
310
+ return self.internalBehavior
311
+
290
312
  def createSwcInternalBehavior(self, short_name) -> SwcInternalBehavior:
291
313
  if (short_name not in self.elements):
292
314
  if (len(list(filter(lambda e: isinstance(e, SwcInternalBehavior), self.elements.values()))) >= 1):
293
315
  raise ValueError("The internal behavior of <%s> can not more than 1" % self.short_name)
294
316
  behavior = SwcInternalBehavior(self, short_name)
295
317
  self.elements[short_name] = behavior
318
+ self.internalBehavior = behavior
296
319
  return self.elements[short_name]
297
320
 
321
+ def getSymbolProps(self):
322
+ return self.symbolProps
323
+
324
+ def setSymbolProps(self, value):
325
+ if value is not None:
326
+ self.symbolProps = value
327
+ return self
328
+
329
+ '''
298
330
  @property
299
331
  def internal_behavior(self) -> SwcInternalBehavior:
300
332
  return next(filter(lambda e: isinstance(e, SwcInternalBehavior), self.elements.values()))
333
+ '''
334
+
301
335
 
302
336
  class EcuAbstractionSwComponentType(AtomicSwComponentType):
303
- def __init__(self, parent:ARObject, short_name: str):
337
+ def __init__(self, parent: ARObject, short_name: str):
304
338
  super().__init__(parent, short_name)
305
339
 
340
+ self.hardwareElementRefs = [] # List[RefType]
341
+
342
+ def getHardwareElementRefs(self):
343
+ return self.hardwareElementRefs
344
+
345
+ def addHardwareElementRefs(self, value):
346
+ if value is not None:
347
+ self.hardwareElementRefs.append(value)
348
+ return self
349
+
306
350
 
307
351
  class ApplicationSwComponentType(AtomicSwComponentType):
308
352
  def __init__(self, parent: ARObject, short_name: str):
@@ -313,11 +357,40 @@ class ComplexDeviceDriverSwComponentType(AtomicSwComponentType):
313
357
  def __init__(self, parent: ARObject, short_name: str):
314
358
  super().__init__(parent, short_name)
315
359
 
360
+ self.hardwareElementRefs = [] # List[RefType]
361
+
362
+ def getHardwareElementRefs(self):
363
+ return self.hardwareElementRefs
364
+
365
+ def addHardwareElementRefs(self, value):
366
+ if value is not None:
367
+ self.hardwareElementRefs.append(value)
368
+ return self
369
+
316
370
 
317
371
  class NvBlockSwComponentType(AtomicSwComponentType):
318
372
  def __init__(self, parent: ARObject, short_name: str):
319
373
  super().__init__(parent, short_name)
320
374
 
375
+ self.bulkNvDataDescriptors = [] # type: List[BulkNvDataDescriptor]
376
+ self.nvBlockDescriptors = [] # type: List[NvBlockDescriptor]
377
+
378
+ def getBulkNvDataDescriptors(self):
379
+ return self.bulkNvDataDescriptors
380
+
381
+ def addBulkNvDataDescriptor(self, value):
382
+ if value is not None:
383
+ self.bulkNvDataDescriptors.append(value)
384
+ return self
385
+
386
+ def getNvBlockDescriptors(self):
387
+ return self.nvBlockDescriptors
388
+
389
+ def setNvBlockDescriptor(self, value):
390
+ if value is not None:
391
+ self.nvBlockDescriptors.append(value)
392
+ return self
393
+
321
394
 
322
395
  class SensorActuatorSwComponentType(AtomicSwComponentType):
323
396
  def __init__(self, parent: ARObject, short_name: str):
@@ -338,6 +411,7 @@ class CompositionSwComponentType(SwComponentType):
338
411
  def __init__(self, parent: ARObject, short_name: str):
339
412
  super().__init__(parent, short_name)
340
413
 
414
+ self.components = [] # type: List[SwComponentPrototype]
341
415
  self.constantValueMappingRefs = [] # type: List[RefType]
342
416
  self.dataTypeMappingRefs = [] # type: List[RefType]
343
417
  self.instantiationRTEEventProps = [] # type: List[InstantiationRTEEventProps]
@@ -363,26 +437,26 @@ class CompositionSwComponentType(SwComponentType):
363
437
  return self.elements[short_name]
364
438
 
365
439
  def getAssemblySwConnectors(self) -> List[AssemblySwConnector]:
366
- return list(sorted(filter(lambda e: isinstance(e, AssemblySwConnector), self.elements.values()), key = lambda c: c.short_name))
440
+ return list(sorted(filter(lambda e: isinstance(e, AssemblySwConnector), self.elements.values()), key=lambda c: c.short_name))
367
441
 
368
442
  def getDelegationSwConnectors(self) -> List[DelegationSwConnector]:
369
- return list(sorted(filter(lambda e: isinstance(e, DelegationSwConnector), self.elements.values()), key = lambda c: c.short_name))
443
+ return list(sorted(filter(lambda e: isinstance(e, DelegationSwConnector), self.elements.values()), key=lambda c: c.short_name))
370
444
 
371
445
  def getSwConnectors(self) -> List[SwConnector]:
372
- return list(sorted(filter(lambda e: isinstance(e, SwConnector), self.elements.values()), key = lambda c: c.short_name))
446
+ return list(sorted(filter(lambda e: isinstance(e, SwConnector), self.elements.values()), key=lambda c: c.short_name))
373
447
 
374
448
  def createSwComponentPrototype(self, short_name: str) -> SwComponentPrototype:
375
- if (short_name not in self.elements):
376
- connector = SwComponentPrototype(self, short_name)
377
- self.elements[short_name] = connector
378
- return self.elements[short_name]
449
+ if (not self.IsElementExists(short_name)):
450
+ prototype = SwComponentPrototype(self, short_name)
451
+ self.addElement(prototype)
452
+ self.components.append(prototype)
453
+ return self.getElement(short_name)
379
454
 
380
- def getSwComponentPrototypes(self) -> List[SwComponentPrototype]:
381
- return list(filter(lambda e: isinstance(e, SwComponentPrototype), self.elements.values()))
455
+ def getComponents(self) -> List[SwComponentPrototype]:
456
+ return self.components
382
457
 
383
458
  def addDataTypeMapping(self, data_type_mapping_ref: RefType):
384
459
  self.dataTypeMappingRefs.append(data_type_mapping_ref)
385
460
 
386
461
  def getDataTypeMappings(self) -> List[RefType]:
387
462
  return self.dataTypeMappingRefs
388
-
@@ -4,6 +4,7 @@ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveT
4
4
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
5
5
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
6
6
 
7
+
7
8
  class SwComponentPrototype(Identifiable):
8
9
  def __init__(self, parent: ARObject, short_name: str):
9
10
  super().__init__(parent, short_name)
@@ -52,10 +53,10 @@ class AssemblySwConnector(SwConnector):
52
53
  self.providerIRef = value
53
54
  return self
54
55
 
55
- def getRequesterIRef(self) -> PPortInCompositionInstanceRef:
56
+ def getRequesterIRef(self) -> RPortInCompositionInstanceRef:
56
57
  return self.requesterIRef
57
58
 
58
- def setRequesterIRef(self, value: PPortInCompositionInstanceRef):
59
+ def setRequesterIRef(self, value: RPortInCompositionInstanceRef):
59
60
  self.requesterIRef = value
60
61
  return self
61
62
 
@@ -1,6 +1,6 @@
1
1
  from abc import ABCMeta
2
2
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
3
- from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARNumerical, TRefType
3
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARNumerical, PositiveInteger, TRefType
4
4
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
5
5
  from .....M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps
6
6
  from .....M2.AUTOSARTemplates.CommonStructure import ValueSpecification
@@ -79,32 +79,57 @@ class ApplicationArrayElement(ApplicationCompositeElementDataPrototype):
79
79
  def __init__(self, parent: ARObject, short_name: str):
80
80
  super().__init__(parent, short_name)
81
81
 
82
- self.arraySizeHandling = None # type: str
83
- self.arraySizeSemantics = None # type: str
82
+ self.arraySizeHandling = None # type: ArraySizeHandlingEnum
83
+ self.arraySizeSemantics = None # type: ArraySizeSemanticsEnum
84
84
  self.indexDataTypeRef = None # type: RefType
85
- self.maxNumberOfElements = None # type: ARNumerical
85
+ self.maxNumberOfElements = None # type: PositiveInteger
86
86
 
87
- def setArraySizeHandling(self, handling: str):
88
- self.arraySizeHandling = handling
87
+ def getArraySizeHandling(self):
88
+ return self.arraySizeHandling
89
+
90
+ def setArraySizeHandling(self, value):
91
+ if value is not None:
92
+ self.arraySizeHandling = value
89
93
  return self
90
-
91
- def setArraySizeSemantics(self, semantics: str):
92
- self.arraySizeSemantics = semantics
94
+
95
+ def getArraySizeSemantics(self):
96
+ return self.arraySizeSemantics
97
+
98
+ def setArraySizeSemantics(self, value):
99
+ if value is not None:
100
+ self.arraySizeSemantics = value
93
101
  return self
94
-
95
- def setIndexDataTypeRef(self, ref: RefType):
96
- self.indexDataTypeRef = ref
102
+
103
+ def getIndexDataTypeRef(self):
104
+ return self.indexDataTypeRef
105
+
106
+ def setIndexDataTypeRef(self, value):
107
+ if value is not None:
108
+ self.indexDataTypeRef = value
97
109
  return self
98
-
99
- def setMaxNumberOfElements(self, number: ARNumerical):
100
- self.maxNumberOfElements = number
110
+
111
+ def getMaxNumberOfElements(self):
112
+ return self.maxNumberOfElements
113
+
114
+ def setMaxNumberOfElements(self, value):
115
+ if value is not None:
116
+ self.maxNumberOfElements = value
101
117
  return self
102
118
 
103
119
  class ApplicationRecordElement(ApplicationCompositeElementDataPrototype):
104
120
  def __init__(self, parent:ARObject, short_name: str):
105
121
  super().__init__(parent, short_name)
106
122
 
107
- self.isOptional = None
123
+ self.isOptional = None # type: Boolean
124
+
125
+ def getIsOptional(self):
126
+ return self.isOptional
127
+
128
+ def setIsOptional(self, value):
129
+ if value is not None:
130
+ self.isOptional = value
131
+ return self
132
+
108
133
 
109
134
  class ParameterDataPrototype(AutosarDataPrototype):
110
135
  def __init__(self, parent: ARObject, short_name: str):