Add TypeDefinition support for enumeration generation

TypeDefinition was not supported by generate_schema_enums.py, this
change is to support the 'TypeDefinition' generation from schema.

Tested:
'TypeDefinition' fields in schema can be generated in generated files
with the change

Change-Id: Ibe61f65b905f2089f9e17a26fbd27e3ff1753166
Signed-off-by: Chandramohan Harkude <chandramohan.harkude@gmail.com>
diff --git a/scripts/generate_schema_enums.py b/scripts/generate_schema_enums.py
index 44dcde6..4f79f30 100755
--- a/scripts/generate_schema_enums.py
+++ b/scripts/generate_schema_enums.py
@@ -41,6 +41,14 @@
             for member in schema_element.findall(EDM + "Member"):
                 enums.append(member.attrib["Name"])
             EntityTypes.append(Enum(name, enums, namespace, filename))
+        if schema_element.tag == EDM + "TypeDefinition":
+            enums = []
+            for annotation in schema_element:
+                for collection in annotation:
+                    for record in collection.findall(EDM + "Record"):
+                        for member in record.findall(EDM + "PropertyValue"):
+                            enums.append(member.attrib["String"])
+            EntityTypes.append(Enum(name, enums, namespace, filename))
     return EntityTypes
 
 
@@ -86,8 +94,13 @@
             values.insert(0, "Invalid")
 
         for value in values:
-            redfish_defs_file.write("    {},\n".format(value))
+            # If the value is numeric, prefix it with the enum name
+            if value.isdigit():
+                enum_value = f"{element.name}{value}"
+            else:
+                enum_value = re.sub(r"[^0-9_a-zA-Z]", "", value)
 
+            redfish_defs_file.write("    {},\n".format(enum_value))
         redfish_defs_file.write("};\n\n")
 
     for element in enum_list:
@@ -102,8 +115,15 @@
             "NLOHMANN_JSON_SERIALIZE_ENUM({}, {{\n".format(element.name)
         )
         for value in values:
+            # If the value is numeric, prefix it with the enum name
+            if value.isdigit():
+                enum_value = f"{element.name}{value}"
+            else:
+                enum_value = re.sub(r"[^0-9_a-zA-Z]", "", value)
             redfish_defs_file.write(
-                '    {{{}::{}, "{}"}},\n'.format(element.name, value, value)
+                '    {{{}::{}, "{}"}},\n'.format(
+                    element.name, enum_value, value
+                )
             )
 
         redfish_defs_file.write("});\n\n")