#!/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)