armodel 1.7.0__py3-none-any.whl → 1.7.2__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 (47) hide show
  1. armodel/cli/arxml_dump_cli.py +2 -2
  2. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +53 -16
  3. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +41 -19
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +14 -14
  5. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +22 -11
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/ModeDeclaration.py +26 -9
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/MemorySectionUsage.py +8 -0
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +711 -27
  9. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +1 -1
  10. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +91 -14
  11. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +17 -4
  12. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +78 -11
  13. armodel/models/M2/AUTOSARTemplates/GenericStructure/LifeCycles.py +5 -0
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +41 -3
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +53 -15
  16. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +23 -8
  17. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +44 -1
  18. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +46 -5
  19. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +56 -35
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py +1 -1
  21. armodel/models/M2/MSR/AsamHdo/AdminData.py +34 -8
  22. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +170 -23
  23. armodel/models/M2/MSR/DataDictionary/AuxillaryObjects.py +4 -4
  24. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +130 -37
  25. armodel/models/M2/MSR/Documentation/Annotation.py +1 -1
  26. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/ListElements.py +54 -0
  27. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/PaginationAndView.py +9 -0
  28. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/__init__.py +25 -0
  29. armodel/models/M2/MSR/Documentation/TextModel/LanguageDataModel.py +33 -5
  30. armodel/models/M2/MSR/Documentation/TextModel/MultilanguageData.py +15 -2
  31. armodel/models/M2/MSR/Documentation/__init__.py +1 -1
  32. armodel/models/__init__.py +4 -1
  33. armodel/parser/abstract_arxml_parser.py +31 -15
  34. armodel/parser/arxml_parser.py +456 -237
  35. armodel/tests/test_armodel/models/test_ar_ref.py +7 -4
  36. armodel/tests/test_armodel/models/test_datatype.py +4 -4
  37. armodel/tests/test_armodel/models/test_m2_msr.py +5 -5
  38. armodel/tests/test_armodel/parser/test_sw_components.py +10 -1
  39. armodel/tests/test_armodel/parser/test_system.py +0 -1
  40. armodel/writer/abstract_arxml_writer.py +17 -8
  41. armodel/writer/arxml_writer.py +436 -195
  42. {armodel-1.7.0.dist-info → armodel-1.7.2.dist-info}/METADATA +29 -1
  43. {armodel-1.7.0.dist-info → armodel-1.7.2.dist-info}/RECORD +47 -43
  44. {armodel-1.7.0.dist-info → armodel-1.7.2.dist-info}/LICENSE +0 -0
  45. {armodel-1.7.0.dist-info → armodel-1.7.2.dist-info}/WHEEL +0 -0
  46. {armodel-1.7.0.dist-info → armodel-1.7.2.dist-info}/entry_points.txt +0 -0
  47. {armodel-1.7.0.dist-info → armodel-1.7.2.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
2
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement
3
- from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical, RefType
3
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical, Integer, RefType
4
4
  from ....M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph
5
5
 
6
6
  class SwRecordLayoutV(ARObject):
@@ -16,29 +16,64 @@ class SwRecordLayoutV(ARObject):
16
16
  self.swRecordLayoutVIndex = None # type: ARLiteral
17
17
  self.swRecordLayoutVProp = None # type: ARLiteral
18
18
 
19
- def setShortLabel(self, short_label: ARLiteral):
20
- self.shortLabel = short_label
19
+ def getBaseTypeRef(self):
20
+ return self.baseTypeRef
21
+
22
+ def setBaseTypeRef(self, value):
23
+ self.baseTypeRef = value
24
+ return self
25
+
26
+ def getDesc(self):
27
+ return self.desc
28
+
29
+ def setDesc(self, value):
30
+ self.desc = value
31
+ return self
32
+
33
+ def getShortLabel(self):
34
+ return self.shortLabel
35
+
36
+ def setShortLabel(self, value):
37
+ self.shortLabel = value
21
38
  return self
22
39
 
23
- def setBaseTypeRef(self, ref: RefType):
24
- self.baseTypeRef = ref
40
+ def getSwGenericAxisParamTypeRef(self):
41
+ return self.swGenericAxisParamTypeRef
42
+
43
+ def setSwGenericAxisParamTypeRef(self, value):
44
+ self.swGenericAxisParamTypeRef = value
25
45
  return self
26
46
 
27
- def setSwRecordLayoutVAxis(self, axis: ARNumerical):
28
- self.swRecordLayoutVAxis = axis
47
+ def getSwRecordLayoutVAxis(self):
48
+ return self.swRecordLayoutVAxis
49
+
50
+ def setSwRecordLayoutVAxis(self, value):
51
+ self.swRecordLayoutVAxis = value
29
52
  return self
30
53
 
31
- def setSwRecordLayoutVFixValue(self, value: ARNumerical):
54
+ def getSwRecordLayoutVFixValue(self):
55
+ return self.swRecordLayoutVFixValue
56
+
57
+ def setSwRecordLayoutVFixValue(self, value):
32
58
  self.swRecordLayoutVFixValue = value
33
59
  return self
34
60
 
35
- def setSwRecordLayoutVIndex(self, index: ARLiteral):
36
- self.swRecordLayoutVIndex = index
61
+ def getSwRecordLayoutVIndex(self):
62
+ return self.swRecordLayoutVIndex
63
+
64
+ def setSwRecordLayoutVIndex(self, value):
65
+ self.swRecordLayoutVIndex = value
37
66
  return self
38
67
 
39
- def setSwRecordLayoutVProp(self, prop: ARLiteral):
40
- self.swRecordLayoutVProp = prop
68
+ def getSwRecordLayoutVProp(self):
69
+ return self.swRecordLayoutVProp
70
+
71
+ def setSwRecordLayoutVProp(self, value):
72
+ self.swRecordLayoutVProp = value
41
73
  return self
74
+
75
+
76
+
42
77
 
43
78
  class SwRecordLayoutGroupContent(ARObject):
44
79
  def __init__(self):
@@ -48,6 +83,27 @@ class SwRecordLayoutGroupContent(ARObject):
48
83
  self.swRecordLayoutGroup = None # type: SwRecordLayoutGroup
49
84
  self.swRecordLayoutV = None # type: SwRecordLayoutV
50
85
 
86
+ def getSwRecordLayoutRef(self):
87
+ return self.swRecordLayoutRef
88
+
89
+ def setSwRecordLayoutRef(self, value):
90
+ self.swRecordLayoutRef = value
91
+ return self
92
+
93
+ def getSwRecordLayoutGroup(self):
94
+ return self.swRecordLayoutGroup
95
+
96
+ def setSwRecordLayoutGroup(self, value):
97
+ self.swRecordLayoutGroup = value
98
+ return self
99
+
100
+ def getSwRecordLayoutV(self):
101
+ return self.swRecordLayoutV
102
+
103
+ def setSwRecordLayoutV(self, value):
104
+ self.swRecordLayoutV = value
105
+ return self
106
+
51
107
 
52
108
  class SwRecordLayoutGroup(ARObject):
53
109
  def __init__(self):
@@ -60,53 +116,87 @@ class SwRecordLayoutGroup(ARObject):
60
116
  self.swRecordLayoutComponent = None # type: ARLiteral
61
117
  self.swRecordLayoutGroupAxis = None # type: ARNumerical
62
118
  self.swRecordLayoutGroupContentType = None # type: SwRecordLayoutGroupContent
63
- self.swRecordLayoutGroupIndex = None # type: ARLiteral
64
119
  self.swRecordLayoutGroupFrom = None # type: ARLiteral
120
+ self.swRecordLayoutGroupIndex = None # type: ARLiteral
121
+ self.swRecordLayoutGroupStep = None # type: Integer
65
122
  self.swRecordLayoutGroupTo = None # type: ARLiteral
66
123
 
124
+ def getCategory(self):
125
+ return self.category
67
126
 
68
- def setCategory(self, category: ARLiteral):
69
- self.category = category
127
+ def setCategory(self, value):
128
+ self.category = value
70
129
  return self
71
130
 
72
- def setDesc(self, desc):
73
- self.desc = desc
74
- return self
131
+ def getDesc(self):
132
+ return self.desc
75
133
 
76
- def setShortLabel(self, label: ARLiteral):
77
- self.shortLabel = label
134
+ def setDesc(self, value):
135
+ self.desc = value
78
136
  return self
79
137
 
80
- def setSwGenericAxisParamTypeRef(self, ref: RefType):
81
- self.swGenericAxisParamTypeRef = ref
138
+ def getShortLabel(self):
139
+ return self.shortLabel
140
+
141
+ def setShortLabel(self, value):
142
+ self.shortLabel = value
82
143
  return self
83
144
 
84
- def setSwRecordLayoutComponent(self, component: ARLiteral):
85
- self.swRecordLayoutComponent = component
145
+ def getSwGenericAxisParamTypeRef(self):
146
+ return self.swGenericAxisParamTypeRef
147
+
148
+ def setSwGenericAxisParamTypeRef(self, value):
149
+ self.swGenericAxisParamTypeRef = value
86
150
  return self
87
151
 
88
- def setSwRecordLayoutGroupAxis(self, axis: ARNumerical):
89
- self.swRecordLayoutGroupAxis = axis
152
+ def getSwRecordLayoutComponent(self):
153
+ return self.swRecordLayoutComponent
154
+
155
+ def setSwRecordLayoutComponent(self, value):
156
+ self.swRecordLayoutComponent = value
90
157
  return self
91
158
 
92
- def setSwRecordLayoutGroupIndex(self, index: ARLiteral):
93
- self.swRecordLayoutGroupIndex = index
159
+ def getSwRecordLayoutGroupAxis(self):
160
+ return self.swRecordLayoutGroupAxis
161
+
162
+ def setSwRecordLayoutGroupAxis(self, value):
163
+ self.swRecordLayoutGroupAxis = value
94
164
  return self
95
165
 
96
- def setSwRecordLayoutGroupFrom(self, from_value: ARLiteral):
97
- self.swRecordLayoutGroupFrom = from_value
166
+ def getSwRecordLayoutGroupContentType(self):
167
+ return self.swRecordLayoutGroupContentType
168
+
169
+ def setSwRecordLayoutGroupContentType(self, value):
170
+ self.swRecordLayoutGroupContentType = value
98
171
  return self
99
172
 
100
- def setSwRecordLayoutGroupTo(self, to_value: ARLiteral):
101
- self.swRecordLayoutGroupTo = to_value
173
+ def getSwRecordLayoutGroupFrom(self):
174
+ return self.swRecordLayoutGroupFrom
175
+
176
+ def setSwRecordLayoutGroupFrom(self, value):
177
+ self.swRecordLayoutGroupFrom = value
102
178
  return self
103
179
 
104
- def setSwRecordLayoutGroupContentType(self, content_type: SwRecordLayoutGroupContent):
105
- self.swRecordLayoutGroupContentType = content_type
180
+ def getSwRecordLayoutGroupIndex(self):
181
+ return self.swRecordLayoutGroupIndex
182
+
183
+ def setSwRecordLayoutGroupIndex(self, value):
184
+ self.swRecordLayoutGroupIndex = value
106
185
  return self
107
186
 
187
+ def getSwRecordLayoutGroupStep(self):
188
+ return self.swRecordLayoutGroupStep
108
189
 
190
+ def setSwRecordLayoutGroupStep(self, value):
191
+ self.swRecordLayoutGroupStep = value
192
+ return self
109
193
 
194
+ def getSwRecordLayoutGroupTo(self):
195
+ return self.swRecordLayoutGroupTo
196
+
197
+ def setSwRecordLayoutGroupTo(self, value):
198
+ self.swRecordLayoutGroupTo = value
199
+ return self
110
200
 
111
201
  class SwRecordLayout(ARElement):
112
202
  def __init__(self, parent: ARObject, short_name: str):
@@ -114,6 +204,9 @@ class SwRecordLayout(ARElement):
114
204
 
115
205
  self.swRecordLayoutGroup = None # type: SwRecordLayoutGroup
116
206
 
117
- def setSwRecordLayoutGroup(self, group: SwRecordLayoutGroup):
118
- self.swRecordLayoutGroup = group
119
- return self
207
+ def getSwRecordLayoutGroup(self):
208
+ return self.swRecordLayoutGroup
209
+
210
+ def setSwRecordLayoutGroup(self, value):
211
+ self.swRecordLayoutGroup = value
212
+ return self
@@ -1,4 +1,4 @@
1
- from ....M2.MSR.Documentation.BlockElements import DocumentationBlock
1
+ from .TextModel.BlockElements import DocumentationBlock
2
2
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
3
3
  from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral
4
4
  from ....M2.MSR.Documentation.TextModel.MultilanguageData import MultilanguageLongName
@@ -0,0 +1,54 @@
1
+ from typing import List
2
+
3
+ from ......M2.MSR.Documentation.TextModel.BlockElements.PaginationAndView import Paginateable
4
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum
5
+
6
+ class ListEnum(AREnum):
7
+
8
+ NUMBER = 'number'
9
+ UNNUMBER = 'unnumber'
10
+
11
+ def __init__(self,):
12
+ super().__init__((
13
+ ListEnum.NUMBER,
14
+ ListEnum.UNNUMBER
15
+ ))
16
+
17
+ class Item(Paginateable):
18
+ def __init__(self):
19
+ super().__init__()
20
+
21
+ self.itemContents = None
22
+
23
+ def getItemContents(self):
24
+ return self.itemContents
25
+
26
+ def setItemContents(self, value):
27
+ self.itemContents = value
28
+ return self
29
+
30
+ class ListElement(Paginateable):
31
+ '''
32
+ This meta-class represents the ability to express a list. The kind of list is specified in the attribute.
33
+ In AUTOSAR standard class name shall be List, but it is conflict with Python List and renamed to ListElement
34
+ '''
35
+ def __init__(self):
36
+ super().__init__()
37
+
38
+ self.items = [] # type: List[Item]
39
+ self.type = None # type: ListEnum
40
+
41
+ def getItems(self):
42
+ return self.items
43
+
44
+ def addItem(self, value: Item):
45
+ self.items.append(value)
46
+ return self
47
+
48
+ def getType(self):
49
+ return self.type
50
+
51
+ def setType(self, value):
52
+ self.type = value
53
+ return self
54
+
@@ -0,0 +1,9 @@
1
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
+
3
+ class DocumentViewSelectable(ARObject):
4
+ def __init__(self):
5
+ super().__init__()
6
+
7
+ class Paginateable(DocumentViewSelectable):
8
+ def __init__(self):
9
+ super().__init__()
@@ -0,0 +1,25 @@
1
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
+ from ......M2.MSR.Documentation.TextModel.BlockElements.ListElements import ListElement
3
+ from ......M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageParagraph
4
+ from typing import List
5
+
6
+ class DocumentationBlock(ARObject):
7
+ def __init__(self):
8
+ super().__init__()
9
+
10
+ self.ps = [] # type: List[MultiLanguageParagraph]
11
+ self.lists = [] # type: List[ListElement]
12
+
13
+ def addP(self, p: MultiLanguageParagraph):
14
+ self.ps.append(p)
15
+ return self
16
+
17
+ def getPs(self) -> List[MultiLanguageParagraph]:
18
+ return self.ps
19
+
20
+ def getLists(self):
21
+ return self.lists
22
+
23
+ def addList(self, value):
24
+ self.lists.append(value)
25
+ return self
@@ -1,16 +1,44 @@
1
+ from abc import ABCMeta
2
+ from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral
1
3
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
2
4
 
3
- class LOverviewParagraph(ARObject):
5
+ class LEnum (ARLiteral):
4
6
  def __init__(self):
5
7
  super().__init__()
6
8
 
7
- self.l = ""
9
+ class LanguageSpecific(ARObject, metaclass = ABCMeta):
10
+ def __init__(self):
11
+ super().__init__()
12
+
13
+ self.l = None # type: LEnum
8
14
  self.value = ""
9
15
 
16
+ def getL(self):
17
+ return self.l
18
+
19
+ def setL(self, value):
20
+ self.l = value
21
+ return self
10
22
 
11
- class LLongName(ARObject):
23
+ def getValue(self):
24
+ return self.value
25
+
26
+ def setValue(self, value):
27
+ self.value = value
28
+ return self
29
+
30
+ class LOverviewParagraph(LanguageSpecific):
12
31
  def __init__(self):
13
32
  super().__init__()
14
33
 
15
- self.l = ""
16
- self.value = ""
34
+ class LParagraph(LanguageSpecific):
35
+ def __init__(self):
36
+ super().__init__()
37
+
38
+ class LLongName(LanguageSpecific):
39
+ def __init__(self):
40
+ super().__init__()
41
+
42
+ class LPlainText(LanguageSpecific):
43
+ def __init__(self):
44
+ super().__init__()
@@ -35,11 +35,24 @@ class MultilanguageLongName(ARObject):
35
35
  def __init__(self):
36
36
  super().__init__()
37
37
 
38
- self.l4 = [] # type:List[LLongName]
38
+ self.l4 = [] # type:List[LLongName]
39
39
 
40
40
  def addL4(self, l4: LLongName):
41
41
  self.l4.append(l4)
42
42
  return self
43
43
 
44
44
  def getL4s(self) -> List[LLongName]:
45
- return self.l4
45
+ return self.l4
46
+
47
+ class MultiLanguagePlainText(ARObject):
48
+ def __init__(self):
49
+ super().__init__()
50
+
51
+ self.l10s = [] # type: List[LPlainText]
52
+
53
+ def getL10s(self):
54
+ return self.l10s
55
+
56
+ def addL10(self, value):
57
+ self.l10s.append(value)
58
+ return self
@@ -1,3 +1,3 @@
1
1
  from .Annotation import *
2
- from .BlockElements import *
2
+ from .TextModel.BlockElements import *
3
3
  from .TextModel import *
@@ -8,8 +8,10 @@ from .M2.MSR.AsamHdo.Constraints.GlobalConstraints import *
8
8
  from .M2.MSR.DataDictionary import *
9
9
  from .M2.MSR.Documentation import *
10
10
  from .M2.MSR.Documentation.Annotation import *
11
- from .M2.MSR.Documentation.BlockElements import *
12
11
  from .M2.MSR.Documentation.TextModel import *
12
+ from .M2.MSR.Documentation.TextModel.BlockElements import *
13
+ from .M2.MSR.Documentation.TextModel.BlockElements.ListElements import *
14
+ from .M2.MSR.Documentation.TextModel.BlockElements.PaginationAndView import *
13
15
  from .M2.MSR.Documentation.TextModel.LanguageDataModel import *
14
16
  from .M2.MSR.Documentation.TextModel.MultilanguageData import *
15
17
  from .M2.AUTOSARTemplates.AutosarTopLevelStructure import *
@@ -42,6 +44,7 @@ from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTy
42
44
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import *
43
45
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import *
44
46
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PerInstanceMemory import *
47
+ from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import *
45
48
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import *
46
49
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import *
47
50
  from .M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.Trigger import *
@@ -1,4 +1,3 @@
1
-
2
1
  from abc import ABCMeta
3
2
  from typing import List
4
3
  from colorama import Fore
@@ -8,15 +7,12 @@ import logging
8
7
  import xml.etree.ElementTree as ET
9
8
 
10
9
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
11
-
12
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, ARLiteral, ARNumerical, Boolean, Integer, TimeValue
13
-
10
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, ARFloat, ARLiteral, ARNumerical, Boolean, Integer, PositiveInteger, TimeValue
14
11
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
15
12
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
16
13
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
17
14
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Limit
18
15
 
19
-
20
16
  class AbstractARXMLParser:
21
17
  __metaclass__ = ABCMeta
22
18
 
@@ -49,6 +45,12 @@ class AbstractARXMLParser:
49
45
  else:
50
46
  raise ValueError(error_msg)
51
47
 
48
+ def notImplemented(self, error_msg):
49
+ if (self.options['warning'] == True):
50
+ self.logger.error(Fore.RED + error_msg + Fore.WHITE)
51
+ else:
52
+ raise NotImplementedError(error_msg)
53
+
52
54
  def _raiseWarning(self, error_msg):
53
55
  self.logger.warning(error_msg)
54
56
 
@@ -76,7 +78,7 @@ class AbstractARXMLParser:
76
78
  child_element = self.find(element, key)
77
79
  if (child_element is not None):
78
80
  literal = ARLiteral()
79
- self.readElementAttributes(child_element, literal)
81
+ self.readARObjectAttributes(child_element, literal)
80
82
  literal._value = child_element.text
81
83
  return literal
82
84
  self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
@@ -96,7 +98,7 @@ class AbstractARXMLParser:
96
98
  if (child_element is not None):
97
99
  self.logger.debug("getChildElementOptionalLiteral : %s" % child_element.text)
98
100
  literal = ARLiteral()
99
- self.readElementAttributes(child_element, literal)
101
+ self.readARObjectAttributes(child_element, literal)
100
102
  # Patch for empty element <USED-CODE-GENERATOR></USED-CODE-GENERATOR>
101
103
  if child_element.text is None:
102
104
  literal.setValue("")
@@ -113,14 +115,14 @@ class AbstractARXMLParser:
113
115
  if not m:
114
116
  raise ValueError("Invalid RevisionLabelString <%s>" % child_element.text)
115
117
  literal = ARLiteral()
116
- self.readElementAttributes(child_element, literal)
118
+ self.readARObjectAttributes(child_element, literal)
117
119
  # Patch for empty element <USED-CODE-GENERATOR></USED-CODE-GENERATOR>
118
120
  if child_element.text is None:
119
121
  literal.setValue("")
120
122
  else:
121
123
  literal.setValue(child_element.text)
122
124
  return literal
123
-
125
+
124
126
  def _convertStringToBooleanValue(self, value: str) -> bool:
125
127
  if (value == "true"):
126
128
  return True
@@ -191,7 +193,7 @@ class AbstractARXMLParser:
191
193
  if child_element == None:
192
194
  return None
193
195
  numerical = ARNumerical()
194
- self.readElementAttributes(child_element, numerical)
196
+ self.readARObjectAttributes(child_element, numerical)
195
197
  numerical.setValue(child_element.text)
196
198
  return numerical
197
199
 
@@ -200,8 +202,19 @@ class AbstractARXMLParser:
200
202
  if child_element == None:
201
203
  return None
202
204
  numerical = Integer()
203
- self.readElementAttributes(child_element, numerical)
205
+ self.readARObjectAttributes(child_element, numerical)
206
+ numerical.setValue(child_element.text)
207
+ return numerical
208
+
209
+ def getChildElementOptionalPositiveInteger(self, element: ET.Element, key: str) -> PositiveInteger:
210
+ child_element = self.find(element, key)
211
+ if child_element == None:
212
+ return None
213
+ numerical = PositiveInteger()
214
+ self.readARObjectAttributes(child_element, numerical)
204
215
  numerical.setValue(child_element.text)
216
+ if numerical.getValue() < 0:
217
+ raise ValueError("Invalid PositiveInteger <%s>" % child_element.text)
205
218
  return numerical
206
219
 
207
220
  def getChildElementNumericalValueList(self, element: ET.Element, key: str) -> List[ARNumerical]:
@@ -217,7 +230,7 @@ class AbstractARXMLParser:
217
230
  child_element = self.find(element, key)
218
231
  if (child_element is not None):
219
232
  limit = Limit()
220
- self.readElementAttributes(child_element, limit)
233
+ self.readARObjectAttributes(child_element, limit)
221
234
  if ('INTERVAL-TYPE' in child_element.attrib):
222
235
  limit.intervalType = child_element.attrib['INTERVAL-TYPE']
223
236
  else:
@@ -228,8 +241,11 @@ class AbstractARXMLParser:
228
241
 
229
242
  def _getChildElementRefTypeDestAndValue(self, element) -> RefType:
230
243
  ref = RefType()
231
- ref.dest = element.attrib['DEST']
232
- ref.value = element.text
244
+ if 'BASE' in element.attrib:
245
+ ref.setBase(element.attrib['BASE'])
246
+ if 'DEST' in element.attrib:
247
+ ref.setDest(element.attrib['DEST'])
248
+ ref.setValue(element.text)
233
249
  return ref
234
250
 
235
251
  def getChildElementRefType(self, short_name: str, element: ET.Element, key: str) -> RefType:
@@ -259,7 +275,7 @@ class AbstractARXMLParser:
259
275
  return element.attrib[key]
260
276
  return None
261
277
 
262
- def readElementAttributes(self, element: ET.Element, ar_object: ARObject):
278
+ def readARObjectAttributes(self, element: ET.Element, ar_object: ARObject):
263
279
  ar_object.timestamp = self.readElementOptionalAttrib(element, "T") # read the timestamp
264
280
  ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the uuid
265
281