MME2 changes - Propped commits from openmme/paging branch. Added scripts
for code gen
Change-Id: Ie55032217232214ac8544ca76ea34335205329e4
diff --git a/scripts/GtpV2StackCodeGen/msgCodeGen.py b/scripts/GtpV2StackCodeGen/msgCodeGen.py
new file mode 100644
index 0000000..cfa7281
--- /dev/null
+++ b/scripts/GtpV2StackCodeGen/msgCodeGen.py
@@ -0,0 +1,267 @@
+# Copyright 2019-present Infosys Limited
+# SPDX-License-Identifier: Apache-2.0
+
+
+import re
+
+import os
+from template import Template
+
+
+from xlUtils import xlUtils,wb
+msgFactoryData = {}
+msgFactoryData['msgList'] = []
+msgDataTypeData = {}
+msgDataTypeData['msgTypeList'] = []
+msgDataTypeData['msgList'] = []
+class GenerateMsgClass():
+ def __init__( self ):
+ self.msgParser()
+
+ def msgParser(self):
+
+ sheet = wb['Message Modeling']
+ state = ''
+ ieDetailList = []
+ ieList = []
+
+ currentMessage = ''
+ msgValue = 0
+ msgData = {}
+
+
+ for i in range(1,sheet.max_row+1):
+
+ cell_value_B = xlUtils.getCellValue(sheet,i,'B')
+
+ mMsgDefinitionStart = re.search('Message Definition Start:(\w+):(\d+)',str(cell_value_B))
+ mMsgDefinitionEnd = re.search('Message Definition End:(\w+)',str(cell_value_B))
+ mResponseMsg = re.search('ResponseMessage',str(cell_value_B))
+ mGrouped = re.search('Grouped',str(cell_value_B))
+
+
+ if mMsgDefinitionStart:
+
+
+ state = 'StartDetected'
+ currentMessage = mMsgDefinitionStart.group(1)
+ msgValue = mMsgDefinitionStart.group(2)
+
+
+ if mMsgDefinitionEnd:
+
+ ieList = []
+ ieDetailList = []
+ state = 'EndDetected'
+
+ GenerateMsgClass.templateIes(msgData,currentMessage)
+ GenerateMsgClass.generateMsgFactory(msgData,currentMessage)
+ GenerateMsgClass.generateMsgDataType(msgData,currentMessage)
+ GenerateMsgClass.prepareMsgMakeFile()
+
+ elif state == 'StartDetected':
+
+ msgData['msgDetails'] = {}
+ msgData['msgDetails'][currentMessage] = {}
+ msgData['msgDetails'][currentMessage]['msgValue'] = msgValue
+ msgData['msgDetails'][currentMessage]['msgDataType'] = currentMessage + 'MsgData'
+ msgData['msgDetails'][currentMessage]['msgCategory'] = "RequestMessage"
+ if mResponseMsg:
+
+ msgData['msgDetails'][currentMessage]['msgCategory'] = "ResponseMessage"
+ elif mGrouped:
+ state = 'IeListStart'
+
+
+
+ elif state == 'IeListStart':
+
+ if xlUtils.getCellValue(sheet,i,'D') != None:
+
+ ieDescription = xlUtils.getCellValue(sheet,i,'D')
+ presence = xlUtils.getCellValue(sheet,i,'E')
+ grouped = xlUtils.getCellValue(sheet,i,'B')
+ cardinality = xlUtils.getCellValue(sheet,i,'C')
+ instance = xlUtils.getCellValue(sheet,i,'H')
+ msgData['ieDetails'] = {}
+ msgData['ieDetails'][ieDescription] = {}
+ msgData['ieDetails'][ieDescription]['ieDescription'] = ieDescription
+ msgData['ieDetails'][ieDescription]['presence'] = presence
+ msgData['ieDetails'][ieDescription]['grouped'] = grouped
+ msgData['ieDetails'][ieDescription]['cardinality'] = cardinality
+ msgData['ieDetails'][ieDescription]['instance'] = instance
+
+ if msgData['ieDetails'][ieDescription]['cardinality'] is None:
+ msgData['ieDetails'][ieDescription]['cardinality'] = 1
+ ieTypeDescription = xlUtils.getCellValue(sheet,i,'G')
+ msgData['ieDetails'][ieDescription]['ieTypeDescription'] = ieTypeDescription
+
+ ieVarName = xlUtils.getVarNameFromString(ieDescription,0)
+ ieTypeName = xlUtils.getVarNameFromString(ieTypeDescription,1)
+ ieVarName = ieVarName.replace('/','')
+
+ msgData['ieDetails'][ieDescription]['ieGroupTypeName'] = ''
+ if msgData['ieDetails'][ieDescription]['grouped'] == 'Yes':
+ msgData['ieDetails'][ieDescription]['ieGroupTypeName'] = ieVarName + 'In' + currentMessage
+ msgData['ieDetails'][ieDescription]['ieVarName'] = ieVarName
+ msgData['ieDetails'][ieDescription]['ieTypeName'] = ieTypeName
+
+ if ieVarName!="privateExtension":
+ ieDetailList.append(msgData['ieDetails'])
+
+ ieList.append(ieVarName)
+ msgData['ieList'] = ieList
+ msgData['ieDetails'] = ieDetailList
+
+ return msgData
+
+
+ def templateIes(msgData,currentMessage):
+ templateData = dict()
+ ieListTemplate = []
+ ieTypeTemplate = []
+ ieTypeDetailList = []
+ ieTypeList = []
+ templateData['fileName'] = currentMessage[0].lower()+currentMessage[1:] + 'Msg'
+ templateData['msgClassName'] = currentMessage[0].upper()+currentMessage[1:] + 'Msg'
+ templateData['classNameUC'] = templateData['fileName'].upper()
+ templateData['msgCategory'] = msgData['msgDetails'][currentMessage]['msgCategory']
+
+ for ieDetail in msgData['ieDetails']:
+ for key,value in ieDetail.items():
+ for ie in msgData['ieList']:
+ ieInfo = {}
+ ieTypeInfo = {}
+ if value['ieVarName'] == ie:
+
+ ieInfo['ieName'] = value['ieVarName']
+ ieInfo['ieVarName'] = value['ieVarName']
+ ieInfo['ieType'] = value['ieTypeName']
+ ieInfo['ieFileName'] = value['ieTypeName'][0].lower()+value['ieTypeName'][1:] + 'Ie'
+ ieInfo['ieLocalVar'] = value['ieTypeName'][0].lower()+value['ieTypeName'][1:]
+ ieInfo['iePresence'] = value['presence']
+ ieInfo['ieCardinality'] = value['cardinality']
+ ieInfo['instance'] = value['instance']
+ ieInfo['grouped'] = value['grouped']
+ ieInfo['grpIeInstClassName'] = value['ieGroupTypeName']
+ if ieInfo['grouped']=='Yes':
+ ieInfo['grpIeInstClassName'] = value['ieGroupTypeName'][0].upper()+value['ieGroupTypeName'][1:]
+ ieInfo['grpIeInstFileName'] = value['ieGroupTypeName']
+
+ ieType = ieInfo['ieType']
+ ieTypeInfo['ieName'] = value['ieVarName']
+ ieTypeInfo['ieVarName'] = value['ieVarName']
+ ieTypeInfo['ieType'] = value['ieTypeName']
+ ieTypeInfo['ieFileName'] = value['ieTypeName'][0].lower()+value['ieTypeName'][1:] + 'Ie'
+ ieTypeInfo['ieLocalVar'] = value['ieTypeName'].capitalize()
+ ieTypeInfo['iePresence'] = value['presence']
+ ieTypeInfo['ieCardinality'] = value['cardinality']
+ ieTypeInfo['instance'] = value['instance']
+ ieTypeInfo['grouped'] = value['grouped']
+ ieTypeInfo['grpIeInstClassName'] = value['ieGroupTypeName']
+ if ieTypeInfo['grouped']=='Yes':
+ ieTypeInfo['grpIeInstClassName'] = value['ieGroupTypeName'][0].upper()+value['ieGroupTypeName'][1:]
+ ieTypeInfo['grpIeInstFileName'] = value['ieGroupTypeName'].capitalize()
+
+
+ ieListTemplate.append(ieInfo)
+ templateData['ieList'] = ieListTemplate
+
+ if ieInfo['ieType'] not in ieTypeList:
+ ieTypeList.append(ieInfo['ieType'])
+ templateData['ieTypeList'] = ieTypeList
+
+ ieTypeTemplate = []
+ ieTypeTemplate.append(ieTypeInfo)
+ templateData['ieTypeDetails'] = {}
+ templateData['ieTypeDetails'][ieType] = ieTypeTemplate
+
+ ieTypeDetailList.append(templateData['ieTypeDetails'])
+ templateData['ieTypeDetails'] = ieTypeDetailList
+
+ outputDir = '../../src/gtpV2Codec/msgClasses'
+ ttFileNameCpp = 'tts/msgtemplate.cpp.tt'
+ ttFileNameH = 'tts/msgtemplate.h.tt'
+ xlUtils.templateProcess(templateData,ttFileNameCpp,ttFileNameH,outputDir,outputDir)
+
+ objectFile = 'msgClasses/' +templateData['fileName'] + '.o'
+ sourceFile = 'msgClasses/' + templateData['fileName'] + '.cpp'
+ xlUtils.addToMakeSo('gtpV2Stack.so',objectFile,sourceFile)
+
+ def generateMsgFactory(msgData,currentMessage):
+ msgInfo = {}
+
+ msgInfo['className'] = currentMessage + 'Msg'
+ msgInfo['msgFileName'] = currentMessage[0].lower()+currentMessage[1:] + 'Msg'
+ msgInfo['dataMember'] = currentMessage[0].lower()+currentMessage[1:] + 'StackData'
+ if msgInfo not in msgFactoryData['msgList']:
+ msgFactoryData['msgList'].append(msgInfo)
+ outputDirCpp = 'msgClasses/'
+ GenerateMsgClass.msgfactoryStacktemplate(msgFactoryData)
+ xlUtils.addToMakeSo('gtpV2Stack.so',outputDirCpp+'gtpV2MsgFactory.o',outputDirCpp+'gtpV2MsgFactory.cpp')
+ xlUtils.addToMakeSo('gtpV2Stack.so','gtpV2Stack.o','gtpV2Stack.cpp')
+
+ def msgfactoryStacktemplate(msgFactoryData):
+
+ ttFileNamefactoryCpp = 'tts/msgfactorytemplate.cpp.tt'
+ outputDir = '../../src/gtpV2Codec/msgClasses'
+ msgFactoryData['fileName'] = 'gtpV2MsgFactory'
+ ttFileNamefactoryH = 'tts/msgfactorytemplate.h.tt'
+ xlUtils.templateProcess(msgFactoryData,ttFileNamefactoryCpp,ttFileNamefactoryH,outputDir,outputDir)
+
+ ttFileNameStackCpp = 'tts/stacktemplate.cpp.tt'
+ outputDir = '../../src/gtpV2Codec/'
+ msgFactoryData['fileName'] = 'gtpV2Stack'
+ ttFileNameStackH = 'tts/stacktemplate.h.tt'
+
+ xlUtils.templateProcess(msgFactoryData,ttFileNameStackCpp,ttFileNameStackH,outputDir,outputDir)
+
+
+
+ def prepareMsgMakeFile():
+ outputDir = 'msgClasses/manual/'
+ xlUtils.addToMakeSo('gtpV2Stack.so', outputDir+'gtpV2Message.o', outputDir+'gtpV2Message.cpp')
+ def generateMsgDataType(msgData,currentMessage):
+ msginfo = {}
+ msgTypeInfo={}
+ msginfo['msgDataName'] = currentMessage + 'MsgData'
+ msginfo['ieDetails']=[]
+ msgTypeInfo['msgDataType']=currentMessage + 'MsgType'
+ msgTypeInfo['msgValue']=msgData['msgDetails'][currentMessage]['msgValue']
+
+ if msgTypeInfo not in msgDataTypeData['msgTypeList']:
+ msgDataTypeData['msgTypeList'].append(msgTypeInfo)
+
+ for ieDetail in msgData['ieDetails']:
+ for key,value in ieDetail.items():
+ for ie in msgData['ieList']:
+ ieInfo = {}
+
+ if value['ieVarName'] == ie:
+ ieInfo['ieName'] = value['ieVarName']
+ ieInfo['ieVarName'] = value['ieVarName']
+ ieInfo['ieType'] = value['ieTypeName']
+ ieInfo['iePresence'] = value['presence']
+ ieInfo['ieCardinality'] = value['cardinality']
+ ieInfo['grouped'] = value['grouped']
+ ieInfo['grpIeInstClassName'] = value['ieGroupTypeName']
+ if ieInfo['grouped']=='Yes':
+ ieInfo['grpIeInstClassName'] = value['ieGroupTypeName'][0].upper()+value['ieGroupTypeName'][1:]
+ ieInfo['grpIeInstFileName'] = value['ieGroupTypeName']
+ if ieInfo not in msginfo['ieDetails']:
+ msginfo['ieDetails'].append(ieInfo)
+ if msginfo not in msgDataTypeData['msgList']:
+ msgDataTypeData['msgList'].append(msginfo)
+
+ template = Template()
+ ttFileNamefactoryH = 'tts/msgDataTypetemplate.h.tt'
+ outputDir = '../../src/gtpV2Codec/msgClasses'
+
+ if not os.path.exists(outputDir):
+ os.makedirs(outputDir)
+ outputFileName = 'gtpV2MsgDataTypes.h'
+ template.__init__({'OUTPUT' : outputFileName, 'OUTPUT_PATH' : outputDir})
+ template.process(ttFileNamefactoryH, {'tempdata' : msgDataTypeData})
+
+
+GenerateMsgClass()
\ No newline at end of file