Repository: qpid-dispatch
Updated Branches:
  refs/heads/DISPATCH-437-1 [created] 2bcb2f766


DISPATCH-437 - Added code to generate enums for entities and attributes from 
qdrouter.json


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/d7fcfef7
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/d7fcfef7
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/d7fcfef7

Branch: refs/heads/DISPATCH-437-1
Commit: d7fcfef79af3c8cf9cca13a08f428c0430ca057c
Parents: 9ec4c43
Author: Ganesh Murthy <[email protected]>
Authored: Fri Jul 29 13:07:58 2016 -0400
Committer: Ganesh Murthy <[email protected]>
Committed: Mon Aug 1 12:36:45 2016 -0400

----------------------------------------------------------------------
 src/schema_c.py | 87 ++++++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 71 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d7fcfef7/src/schema_c.py
----------------------------------------------------------------------
diff --git a/src/schema_c.py b/src/schema_c.py
index 80f6b3c..092b41b 100644
--- a/src/schema_c.py
+++ b/src/schema_c.py
@@ -64,25 +64,19 @@ class Generator(object):
         with open(name+'.c', 'w') as f:
             f.write(copyright + text)
 
-    def identifier(self, name): return re.sub(r'\W','_', name)
+    def identifier(self, name):
+        return re.sub(r'\W','_', name)
 
-    def underscore(self, names): return '_'.join([self.identifier(name) for 
name in names])
+    def underscore(self, names):
+        return '_'.join([self.identifier(name) for name in names])
 
-    def prefix_name(self, names): return self.underscore(self.prefix + names)
+    def prefix_name(self, names):
+        return self.underscore(self.prefix + names)
 
-    def type_name(self, names): return self.prefix_name(names + ['t'])
-
-    class EnumGenerator(object):
-        def __init__(self, generator, entity, attribute):
-            self.generator, self.entity, self.attribute = generator, entity, 
attribute
-            self.tags = attribute.atype.tags
-            self.type_name = generator.type_name([entity.short_name, 
attribute.name])
-            self.array = self.generator.prefix_name([entity.short_name, 
attribute.name, 'names'])
-            self.count = self.name('ENUM_COUNT')
-
-        def name(self, tag):
-            return self.generator.prefix_name([self.entity.short_name, 
self.attribute.name, tag]).upper()
+    def type_name(self, names):
+        return self.prefix_name(names + ['t'])
 
+    class BaseEnumGenerator(object):
         def decl(self):
             tags = self.tags + ['ENUM_COUNT']
             return "typedef enum {\n" + \
@@ -95,11 +89,72 @@ class Generator(object):
                 ",\n".join('    "%s"'%(self.name(tag)) for tag in self.tags) + 
\
                 "\n};\n\n"
 
+    class EntityTypeEnumGenerator(object):
+        """
+        Generates enums
+        """
+        def __init__(self, generator, entity, name, tags):
+            self.generator, self.entity, self.tags = generator, entity, tags
+            self.enum_name = name
+            self.type_name = generator.type_name([entity.short_name, 
self.enum_name])
+            self.array = self.generator.prefix_name([entity.short_name, 
self.enum_name, 'names'])
+            self.count = self.name('ENUM_COUNT')
+
+        def name(self, tag):
+            return self.generator.prefix_name([self.entity.short_name, 
self.enum_name, tag]).upper()
+
+    class OperationDefEnumGenerator(BaseEnumGenerator):
+        """
+        Generates enums for the base entity operationDefs which include 
CREATE, READ, UPDATE, DELETE
+        """
+        def __init__(self, generator, entity, name, tags):
+            self.generator, self.entity, self.tags = generator, entity, tags
+            self.enum_name = name
+            self.type_name = generator.type_name([entity.short_name, 
self.enum_name])
+            self.array = self.generator.prefix_name([entity.short_name, 
self.enum_name, 'names'])
+            self.count = self.name('ENUM_COUNT')
+
+        def name(self, tag):
+            return self.generator.prefix_name([self.entity.short_name, 
self.enum_name, tag]).upper()
+
+    class EnumTypeEnumGenerator(BaseEnumGenerator):
+        """
+        Generates enums for all EnumTypes
+        """
+        def __init__(self, generator, entity, attribute, tags):
+            self.generator, self.entity, self.attribute = generator, entity, 
attribute
+            self.tags = tags
+            self.type_name = generator.type_name([entity.short_name, 
attribute.name])
+            self.array = self.generator.prefix_name([entity.short_name, 
attribute.name, 'names'])
+            self.count = self.name('ENUM_COUNT')
+
+        def name(self, tag):
+            return self.generator.prefix_name([self.entity.short_name, 
self.attribute.name, tag]).upper()
+
     def generate_enums(self):
-        enums = [self.EnumGenerator(self, entity, attribute)
+        enums = [self.EnumTypeEnumGenerator(self, entity, attribute, 
attribute.atype.tags)
                  for entity in self.schema.entity_types.itervalues()
                  for attribute in entity.attributes.itervalues()
                  if isinstance(attribute.atype, EnumType)]
+
+        # Create an enum for the operations CREATE, READ, UPDATE, DELETE, QUERY
+        base_entity = self.schema.entity_types.get(self.schema.prefixdot + 
'entity')
+        enums.append(self.OperationDefEnumGenerator(self, base_entity, 
"operation",
+                                                    
base_entity.operation_defs.keys() + ['QUERY']))
+
+        # Create enum for entity types
+        entity_types = self.schema.entity_types.keys()
+        entity_types = [w.replace('org.apache.qpid.dispatch.', '') for w in 
entity_types]
+        enums.append(self.OperationDefEnumGenerator(self, base_entity, "type", 
entity_types))
+
+        # Create enums for attributes
+        entity_types = self.schema.entity_types
+        for entity_type in entity_types.values():
+            attribute_names = []
+            for attrib in entity_type.attributes.values():
+                attribute_names.append(attrib.name)
+            enums.append(self.OperationDefEnumGenerator(self, entity_type, 
"attributes", attribute_names))
+
         self.header('schema_enum', '\n'.join(e.decl() for e in enums))
         self.source('schema_enum', '#include "schema_enum.h"\n\n' + 
'\n'.join(e.defn() for e in enums))
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to