armodel 1.7.0__py3-none-any.whl → 1.7.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 (30) hide show
  1. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +50 -13
  2. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +14 -14
  3. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +1 -1
  4. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +93 -13
  5. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +14 -4
  6. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +35 -10
  7. armodel/models/M2/AUTOSARTemplates/GenericStructure/LifeCycles.py +5 -0
  8. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +1 -1
  9. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py +1 -1
  10. armodel/models/M2/MSR/AsamHdo/AdminData.py +34 -8
  11. armodel/models/M2/MSR/Documentation/Annotation.py +1 -1
  12. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/ListElements.py +54 -0
  13. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/PaginationAndView.py +9 -0
  14. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/__init__.py +25 -0
  15. armodel/models/M2/MSR/Documentation/TextModel/LanguageDataModel.py +33 -5
  16. armodel/models/M2/MSR/Documentation/TextModel/MultilanguageData.py +15 -2
  17. armodel/models/M2/MSR/Documentation/__init__.py +1 -1
  18. armodel/models/__init__.py +3 -1
  19. armodel/parser/abstract_arxml_parser.py +5 -2
  20. armodel/parser/arxml_parser.py +101 -27
  21. armodel/tests/test_armodel/models/test_ar_ref.py +7 -4
  22. armodel/tests/test_armodel/parser/test_sw_components.py +10 -1
  23. armodel/writer/abstract_arxml_writer.py +8 -8
  24. armodel/writer/arxml_writer.py +79 -23
  25. {armodel-1.7.0.dist-info → armodel-1.7.1.dist-info}/METADATA +9 -1
  26. {armodel-1.7.0.dist-info → armodel-1.7.1.dist-info}/RECORD +30 -26
  27. {armodel-1.7.0.dist-info → armodel-1.7.1.dist-info}/LICENSE +0 -0
  28. {armodel-1.7.0.dist-info → armodel-1.7.1.dist-info}/WHEEL +0 -0
  29. {armodel-1.7.0.dist-info → armodel-1.7.1.dist-info}/entry_points.txt +0 -0
  30. {armodel-1.7.0.dist-info → armodel-1.7.1.dist-info}/top_level.txt +0 -0
@@ -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 *
@@ -228,8 +228,11 @@ class AbstractARXMLParser:
228
228
 
229
229
  def _getChildElementRefTypeDestAndValue(self, element) -> RefType:
230
230
  ref = RefType()
231
- ref.dest = element.attrib['DEST']
232
- ref.value = element.text
231
+ if 'BASE' in element.attrib:
232
+ ref.setBase(element.attrib['BASE'])
233
+ if 'DEST' in element.attrib:
234
+ ref.setDest(element.attrib['DEST'])
235
+ ref.setValue(element.text)
233
236
  return ref
234
237
 
235
238
  def getChildElementRefType(self, short_name: str, element: ET.Element, key: str) -> RefType:
@@ -2,10 +2,6 @@ from typing import List
2
2
  import xml.etree.ElementTree as ET
3
3
  import os
4
4
 
5
-
6
-
7
-
8
-
9
5
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
10
6
  from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition
11
7
  from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
@@ -20,9 +16,10 @@ from ..models.M2.MSR.DataDictionary.DataDefProperties import ValueList
20
16
  from ..models.M2.MSR.DataDictionary.RecordLayout import SwRecordLayoutGroup
21
17
  from ..models.M2.MSR.DataDictionary.CalibrationParameter import SwCalprmAxisSet
22
18
  from ..models.M2.MSR.Documentation.Annotation import Annotation, GeneralAnnotation
23
- from ..models.M2.MSR.Documentation.BlockElements import DocumentationBlock
24
- from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName, LOverviewParagraph
25
- from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultilanguageLongName
19
+ from ..models.M2.MSR.Documentation.TextModel.BlockElements import DocumentationBlock
20
+ from ..models.M2.MSR.Documentation.TextModel.BlockElements.ListElements import ListElement
21
+ from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName, LOverviewParagraph, LParagraph, LanguageSpecific
22
+ from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText, MultilanguageLongName
26
23
 
27
24
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
28
25
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswInternalBehavior, BswModuleEntity, BswScheduleEvent, BswModeSenderPolicy
@@ -45,7 +42,7 @@ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractRef
45
42
  from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstanceRef
46
43
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, MultilanguageReferrable
47
44
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
48
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage
45
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage, ReferenceBase
49
46
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral
50
47
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
51
48
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent
@@ -117,13 +114,17 @@ class ARXMLParser(AbstractARXMLParser):
117
114
  for child_element in self.findall(element, "./SDGS/SDG"):
118
115
  admin_data.addSdg(self.getSdg(child_element))
119
116
 
120
- def readAdminData(self, element: ET.Element, identifiable: Identifiable):
121
- child_element = self.find(element, "./ADMIN-DATA")
117
+ def getAdminData(self, element: ET.Element, key: str) -> AdminData:
118
+ admin_data = None
119
+ child_element = self.find(element, key)
122
120
  if child_element is not None:
123
121
  self.logger.debug("readAdminData")
124
122
  admin_data = AdminData()
123
+ admin_data.setLanguage(self.getChildElementOptionalLiteral(child_element, "LANGUAGE")) \
124
+ .setUsedLanguages(self.getMultiLanguagePlainText(child_element, "USED-LANGUAGES"))
125
+
125
126
  self.readSdgs(child_element, admin_data)
126
- identifiable.setAdminData(admin_data)
127
+ return admin_data
127
128
 
128
129
  def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
129
130
  self.readElementAttributes(element, referrable)
@@ -136,9 +137,10 @@ class ARXMLParser(AbstractARXMLParser):
136
137
  identifiable.addAnnotation(annotation)
137
138
 
138
139
  identifiable.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
139
- .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC"))
140
+ .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC")) \
141
+ .setIntroduction(self.getDocumentationBlock(element, "INTRODUCTION"))
140
142
 
141
- self.readAdminData(element, identifiable)
143
+ identifiable.setAdminData(self.getAdminData(element, "ADMIN-DATA"))
142
144
 
143
145
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
144
146
  for child_element in self.findall(element, "./L-4"):
@@ -933,33 +935,84 @@ class ARXMLParser(AbstractARXMLParser):
933
935
  sw_pointer_target_props.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
934
936
  parent.swPointerTargetProps = sw_pointer_target_props
935
937
 
936
- def readLParagraph(self, element: ET.Element, paragraph: MultiLanguageParagraph):
937
- for child_element in self.findall(element, "./L-1"):
938
- l1 = LOverviewParagraph()
939
- self.readElementAttributes(child_element, l1)
940
- l1.value = child_element.text
941
- if 'L' in child_element.attrib:
942
- l1.l = child_element.attrib['L']
943
- paragraph.addL1(l1)
938
+ def readLanguageSpecific(self, element: ET.Element, specific: LanguageSpecific):
939
+ self.readElementAttributes(element, specific)
940
+ specific.value = element.text
941
+ if 'L' in element.attrib:
942
+ specific.l = element.attrib['L']
943
+
944
+ def getLParagraphs(self, element: ET.Element, key: str) -> List[LParagraph]:
945
+ results = []
946
+ for child_element in self.findall(element, key):
947
+ l1 = LParagraph()
948
+ self.readLanguageSpecific(child_element, l1)
949
+ results.append(l1)
950
+ return results
944
951
 
945
952
  def getMultiLanguageParagraphs(self, element: ET.Element, key: str) -> List[MultiLanguageParagraph]:
946
953
  paragraphs = []
947
954
  for child_element in self.findall(element, key):
948
955
  paragraph = MultiLanguageParagraph()
949
956
  self.readElementAttributes(child_element, paragraph)
950
- self.readLParagraph(child_element, paragraph)
957
+ for l1 in self.getLParagraphs(child_element, "L-1"):
958
+ paragraph.addL1(l1)
951
959
  paragraphs.append(paragraph)
952
960
  return paragraphs
961
+
962
+ def getLPlainTexts(self, element: ET.Element, key: str) -> List[LParagraph]:
963
+ results = []
964
+ for child_element in self.findall(element, key):
965
+ l1 = LParagraph()
966
+ self.readLanguageSpecific(child_element, l1)
967
+ results.append(l1)
968
+ return results
969
+
970
+ def getListElements(self, element: ET.Element, key: str) -> List[ListElement]:
971
+ '''
972
+ Read the DocumentationBlock List
973
+ '''
974
+ result = []
975
+ for child_element in self.findall(element, key):
976
+ list = ListElement()
977
+ if 'TYPE' in child_element.attrib:
978
+ list.setType(child_element.attrib['TYPE'])
979
+ for block in self.getDocumentationBlockList(child_element, "ITEM"):
980
+ list.addItem(block)
981
+ result.append(list)
982
+ return result
983
+
984
+ def getMultiLanguagePlainText(self, element: ET.Element, key: str) -> MultiLanguagePlainText:
985
+ paragraph = None
986
+ child_element = self.find(element, key)
987
+ if child_element is not None:
988
+ paragraph = MultiLanguagePlainText()
989
+ self.readElementAttributes(child_element, paragraph)
990
+ for l10 in self.getLPlainTexts(child_element, "L-10"):
991
+ paragraph.addL10(l10)
992
+ return paragraph
993
+
994
+ def readDocumentationBlock(self, element: ET.Element, block: DocumentationBlock):
995
+ self.readElementAttributes(element, block)
996
+ for paragraph in self.getMultiLanguageParagraphs(element, "P"):
997
+ block.addP(paragraph)
998
+ for list in self.getListElements(element, "LIST"):
999
+ block.addList(list)
953
1000
 
954
1001
  def getDocumentationBlock(self, element: ET.Element, key: str) -> DocumentationBlock:
955
1002
  block = None
956
1003
  child_element = self.find(element, key)
957
1004
  if child_element is not None:
958
1005
  block = DocumentationBlock()
959
- self.readElementAttributes(child_element, block)
960
- for paragraph in self.getMultiLanguageParagraphs(child_element, "P"):
961
- block.addP(paragraph)
1006
+ self.readDocumentationBlock(child_element, block)
962
1007
  return block
1008
+
1009
+ def getDocumentationBlockList(self, element: ET.Element, key: str) -> List[DocumentationBlock]:
1010
+ blocks = []
1011
+ for child_element in self.findall(element, key):
1012
+ block = DocumentationBlock()
1013
+ self.readDocumentationBlock(child_element, block)
1014
+ blocks.append(block)
1015
+ return blocks
963
1016
 
964
1017
  def readGeneralAnnotation(self, element: ET.Element, annotation: GeneralAnnotation):
965
1018
  annotation.setAnnotationOrigin(self.getChildElementOptionalLiteral(element, 'ANNOTATION-ORIGIN')) \
@@ -1031,6 +1084,7 @@ class ARXMLParser(AbstractARXMLParser):
1031
1084
  .setDataConstrRef(self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")) \
1032
1085
  .setCompuMethodRef(self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")) \
1033
1086
  .setSwImplPolicy(self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")) \
1087
+ .setSwIntendedResolution(self.getChildElementOptionalNumericalValue(conditional_tag, "SW-INTENDED-RESOLUTION")) \
1034
1088
  .setImplementationDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")) \
1035
1089
  .setSwCalibrationAccess(self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")) \
1036
1090
  .setSwCalprmAxisSet(self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")) \
@@ -2827,6 +2881,12 @@ class ARXMLParser(AbstractARXMLParser):
2827
2881
  frame = parent.createGenericEthernetFrame(short_name)
2828
2882
  self.readFrame(element, frame)
2829
2883
 
2884
+ def readLifeCycleInfoSet(self, element: ET.Element, parent: ARPackage):
2885
+ short_name = self.getShortName(element)
2886
+ self.logger.debug("Read LifeCycleInfoSet %s" % short_name)
2887
+ frame = parent.createLifeCycleInfoSet(short_name)
2888
+ self.readIdentifiable(element, frame)
2889
+
2830
2890
  def readARPackageElements(self, element: ET.Element, parent: ARPackage):
2831
2891
  for child_element in self.findall(element, "./ELEMENTS/*"):
2832
2892
  tag_name = self.getTagName(child_element.tag)
@@ -2940,9 +3000,22 @@ class ARXMLParser(AbstractARXMLParser):
2940
3000
  self.readParameterInterface(child_element, parent)
2941
3001
  elif tag_name == "ETHERNET-FRAME":
2942
3002
  self.readGenericEthernetFrame(child_element, parent)
3003
+ elif tag_name == "LIFE-CYCLE-INFO-SET":
3004
+ self.readLifeCycleInfoSet(child_element, parent)
2943
3005
  else:
2944
3006
  self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
2945
3007
 
3008
+ def readReferenceBases(self, element: ET.Element, parent: ARPackage):
3009
+ self.logger.debug("Read ReferenceBases")
3010
+ for child_element in self.findall(element, "REFERENCE-BASES/REFERENCE-BASE"):
3011
+ base = ReferenceBase()
3012
+ base.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
3013
+ .setIsDefault(self.getChildElementOptionalBooleanValue(child_element, "IS-DEFAULT")) \
3014
+ .setIsGlobal(self.getChildElementOptionalBooleanValue(child_element, "IS-GLOBAL")) \
3015
+ .setBaseIsThisPackage(self.getChildElementOptionalBooleanValue(child_element, "BASE-IS-THIS-PACKAGE")) \
3016
+ .setPackageRef(self.getChildElementOptionalRefType(child_element, "PACKAGE-REF"))
3017
+ parent.addReferenceBase(base)
3018
+
2946
3019
  def readARPackages(self, element: ET.Element, parent: ARPackage):
2947
3020
  for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
2948
3021
  short_name = self.getShortName(child_element)
@@ -2951,9 +3024,9 @@ class ARXMLParser(AbstractARXMLParser):
2951
3024
  self.logger.debug("readARPackages %s" % ar_package.full_name)
2952
3025
 
2953
3026
  self.readIdentifiable(child_element, ar_package)
2954
- self.readARPackageElements(child_element, ar_package)
2955
3027
  self.readARPackages(child_element, ar_package)
2956
-
3028
+ self.readARPackageElements(child_element, ar_package)
3029
+ self.readReferenceBases(child_element, ar_package)
2957
3030
 
2958
3031
  def load(self, filename, document: AUTOSAR):
2959
3032
  self.logger.info("Load %s ..." % os.path.realpath(filename))
@@ -2964,6 +3037,7 @@ class ARXMLParser(AbstractARXMLParser):
2964
3037
  self._raiseError("Invalid ARXML file <%s>" % filename)
2965
3038
 
2966
3039
  self.getAUTOSARInfo(root, document)
3040
+ document.setAdminData(self.getAdminData(root, "ADMIN-DATA"))
2967
3041
  self.readARPackages(root, document)
2968
3042
 
2969
3043
  document.reload()
@@ -14,13 +14,16 @@ from ....models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArOb
14
14
  class TestARRef:
15
15
  def test_RefType(self):
16
16
  ref_type = RefType()
17
- assert(ref_type.value == "")
18
- assert(ref_type.dest == "")
17
+ assert(ref_type.getBase() == None)
18
+ assert(ref_type.getValue() == None)
19
+ assert(ref_type.getDest() == None)
19
20
 
20
21
  def test_TRefType(self):
21
22
  ref_type = TRefType()
22
- assert(ref_type.value == "")
23
- assert(ref_type.dest == "")
23
+ assert(ref_type.getBase() == None)
24
+ assert(ref_type.getValue() == None)
25
+ assert(ref_type.getDest() == None)
26
+
24
27
 
25
28
  def test_AutosarVariableRef(self):
26
29
  ref_type = AutosarVariableRef()
@@ -64,7 +64,16 @@ class TestSWComponents:
64
64
 
65
65
  assert(filecmp.cmp("src/armodel/tests/test_files/BswMMode.arxml", "data/generated_AUTOSAR_Datatypes.arxml", shallow = False) == True)
66
66
 
67
-
67
+ def test_bswm_mode_arxml_loading_and_saving(self):
68
+ document = AUTOSAR.getInstance()
69
+ document.clear()
70
+ parser = ARXMLParser()
71
+ parser.load("test_files/AUTOSAR_MOD_AISpecification_ApplicationDataType_Blueprint.arxml", document)
72
+
73
+ writer = ARXMLWriter()
74
+ writer.save("data/generated_AUTOSAR_MOD_AISpecification_ApplicationDataType_Blueprint.arxml", document)
75
+
76
+ assert(filecmp.cmp("test_files/AUTOSAR_MOD_AISpecification_ApplicationDataType_Blueprint.arxml", "data/generated_AUTOSAR_MOD_AISpecification_ApplicationDataType_Blueprint.arxml", shallow = False) == True)
68
77
 
69
78
 
70
79
 
@@ -8,11 +8,7 @@ import logging
8
8
  import xml.etree.cElementTree as ET
9
9
 
10
10
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
11
-
12
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, ARLiteral, ARNumerical, Integer, TimeValue
13
- from armodel.models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import TRefType
14
-
15
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
11
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, ARLiteral, ARNumerical, Integer, TimeValue, RefType, ARBoolean
16
12
 
17
13
  class AbstractARXMLWriter:
18
14
  __metaclass__ = ABCMeta
@@ -84,11 +80,15 @@ class AbstractARXMLWriter:
84
80
  def setChildElementOptionalRevisionLabelString(self, element: ET.Element, key: str, literal: ARLiteral):
85
81
  self.setChildElementOptionalLiteral(element, key, literal)
86
82
 
87
- def setChildElementOptionalRefType(self, parent: ET.Element, child_tag_name: str, ref: TRefType):
83
+ def setChildElementOptionalRefType(self, parent: ET.Element, child_tag_name: str, ref: RefType):
88
84
  if ref is not None:
89
85
  child_tag = ET.SubElement(parent, child_tag_name)
90
- if ref.dest is not None:
91
- child_tag.attrib['DEST'] = ref.dest
86
+ base = ref.getBase()
87
+ if base is not None:
88
+ child_tag.attrib['BASE'] = base
89
+ dest = ref.getDest()
90
+ if dest is not None:
91
+ child_tag.attrib['DEST'] = dest
92
92
  if ref.value is not None:
93
93
  child_tag.text = ref.value
94
94
 
@@ -2,6 +2,7 @@ import xml.etree.cElementTree as ET
2
2
 
3
3
  from typing import List
4
4
 
5
+ from armodel.models.M2.AUTOSARTemplates.GenericStructure.LifeCycles import LifeCycleInfoSet
5
6
 
6
7
 
7
8
 
@@ -19,8 +20,10 @@ from ..models.M2.MSR.DataDictionary.CalibrationParameter import SwCalprmAxis, Sw
19
20
  from ..models.M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps, ValueList
20
21
  from ..models.M2.MSR.DataDictionary.RecordLayout import SwRecordLayout, SwRecordLayoutGroup, SwRecordLayoutV
21
22
  from ..models.M2.MSR.Documentation.Annotation import Annotation
22
- from ..models.M2.MSR.Documentation.BlockElements import DocumentationBlock
23
- from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultilanguageLongName
23
+ from ..models.M2.MSR.Documentation.TextModel.BlockElements import DocumentationBlock
24
+ from ..models.M2.MSR.Documentation.TextModel.BlockElements.ListElements import ListElement
25
+ from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName, LPlainText, LanguageSpecific
26
+ from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText, MultilanguageLongName
24
27
 
25
28
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
26
29
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
@@ -44,7 +47,7 @@ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractRef
44
47
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
45
48
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Identifiable, MultilanguageReferrable, Referrable
46
49
  from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstanceRef
47
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage
50
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage, ReferenceBase
48
51
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral, Limit
49
52
 
50
53
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption
@@ -138,44 +141,62 @@ class ARXMLWriter(AbstractARXMLWriter):
138
141
  self.setARObjectAttributes(element, referrable)
139
142
  self.setShortName(element, referrable.short_name)
140
143
 
144
+ def setLanguageSpecific(self, element: ET.Element, key: str, specific: LanguageSpecific):
145
+ child_element = ET.SubElement(element, key)
146
+ self.setARObjectAttributes(child_element, specific)
147
+ if specific.l is not None:
148
+ child_element.attrib['L'] = specific.l
149
+ child_element.text = specific.value
150
+
151
+ def setLLongName(self, element: ET.Element, name: LLongName):
152
+ self.setLanguageSpecific(element, "L-4", name)
153
+
141
154
  def setMultiLongName(self, element: ET.Element, key: str, long_name: MultilanguageLongName):
142
155
  if long_name is not None:
143
- long_name_tag = ET.SubElement(element, key)
144
- self.setARObjectAttributes(long_name_tag, long_name)
156
+ child_element = ET.SubElement(element, key)
157
+ self.setARObjectAttributes(child_element, long_name)
145
158
  for l4 in long_name.getL4s():
146
- l4_tag = ET.SubElement(long_name_tag, "L-4")
147
- self.setARObjectAttributes(l4_tag, l4)
148
- if l4.l is not None:
149
- l4_tag.attrib['L'] = l4.l
150
- l4_tag.text = l4.value
159
+ self.setLLongName(child_element, l4)
160
+
161
+ def setLOverviewParagraph(self, element: ET.Element, name: LLongName):
162
+ self.setLanguageSpecific(element, "L-2", name)
151
163
 
152
164
  def setMultiLanguageOverviewParagraph(self, element: ET.Element, key: str, paragraph: MultiLanguageOverviewParagraph):
153
165
  if paragraph is not None:
154
- long_name_tag = ET.SubElement(element, key)
155
- self.setARObjectAttributes(long_name_tag, paragraph)
166
+ child_element = ET.SubElement(element, key)
167
+ self.setARObjectAttributes(child_element, paragraph)
156
168
  for l2 in paragraph.getL2s():
157
- l2_tag = ET.SubElement(long_name_tag, "L-2")
158
- self.setARObjectAttributes(l2_tag, l2)
159
- if l2.l is not None:
160
- l2_tag.attrib['L'] = l2.l
161
- l2_tag.text = l2.value
169
+ self.setLOverviewParagraph(child_element, l2)
162
170
 
163
171
  def setMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
164
172
  self.setReferable(element, referrable)
165
173
  if referrable.longName is not None:
166
174
  self.setMultiLongName(element, "LONG-NAME", referrable.longName)
167
175
 
176
+ def setLPlainText(self, element: ET.Element, text: LPlainText):
177
+ self.setLanguageSpecific(element, "L-10", text)
178
+
179
+ def setMultiLanguagePlainText(self, element: ET.Element, key: str, paragraph: MultiLanguagePlainText):
180
+ if paragraph is not None:
181
+ child_element = ET.SubElement(element, key)
182
+ self.setARObjectAttributes(child_element, paragraph)
183
+ for l10 in paragraph.getL10s():
184
+ self.setLPlainText(child_element, l10)
185
+
168
186
  def setAdminData(self, element: ET.Element, admin_data: AdminData):
169
- element = ET.SubElement(element, "ADMIN-DATA")
170
- self.writeSdgs(element, admin_data)
187
+ if admin_data is not None:
188
+ child_element = ET.SubElement(element, "ADMIN-DATA")
189
+ self.setChildElementOptionalLiteral(child_element, "LANGUAGE", admin_data.getLanguage())
190
+ self.setMultiLanguagePlainText(child_element, "USED-LANGUAGES", admin_data.getUsedLanguages())
191
+ self.writeSdgs(child_element, admin_data)
171
192
 
172
193
  def setIdentifiable(self, element: ET.Element, identifiable: Identifiable):
173
194
  self.setMultilanguageReferrable(element, identifiable)
174
195
  self.setAnnotations(element, identifiable.getAnnotations())
175
196
  self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.getDesc())
176
197
  self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.getCategory())
177
- if identifiable.getAdminData() is not None:
178
- self.setAdminData(element, identifiable.getAdminData())
198
+ self.setDocumentationBlock(element, "INTRODUCTION", identifiable.getIntroduction())
199
+ self.setAdminData(element, identifiable.getAdminData())
179
200
 
180
201
  def setARElement(self, parent: ET.Element, ar_element: ARElement):
181
202
  self.setIdentifiable(parent, ar_element)
@@ -573,12 +594,23 @@ class ARXMLWriter(AbstractARXMLWriter):
573
594
  self.setARObjectAttributes(child_element, paragraph)
574
595
  self.writeLParagraphs(child_element, paragraph)
575
596
  return paragraphs
597
+
598
+ def setListElement(self, element: ET.Element, key: str, list: ListElement):
599
+ if list is not None:
600
+ child_element = ET.SubElement(element, key)
601
+ type = list.getType()
602
+ if type is not None:
603
+ child_element.attrib['TYPE'] = type
604
+ for item in list.getItems():
605
+ self.setDocumentationBlock(child_element, "ITEM", item)
576
606
 
577
607
  def setDocumentationBlock(self, element: ET.Element, key: str, block: DocumentationBlock):
578
608
  if block is not None:
579
609
  child_element = ET.SubElement(element, key)
580
610
  self.setARObjectAttributes(child_element, block)
581
611
  self.setMultiLanguageParagraphs(child_element, "P", block.getPs())
612
+ for list in block.getLists():
613
+ self.setListElement(child_element, "LIST", list)
582
614
 
583
615
  def writeGeneralAnnotation(self, element: ET.Element, annotation: Annotation):
584
616
  self.setMultiLongName(element, "LABEL", annotation.getLabel())
@@ -644,9 +676,10 @@ class ARXMLWriter(AbstractARXMLWriter):
644
676
  self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-CALIBRATION-ACCESS", sw_data_def_props.getSwCalibrationAccess())
645
677
  self.setSwCalprmAxisSet(sw_data_def_props_conditional_tag, "SW-CALPRM-AXIS-SET", sw_data_def_props.getSwCalprmAxisSet())
646
678
  self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "COMPU-METHOD-REF", sw_data_def_props.getCompuMethodRef())
679
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "DATA-CONSTR-REF", sw_data_def_props.getDataConstrRef())
647
680
  self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-IMPL-POLICY", sw_data_def_props.getSwImplPolicy())
681
+ self.setChildElementOptionalNumericalValue(sw_data_def_props_conditional_tag, "SW-INTENDED-RESOLUTION", sw_data_def_props.getSwIntendedResolution())
648
682
  self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", sw_data_def_props.getImplementationDataTypeRef())
649
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "DATA-CONSTR-REF", sw_data_def_props.getDataConstrRef())
650
683
  self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "SW-RECORD-LAYOUT-REF", sw_data_def_props.getSwRecordLayoutRef())
651
684
  self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "VALUE-AXIS-DATA-TYPE-REF", sw_data_def_props.getValueAxisDataTypeRef())
652
685
  self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "UNIT-REF", sw_data_def_props.getUnitRef())
@@ -2632,11 +2665,16 @@ class ARXMLWriter(AbstractARXMLWriter):
2632
2665
  child_element = ET.SubElement(element, "PARAMETER-INTERFACE")
2633
2666
  self.setIdentifiable(child_element, signal)
2634
2667
 
2635
- def writeGenericEthernetFrame(self, element: ET.Element, signal: SystemSignal):
2668
+ def writeGenericEthernetFrame(self, element: ET.Element, signal: GenericEthernetFrame):
2636
2669
  self.logger.debug("Write GenericEthernetFrame %s" % signal.short_name)
2637
2670
  child_element = ET.SubElement(element, "ETHERNET-FRAME")
2638
2671
  self.writeFrame(child_element, signal)
2639
2672
 
2673
+ def writeLifeCycleInfoSet(self, element: ET.Element, set: LifeCycleInfoSet):
2674
+ self.logger.debug("Write LifeCycleInfoSet %s" % set.short_name)
2675
+ child_element = ET.SubElement(element, "LIFE-CYCLE-INFO-SET")
2676
+ self.setIdentifiable(child_element, set)
2677
+
2640
2678
  def writeISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
2641
2679
  mappings = parent.getISignalToPduMappings()
2642
2680
  if len(mappings) > 0:
@@ -2797,9 +2835,23 @@ class ARXMLWriter(AbstractARXMLWriter):
2797
2835
  self.writeParameterInterface(element, ar_element)
2798
2836
  elif isinstance(ar_element, GenericEthernetFrame):
2799
2837
  self.writeGenericEthernetFrame(element, ar_element)
2838
+ elif isinstance(ar_element, LifeCycleInfoSet):
2839
+ self.writeLifeCycleInfoSet(element, ar_element)
2800
2840
  else:
2801
2841
  raise NotImplementedError("Unsupported Elements of ARPackage <%s>" % type(ar_element))
2802
2842
 
2843
+ def writeReferenceBases(self, element: ET.Element, bases: List[ReferenceBase]):
2844
+ self.logger.debug("Write ReferenceBases")
2845
+ if len(bases) > 0:
2846
+ bases_tag = ET.SubElement(element, "REFERENCE-BASES")
2847
+ for base in bases:
2848
+ child_element = ET.SubElement(bases_tag, "REFERENCE-BASE")
2849
+ self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", base.getShortLabel())
2850
+ self.setChildElementOptionalBooleanValue(child_element, "IS-DEFAULT", base.getIsDefault())
2851
+ self.setChildElementOptionalBooleanValue(child_element, "IS-GLOBAL", base.getIsDefault())
2852
+ self.setChildElementOptionalBooleanValue(child_element, "BASE-IS-THIS-PACKAGE", base.getBaseIsThisPackage())
2853
+ self.setChildElementOptionalRefType(child_element, "PACKAGE-REF", base.getPackageRef())
2854
+
2803
2855
  def writeARPackages(self, element: ET.Element, pkgs: List[ARPackage]):
2804
2856
  if len(pkgs) > 0:
2805
2857
  pkgs_tag = ET.SubElement(element, "AR-PACKAGES")
@@ -2810,6 +2862,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2810
2862
  self.setIdentifiable(pkg_tag, pkg)
2811
2863
  self.logger.debug("writeARPackage %s" % pkg.full_name)
2812
2864
 
2865
+ self.writeReferenceBases(pkg_tag, pkg.getReferenceBases())
2866
+
2813
2867
  if pkg.getTotalElement() > 0:
2814
2868
  elements_tag = ET.SubElement(pkg_tag, "ELEMENTS")
2815
2869
 
@@ -2818,6 +2872,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2818
2872
  self.writeARPackageElement(elements_tag, ar_element)
2819
2873
 
2820
2874
  self.writeARPackages(pkg_tag, pkg.getARPackages())
2875
+
2821
2876
 
2822
2877
  def save(self, filename, document: AUTOSAR):
2823
2878
  self.logger.info("Save %s ..." % filename)
@@ -2826,6 +2881,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2826
2881
  root.attrib["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance"
2827
2882
  root.attrib["xsi:schemaLocation"] = document.schema_location
2828
2883
 
2884
+ self.setAdminData(root, document.getAdminData())
2829
2885
  self.writeARPackages(root, document.getARPackages())
2830
2886
 
2831
2887
  self.saveToFile(filename, root)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: armodel
3
- Version: 1.7.0
3
+ Version: 1.7.1
4
4
  Summary: the python arxml parser
5
5
  Home-page: http://github.com/melodypapa/py-armodel
6
6
  Author: melodypapa
@@ -383,3 +383,11 @@ Fix the attribute intervalType of **Limit** is empty issue.
383
383
  * DATA-FILTER
384
384
  * EVENT-CONTROLLED-TIMING
385
385
 
386
+ **Version 1.7.1**
387
+
388
+ 1. To support the following AR Element:
389
+ * INTRODUCTION
390
+ * LIST
391
+ * SW-INTENDED-RESOLUTION
392
+ * REFERENCE-BASE
393
+