armodel 1.7.9__py3-none-any.whl → 1.8.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. armodel/cli/arxml_format_cli.py +1 -0
  2. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +50 -12
  3. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +14 -14
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/FlatMap.py +2 -3
  5. armodel/models/M2/AUTOSARTemplates/CommonStructure/Implementation.py +1 -1
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +36 -34
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +1 -1
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/ModeDeclaration.py +4 -4
  9. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/__init__.py +3 -3
  10. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +5 -0
  11. armodel/models/M2/AUTOSARTemplates/CommonStructure/Timing/TimingConstraint/ExecutionOrderConstraint.py +3 -3
  12. armodel/models/M2/AUTOSARTemplates/CommonStructure/Timing/TimingConstraint/TimingExtensions.py +3 -3
  13. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +86 -9
  14. armodel/models/M2/AUTOSARTemplates/ECUCParameterDefTemplate.py +1249 -0
  15. armodel/models/M2/AUTOSARTemplates/GenericStructure/AbstractStructure.py +13 -10
  16. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +238 -225
  17. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ArObject.py +5 -4
  18. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +46 -25
  19. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +38 -3
  20. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +18 -20
  21. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +23 -19
  22. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/EndToEndProtection.py +4 -4
  23. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +71 -27
  24. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +27 -17
  25. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +172 -128
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +11 -10
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +11 -11
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +16 -10
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +2 -2
  30. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +6 -6
  31. armodel/models/M2/AUTOSARTemplates/SystemTemplate/RteEventToOsTaskMapping.py +35 -0
  32. armodel/models/M2/AUTOSARTemplates/SystemTemplate/SWmapping.py +25 -0
  33. armodel/models/M2/AUTOSARTemplates/SystemTemplate/SecureCommunication.py +83 -0
  34. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +90 -38
  35. armodel/models/M2/MSR/AsamHdo/AdminData.py +101 -8
  36. armodel/models/__init__.py +2 -0
  37. armodel/models/utils/__init__.py +0 -0
  38. armodel/models/utils/uuid_mgr.py +23 -0
  39. armodel/parser/abstract_arxml_parser.py +13 -5
  40. armodel/parser/arxml_parser.py +412 -85
  41. armodel/tests/test_armodel/models/test_ECUCParameterDefTemplate.py +116 -0
  42. armodel/tests/test_armodel/models/test_Identifiable.py +85 -0
  43. armodel/tests/test_armodel/models/test_ar_object.py +85 -86
  44. armodel/tests/test_armodel/models/test_ar_package.py +70 -70
  45. armodel/tests/test_armodel/models/test_ar_ref.py +36 -36
  46. armodel/tests/test_armodel/models/test_common_structure.py +37 -35
  47. armodel/tests/test_armodel/models/test_datatype.py +140 -142
  48. armodel/tests/test_armodel/models/test_general_structure.py +19 -18
  49. armodel/tests/test_armodel/models/test_port_interface.py +2 -6
  50. armodel/tests/test_armodel/parser/test_arxml_parser.py +8 -8
  51. armodel/writer/abstract_arxml_writer.py +6 -2
  52. armodel/writer/arxml_writer.py +414 -57
  53. {armodel-1.7.9.dist-info → armodel-1.8.1.dist-info}/METADATA +31 -1
  54. {armodel-1.7.9.dist-info → armodel-1.8.1.dist-info}/RECORD +58 -51
  55. {armodel-1.7.9.dist-info → armodel-1.8.1.dist-info}/LICENSE +0 -0
  56. {armodel-1.7.9.dist-info → armodel-1.8.1.dist-info}/WHEEL +0 -0
  57. {armodel-1.7.9.dist-info → armodel-1.8.1.dist-info}/entry_points.txt +0 -0
  58. {armodel-1.7.9.dist-info → armodel-1.8.1.dist-info}/top_level.txt +0 -0
@@ -69,6 +69,7 @@ def main():
69
69
  ap = argparse.ArgumentParser()
70
70
  ap.description = "arxml-format ver: %s" % version
71
71
  ap.add_argument("-v", "--verbose", required=False, help="Print debug information", action="store_true")
72
+ ap.add_argument("--log", required=False, help="Log all information to file")
72
73
  ap.add_argument("-w", "--warning", required=False, help="Skip the error and report it as warning message", action="store_true")
73
74
  ap.add_argument("--remove-admin-data", required=False, help="Remove all the AdminData", action="store_true")
74
75
  ap.add_argument("INPUT", help="The path of AUTOSAR ARXML file")
@@ -1,19 +1,24 @@
1
1
  from typing import Dict, List
2
2
 
3
+ from armodel.models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
3
4
 
5
+ from ...utils.uuid_mgr import UUIDMgr
4
6
  from ...M2.MSR.AsamHdo.SpecialData import Sdg
5
7
  from ...M2.MSR.AsamHdo import AdminData
6
8
  from ...M2.MSR.AsamHdo.BaseTypes import SwBaseType
7
9
  from ...M2.MSR.Documentation.TextModel.BlockElements import DocumentationBlock
10
+
8
11
  from ...M2.AUTOSARTemplates.CommonStructure.InternalBehavior import InternalBehavior
9
12
  from ...M2.AUTOSARTemplates.CommonStructure.Implementation import Implementation
10
13
  from ...M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
11
14
  from ...M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import CollectableElement, Referrable
12
15
  from ...M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage
13
16
  from ...M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationDataType, DataTypeMap
14
- from ...M2.AUTOSARTemplates.SWComponentTemplate.Components import CompositionSwComponentType
17
+ from ...M2.AUTOSARTemplates.SWComponentTemplate.Components import AtomicSwComponentType, CompositionSwComponentType, PortPrototype
18
+ from ...M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import VariableDataPrototype
15
19
  from ...M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType
16
20
  from ...M2.AUTOSARTemplates.SystemTemplate import RootSwCompositionPrototype, System
21
+ from ...M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import SystemSignal, SystemSignalGroup
17
22
 
18
23
 
19
24
  class FileInfoComment(ARObject):
@@ -93,7 +98,7 @@ class AbstractAUTOSAR(CollectableElement):
93
98
  self._behavior_impl_maps = {} # type: Dict[str, str]
94
99
  self._impl_behavior_maps = {} # type: Dict[str, str]
95
100
 
96
- self.uuid_objects = {} # type: Dict[str, ARObject]
101
+ self.uuid_mgr = UUIDMgr()
97
102
 
98
103
  self.systems = {} # type: Dict[str, System]
99
104
  self.compositionSwComponentTypes = {} # type: Dict[str, CompositionSwComponentType]
@@ -111,7 +116,6 @@ class AbstractAUTOSAR(CollectableElement):
111
116
  return CollectableElement.getElement(self, short_name)
112
117
 
113
118
  def getARPackages(self) -> List[ARPackage]:
114
- # return list(filter(lambda e: isinstance(e, ARPackage), self.elements.values()))
115
119
  return list(sorted(self.arPackages.values(), key=lambda a: a.short_name))
116
120
 
117
121
  def createARPackage(self, short_name: str) -> ARPackage:
@@ -120,7 +124,14 @@ class AbstractAUTOSAR(CollectableElement):
120
124
  self.arPackages[short_name] = ar_package
121
125
  return self.arPackages[short_name]
122
126
 
123
- def find(self, referred_name: str) -> Referrable:
127
+ def find(self, referred) -> Referrable:
128
+ if isinstance(referred, RefType):
129
+ referred_name = referred.getValue()
130
+ referred_type = referred.getDest()
131
+ else:
132
+ referred_name = referred
133
+ referred_type = None
134
+
124
135
  short_name_list = referred_name.split("/")
125
136
  element = AUTOSAR.getInstance()
126
137
  for short_name in short_name_list:
@@ -129,17 +140,46 @@ class AbstractAUTOSAR(CollectableElement):
129
140
  element = element.getElement(short_name)
130
141
  if (element is None):
131
142
  return element
132
- # raise ValueError("The %s of reference <%s> does not exist." % (short_name, referred_name))
143
+
144
+ # validate the dest
145
+ if referred_type is not None and referred_type != "":
146
+ base_type = self.getDestType(element)
147
+ if base_type != referred_type:
148
+ raise ValueError("The type does not matched of <%s> (Dest: %s, Actual: %s)" % (referred_name, referred_type, base_type))
149
+
133
150
  return element
134
151
 
152
+ def getDestType(self, type) -> str:
153
+ if isinstance(type, ImplementationDataType):
154
+ return "IMPLEMENTATION-DATA-TYPE"
155
+ return ""
156
+
157
+ def findAtomicSwComponentType(self, referred) -> AtomicSwComponentType:
158
+ return self.find(referred)
159
+
160
+ def findSystemSignal(self, referred) -> SystemSignal:
161
+ return self.find(referred)
162
+
163
+ def findSystemSignalGroup(self, referred) -> SystemSignalGroup:
164
+ return self.find(referred)
165
+
166
+ def findPort(self, referred: str) -> PortPrototype:
167
+ return self.find(referred)
168
+
169
+ def findVariableDataPrototype(self, referred) -> VariableDataPrototype:
170
+ return self.find(referred)
171
+
172
+ def findImplementationDataType(self, referred) -> ImplementationDataType:
173
+ return self.find(referred)
174
+
135
175
  def getDataType(self, data_type: ImplementationDataType) -> ImplementationDataType:
136
176
  if (isinstance(data_type, ImplementationDataType) or isinstance(data_type, SwBaseType)):
137
177
  if (data_type.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
138
178
  referred_type = self.find(data_type.swDataDefProps.implementationDataTypeRef.value)
139
179
  return self.getDataType(referred_type)
140
180
  if (data_type.category == ImplementationDataType.CATEGORY_DATA_REFERENCE):
141
- if (data_type.swDataDefProps.swPointerTargetProps.target_category == "VALUE"):
142
- referred_type = self.find(data_type.swDataDefProps.swPointerTargetProps.sw_data_def_props.baseTypeRef.value)
181
+ if (data_type.swDataDefProps.swPointerTargetProps.getTargetCategory() == "VALUE"):
182
+ referred_type = self.find(data_type.swDataDefProps.swPointerTargetProps.getSwDataDefProps().getBaseTypeRef())
143
183
  return self.getDataType(referred_type)
144
184
  return data_type
145
185
  else:
@@ -206,14 +246,12 @@ class AbstractAUTOSAR(CollectableElement):
206
246
  self.compositionSwComponentTypes[short_name] = sw_component_type
207
247
  return self
208
248
 
209
- def getARObjectByUUID(self, uuid: str):
210
- if uuid in self.uuid_objects:
211
- return self.uuid_objects[uuid]
212
- return None
249
+ def getARObjectByUUID(self, uuid: str) -> List[ARObject]:
250
+ return self.uuid_mgr.getObjects()
213
251
 
214
252
  def addARObject(self, value: ARObject):
215
253
  if value is not None:
216
- self.uuid_objects[value.uuid] = value
254
+ self.uuid_mgr.addObject(value)
217
255
  return self
218
256
 
219
257
  def setARRelease(self, release: str):
@@ -171,7 +171,7 @@ class BswModuleEntity(ExecutableEntity, metaclass=ABCMeta):
171
171
  access = BswVariableAccess(self, short_name)
172
172
  self.addElement(access)
173
173
  self.dataReceivePoints.append(access)
174
- return self.getElement(short_name)
174
+ return self.getElement(short_name, BswVariableAccess)
175
175
 
176
176
  def getDataSendPoints(self):
177
177
  return self.dataSendPoints
@@ -181,7 +181,7 @@ class BswModuleEntity(ExecutableEntity, metaclass=ABCMeta):
181
181
  access = BswVariableAccess(self, short_name)
182
182
  self.addElement(access)
183
183
  self.dataSendPoints.append(access)
184
- return self.getElement(short_name)
184
+ return self.getElement(short_name, BswVariableAccess)
185
185
 
186
186
  def getImplementedEntryRef(self):
187
187
  return self.implementedEntryRef
@@ -673,7 +673,7 @@ class BswInternalBehavior(InternalBehavior):
673
673
  return self.getElement(short_name)
674
674
 
675
675
  def getBswCalledEntities(self) -> List[BswCalledEntity]:
676
- return list(filter(lambda a: isinstance(a, BswCalledEntity), self.elements.values()))
676
+ return list(filter(lambda a: isinstance(a, BswCalledEntity), self.elements))
677
677
 
678
678
  def createBswSchedulableEntity(self, short_name: str) -> BswSchedulableEntity:
679
679
  if not self.IsElementExists(short_name):
@@ -683,7 +683,7 @@ class BswInternalBehavior(InternalBehavior):
683
683
  return self.getElement(short_name)
684
684
 
685
685
  def getBswSchedulableEntities(self) -> List[BswSchedulableEntity]:
686
- return list(filter(lambda a: isinstance(a, BswSchedulableEntity), self.elements.values()))
686
+ return list(filter(lambda a: isinstance(a, BswSchedulableEntity), self.elements))
687
687
 
688
688
  def createBswInterruptEntity(self, short_name: str) -> BswInterruptEntity:
689
689
  if not self.IsElementExists(short_name):
@@ -693,10 +693,10 @@ class BswInternalBehavior(InternalBehavior):
693
693
  return self.getElement(short_name)
694
694
 
695
695
  def getBswInterruptEntities(self) -> List[BswInterruptEntity]:
696
- return list(filter(lambda a: isinstance(a, BswInterruptEntity), self.elements.values()))
696
+ return list(filter(lambda a: isinstance(a, BswInterruptEntity), self.elements))
697
697
 
698
698
  def getBswModuleEntities(self) -> List[BswModuleEntity]:
699
- return list(filter(lambda a: isinstance(a, BswModuleEntity), self.elements.values()))
699
+ return list(filter(lambda a: isinstance(a, BswModuleEntity), self.elements))
700
700
 
701
701
  def createBswModeSwitchEvent(self, short_name: str) -> BswModeSwitchEvent:
702
702
  if not self.IsElementExists(short_name):
@@ -706,7 +706,7 @@ class BswInternalBehavior(InternalBehavior):
706
706
  return self.getElement(short_name)
707
707
 
708
708
  def getBswModeSwitchEvents(self) -> List[BswModeSwitchEvent]:
709
- return list(filter(lambda a: isinstance(a, BswModeSwitchEvent), self.elements.values()))
709
+ return list(filter(lambda a: isinstance(a, BswModeSwitchEvent), self.elements))
710
710
 
711
711
  def createBswTimingEvent(self, short_name: str) -> BswTimingEvent:
712
712
  if not self.IsElementExists(short_name):
@@ -716,7 +716,7 @@ class BswInternalBehavior(InternalBehavior):
716
716
  return self.getElement(short_name)
717
717
 
718
718
  def getBswTimingEvents(self) -> List[BswTimingEvent]:
719
- return list(filter(lambda a: isinstance(a, BswTimingEvent), self.elements.values()))
719
+ return list(filter(lambda a: isinstance(a, BswTimingEvent), self.elements))
720
720
 
721
721
  def createBswDataReceivedEvent(self, short_name: str) -> BswDataReceivedEvent:
722
722
  if not self.IsElementExists(short_name):
@@ -726,7 +726,7 @@ class BswInternalBehavior(InternalBehavior):
726
726
  return self.getElement(short_name)
727
727
 
728
728
  def getBswDataReceivedEvents(self) -> List[BswDataReceivedEvent]:
729
- return list(filter(lambda a: isinstance(a, BswDataReceivedEvent), self.elements.values()))
729
+ return list(filter(lambda a: isinstance(a, BswDataReceivedEvent), self.elements))
730
730
 
731
731
  def createBswInternalTriggerOccurredEvent(self, short_name: str) -> BswInternalTriggerOccurredEvent:
732
732
  if not self.IsElementExists(short_name):
@@ -736,7 +736,7 @@ class BswInternalBehavior(InternalBehavior):
736
736
  return self.getElement(short_name)
737
737
 
738
738
  def getBswInternalTriggerOccurredEvents(self) -> List[BswInternalTriggerOccurredEvent]:
739
- return list(filter(lambda a: isinstance(a, BswInternalTriggerOccurredEvent), self.elements.values()))
739
+ return list(filter(lambda a: isinstance(a, BswInternalTriggerOccurredEvent), self.elements))
740
740
 
741
741
  def createBswExternalTriggerOccurredEvent(self, short_name: str) -> BswExternalTriggerOccurredEvent:
742
742
  if not self.IsElementExists(short_name):
@@ -746,7 +746,7 @@ class BswInternalBehavior(InternalBehavior):
746
746
  return self.getElement(short_name)
747
747
 
748
748
  def getBswOperationInvokedEvents(self) -> List[BswOperationInvokedEvent]:
749
- return list(filter(lambda a: isinstance(a, BswOperationInvokedEvent), self.elements.values()))
749
+ return list(filter(lambda a: isinstance(a, BswOperationInvokedEvent), self.elements))
750
750
 
751
751
  def createBswOperationInvokedEvent(self, short_name: str) -> BswOperationInvokedEvent:
752
752
  if not self.IsElementExists(short_name):
@@ -756,7 +756,7 @@ class BswInternalBehavior(InternalBehavior):
756
756
  return self.getElement(short_name)
757
757
 
758
758
  def getBswExternalTriggerOccurredEvents(self) -> List[BswExternalTriggerOccurredEvent]:
759
- return list(filter(lambda a: isinstance(a, BswExternalTriggerOccurredEvent), self.elements.values()))
759
+ return list(filter(lambda a: isinstance(a, BswExternalTriggerOccurredEvent), self.elements))
760
760
 
761
761
  def createBswBackgroundEvent(self, short_name: str) -> BswBackgroundEvent:
762
762
  if not self.IsElementExists(short_name):
@@ -766,10 +766,10 @@ class BswInternalBehavior(InternalBehavior):
766
766
  return self.getElement(short_name)
767
767
 
768
768
  def getBswBackgroundEvents(self) -> List[BswBackgroundEvent]:
769
- return list(filter(lambda a: isinstance(a, BswBackgroundEvent), self.elements.values()))
769
+ return list(filter(lambda a: isinstance(a, BswBackgroundEvent), self.elements))
770
770
 
771
771
  def getBswEvents(self) -> List[BswEvent]:
772
- return list(filter(lambda a: isinstance(a, BswEvent), self.elements.values()))
772
+ return list(filter(lambda a: isinstance(a, BswEvent), self.elements))
773
773
 
774
774
  def addIncludedModeDeclarationGroupSet(self, group_set: IncludedModeDeclarationGroupSet):
775
775
  self.includedModeDeclarationGroupSets.append(group_set)
@@ -5,6 +5,7 @@ from ....M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstan
5
5
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
6
6
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Identifiable
7
7
 
8
+
8
9
  class FlatInstanceDescriptor(Identifiable):
9
10
  def __init__(self, parent: ARObject, short_name: str):
10
11
  super().__init__(parent, short_name)
@@ -58,7 +59,7 @@ class FlatMap(ARElement):
58
59
  self.instances = [] # type: List[FlatInstanceDescriptor]
59
60
 
60
61
  def getInstances(self):
61
- return list(sorted(filter(lambda a: isinstance(a, FlatInstanceDescriptor), self.elements.values()), key= lambda o:o.short_name))
62
+ return list(sorted(filter(lambda a: isinstance(a, FlatInstanceDescriptor), self.elements), key=lambda o: o.short_name))
62
63
 
63
64
  def createFlatInstanceDescriptor(self, short_name: str):
64
65
  if (short_name not in self.elements):
@@ -66,5 +67,3 @@ class FlatMap(ARElement):
66
67
  self.addElement(element)
67
68
  self.instances.append(element)
68
69
  return self.getElement(short_name)
69
-
70
-
@@ -134,7 +134,7 @@ class Implementation(PackageableElement, metaclass=ABCMeta):
134
134
  return self
135
135
 
136
136
  def getCodeDescriptors(self) -> List[Code]:
137
- return list(filter(lambda a: isinstance(a, Code), self.elements.values()))
137
+ return list(filter(lambda a: isinstance(a, Code), self.elements))
138
138
 
139
139
  def createCodeDescriptor(self, short_name: str) -> Code:
140
140
  if (short_name not in self.elements):
@@ -8,10 +8,12 @@ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTy
8
8
  from ....M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import AutosarDataType
9
9
  from ....M2.AUTOSARTemplates.SWComponentTemplate.Components import SymbolProps
10
10
 
11
+
11
12
  class AbstractImplementationDataTypeElement(Identifiable):
12
13
  def __init__(self, parent, short_name: str):
13
14
  super().__init__(parent, short_name)
14
15
 
16
+
15
17
  class ImplementationDataTypeElement(AbstractImplementationDataTypeElement):
16
18
  ARRAY_SIZE_SEMANTICS_FIXED_SIZE = "FIXED-SIZE"
17
19
  ARRAY_SIZE_SEMANTICS_VARIABLE_SIZE = "VARIABLE_SIZE"
@@ -30,61 +32,68 @@ class ImplementationDataTypeElement(AbstractImplementationDataTypeElement):
30
32
  return self.arrayImplPolicy
31
33
 
32
34
  def setArrayImplPolicy(self, value):
33
- self.arrayImplPolicy = value
35
+ if value is not None:
36
+ self.arrayImplPolicy = value
34
37
  return self
35
38
 
36
39
  def getArraySize(self):
37
40
  return self.arraySize
38
41
 
39
42
  def setArraySize(self, value):
40
- self.arraySize = value
43
+ if value is not None:
44
+ self.arraySize = value
41
45
  return self
42
46
 
43
47
  def getArraySizeHandling(self):
44
48
  return self.arraySizeHandling
45
49
 
46
50
  def setArraySizeHandling(self, value):
47
- self.arraySizeHandling = value
51
+ if value is not None:
52
+ self.arraySizeHandling = value
48
53
  return self
49
54
 
50
55
  def getArraySizeSemantics(self):
51
56
  return self.arraySizeSemantics
52
57
 
53
58
  def setArraySizeSemantics(self, value):
54
- self.arraySizeSemantics = value
59
+ if value is not None:
60
+ self.arraySizeSemantics = value
55
61
  return self
56
62
 
57
63
  def getIsOptional(self):
58
64
  return self.isOptional
59
65
 
60
66
  def setIsOptional(self, value):
61
- self.isOptional = value
67
+ if value is not None:
68
+ self.isOptional = value
62
69
  return self
63
70
 
64
71
  def getSwDataDefProps(self):
65
72
  return self.swDataDefProps
66
73
 
67
74
  def setSwDataDefProps(self, value):
68
- self.swDataDefProps = value
75
+ if value is not None:
76
+ self.swDataDefProps = value
69
77
  return self
78
+
79
+ def createImplementationDataTypeElement(self, short_name: str) -> "ImplementationDataTypeElement":
80
+ if (not self.IsElementExists(short_name)):
81
+ type_element = ImplementationDataTypeElement(self, short_name)
82
+ self.addElement(type_element)
83
+ return self.getElement(short_name, ImplementationDataTypeElement)
70
84
 
71
- def createImplementationDataTypeElement(self, short_name: str): # type: (...) -> ImplementationDataTypeElement
72
- if (short_name not in self.elements):
73
- event = ImplementationDataTypeElement(self, short_name)
74
- self.elements[short_name] = event
75
- return self.elements[short_name]
76
-
77
- def getImplementationDataTypeElements(self): # type:(...) -> List[ImplementationDataTypeElement]
78
- return list(filter(lambda c: isinstance(c, ImplementationDataTypeElement), self.elements.values()))
85
+ def getImplementationDataTypeElements(self) -> List["ImplementationDataTypeElement"]:
86
+ return list(filter(lambda c: isinstance(c, ImplementationDataTypeElement), self.elements))
79
87
 
80
88
 
81
- class AbstractImplementationDataType(AutosarDataType, metaclass = ABCMeta):
89
+ class AbstractImplementationDataType(AutosarDataType, metaclass=ABCMeta):
82
90
  def __init__(self, parent: ARObject, short_name: str):
83
- if type(self) == AbstractImplementationDataType:
91
+ if type(self) is AbstractImplementationDataType:
84
92
  raise NotImplementedError("AbstractImplementationDataType is an abstract class.")
85
93
 
86
94
  super().__init__(parent, short_name)
87
95
 
96
+
88
97
  class ImplementationDataType(AbstractImplementationDataType):
89
98
 
90
99
  CATEGORY_TYPE_REFERENCE = "TYPE_REFERENCE"
@@ -99,12 +108,9 @@ class ImplementationDataType(AbstractImplementationDataType):
99
108
  self.dynamicArraySizeProfile = None # type: String
100
109
  self.isStructWithOptionalElement = None # type: Boolean
101
110
 
102
- self.subElements = [] # type: List[str]
111
+ self.subElements = [] # type: List[ImplementationDataTypeElement]
103
112
  self.symbolProps = None # type: SymbolProps
104
- self.typeEmitter = None # type: ARLiteral
105
-
106
- #self._array_type = None # ImplementationDataType
107
- #self._struct_type = None # ImplementationDataType
113
+ self.typeEmitter = None # type: ARLiteral
108
114
 
109
115
  def getDynamicArraySizeProfile(self):
110
116
  return self.dynamicArraySizeProfile
@@ -120,19 +126,15 @@ class ImplementationDataType(AbstractImplementationDataType):
120
126
  self.isStructWithOptionalElement = value
121
127
  return self
122
128
 
123
- def createImplementationDataTypeElement(self, short_name: str) -> ImplementationDataTypeElement:
124
- self.subElements.append(short_name)
125
- if (short_name not in self.elements):
126
- event = ImplementationDataTypeElement(self, short_name)
127
- self.elements[short_name] = event
128
- return self.elements[short_name]
129
+ def createImplementationDataTypeElement(self, short_name: str) -> ImplementationDataTypeElement:
130
+ if not self.IsElementExists(short_name):
131
+ type_element = ImplementationDataTypeElement(self, short_name)
132
+ self.addElement(type_element)
133
+ self.subElements.append(type_element)
134
+ return self.getElement(short_name)
129
135
 
130
- def getImplementationDataTypeElements(self) -> List[ImplementationDataTypeElement]:
131
- elements = []
132
- for sub_element in self.subElements:
133
- elements.append(self.elements[sub_element])
134
- return elements
135
- # return filter(lambda c: isinstance(c, ImplementationDataTypeElement), self.elements.values())
136
+ def getSubElements(self) -> List[ImplementationDataTypeElement]:
137
+ return self.subElements
136
138
 
137
139
  def getArrayElementType(self) -> str:
138
140
  return self._array_type
@@ -163,4 +165,4 @@ class ImplementationDataType(AbstractImplementationDataType):
163
165
  return self.symbolProps
164
166
 
165
167
  def getSymbolProps(self) -> SymbolProps:
166
- return self.symbolProps
168
+ return self.symbolProps
@@ -109,7 +109,7 @@ class InternalBehavior(Identifiable, metaclass=ABCMeta):
109
109
  return self.getElement(short_name)
110
110
 
111
111
  def getExclusiveAreas(self) -> List[ExclusiveArea]:
112
- return list(filter(lambda c: isinstance(c, ExclusiveArea), self.elements.values()))
112
+ return list(filter(lambda c: isinstance(c, ExclusiveArea), self.elements))
113
113
 
114
114
  def getStaticMemories(self):
115
115
  return self.staticMemories
@@ -85,13 +85,13 @@ class ModeDeclarationGroup(Identifiable):
85
85
  self.onTransitionValue = None # type: PositiveInteger
86
86
 
87
87
  def createModeDeclaration(self, short_name: str) -> ModeDeclaration:
88
- if (short_name not in self.elements):
88
+ if not self.IsElementExists(short_name):
89
89
  spec = ModeDeclaration(self, short_name)
90
- self.elements[short_name] = spec
91
- return self.elements[short_name]
90
+ self.addElement(spec)
91
+ return self.getElement(short_name, ModeDeclaration)
92
92
 
93
93
  def getModeDeclarations(self) -> List[ModeDeclaration]:
94
- return list(sorted(filter(lambda a: isinstance(a, ModeDeclaration), self.elements.values()), key=lambda o: o.short_name))
94
+ return list(sorted(filter(lambda a: isinstance(a, ModeDeclaration), self.elements), key=lambda o: o.short_name))
95
95
 
96
96
  def setInitialModeRef(self, ref: RefType):
97
97
  self.initialModeRef = ref
@@ -24,10 +24,10 @@ class ResourceConsumption(Identifiable):
24
24
  return self.getElement(short_name)
25
25
 
26
26
  def getMemorySections(self) -> List[MemorySection]:
27
- return list(sorted(filter(lambda a: isinstance(a, MemorySection), self.elements.values()), key= lambda o:o.short_name))
27
+ return list(sorted(filter(lambda a: isinstance(a, MemorySection), self.elements), key= lambda o:o.short_name))
28
28
 
29
29
  def getMemorySection(self, short_name: str) -> MemorySection:
30
- return next(filter(lambda o: isinstance(o, MemorySection) and (o.short_name == short_name), self.elements.values()), None)
30
+ return next(filter(lambda o: isinstance(o, MemorySection) and (o.short_name == short_name), self.elements), None)
31
31
 
32
32
  def createMeasuredStackUsage(self, short_name: str) -> MeasuredStackUsage:
33
33
  if (short_name not in self.elements):
@@ -51,4 +51,4 @@ class ResourceConsumption(Identifiable):
51
51
  return self.getElement(short_name)
52
52
 
53
53
  def getStackUsages(self) -> List[StackUsage]:
54
- return list(sorted(filter(lambda a: isinstance(a, StackUsage), self.elements.values()), key= lambda o:o.short_name))
54
+ return list(sorted(filter(lambda a: isinstance(a, StackUsage), self.elements), key= lambda o:o.short_name))
@@ -832,3 +832,8 @@ class CryptoServiceNeeds(ServiceNeeds):
832
832
  class EcuStateMgrUserNeeds(ServiceNeeds):
833
833
  def __init__(self, parent: ARObject, short_name: str):
834
834
  super().__init__(parent, short_name)
835
+
836
+
837
+ class DltUserNeeds(ServiceNeeds):
838
+ def __init__(self, parent: ARObject, short_name: str):
839
+ super().__init__(parent, short_name)
@@ -35,11 +35,11 @@ class ExecutionOrderConstraint(TimingConstraint):
35
35
  self.ordered_elements = [] # type: List[EOCExecutableEntityRefAbstract]
36
36
 
37
37
  def createEOCExecutableEntityRef(self, short_name: str)-> EOCExecutableEntityRef:
38
- if short_name not in self.elements:
38
+ if not self.IsElementExists(short_name):
39
39
  entity_ref = EOCExecutableEntityRef(self, short_name)
40
- self.elements[short_name] = entity_ref
40
+ self.addElement(entity_ref)
41
41
  self.ordered_elements.append(entity_ref)
42
- return self.elements[short_name]
42
+ return self.getElement(short_name, EOCExecutableEntityRef)
43
43
 
44
44
  def getOrderedElements(self) -> List[EOCExecutableEntityRefAbstract]:
45
45
  return self.ordered_elements
@@ -18,11 +18,11 @@ class TimingExtension(Identifiable):
18
18
  self.timing_requirements = [] # Type: List[TimingConstraint]
19
19
 
20
20
  def createExecutionOrderConstraint(self, short_name: str)-> ExecutionOrderConstraint:
21
- if short_name not in self.elements:
21
+ if not self.IsElementExists(short_name):
22
22
  constraint = ExecutionOrderConstraint(self, short_name)
23
- self.elements[short_name] = constraint
23
+ self.addElement(constraint)
24
24
  self.timing_requirements.append(constraint)
25
- return self.elements[short_name]
25
+ return self.getElement(short_name, ExecutionOrderConstraint)
26
26
 
27
27
  def getTimingRequirements(self) -> List[TimingConstraint]:
28
28
  return self.timing_requirements
@@ -1,10 +1,13 @@
1
1
  from abc import ABCMeta
2
2
  from typing import List
3
- from ..MSR.Documentation.TextModel.BlockElements import DocumentationBlock
3
+
4
+ from ...M2.AUTOSARTemplates.ECUCParameterDefTemplate import EcucChoiceContainerDef, EcucContainerDef, EcucDefinitionElement, EcucParamConfContainerDef
5
+ from ...M2.MSR.Documentation.TextModel.BlockElements import DocumentationBlock
4
6
  from ...M2.MSR.Documentation.Annotation import Annotation
5
7
  from ...M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstanceRef
6
8
  from ...M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
7
- from ...M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical, RefType, ARBoolean
9
+ from ...M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, ARLiteral, ARNumerical, Boolean, CIdentifier, String
10
+ from ...M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean, RefType
8
11
  from ...M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement
9
12
 
10
13
 
@@ -205,11 +208,11 @@ class EcucContainerValue(ARElement, EcucIndexableValue):
205
208
  return self.subContainers
206
209
 
207
210
  def createSubContainer(self, short_name):
208
- if (short_name not in self.elements):
211
+ if not self.IsElementExists(short_name):
209
212
  container_value = EcucContainerValue(self, short_name)
210
- self.elements[short_name] = container_value
213
+ self.addElement(container_value)
211
214
  self.subContainers.append(container_value)
212
- return self.elements[short_name]
215
+ return self.getElement(short_name, EcucContainerValue)
213
216
 
214
217
 
215
218
  class EcucModuleConfigurationValues(ARElement):
@@ -224,14 +227,14 @@ class EcucModuleConfigurationValues(ARElement):
224
227
  self.postBuildVariantUsed = None # type: ARBoolean
225
228
 
226
229
  def createContainer(self, short_name: str) -> EcucContainerValue:
227
- if (short_name not in self.elements):
230
+ if not self.IsElementExists(short_name):
228
231
  container = EcucContainerValue(self, short_name)
229
- self.elements[short_name] = container
232
+ self.addElement(container)
230
233
  self.containers.append(container)
231
- return self.elements[short_name]
234
+ return self.getElement(short_name, EcucContainerValue)
232
235
 
233
236
  def getContainers(self) -> List[EcucContainerValue]:
234
- return list(sorted(filter(lambda a: isinstance(a, EcucContainerValue), self.elements.values()), key=lambda o: o.short_name))
237
+ return list(sorted(filter(lambda a: isinstance(a, EcucContainerValue), self.elements), key=lambda o: o.short_name))
235
238
 
236
239
  def getDefinitionRef(self) -> RefType:
237
240
  return self.definitionRef
@@ -267,3 +270,77 @@ class EcucModuleConfigurationValues(ARElement):
267
270
  def setPostBuildVariantUsed(self, value: ARBoolean):
268
271
  self.postBuildVariantUsed = value
269
272
  return self
273
+
274
+
275
+ class EcucConditionSpecification(ARObject):
276
+ def __init__(self):
277
+ super().__init__()
278
+
279
+ # self.conditionFormula: EcucConditionFormula = None # 0..1 aggr Definition of the formula used to define existence dependencies.
280
+ # self.ecucQueries: List[EcucQuery] = [] # * aggr Query to the ECU Configuration Description.
281
+ # self.informalFormula: MlFormula = None # 0..1 aggr Informal description of the condition used to to define existence dependencies. # noqa E501
282
+
283
+
284
+ class EcucConfigurationVariantEnum(AREnum):
285
+ def __init__(self):
286
+ super().__init__([])
287
+
288
+
289
+ class EcucModuleDef(EcucDefinitionElement):
290
+ def __init__(self, parent: ARObject, short_name: str):
291
+ super().__init__(parent, short_name)
292
+
293
+ self.apiServicePrefix: CIdentifier = None
294
+ self.containers: List[EcucContainerDef] = []
295
+ self.postBuildVariantSupport: Boolean = None
296
+ self.refinedModuleDefRef: RefType = None
297
+ self.supportedConfigVariants: List[EcucConfigurationVariantEnum] = []
298
+
299
+ def getApiServicePrefix(self) -> CIdentifier:
300
+ return self.apiServicePrefix
301
+
302
+ def setApiServicePrefix(self, value: CIdentifier):
303
+ if value is not None:
304
+ self.apiServicePrefix = value
305
+ return self
306
+
307
+ def getContainers(self) -> List[EcucContainerDef]:
308
+ return self.containers
309
+
310
+ def createEcucParamConfContainerDef(self, short_name: str) -> EcucParamConfContainerDef:
311
+ if (not self.IsElementExists(short_name)):
312
+ container_def = EcucParamConfContainerDef(self, short_name)
313
+ self.addElement(container_def)
314
+ self.containers.append(container_def)
315
+ return self.getElement(short_name)
316
+
317
+ def createEcucChoiceContainerDef(self, short_name: str) -> EcucChoiceContainerDef:
318
+ if (not self.IsElementExists(short_name)):
319
+ container_def = EcucChoiceContainerDef(self, short_name)
320
+ self.addElement(container_def)
321
+ self.containers.append(container_def)
322
+ return self.getElement(short_name)
323
+
324
+ def getPostBuildVariantSupport(self) -> Boolean:
325
+ return self.postBuildVariantSupport
326
+
327
+ def setPostBuildVariantSupport(self, value: Boolean):
328
+ if value is not None:
329
+ self.postBuildVariantSupport = value
330
+ return self
331
+
332
+ def getRefinedModuleDefRef(self) -> RefType:
333
+ return self.refinedModuleDefRef
334
+
335
+ def setRefinedModuleDefRef(self, value: RefType):
336
+ if value is not None:
337
+ self.refinedModuleDefRef = value
338
+ return self
339
+
340
+ def getSupportedConfigVariants(self) -> List[EcucConfigurationVariantEnum]:
341
+ return self.supportedConfigVariants
342
+
343
+ def addSupportedConfigVariant(self, value: EcucConfigurationVariantEnum):
344
+ if value is not None:
345
+ self.supportedConfigVariants.append(value)
346
+ return self