| #!/usr/bin/env python |
| |
| import os, sys, mllib |
| from templating import Parser |
| from genutil import * |
| |
| out_dir = sys.argv[1] |
| spec_file = sys.argv[2] |
| tpl_dir = sys.argv[3] |
| pkg_dir = os.path.join(out_dir, "org/apache/qpidity/transport") |
| |
| if not os.path.exists(pkg_dir): |
| os.makedirs(pkg_dir) |
| |
| spec = mllib.xml_parse(spec_file) |
| |
| def excludes(nd): |
| if (nd.parent is not None and |
| nd.parent.name == "class" and |
| nd.parent["@name"] in ("file", "stream")): |
| return False |
| else: |
| return True |
| |
| def execute(output, template, **kwargs): |
| f = open(os.path.join(tpl_dir, template)) |
| input = f.read() |
| f.close() |
| p = Parser(**kwargs) |
| p.parse(input) |
| fname = os.path.join(pkg_dir, output) |
| f = open(fname, "w") |
| f.write(p.output) |
| f.close() |
| |
| execute("Type.java", "Type.tpl", spec = spec) |
| execute("Constant.java", "Constant.tpl", spec = spec) |
| |
| structs = spec.query["amqp/struct"] + \ |
| spec.query["amqp/class/struct", excludes] + \ |
| spec.query["amqp/class/command/result/struct", excludes] |
| controls = spec.query["amqp/class/control", excludes] |
| commands = spec.query["amqp/class/command", excludes] |
| |
| composites = structs + controls + commands |
| |
| for c in composites: |
| name = cname(c) |
| execute("%s.java" % name, "Composite.tpl", type = c, name = name) |
| |
| execute("MethodDelegate.java", "MethodDelegate.tpl", composites = composites) |
| execute("Option.java", "Option.tpl", composites = composites) |
| execute("Invoker.java", "Invoker.tpl", composites = controls + commands) |
| execute("StructFactory.java", "StructFactory.tpl", composites = composites) |
| |
| def is_enum(nd): |
| return nd["enum"] is not None |
| |
| enums = spec.query["amqp/domain", is_enum] + \ |
| spec.query["amqp/class/domain", is_enum] |
| |
| for e in enums: |
| name = cname(e) |
| execute("%s.java" % name, "Enum.tpl", name = name, type = e) |