Upload initial version
[platform/core/uifw/libscl-ui-nui.git] / xml2binary / data / auto_codes.py
1 #!/usr/bin/python
2
3 from xml.dom import minidom
4 import shutil, os
5
6 def write_note(output):
7     output.writelines("/*This file is generated by auto_codes.py.*/\n\n")
8
9 def get_record_width_struct_name(record_name):
10     return (record_name + "_width").capitalize()
11
12 def get_metadata(filename='metadata.xml'):
13     doc = minidom.parse(filename)
14     root = doc.documentElement
15
16     record_nodes = root.getElementsByTagName('record')
17     record_list = []
18     for record_node in record_nodes:
19         record_name = record_node.getAttribute('name')
20         fields_node = record_node.getElementsByTagName('field')
21
22         field_list = []
23         for field_node in fields_node:
24             field_name = field_node.getAttribute('name')
25             field_type = field_node.getAttribute('type')
26             field_data = {"name":field_name, "type":field_type}
27             field_list.append(field_data)
28         record_data = {"name":record_name, "field_list":field_list}
29         record_list.append(record_data);
30     return record_list
31
32 def gen_auto_metadata_h(record_list):
33     output = open('_auto_metadata.h', 'w')
34     write_note(output)
35     codes_list = []
36     codes_list.append('#ifndef __AUTO_METADATA_H__\n')
37     codes_list.append('#define __AUTO_METADATA_H__\n\n')
38
39     codes_list.append('#include <memory.h>\n')
40     for record_data in record_list:
41         struct_name = get_record_width_struct_name(record_data['name'])
42
43         codes_list.append("typedef struct _" + struct_name +  " {\n")
44         field_list = record_data['field_list']
45         for field_data in field_list:
46             codes_list.append("\tint " + field_data['name'] + ";\n")
47
48
49         codes_list.append("}" + struct_name + ";");
50         codes_list.append("\n\n")
51
52     for record_data in record_list:
53         function_name = "set_" + record_data['name'] + "_width"
54         struct_name = get_record_width_struct_name(record_data['name'])
55         parameter = "T& md_helper,\n\t";
56         parameter += struct_name + " & " + "record_width"
57         codes_list.append("template <class T>\n")
58         codes_list.append("void " + function_name + "(" + parameter + ") {\n")
59         codes_list.append("\tmd_helper.set_current_metadata_record(\"" + record_data['name'] + "\");\n")
60         codes_list.append("\tmemset(&record_width, 0x00, sizeof("+ struct_name +"));\n")
61         codes_list.append("\n")
62
63         field_list = record_data['field_list']
64         for field_data in field_list:
65             codes_list.append("\trecord_width." + field_data['name'] + " = md_helper.get_width(\"" + field_data['name'] + "\");\n")
66         codes_list.append('}\n\n')
67
68     codes_list.append("\n")
69     codes_list.append('#endif //End __AUTO_METADATA_H__\n')
70     output.writelines(codes_list)
71     output.close()
72
73 record_list = get_metadata()
74 gen_auto_metadata_h(record_list)
75 shutil.copyfile('_auto_metadata.h', '../include/_auto_metadata.h')
76 shutil.copyfile('_auto_metadata.h', '../../binary_xmlresource/include/_auto_metadata.h')
77 os.remove('_auto_metadata.h')
78
79 print '\n'
80 print '----MESSAGE-----\n'
81 print '_auto_metadata.h is generated in ../include/_auto_metadata.h successfully\n'
82 print '_auto_metadata.h is generated in ../../binary_xmlresource/include/_auto_metadata.h successfully\n'