MME2 changes - Propped commits from openmme/paging branch. Added scripts
for code gen

Change-Id: Ie55032217232214ac8544ca76ea34335205329e4
diff --git a/scripts/SMCodeGen/codeGen.py b/scripts/SMCodeGen/codeGen.py
new file mode 100644
index 0000000..15259be
--- /dev/null
+++ b/scripts/SMCodeGen/codeGen.py
@@ -0,0 +1,79 @@
+# 
+# Copyright (c) 2019, Infosys Ltd.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# 
+
+import json, sys, os
+from os.path import join
+import utils
+
+with open('dataModels/stateMachineAppModel.json') as jsonFile:
+    stateMachineAppModelJSON = json.load(jsonFile)
+with open('dataModels/ctxtManagerAppModel.json') as jsonFile:
+    contextMgrAppModelJSON = json.load(jsonFile)
+
+def processTemplate(templateIp):
+    from template import Template
+    
+    utils.outputFileName = ''
+    if utils.outputFileKeyword != '':
+        utils.outputFileName = utils.getFileName(templateIp[utils.outputFileKeyword])    
+    if utils.outputFile != '':
+        utils.outputFileName = utils.outputFileName + utils.outputFile
+    
+    utils.outputFileName = utils.outputFileName + utils.outputFileExt
+
+    tt = Template({'EVAL_PYTHON':1, 'AUTO_RESET':1})
+    op = tt.process(utils.ttFileName, {'TemplateInputVar' : templateIp})
+    utils.WriteFile(utils.outputDir, utils.outputFileName, op, utils.mode)
+
+def getTemplateIn(appModelItems, depth):
+    depthChanged = False
+
+    if (depth == 0):
+        print(appModelItems)
+        processTemplate(appModelItems)
+        return
+    
+    if depthChanged == False:
+        depth = depth - 1
+        depthChanged = True
+        
+    for item in appModelItems:
+        getTemplateIn(item, depth)
+      
+def genCppCode(genModel, appModelJSON):
+    for item in genModel:
+        keyWord = item["appModelKeyword"]
+        depth = item["appModelValueDepth"]
+        utils.ttFileName = item["templateFile"]
+        utils.outputDir = item["outputPath"]
+        utils.outputFile = item["outputFile"]
+        utils.outputFileKeyword = item["outputFileKey"]
+        utils.outputFileExt = item["outputFileExt"]
+        utils.mode = item["mode"]
+        
+        if not os.path.exists(utils.outputDir):
+            os.makedirs(utils.outputDir)
+        
+        appModelItems = utils.get_key_values(appModelJSON, keyWord) 
+        getTemplateIn(appModelItems, depth)
+            
+with open('dataModels/generationItem.json') as JSONFile:
+    GenItemJSON = json.load(JSONFile)
+    if 'Model1' in GenItemJSON:
+        genCppCode(GenItemJSON['Model1'], stateMachineAppModelJSON)
+    if "Model2" in GenItemJSON:
+        genCppCode(GenItemJSON['Model2'], contextMgrAppModelJSON)
+