blob: cfa72813a2401236e2266b3637c491fd4612d3dd [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
6
7import os
8from template import Template
9
10
11from xlUtils import xlUtils,wb
12msgFactoryData = {}
13msgFactoryData['msgList'] = []
14msgDataTypeData = {}
15msgDataTypeData['msgTypeList'] = []
16msgDataTypeData['msgList'] = []
17class GenerateMsgClass():
18 def __init__( self ):
19 self.msgParser()
20
21 def msgParser(self):
22
23 sheet = wb['Message Modeling']
24 state = ''
25 ieDetailList = []
26 ieList = []
27
28 currentMessage = ''
29 msgValue = 0
30 msgData = {}
31
32
33 for i in range(1,sheet.max_row+1):
34
35 cell_value_B = xlUtils.getCellValue(sheet,i,'B')
36
37 mMsgDefinitionStart = re.search('Message Definition Start:(\w+):(\d+)',str(cell_value_B))
38 mMsgDefinitionEnd = re.search('Message Definition End:(\w+)',str(cell_value_B))
39 mResponseMsg = re.search('ResponseMessage',str(cell_value_B))
40 mGrouped = re.search('Grouped',str(cell_value_B))
41
42
43 if mMsgDefinitionStart:
44
45
46 state = 'StartDetected'
47 currentMessage = mMsgDefinitionStart.group(1)
48 msgValue = mMsgDefinitionStart.group(2)
49
50
51 if mMsgDefinitionEnd:
52
53 ieList = []
54 ieDetailList = []
55 state = 'EndDetected'
56
57 GenerateMsgClass.templateIes(msgData,currentMessage)
58 GenerateMsgClass.generateMsgFactory(msgData,currentMessage)
59 GenerateMsgClass.generateMsgDataType(msgData,currentMessage)
60 GenerateMsgClass.prepareMsgMakeFile()
61
62 elif state == 'StartDetected':
63
64 msgData['msgDetails'] = {}
65 msgData['msgDetails'][currentMessage] = {}
66 msgData['msgDetails'][currentMessage]['msgValue'] = msgValue
67 msgData['msgDetails'][currentMessage]['msgDataType'] = currentMessage + 'MsgData'
68 msgData['msgDetails'][currentMessage]['msgCategory'] = "RequestMessage"
69 if mResponseMsg:
70
71 msgData['msgDetails'][currentMessage]['msgCategory'] = "ResponseMessage"
72 elif mGrouped:
73 state = 'IeListStart'
74
75
76
77 elif state == 'IeListStart':
78
79 if xlUtils.getCellValue(sheet,i,'D') != None:
80
81 ieDescription = xlUtils.getCellValue(sheet,i,'D')
82 presence = xlUtils.getCellValue(sheet,i,'E')
83 grouped = xlUtils.getCellValue(sheet,i,'B')
84 cardinality = xlUtils.getCellValue(sheet,i,'C')
85 instance = xlUtils.getCellValue(sheet,i,'H')
86 msgData['ieDetails'] = {}
87 msgData['ieDetails'][ieDescription] = {}
88 msgData['ieDetails'][ieDescription]['ieDescription'] = ieDescription
89 msgData['ieDetails'][ieDescription]['presence'] = presence
90 msgData['ieDetails'][ieDescription]['grouped'] = grouped
91 msgData['ieDetails'][ieDescription]['cardinality'] = cardinality
92 msgData['ieDetails'][ieDescription]['instance'] = instance
93
94 if msgData['ieDetails'][ieDescription]['cardinality'] is None:
95 msgData['ieDetails'][ieDescription]['cardinality'] = 1
96 ieTypeDescription = xlUtils.getCellValue(sheet,i,'G')
97 msgData['ieDetails'][ieDescription]['ieTypeDescription'] = ieTypeDescription
98
99 ieVarName = xlUtils.getVarNameFromString(ieDescription,0)
100 ieTypeName = xlUtils.getVarNameFromString(ieTypeDescription,1)
101 ieVarName = ieVarName.replace('/','')
102
103 msgData['ieDetails'][ieDescription]['ieGroupTypeName'] = ''
104 if msgData['ieDetails'][ieDescription]['grouped'] == 'Yes':
105 msgData['ieDetails'][ieDescription]['ieGroupTypeName'] = ieVarName + 'In' + currentMessage
106 msgData['ieDetails'][ieDescription]['ieVarName'] = ieVarName
107 msgData['ieDetails'][ieDescription]['ieTypeName'] = ieTypeName
108
109 if ieVarName!="privateExtension":
110 ieDetailList.append(msgData['ieDetails'])
111
112 ieList.append(ieVarName)
113 msgData['ieList'] = ieList
114 msgData['ieDetails'] = ieDetailList
115
116 return msgData
117
118
119 def templateIes(msgData,currentMessage):
120 templateData = dict()
121 ieListTemplate = []
122 ieTypeTemplate = []
123 ieTypeDetailList = []
124 ieTypeList = []
125 templateData['fileName'] = currentMessage[0].lower()+currentMessage[1:] + 'Msg'
126 templateData['msgClassName'] = currentMessage[0].upper()+currentMessage[1:] + 'Msg'
127 templateData['classNameUC'] = templateData['fileName'].upper()
128 templateData['msgCategory'] = msgData['msgDetails'][currentMessage]['msgCategory']
129
130 for ieDetail in msgData['ieDetails']:
131 for key,value in ieDetail.items():
132 for ie in msgData['ieList']:
133 ieInfo = {}
134 ieTypeInfo = {}
135 if value['ieVarName'] == ie:
136
137 ieInfo['ieName'] = value['ieVarName']
138 ieInfo['ieVarName'] = value['ieVarName']
139 ieInfo['ieType'] = value['ieTypeName']
140 ieInfo['ieFileName'] = value['ieTypeName'][0].lower()+value['ieTypeName'][1:] + 'Ie'
141 ieInfo['ieLocalVar'] = value['ieTypeName'][0].lower()+value['ieTypeName'][1:]
142 ieInfo['iePresence'] = value['presence']
143 ieInfo['ieCardinality'] = value['cardinality']
144 ieInfo['instance'] = value['instance']
145 ieInfo['grouped'] = value['grouped']
146 ieInfo['grpIeInstClassName'] = value['ieGroupTypeName']
147 if ieInfo['grouped']=='Yes':
148 ieInfo['grpIeInstClassName'] = value['ieGroupTypeName'][0].upper()+value['ieGroupTypeName'][1:]
149 ieInfo['grpIeInstFileName'] = value['ieGroupTypeName']
150
151 ieType = ieInfo['ieType']
152 ieTypeInfo['ieName'] = value['ieVarName']
153 ieTypeInfo['ieVarName'] = value['ieVarName']
154 ieTypeInfo['ieType'] = value['ieTypeName']
155 ieTypeInfo['ieFileName'] = value['ieTypeName'][0].lower()+value['ieTypeName'][1:] + 'Ie'
156 ieTypeInfo['ieLocalVar'] = value['ieTypeName'].capitalize()
157 ieTypeInfo['iePresence'] = value['presence']
158 ieTypeInfo['ieCardinality'] = value['cardinality']
159 ieTypeInfo['instance'] = value['instance']
160 ieTypeInfo['grouped'] = value['grouped']
161 ieTypeInfo['grpIeInstClassName'] = value['ieGroupTypeName']
162 if ieTypeInfo['grouped']=='Yes':
163 ieTypeInfo['grpIeInstClassName'] = value['ieGroupTypeName'][0].upper()+value['ieGroupTypeName'][1:]
164 ieTypeInfo['grpIeInstFileName'] = value['ieGroupTypeName'].capitalize()
165
166
167 ieListTemplate.append(ieInfo)
168 templateData['ieList'] = ieListTemplate
169
170 if ieInfo['ieType'] not in ieTypeList:
171 ieTypeList.append(ieInfo['ieType'])
172 templateData['ieTypeList'] = ieTypeList
173
174 ieTypeTemplate = []
175 ieTypeTemplate.append(ieTypeInfo)
176 templateData['ieTypeDetails'] = {}
177 templateData['ieTypeDetails'][ieType] = ieTypeTemplate
178
179 ieTypeDetailList.append(templateData['ieTypeDetails'])
180 templateData['ieTypeDetails'] = ieTypeDetailList
181
182 outputDir = '../../src/gtpV2Codec/msgClasses'
183 ttFileNameCpp = 'tts/msgtemplate.cpp.tt'
184 ttFileNameH = 'tts/msgtemplate.h.tt'
185 xlUtils.templateProcess(templateData,ttFileNameCpp,ttFileNameH,outputDir,outputDir)
186
187 objectFile = 'msgClasses/' +templateData['fileName'] + '.o'
188 sourceFile = 'msgClasses/' + templateData['fileName'] + '.cpp'
189 xlUtils.addToMakeSo('gtpV2Stack.so',objectFile,sourceFile)
190
191 def generateMsgFactory(msgData,currentMessage):
192 msgInfo = {}
193
194 msgInfo['className'] = currentMessage + 'Msg'
195 msgInfo['msgFileName'] = currentMessage[0].lower()+currentMessage[1:] + 'Msg'
196 msgInfo['dataMember'] = currentMessage[0].lower()+currentMessage[1:] + 'StackData'
197 if msgInfo not in msgFactoryData['msgList']:
198 msgFactoryData['msgList'].append(msgInfo)
199 outputDirCpp = 'msgClasses/'
200 GenerateMsgClass.msgfactoryStacktemplate(msgFactoryData)
201 xlUtils.addToMakeSo('gtpV2Stack.so',outputDirCpp+'gtpV2MsgFactory.o',outputDirCpp+'gtpV2MsgFactory.cpp')
202 xlUtils.addToMakeSo('gtpV2Stack.so','gtpV2Stack.o','gtpV2Stack.cpp')
203
204 def msgfactoryStacktemplate(msgFactoryData):
205
206 ttFileNamefactoryCpp = 'tts/msgfactorytemplate.cpp.tt'
207 outputDir = '../../src/gtpV2Codec/msgClasses'
208 msgFactoryData['fileName'] = 'gtpV2MsgFactory'
209 ttFileNamefactoryH = 'tts/msgfactorytemplate.h.tt'
210 xlUtils.templateProcess(msgFactoryData,ttFileNamefactoryCpp,ttFileNamefactoryH,outputDir,outputDir)
211
212 ttFileNameStackCpp = 'tts/stacktemplate.cpp.tt'
213 outputDir = '../../src/gtpV2Codec/'
214 msgFactoryData['fileName'] = 'gtpV2Stack'
215 ttFileNameStackH = 'tts/stacktemplate.h.tt'
216
217 xlUtils.templateProcess(msgFactoryData,ttFileNameStackCpp,ttFileNameStackH,outputDir,outputDir)
218
219
220
221 def prepareMsgMakeFile():
222 outputDir = 'msgClasses/manual/'
223 xlUtils.addToMakeSo('gtpV2Stack.so', outputDir+'gtpV2Message.o', outputDir+'gtpV2Message.cpp')
224 def generateMsgDataType(msgData,currentMessage):
225 msginfo = {}
226 msgTypeInfo={}
227 msginfo['msgDataName'] = currentMessage + 'MsgData'
228 msginfo['ieDetails']=[]
229 msgTypeInfo['msgDataType']=currentMessage + 'MsgType'
230 msgTypeInfo['msgValue']=msgData['msgDetails'][currentMessage]['msgValue']
231
232 if msgTypeInfo not in msgDataTypeData['msgTypeList']:
233 msgDataTypeData['msgTypeList'].append(msgTypeInfo)
234
235 for ieDetail in msgData['ieDetails']:
236 for key,value in ieDetail.items():
237 for ie in msgData['ieList']:
238 ieInfo = {}
239
240 if value['ieVarName'] == ie:
241 ieInfo['ieName'] = value['ieVarName']
242 ieInfo['ieVarName'] = value['ieVarName']
243 ieInfo['ieType'] = value['ieTypeName']
244 ieInfo['iePresence'] = value['presence']
245 ieInfo['ieCardinality'] = value['cardinality']
246 ieInfo['grouped'] = value['grouped']
247 ieInfo['grpIeInstClassName'] = value['ieGroupTypeName']
248 if ieInfo['grouped']=='Yes':
249 ieInfo['grpIeInstClassName'] = value['ieGroupTypeName'][0].upper()+value['ieGroupTypeName'][1:]
250 ieInfo['grpIeInstFileName'] = value['ieGroupTypeName']
251 if ieInfo not in msginfo['ieDetails']:
252 msginfo['ieDetails'].append(ieInfo)
253 if msginfo not in msgDataTypeData['msgList']:
254 msgDataTypeData['msgList'].append(msginfo)
255
256 template = Template()
257 ttFileNamefactoryH = 'tts/msgDataTypetemplate.h.tt'
258 outputDir = '../../src/gtpV2Codec/msgClasses'
259
260 if not os.path.exists(outputDir):
261 os.makedirs(outputDir)
262 outputFileName = 'gtpV2MsgDataTypes.h'
263 template.__init__({'OUTPUT' : outputFileName, 'OUTPUT_PATH' : outputDir})
264 template.process(ttFileNamefactoryH, {'tempdata' : msgDataTypeData})
265
266
267GenerateMsgClass()