blob: 072ccc0f4f54cac9050241e5195a484f83b05f51 [file] [log] [blame]
anjana_sreekumar@infosys.com991c2062020-01-08 11:42:57 +05301# Copyright 2019-present Infosys Limited     
2# SPDX-License-Identifier: Apache-2.0
3
4
5import re
6import os
7
8from template import Template
9from xlUtils import xlUtils,wb
10templateData = {}
11templateData['instList']=[]
12grpIeDataTypeData={}
13grpIeDataTypeData['grpList']=[]
14grpIeDataTypeData['grpTypeList']=[]
15class GenerateGrpIeClass():
16 def __init__( self ):
17
18 self.groupIEParser()
19
20 def groupIEParser(self):
21
22
23 sheet = wb['Grouped IE Modeling']
24 state = ''
25
26 data = {}
27 grpIeData = {}
28 currentGrpie = ''
29 currentMsg = ''
30 currentVar = ''
31 currentInstance = ''
32 currentInstanceValue = 0
33 grpIeList = []
34 ieDetailsList = []
35 ieList = []
36
37 for i in range(1,sheet.max_row+1):
38
39 cell_value_B = xlUtils.getCellValue(sheet,i,'B')
40
41 mGroupedIeDefStart = re.search('Grouped IE Definition Start:(\w+):(\d+):(\w+):(\w+):Instance\[(\d+)]',str(cell_value_B))
42 mGroupedIeDefEnd = re.search('Grouped IE Definition End:(\w+):(\w+)',str(cell_value_B))
43
44 if mGroupedIeDefStart:
45
46 state = 'StartDetected'
47 currentGrpie = mGroupedIeDefStart.group(1)
48 currentMsg = mGroupedIeDefStart.group(4)
49 currentVar = mGroupedIeDefStart.group(3)
50 currentInstanceValue = mGroupedIeDefStart.group(5)
51 currentInstance = currentVar + 'In' + currentMsg
52
53 if currentGrpie not in grpIeList:
54 grpIeList.append(currentGrpie)
55 data['grpIeList'] = grpIeList
56 data['grpIeDetails'] = {}
57 data['grpIeDetails'][currentGrpie] = {}
58 data['grpIeDetails'][currentGrpie]['ieTypeValue'] = mGroupedIeDefStart.group(2)
59 data['grpIeDetails'][currentGrpie]['instList'] = []
60 data['grpIeDetails'][currentGrpie]['instList'].append(currentInstance)
61 data['grpIeDetails'][currentGrpie][currentInstance] = {}
62 data['grpIeDetails'][currentGrpie][currentInstance]['instance'] = currentInstanceValue
63 grpIeData = data['grpIeDetails'][currentGrpie][currentInstance]
64 grpIeData['msgName'] = currentMsg
65
66 elif mGroupedIeDefEnd:
67 state = 'EndDetected'
68 grpIeData = {}
69 ieList = []
70 grpIeList=[]
71 ieDetailsList = []
72
73 GenerateGrpIeClass.generateGroupedIeClasses(data)
74 GenerateGrpIeClass.prepareGrpIeMakeFile()
75
76
77 elif state == 'StartDetected':
78 state = 'IeListStart'
79
80 elif state == 'IeListStart':
81
82 if xlUtils.getCellValue(sheet,i,'D') != None:
83 ieData = {}
84 ieDescription = xlUtils.getCellValue(sheet,i,'D')
85 ieData['ieDescription'] = xlUtils.getCellValue(sheet,i,'D')
86 ieData['presence'] = xlUtils.getCellValue(sheet,i,'E')
87 ieData['grouped'] = xlUtils.getCellValue(sheet,i,'B')
88 ieData['cardinality'] = xlUtils.getCellValue(sheet,i,'C')
89 ieData['instance'] = xlUtils.getCellValue(sheet,i,'H')
90
91 if ieData['cardinality'] == None:
92 ieData['cardinality'] = 1
93 ieTypeDescription = xlUtils.getCellValue(sheet,i,'G')
94 ieData['ieTypeDescription'] = ieTypeDescription
95
96 ieVarName = xlUtils.getVarNameFromString(ieDescription,0)
97
98 ieTypeName = xlUtils.getVarNameFromString(ieTypeDescription,1)
99
100 if ieData['grouped'] == 'Yes':
101 ieData['ieGroupTypeName'] = ieVarName.capitalize() + 'In' + currentMsg
102
103 ieData['ieVarName'] = ieVarName
104 ieData['ieTypeName'] = ieTypeName
105
106
107 ieList.append(ieVarName)
108 grpIeData['ieList'] = ieList
109 grpIeData['ieDetails'] = {}
110 grpIeData['ieDetails'][ieVarName] = ieData
111 ieDetailsList.append(grpIeData['ieDetails'])
112 grpIeData['ieDetails'] = ieDetailsList
113
114
115 def generateGroupedIeClasses(data):
116 parsedData = data
117
118 for grpIe in parsedData['grpIeList']:
119
120 grpIeDetails = parsedData['grpIeDetails'][grpIe]
121
122 GenerateGrpIeClass.generateGroupedIeClass(grpIeDetails,grpIe)
123 GenerateGrpIeClass.generateGroupedIeDataType(grpIeDetails, grpIe)
124 def generateGroupedIeClass(grpIeDetails,grpIe):
125
126 templateData['fileName'] = grpIe[0].lower()+grpIe[1:] + 'Ie'
127 templateData['className'] = grpIe + 'Ie'
128 templateData['classNameUC'] = templateData['fileName'].upper()
129 fileName=templateData['fileName']
130
131 for inst in grpIeDetails['instList']:
132 instanceInfo = {}
133 instDetails = grpIeDetails[inst]
134 GenerateGrpIeClass.generateGroupedIeInstanceClass(instDetails, inst)
135
136 instanceInfo['className'] = inst
137 instanceInfo['fileName'] = inst[0].lower()+inst[1:]
138 instanceInfo['msgType'] = instDetails['msgName'] + 'MsgType'
139 instanceInfo['instance'] = instDetails['instance']
140
141 if instanceInfo not in templateData['instList']:
142 templateData['instList'].append(instanceInfo)
143
144 templateData[fileName]=[inst for inst in templateData['instList'] if grpIe in inst['className']]
145
146 outputDir = '../../src/gtpV2Codec/ieClasses'
147 ttFileNameCpp = 'tts/grpietemplate.cpp.tt'
148 ttFileNameH = 'tts/grpietemplate.h.tt'
149 xlUtils.templateProcess(templateData,ttFileNameCpp,ttFileNameH,outputDir,outputDir)
150
151 objectfile ='ieClasses/' + templateData['fileName'] + '.o'
152 sourcefile = 'ieClasses/' + templateData['fileName'] + '.cpp'
153 xlUtils.addToMakeSo('gtpV2Stack.so',objectfile,sourcefile)
154
155 def generateGroupedIeDataType(grpIeDetails, grpIe):
156 grpIeInfo={}
157
158 grpIeInfo['iePresenceList']=[]
159 grpIeTypeInfo={}
160 grpIeTypeInfo['grpIeTypeName']=grpIe + 'IeType'
161 grpIeTypeInfo['grpIeTypeValue']=grpIeDetails['ieTypeValue']
162 if grpIeTypeInfo not in grpIeDataTypeData['grpTypeList']:
163 grpIeDataTypeData['grpTypeList'].append(grpIeTypeInfo)
164
165 for inst in grpIeDetails['instList']:
166
167 instDetails = grpIeDetails[inst]
168 grpIeInfo={}
169 grpIeInfo['iePresenceList']=[]
170 grpIeInfo['grpIeName']= inst+'Data'
171 grpIeInfo['ieList']=[]
172 for ieDict in instDetails['ieDetails']:
173 for ieDetails in ieDict:
174 if ieDict[ieDetails]['presence']!='M':
175 grpIeInfo['iePresenceList'].append(ieDict[ieDetails]['ieVarName']+'IePresent')
176 ieInfo={}
177 ieInfo['ieTypeName']=ieDict[ieDetails]['ieTypeName']+'IeData'
178 ieInfo['ieVarName']=ieDict[ieDetails]['ieVarName']
179 grpIeInfo['ieList'].append(ieInfo)
180
181 if grpIeInfo not in grpIeDataTypeData['grpList']:
182 grpIeDataTypeData['grpList'].append(grpIeInfo)
183 template = Template()
184 ttFileNamefactoryH = 'tts/grpIeDataTypetemplate.h.tt'
185 outputDir = '../../src/gtpV2Codec/ieClasses/'
186
187 if not os.path.exists(outputDir):
188 os.makedirs(outputDir)
189 outputFileName = 'gtpV2GrpIeDataTypes.h'
190 template.__init__({'OUTPUT' : outputFileName, 'OUTPUT_PATH' : outputDir})
191 template.process(ttFileNamefactoryH, {'tempdata' : grpIeDataTypeData})
192
193 def generateGroupedIeInstanceClass(instDetails, inst):
194 templateInstData = {}
195 ieTypeList = []
196 ieTypeDetailsList = []
197
198 ieInfoList =[]
199
200 templateInstData['fileName'] = inst[0].lower()+inst[1:]
201
202 templateInstData['msgClassName'] = inst
203 templateInstData['classNameUC'] = templateInstData['fileName'].upper()
204
205 for ieEntry in instDetails['ieList']:
206
207 ieInfo = {}
208 ieTypeInfo = {}
209
210 ies = instDetails['ieDetails']
211 for x in ies:
212
213 ie = x.get(ieEntry)
214
215 if ie != None and ieEntry == ie.get('ieVarName'):
216 ieInfo['ieName'] = ie['ieVarName']
217 ieInfo['ieVarName'] = ie['ieVarName']
218 ieInfo['ieType'] = ie['ieTypeName']
219 ieInfo['ieFileName'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:] + 'Ie'
220 ieInfo['ieLocalVar'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:]
221 ieInfo['iePresence'] = ie['presence']
222 ieInfo['ieCardinality'] = ie['cardinality']
223 ieInfo['instance'] = ie['instance']
224 ieInfo['grouped'] = ie['grouped']
225
226 ieType = ieInfo['ieType']
227
228 ieTypeInfo['ieName'] = ie['ieVarName']
229 ieTypeInfo['ieVarName'] = ie['ieVarName']
230 ieTypeInfo['ieType'] = ie['ieTypeName']
231 ieTypeInfo['ieFileName'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:] + 'Ie'
232 ieTypeInfo['ieLocalVar'] = ie['ieTypeName'][0].lower()+ie['ieTypeName'][1:]
233 ieTypeInfo['iePresence'] = ie['presence']
234 ieTypeInfo['ieCardinality'] = ie['cardinality']
235 ieTypeInfo['instance'] = ie['instance']
236 ieTypeInfo['grouped'] = ie['grouped']
237
238 if ieInfo['ieType'] not in ieTypeList:
239 ieTypeList.append(ieInfo['ieType'])
240 templateInstData['ieTypeList'] = ieTypeList
241
242 if ieInfo not in ieInfoList:
243
244 ieInfoList.append(ieInfo)
245 templateInstData['ieList'] = ieInfoList
246
247 templateInstData['ieTypeDetails'] = {}
248 templateInstData['ieTypeDetails'][ieType] = []
249 if ieTypeInfo not in templateInstData['ieTypeDetails'][ieType]:
250 templateInstData['ieTypeDetails'][ieType].append(ieTypeInfo)
251 ieTypeDetailsList.append(templateInstData['ieTypeDetails'])
252 templateInstData['ieTypeDetails'] = ieTypeDetailsList
253
254 GenerateGrpIeClass.templateInstanceprocess(templateInstData)
255 outputDirCpp = 'ieClasses/'
256 objectfile = outputDirCpp +templateInstData['fileName'] + '.o'
257 sourcefile = outputDirCpp + templateInstData['fileName'] + '.cpp'
258 xlUtils.addToMakeSo('gtpV2Stack.so',objectfile,sourcefile)
259
260 def templateInstanceprocess(templateInstData):
261
262 ttFileNameInstCpp = 'tts/grpieinsttemplate.cpp.tt'
263 outputDir = '../../src/gtpV2Codec/ieClasses'
264 ttFileNameInstH = 'tts/grpieinsttemplate.h.tt'
265 xlUtils.templateProcess(templateInstData,ttFileNameInstCpp,ttFileNameInstH,outputDir,outputDir)
266
267 def prepareGrpIeMakeFile():
268 outputDirCpp = 'ieClasses/manual/'
269 xlUtils.addToMakeSo("gtpV2Stack.so", outputDirCpp+'gtpV2GroupedIe.o',outputDirCpp+'gtpV2GroupedIe.cpp')
270
271GenerateGrpIeClass()